FullMt5McpByLeo/Src/Mt5Mcp.mq5
Nique_372 8a25fad3ab
2026-06-30 13:59:02 -05:00

161 lines
6.3 KiB
MQL5

//+------------------------------------------------------------------+
//| Mt5Mcp.mq5 |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Defines |
//+------------------------------------------------------------------+
#define PUBLIC_VERSION
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include "All.mqh"
#include "Secrets.mqh"
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
input string InpSoketAdres = "127.0.0.1";
input uint InpSoketPort = 9999;
input int InpMsPool = 70;
input int InpMsTimeoutReadNoTls = 10000;
input int InpPowerShellCommands=0; // Permit power shell commands ? [0=no, 2=restricted, 1=all signed, 3+=all commands]
//+------------------------------------------------------------------+
//| Global variables |
//+------------------------------------------------------------------+
TSN::IMcpBase* g_mcp_server;
CTrade g_trade;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
#ifdef TSN_MCPSERVER_FUNC_CTS
g_mcp_server = TSN_MCPSERVER_FUNC_CTS(THE_BOT_PLACE_USER_ID);
#else
g_mcp_server = McpServerByLeo_Create(THE_BOT_PLACE_USER_ID);
#endif // TSN_MCPSERVER_FUNC_CTS
//---
::EventSetMillisecondTimer(InpMsPool);
g_mcp_server.AddLogFlags(LOG_ALL);
//--- Graphics / Objects
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectCreate());
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectDelete());
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectSetGet());
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectList());
//--- Charts
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartList());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartOpen());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartClose());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartSetGet());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartNavigate());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartInd());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartRedraw());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartSrenshot());
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartGetSymbolOrPeriod());
//--- Indicators
g_mcp_server.AddItemFast(new TSN::CMcpFuncInd());
//---
g_mcp_server.AddItemFast(new TSN::CMcpFuncRunCommand(InpPowerShellCommands));
g_mcp_server.AddItemFast(new TSN::CMcpFuncTesterRep());
//--- Data / Symbol
g_mcp_server.AddItemFast(new TSN::CMcpFuncSymbolsTotal());
g_mcp_server.AddItemFast(new TSN::CMcpFuncSymbolSelect());
g_mcp_server.AddItemFast(new TSN::CMcpFuncSymbolInfo());
g_mcp_server.AddItemFast(new TSN::CMcpFuncSymbolInfoSession());
//--- Data / Market Data
g_mcp_server.AddItemFast(new TSN::CMcpFuncCopyData());
g_mcp_server.AddItemFast(new TSN::CMcpFuncCopyTicks());
g_mcp_server.AddItemFast(new TSN::CMcpFuncBarShift());
//--- Calc order
g_mcp_server.AddItemFast(new TSN::CMcpFuncCalcOrder());
//--- Trade / Positions
g_mcp_server.AddItemFast(new TSN::CMcpFuncPositionList());
g_mcp_server.AddItemFast(new TSN::CMcpFuncPositionGet());
g_mcp_server.AddItemFast(new TSN::CMcpFuncPositionClose(&g_trade));
g_mcp_server.AddItemFast(new TSN::CMcpFuncPositionModify(&g_trade));
//--- Trade / Orders
g_mcp_server.AddItemFast(new TSN::CMcpFuncOrderList());
g_mcp_server.AddItemFast(new TSN::CMcpFuncOrderClose(&g_trade));
g_mcp_server.AddItemFast(new TSN::CMcpFuncOrderModify(&g_trade));
g_mcp_server.AddItemFast(new TSN::CMcpFuncOrderGet());
//--- Trade / Deals
g_mcp_server.AddItemFast(new TSN::CMcpFuncHistoryDealList());
g_mcp_server.AddItemFast(new TSN::CMcpFuncHistoryDealGet());
//--- Trade / Trade
g_mcp_server.AddItemFast(new TSN::CMcpFuncTradeTrade(&g_trade));
g_mcp_server.AddItemFast(new TSN::CMcpFuncTradeOpenLimit(&g_trade));
g_mcp_server.AddItemFast(new TSN::CMcpFuncTradeOpenStop(&g_trade));
//--- Complex / Advanced
g_mcp_server.AddItemFast(new TSN::CMcpFunctionRunBacktest());
g_mcp_server.AddItemFast(new TSN::CMcpFunctionRunEA());
g_mcp_server.AddItemFast(new TSN::CMcpFunctionCompile());
//--- Complex / Logs
g_mcp_server.AddItemFast(new TSN::CMcpFunctionExpertLogs());
//--- Uitls
g_mcp_server.AddItemFast(new TSN::CMcpFuncGetTime());
g_mcp_server.AddItemFast(new TSN::CMcpFuncGetErrDescription());
g_mcp_server.AddItemFast(new TSN::CMcpFuncTerminalInfo());
g_mcp_server.AddItemFast(new TSN::CMcpFuncAccountInfo());
//---
g_mcp_server.Set(InpMsPool, InpMsTimeoutReadNoTls);
if(!g_mcp_server.Conectar(InpSoketAdres, InpSoketPort, (10 * 1000))) // 10 segundos de espera para conectarse
return INIT_FAILED;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
if(CheckPointer(g_mcp_server) == POINTER_DYNAMIC)
delete g_mcp_server;
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer(void)
{
g_mcp_server.TimerEvent();
}
//+------------------------------------------------------------------+