diff --git a/TestClients/MtApi5TestClient/MainWindow.xaml b/TestClients/MtApi5TestClient/MainWindow.xaml
index e390ddf7..8532ce35 100755
--- a/TestClients/MtApi5TestClient/MainWindow.xaml
+++ b/TestClients/MtApi5TestClient/MainWindow.xaml
@@ -479,10 +479,11 @@
-
-
-
+
+
+
+
diff --git a/TestClients/MtApi5TestClient/ViewModel.cs b/TestClients/MtApi5TestClient/ViewModel.cs
index d4050e57..c2aa93fc 100755
--- a/TestClients/MtApi5TestClient/ViewModel.cs
+++ b/TestClients/MtApi5TestClient/ViewModel.cs
@@ -76,6 +76,7 @@ namespace MtApi5TestClient
public DelegateCommand ChartOpenCommand { get; private set; }
public DelegateCommand ChartApplyTemplateCommand { get; private set; }
+ public DelegateCommand ChartSaveTemplateCommand { get; private set; }
public DelegateCommand TimeTradeServerCommand { get; private set; }
public DelegateCommand TimeLocalCommand { get; private set; }
@@ -129,12 +130,38 @@ namespace MtApi5TestClient
var TemplateStringContent = File.ReadAllLines(openFileDialog.FileName);
var DestPath = $"{MT5Path}\\MQL5{TemplateName}";
File.WriteAllLines($"{MT5Path}\\MQL5{TemplateName}", TemplateStringContent);
- AddLog($"path: {MT5Path}");
_mtApiClient.ChartApplyTemplate(ChartId, TemplateName);
}
return ChartId;
});
+ if (result == -1)
+ {
+ AddLog("ExecuteChartApplyTemplate: result is null");
+ return;
+ }
+
+ AddLog($"ExecuteChartApplyTemplate: success chartid=>{result}");
+ }
+
+ private async void ExecuteChartSaveTemplate(object o)
+ {
+
+ AddLog($"ExecuteSaveApplyTemplate #1");
+
+
+ var result = await Execute(() =>
+ {
+
+ var MT5Path = _mtApiClient.TerminalInfoString(ENUM_TERMINAL_INFO_STRING.TERMINAL_DATA_PATH);
+ int ChartId = 0; // Actual Chart
+ var TemplateName = "\\Files\\exported.tpl";
+ _mtApiClient.ChartSaveTemplate(ChartId, TemplateName);
+ var DestPath = $"{MT5Path}\\MQL5{TemplateName}";
+ AddLog($"Destination: {TemplateName}");
+ return ChartId;
+ });
+
if (result == -1)
{
AddLog("ChartOpen: result is null");
@@ -348,6 +375,7 @@ namespace MtApi5TestClient
ChartOpenCommand = new DelegateCommand(ExecuteChartOpen);
ChartApplyTemplateCommand = new DelegateCommand(ExecuteChartApplyTemplate);
+ ChartSaveTemplateCommand = new DelegateCommand(ExecuteChartSaveTemplate);
TimeCurrentCommand = new DelegateCommand(ExecuteTimeCurrent);
diff --git a/mq5/MtApi5.mq5 b/mq5/MtApi5.mq5
index 8434451e..bb3d3b39 100755
--- a/mq5/MtApi5.mq5
+++ b/mq5/MtApi5.mq5
@@ -719,13 +719,19 @@ int executeCommand()
case 245: //ChartFirst
Execute_ChartSymbol();
break;
- case 236: //ChartApplyTemplate
- Execute_ChartApplyTemplate();
- break;
case 252: //ChartGetString
Execute_ChartGetString();
break;
+ case 236: //ChartApplyTemplate
+ Execute_ChartApplyTemplate();
+ break;
+
+ case 237: //ChartApplyTemplate
+ Execute_ChartSaveTemplate();
+ break;
+
+
case 153: //TerminalInfoString
Execute_TerminalInfoString();
@@ -6155,7 +6161,6 @@ void Execute_ChartApplyTemplate()
return;
}
StringReplace(TemplateFileName, "\\", "\\\\");
- ResetLastError();
if (!sendBooleanResponse(ExpertHandle, ChartApplyTemplate(ChartId, TemplateFileName), _response_error))
{
@@ -6164,6 +6169,35 @@ void Execute_ChartApplyTemplate()
ChartRedraw(ChartId);
}
+void Execute_ChartSaveTemplate()
+{
+ long ChartId;
+ string TemplateFileName;
+ StringInit(TemplateFileName, 100, 0);
+
+
+ if (!getLongValue(ExpertHandle, 0, ChartId, _error))
+ {
+ PrintParamError("ChartSaveTemplate", "ChartId", _error);
+ sendErrorResponse(ExpertHandle, -1, _error, _response_error);
+ return;
+ }
+ if (!getStringValue(ExpertHandle, 1, TemplateFileName, _error))
+ {
+ PrintParamError("ChartSaveTemplate", "TemplateFileName", _error);
+ sendErrorResponse(ExpertHandle, -1, _error, _response_error);
+ return;
+ }
+ StringReplace(TemplateFileName, "\\", "\\\\");
+
+ if (!sendBooleanResponse(ExpertHandle, ChartSaveTemplate(ChartId, TemplateFileName), _response_error))
+ {
+ PrintResponseError("ChartSaveTemplate", _response_error);
+ }
+ ChartRedraw(ChartId);
+}
+
+
void Execute_ChartGetString()
{
long ChartId;