2026-04-28 11:04:57 -05:00
|
|
|
//+------------------------------------------------------------------+
|
2026-04-27 22:49:28 -05:00
|
|
|
//| 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"
|
2026-04-28 11:04:57 -05:00
|
|
|
#property strict
|
|
|
|
|
|
2026-05-01 12:21:19 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Defines |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#define PUBLIC_VERSION
|
|
|
|
|
|
2026-04-28 11:04:57 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Include |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#include "All.mqh"
|
2026-05-01 12:21:19 -05:00
|
|
|
#include "Secrets.mqh"
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Inputs |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
input string InpSoketAdres = "127.0.0.1";
|
|
|
|
|
input uint InpSoketPort = 9999;
|
2026-05-04 15:23:37 -05:00
|
|
|
input int InpMsPool = 70;
|
2026-04-28 11:04:57 -05:00
|
|
|
input int InpMsTimeoutReadNoTls = 10000;
|
2026-06-29 20:43:05 -05:00
|
|
|
input int InpPowerShellCommands=0; // Permit power shell commands ? [0=no, 2=restricted, 1=all signed, 3+=all commands]
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Global variables |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-06-03 20:39:25 -05:00
|
|
|
TSN::IMcpBase* g_mcp_server;
|
2026-04-28 11:04:57 -05:00
|
|
|
CTrade g_trade;
|
|
|
|
|
|
2026-04-27 22:49:28 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Expert initialization function |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
int OnInit()
|
2026-04-28 11:04:57 -05:00
|
|
|
{
|
2026-05-01 12:21:19 -05:00
|
|
|
//---
|
|
|
|
|
#ifdef TSN_MCPSERVER_FUNC_CTS
|
|
|
|
|
g_mcp_server = TSN_MCPSERVER_FUNC_CTS(THE_BOT_PLACE_USER_ID);
|
|
|
|
|
#else
|
2026-06-29 18:47:42 -05:00
|
|
|
g_mcp_server = McpServerByLeo_Create(THE_BOT_PLACE_USER_ID);
|
2026-05-01 12:21:19 -05:00
|
|
|
#endif // TSN_MCPSERVER_FUNC_CTS
|
|
|
|
|
|
2026-04-27 22:49:28 -05:00
|
|
|
//---
|
2026-04-28 11:04:57 -05:00
|
|
|
::EventSetMillisecondTimer(InpMsPool);
|
|
|
|
|
g_mcp_server.AddLogFlags(LOG_ALL);
|
|
|
|
|
|
|
|
|
|
//--- Graphics / Objects
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectCreate());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectDelete());
|
2026-06-30 13:59:02 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectSetGet());
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncObjectList());
|
2026-04-29 07:59:28 -05:00
|
|
|
|
2026-04-28 11:04:57 -05:00
|
|
|
//--- Charts
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartList());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartOpen());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartClose());
|
2026-06-29 18:47:42 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartSetGet());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartNavigate());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartInd());
|
|
|
|
|
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartRedraw());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartSrenshot());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncChartGetSymbolOrPeriod());
|
2026-04-28 11:04:57 -05:00
|
|
|
|
2026-06-29 18:47:42 -05:00
|
|
|
//--- Indicators
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncInd());
|
|
|
|
|
|
2026-06-29 20:43:05 -05:00
|
|
|
//---
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncRunCommand(InpPowerShellCommands));
|
2026-06-30 13:59:02 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncTesterRep());
|
2026-06-29 20:43:05 -05:00
|
|
|
|
2026-06-29 18:47:42 -05:00
|
|
|
|
2026-04-28 11:04:57 -05:00
|
|
|
//--- Data / Symbol
|
2026-06-03 20:39:25 -05:00
|
|
|
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());
|
2026-04-29 07:59:28 -05:00
|
|
|
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//--- Data / Market Data
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncCopyData());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncCopyTicks());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncBarShift());
|
2026-04-28 11:04:57 -05:00
|
|
|
|
2026-04-29 07:59:28 -05:00
|
|
|
//--- Calc order
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncCalcOrder());
|
2026-04-29 07:59:28 -05:00
|
|
|
|
2026-04-28 11:04:57 -05:00
|
|
|
//--- Trade / Positions
|
2026-06-03 20:39:25 -05:00
|
|
|
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));
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//--- Trade / Orders
|
2026-06-03 20:39:25 -05:00
|
|
|
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());
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//--- Trade / Deals
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncHistoryDealList());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFuncHistoryDealGet());
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//--- Trade / Trade
|
2026-06-03 20:39:25 -05:00
|
|
|
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));
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//--- Complex / Advanced
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFunctionRunBacktest());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFunctionRunEA());
|
|
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFunctionCompile());
|
2026-04-28 11:04:57 -05:00
|
|
|
|
|
|
|
|
//--- Complex / Logs
|
2026-06-03 20:39:25 -05:00
|
|
|
g_mcp_server.AddItemFast(new TSN::CMcpFunctionExpertLogs());
|
2026-04-28 11:04:57 -05:00
|
|
|
|
2026-04-28 22:54:27 -05:00
|
|
|
//--- Uitls
|
2026-06-03 20:39:25 -05:00
|
|
|
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());
|
2026-04-28 22:54:27 -05:00
|
|
|
|
2026-04-27 22:49:28 -05:00
|
|
|
//---
|
2026-04-28 11:04:57 -05:00
|
|
|
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);
|
|
|
|
|
}
|
2026-04-27 22:49:28 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Expert deinitialization function |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
void OnDeinit(const int reason)
|
2026-04-28 11:04:57 -05:00
|
|
|
{
|
2026-05-01 12:21:19 -05:00
|
|
|
//---
|
|
|
|
|
if(CheckPointer(g_mcp_server) == POINTER_DYNAMIC)
|
|
|
|
|
delete g_mcp_server;
|
2026-04-27 22:49:28 -05:00
|
|
|
//---
|
2026-04-28 11:04:57 -05:00
|
|
|
}
|
2026-04-27 22:49:28 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Expert tick function |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
void OnTick()
|
2026-04-28 11:04:57 -05:00
|
|
|
{
|
2026-04-27 22:49:28 -05:00
|
|
|
//---
|
2026-04-28 11:04:57 -05:00
|
|
|
}
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Timer function |
|
2026-04-27 22:49:28 -05:00
|
|
|
//+------------------------------------------------------------------+
|
2026-04-28 11:04:57 -05:00
|
|
|
void OnTimer(void)
|
|
|
|
|
{
|
|
|
|
|
g_mcp_server.TimerEvent();
|
2026-04-28 22:54:27 -05:00
|
|
|
}
|
|
|
|
|
//+------------------------------------------------------------------+
|