diff --git a/MtApi5/MtApi5Client.cs b/MtApi5/MtApi5Client.cs index 12682b71..ddb0ded8 100755 --- a/MtApi5/MtApi5Client.cs +++ b/MtApi5/MtApi5Client.cs @@ -1516,6 +1516,7 @@ namespace MtApi5 /// ///This function calls a forced redrawing of a specified chart. /// + ///Chart ID. 0 means the current chart. public void ChartRedraw(long chartId = 0) { var commandParameters = new ArrayList { chartId }; @@ -1660,7 +1661,7 @@ namespace MtApi5 /// ///If successful, returns true, otherwise false. /// - public bool ChartClose(long chartId) + public bool ChartClose(long chartId = 0) { var commandParameters = new ArrayList { chartId }; return SendCommand(Mt5CommandType.ChartClose, commandParameters); diff --git a/mq5/MtApi5.ex5 b/mq5/MtApi5.ex5 index b3725649..b258f06b 100755 Binary files a/mq5/MtApi5.ex5 and b/mq5/MtApi5.ex5 differ diff --git a/mq5/MtApi5.mq5 b/mq5/MtApi5.mq5 index f8099c95..d1770001 100644 --- a/mq5/MtApi5.mq5 +++ b/mq5/MtApi5.mq5 @@ -723,12 +723,21 @@ int executeCommand() case 205: //TerminalInfoDouble Execute_TerminalInfoDouble(); break; + case 206: //ChartId + Execute_ChartId(); + break; + case 207: //ChartRedraw + Execute_ChartRedraw(); + break; case 236: //ChartApplyTemplate Execute_ChartApplyTemplate(); break; case 237: //ChartApplyTemplate Execute_ChartSaveTemplate(); break; + case 238: //ChartWindowFind + Execute_ChartWindowFind(); + break; case 241: //ChartOpen Execute_ChartOpen(); break; @@ -738,6 +747,9 @@ int executeCommand() case 243: //ChartFirst Execute_ChartNext(); break; + case 244: //ChartClose + Execute_ChartClose(); + break; case 245: //ChartFirst Execute_ChartSymbol(); break; @@ -755,15 +767,16 @@ int executeCommand() //------ helper macros to get and send values ------------------ -#define GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(get_func, argument_id, argument, cmd_name, param_name) if (!get_func(ExpertHandle, argument_id, argument, _error)) \ - { \ - PrintParamError(cmd_name, param_name, _error); \ - sendErrorResponse(ExpertHandle, -1, _error, _response_error); \ - return; \ - } \ +#define GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(get_func, argument_id, argument, func_name, argument_name) if (!get_func(ExpertHandle, argument_id, argument, _error)) \ + { \ + PrintParamError(func_name, argument_name, _error); \ + sendErrorResponse(ExpertHandle, -1, _error, _response_error); \ + return; \ + } \ -#define GET_INT_VALUE(argument_id, argument, cmd_name, param_name) GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(getIntValue, argument_id, argument, cmd_name, param_name) -#define GET_STRING_VALUE(argument_id, argument, cmd_name, param_name) GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(getStringValue, argument_id, argument, cmd_name, param_name) +#define GET_INT_VALUE(argument_id, argument, argument_name) GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(getIntValue, argument_id, argument, __FUNCTION__, argument_name) +#define GET_LONG_VALUE(argument_id, argument, argument_name) GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(getLongValue, argument_id, argument, __FUNCTION__, argument_name) +#define GET_STRING_VALUE(argument_id, argument, argument_name) GET_VALUE_OR_RETURN_WITH_SENDING_ERROR(getStringValue, argument_id, argument, __FUNCTION__, argument_name) #define SEND_RESPONSE_OR_PRINT_ERROR(send_func, response, cmd_name) if (!send_func(ExpertHandle, response, _response_error)) \ @@ -771,9 +784,15 @@ int executeCommand() PrintResponseError(cmd_name, _response_error); \ } -#define SEND_INT_RESPONSE(response, cmd_name) SEND_RESPONSE_OR_PRINT_ERROR(sendIntResponse, response, cmd_name) -#define SEND_LONG_RESPONSE(response, cmd_name) SEND_RESPONSE_OR_PRINT_ERROR(sendLongResponse, response, cmd_name) -#define SEND_ULONG_RESPONSE(response, cmd_name) SEND_RESPONSE_OR_PRINT_ERROR(sendULongResponse, response, cmd_name) +#define SEND_VOID_RESPONSE if (!sendVoidResponse(ExpertHandle, _response_error)) \ + { \ + PrintResponseError(__FUNCTION__, _response_error); \ + } + +#define SEND_INT_RESPONSE(response) SEND_RESPONSE_OR_PRINT_ERROR(sendIntResponse, response, __FUNCTION__) +#define SEND_LONG_RESPONSE(response) SEND_RESPONSE_OR_PRINT_ERROR(sendLongResponse, response, __FUNCTION__) +#define SEND_ULONG_RESPONSE(response) SEND_RESPONSE_OR_PRINT_ERROR(sendULongResponse, response, __FUNCTION__) +#define SEND_BOOL_RESPONSE(response) SEND_RESPONSE_OR_PRINT_ERROR(sendBooleanResponse, response, __FUNCTION__) //------------------------------------------------------------- @@ -946,7 +965,7 @@ void Execute_OrderCalcProfit() void Execute_PositionGetTicket() { int index; - GET_INT_VALUE(0, index, "PositionGetTicket", "index"); + GET_INT_VALUE(0, index, "index"); #ifdef __DEBUG_LOG__ PrintFormat("%s: index = %d", __FUNCTION__, index); @@ -958,7 +977,7 @@ void Execute_PositionGetTicket() PrintFormat("%s: result = %u", __FUNCTION__, result); #endif - SEND_ULONG_RESPONSE(result, "PositionGetTicket"); + SEND_ULONG_RESPONSE(result); } void Execute_PositionsTotal() @@ -5537,7 +5556,7 @@ void Execute_TimeGMT() void Execute_IndicatorRelease() { int indicator_handle; - GET_INT_VALUE(0, indicator_handle, "IndicatorRelease", "indicator_handle"); + GET_INT_VALUE(0, indicator_handle, "indicator_handle"); #ifdef __DEBUG_LOG__ PrintFormat("%s: indicator_handle = %d", __FUNCTION__, indicator_handle); @@ -5557,7 +5576,7 @@ void Execute_GetLastError() PrintFormat("%s: last_error = %d", __FUNCTION__, last_error); #endif - SEND_INT_RESPONSE(last_error, "GetLastError"); + SEND_INT_RESPONSE(last_error); } void Execute_Alert() @@ -5565,7 +5584,7 @@ void Execute_Alert() string message; StringInit(message, 1000); - GET_STRING_VALUE(0, message, "Alert", "message"); + GET_STRING_VALUE(0, message, "message") #ifdef __DEBUG_LOG__ PrintFormat("%s: message = %s", __FUNCTION__, message); @@ -5573,10 +5592,7 @@ void Execute_Alert() Alert(message); - if (!sendVoidResponse(ExpertHandle, _error)) - { - PrintResponseError("Alert", _response_error); - } + SEND_VOID_RESPONSE } void Execute_ResetLastError() @@ -5587,10 +5603,7 @@ void Execute_ResetLastError() PrintFormat("%s: called", __FUNCTION__); #endif - if (!sendVoidResponse(ExpertHandle, _error)) - { - PrintResponseError("ResetLastError", _response_error); - } + SEND_VOID_RESPONSE } void Execute_ChartOpen() @@ -5644,6 +5657,24 @@ void Execute_ChartNext() } } +void Execute_ChartClose() +{ + long chart_id; + GET_LONG_VALUE(0, chart_id, "chart_id") + +#ifdef __DEBUG_LOG__ + PrintFormat("%s: chart_id = %d", __FUNCTION__, chart_id); +#endif + + bool result = ChartClose(chart_id); + +#ifdef __DEBUG_LOG__ + PrintFormat("%s: result = %s", __FUNCTION__, BoolToString(result)); +#endif + + SEND_BOOL_RESPONSE(result) +} + void Execute_ChartSymbol() { long ChartId; @@ -5717,6 +5748,28 @@ void Execute_ChartSaveTemplate() ChartRedraw(ChartId); } +void Execute_ChartWindowFind() +{ + long chart_id; + string indicator_shortname; + StringInit(indicator_shortname, 200, 0); + + GET_LONG_VALUE(0, chart_id, "chart_id") + GET_STRING_VALUE(1, indicator_shortname, "indicator_shortname") + +#ifdef __DEBUG_LOG__ + PrintFormat("%s: chart_id = %d, indicator_shortname = %s", __FUNCTION__, chart_id, indicator_shortname); +#endif + + int result = ChartWindowFind(chart_id, indicator_shortname); + +#ifdef __DEBUG_LOG__ + PrintFormat("%s: result = %d", __FUNCTION__, result); +#endif + + SEND_INT_RESPONSE(result) +} + void Execute_ChartGetString() { long ChartId; @@ -5792,6 +5845,31 @@ void Execute_TerminalInfoDouble() PrintResponseError("TerminalInfoDouble", _response_error); } } + +void Execute_ChartId() +{ + long id = ChartID(); + +#ifdef __DEBUG_LOG__ + PrintFormat("%s: id = %d", __FUNCTION__, id); +#endif + + SEND_LONG_RESPONSE(id) +} + +void Execute_ChartRedraw() +{ + long chart_id; + GET_LONG_VALUE(0, chart_id, "chart_id") + +#ifdef __DEBUG_LOG__ + PrintFormat("%s: chart_id = %d", __FUNCTION__, chart_id); +#endif + + ChartRedraw(chart_id); + + SEND_VOID_RESPONSE +} void PrintParamError(string paramName) {