FullMt5McpByLeo/Src/Graphics/Objects.mqh

298 lines
12 KiB
MQL5

2026-04-28 08:53:03 -05:00
//+------------------------------------------------------------------+
//| Objects.mqh |
//| 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 strict
#ifndef FULLMT5MCPBYLEO_SRC_GRAPHICS_OBJECTS_MQH
#define FULLMT5MCPBYLEO_SRC_GRAPHICS_OBJECTS_MQH
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include "..\\Def\\Def.mqh"
//+------------------------------------------------------------------+
//| object_create |
//+------------------------------------------------------------------+
class CMcpFuncObjectCreate : public CMcpFunction
{
public:
CMcpFuncObjectCreate(void) : CMcpFunction(0, false, "object_create") {}
~CMcpFuncObjectCreate(void) {}
//---
void Run(CJsonNode& param, string& res) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CMcpFuncObjectCreate::Run(CJsonNode &param, string &res)
{
//---
::ResetLastError();
const uint8_t mode = (uint8_t)param["mode"].ToInt();
switch(mode)
{
//---
case 0: // time1,price1,time2,price2,time3,price3 (chanel\elipse\triangle)
{
if(!ObjectCreate(param["chart_id"].ToInt(0), param["object_name"].ToString(""),
CEnumReg::GetValueNoRef<ENUM_OBJECT>(param["object_type"].ToString(), WRONG_VALUE), int(param["sub_window"].ToInt()),
StringToTime(param["time1"].ToString("0")), param["price1"].ToDouble(0.00), StringToTime(param["time2"].ToString("0")), param["price2"].ToDouble(0.00),
StringToTime(param["time3"].ToString("0")), param["price3"].ToDouble(0.00)
))
{
res = StringFormat("{\"ok\":false,\"error\":\"object_create failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
break;
}
//---
case 1: // time1,price1,time2,price2 (rectangle|fibbo|)
{
if(!ObjectCreate(param["chart_id"].ToInt(0), param["object_name"].ToString(""),
CEnumReg::GetValueNoRef<ENUM_OBJECT>(param["object_type"].ToString(), WRONG_VALUE), int(param["sub_window"].ToInt()),
StringToTime(param["time1"].ToString("0")), param["price1"].ToDouble(0.00), StringToTime(param["time2"].ToString("0")), param["price2"].ToDouble(0.00)))
{
res = StringFormat("{\"ok\":false,\"error\":\"object_create failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
break;
}
//---
2026-04-29 10:27:56 -05:00
case 2: // time1,price1 (arrow\buttom|vline|hline)
2026-04-28 08:53:03 -05:00
{
if(!ObjectCreate(param["chart_id"].ToInt(0), param["object_name"].ToString(""),
CEnumReg::GetValueNoRef<ENUM_OBJECT>(param["object_type"].ToString(), WRONG_VALUE), int(param["sub_window"].ToInt()),
StringToTime(param["time1"].ToString("0")), param["price1"].ToDouble(0.00)))
{
res = StringFormat("{\"ok\":false,\"error\":\"object_create failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
break;
}
//---
2026-04-29 10:27:56 -05:00
case 3: // RectLabel\Buttom\Edit (va sin nada se setea con ObjectSetInteger.)
2026-04-28 08:53:03 -05:00
{
if(!ObjectCreate(param["chart_id"].ToInt(0), param["object_name"].ToString(""),
CEnumReg::GetValueNoRef<ENUM_OBJECT>(param["object_type"].ToString(), WRONG_VALUE), int(param["sub_window"].ToInt()),
0, 0.00))
{
res = StringFormat("{\"ok\":false,\"error\":\"object_create failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
break;
}
//---
default:
res = "{\"ok\":false,\"result\":\"Type of mode to create the invalid object\"}";
return;
}
//---
res = "{\"ok\":true,\"result\":true}";
}
//+------------------------------------------------------------------+
//| object_delete |
//+------------------------------------------------------------------+
class CMcpFuncObjectDelete : public CMcpFunction
{
public:
CMcpFuncObjectDelete() : CMcpFunction(0, false, "object_delete") {}
~CMcpFuncObjectDelete(void) {}
void Run(CJsonNode& param, string& res) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CMcpFuncObjectDelete::Run(CJsonNode & param, string & res)
{
::ResetLastError();
//---
if(!ObjectDelete(param["chart_id"].ToInt(0), param["object_name"].ToString("")))
{
res = StringFormat("{\"ok\":false,\"error\":\"object_delete failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
res = "{\"ok\":true,\"result\":true}";
}
//+------------------------------------------------------------------+
//| object_integer - GET/SET combined (HasKey("value") to determine) |
//+------------------------------------------------------------------+
class CMcpFuncObjectInteger : public CMcpFunction
{
public:
CMcpFuncObjectInteger() : CMcpFunction(0, false, "object_integer") {}
~CMcpFuncObjectInteger(void) {}
void Run(CJsonNode& param, string& res) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CMcpFuncObjectInteger::Run(CJsonNode & param, string & res)
{
::ResetLastError();
const ENUM_OBJECT_PROPERTY_INTEGER property = CEnumReg::GetValueNoRef<ENUM_OBJECT_PROPERTY_INTEGER>(param["property"].ToString(""), OBJPROP_COLOR);
//---
if(param.HasKey("value"))
{
// SET mode
const bool result = ObjectSetInteger(param["chart_id"].ToInt(0), param["object_name"].ToString(""), property, (int)param["prop_modifier"].ToInt(0), param["value"].ToInt(0));
if(!result)
{
res = StringFormat("{\"ok\":false,\"error\":\"object_set_integer failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
res = "{\"ok\":true,\"result\":true}";
}
else
{
// GET mode
2026-04-28 21:48:06 -05:00
res = StringFormat("{\"ok\":true,\"result\":%I64d}", ObjectGetInteger(param["chart_id"].ToInt(0), param["object_name"].ToString(""), property, (int)param["prop_modifier"].ToInt(0)));
2026-04-28 08:53:03 -05:00
}
}
//+------------------------------------------------------------------+
//| object_double - GET/SET combined (HasKey("value") to determine) |
//+------------------------------------------------------------------+
class CMcpFuncObjectDouble : public CMcpFunction
{
public:
CMcpFuncObjectDouble() : CMcpFunction(0, false, "object_double") {}
~CMcpFuncObjectDouble(void) {}
void Run(CJsonNode& param, string& res) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CMcpFuncObjectDouble::Run(CJsonNode & param, string & res)
{
::ResetLastError();
const ENUM_OBJECT_PROPERTY_DOUBLE property = CEnumReg::GetValueNoRef<ENUM_OBJECT_PROPERTY_DOUBLE>(param["property"].ToString(""), OBJPROP_PRICE);
//---
if(param.HasKey("value"))
{
// SET mode
const bool result = ObjectSetDouble(param["chart_id"].ToInt(0), param["object_name"].ToString(""), property, (int)param["prop_modifier"].ToInt(0), param["value"].ToDouble(0.0));
if(!result)
{
res = StringFormat("{\"ok\":false,\"error\":\"object_set_double failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
res = "{\"ok\":true,\"result\":true}";
}
else
{
// GET mode
res = StringFormat("{\"ok\":true,\"result\":%.8f}", ObjectGetDouble(param["chart_id"].ToInt(0), param["object_name"].ToString(""), property, (int)param["prop_modifier"].ToInt(0)));
}
}
//+------------------------------------------------------------------+
//| object_string - GET/SET combined (HasKey("value") to determine) |
//+------------------------------------------------------------------+
class CMcpFuncObjectString : public CMcpFunction
{
public:
CMcpFuncObjectString() : CMcpFunction(0, false, "object_string") {}
~CMcpFuncObjectString(void) {}
void Run(CJsonNode& param, string& res) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CMcpFuncObjectString::Run(CJsonNode & param, string & res)
{
::ResetLastError();
const ENUM_OBJECT_PROPERTY_STRING property = CEnumReg::GetValueNoRef<ENUM_OBJECT_PROPERTY_STRING>(param["property"].ToString(""), OBJPROP_NAME);
//---
if(param.HasKey("value"))
{
// SET mode
const bool result = ObjectSetString(param["chart_id"].ToInt(0), param["object_name"].ToString(""), property, (int)param["prop_modifier"].ToInt(0), param["value"].ToString(""));
if(!result)
{
res = StringFormat("{\"ok\":false,\"error\":\"object_set_string failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
res = "{\"ok\":true,\"result\":true}";
}
else
{
// GET mode
res = StringFormat("{\"ok\":true,\"result\":\"%s\"}", ObjectGetString(param["chart_id"].ToInt(0), param["object_name"].ToString(""), property, (int)param["prop_modifier"].ToInt(0)));
}
}
2026-04-28 22:54:27 -05:00
//+------------------------------------------------------------------+
//| object_list |
//+------------------------------------------------------------------+
class CMcpFuncObjectList : public CMcpFunction
{
public:
CMcpFuncObjectList() : CMcpFunction(0, false, "object_list") {}
~CMcpFuncObjectList(void) {}
void Run(CJsonNode& param, string& res) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CMcpFuncObjectList::Run(CJsonNode & param, string & res)
{
::ResetLastError();
//---
const long chart_id = param["chart_id"].ToInt(0);
const int sub_window = (int)param["sub_window"].ToInt(-1);
const int type = int(CEnumReg::GetValueNoRef<ENUM_OBJECT>(param["object_type"].ToString(), -1));
//---
const int total = ObjectsTotal(chart_id, sub_window, type);
if(total < 0)
{
res = StringFormat("{\"ok\":false,\"error\":\"object_list failed, last mt5 error = %d\"}", ::GetLastError());
return;
}
//---
res = "{\"ok\":true,\"result\":[";
for(int i = 0; i < total; i++)
{
if(i == total - 1)
res += "\"" + ObjectName(chart_id, i, sub_window) + "\"";
else
res += "\"" + ObjectName(chart_id, i, sub_window) + "\",";
}
res += "]}";
}
2026-04-28 08:53:03 -05:00
//+------------------------------------------------------------------+
#endif // FULLMT5MCPBYLEO_SRC_GRAPHICS_OBJECTS_MQH
//+------------------------------------------------------------------+