程序库: Expert - 页 3 12345678910...13 新评论 fxsaber 2018.11.16 09:19 #21 该库的另一个应用实例 交易、自动交易系统和交易策略测试论坛 ParameterGetRange() fxsaber, 2018.11.16 09:17 #include <fxsaber\Expert.mqh> //https://www.mql5.com/zh/code/19003 #define TOSTRING(A) (" " + #A + " = " + (string)(A)) // 收集输入参数范围的数据,以便进行优化 string OptimizationData( void ) { string Str = NULL; MqlParam Params[]; string Names[]; if (EXPERT::Parameters(0, Params, Names)) { const int Size = ArraySize(Names); bool Enable; long Value, Start, Step, Stop; long Total = 1; Str = Params[0].string_value; for (int i = 0; i < Size; i++) if (ParameterGetRange(Names[i], Enable, Value, Start, Step, Stop)) { const long Interval = Stop - Start + 1; const long Amount = Enable ? Interval / Step + ((bool)(Interval % Step) ? 1 : 0) : 1; Str += "\n" + Names[i] + " = " + (string)Value + (Enable ? TOSTRING(Start) + TOSTRING(Step) + TOSTRING(Stop) + TOSTRING(Amount) : NULL); Total *= Amount; } Str += "\n" + TOSTRING(Total); } return(Str); } input int Range1 = 5; input int Range2 = 5; input int Range3 = 5; void OnTesterInit() { ParameterSetRange("Range1", true, 5, 1, 2, 3); Print(__FUNCTION__ + "\n" + OptimizationData()); } void OnTesterDeinit() { Print(__FUNCTION__ + "\n" + OptimizationData()); ChartClose(); } int OnInit() { return(INIT_FAILED); } OnTesterInit Experts\fxsaber\Test3.ex5 Range1 = 5 Start = 5 Step = 1 Stop = 50 Amount = 46 Range2 = 5 Start = 23 Step = 1 Stop = 78 Amount = 56 Range3 = 5 Start = 26 Step = 5 Stop = 83 Amount = 12 Total = 30912 OnTesterDeinit Experts\fxsaber\Test3.ex5 Range1 = 5 Start = 1 Step = 2 Stop = 3 Amount = 2 Range2 = 5 Start = 23 Step = 1 Stop = 78 Amount = 56 Range3 = 5 Start = 26 Step = 5 Stop = 83 Amount = 12 Total = 1344 fxsaber 2019.03.12 12:20 #22 错误已修复。 fxsaber 2019.03.12 12:21 #23 修正了错误。最新版本。 Vitaly Muzichenko 2019.03.19 12:39 #24 如何将 .ex4 格式的智能交易系统连接到不同名称的智能交易系统中运行,而且必须显示输入参数,即可以完全使用它。 我们有一个已编译的 Expert Advisor,名称为 "Trade.ex4"。 创建一个新的智能交易系统,名称为 "Hand.ex4"。 如何将它们结合起来,以便在启动 "Hand.ex4 "时,"Trade.ex4 "将完全正常运行,而 "Trade.ex4 "将嵌入到 "Hand.ex4 "中。 也就是说,我们的机器上只有 Hand.ex4 文件,但我们在工作中使用 Trade.ex4 文件。 谢谢! fxsaber 2019.03.19 18:45 #25 Vitaly Muzichenko:如何运行 .ex4 格式的智能交易系统?当前形式的库仅适用于 EX5。 Andrey Khatimlianskii 2019.04.09 01:31 #26 Sergey Eremin:在我自己的某个项目中,我就是这样解决的("名称 "标签就是这样):谢谢,就是这样! 只是我在保存的模板名称中添加了 chartId,这样不同图表上的相同 EA 就不会争夺同一个文件了。 @fxsaber,代码中有 "#ifndef __MQL5__",为什么不将跨平台进行到底呢? 为了让 Is 工作,我们在代码的开头添加: #property strict #ifdef __MQL4__ class SubstringParser { private: string m_text; string m_subStart; string m_subEnd; public: SubstringParser(const string text, const string subStart, const string subEnd) { m_text = text; m_subStart = subStart; m_subEnd = subEnd; } string Get() { int startPhraseLengt = StringLen(m_subStart); int startPos = StringFind(m_text, m_subStart) + startPhraseLengt; int endPos = StringFind(m_text, m_subEnd, startPos); if(startPos >= startPhraseLengt && endPos > startPos) { return StringSubstr(m_text, startPos, endPos - startPos); } else { return ""; } } }; string GetChartEAName(const long chartId) { if(!SaveTemplate(chartId)) { return ""; } string result = ""; int handle = FileOpen("ea_name_checking_" + (string)chartId + ".tpl",FILE_TXT|FILE_READ); if(handle == INVALID_HANDLE) { Print ( "Error in ", __FILE__,", line ", __LINE__, ": can't open template file 'ea_name_checking_" + (string)chartId + ".tpl', error code = ", GetLastError() ); } else { string text = ""; while(!FileIsEnding(handle)) { text = text + FileReadString(handle, (uint)FileSize(handle)) +"\r\n"; } SubstringParser eaSectionTextParser(text, "<expert>", "</expert>"); string eaSectionText = eaSectionTextParser.Get(); if(StringTrimLeft(StringTrimRight(eaSectionText)) != "") { SubstringParser eaNameParser(eaSectionText, "name=","\r\n"); string eaName = StringTrimLeft(StringTrimRight(eaNameParser.Get())); if(eaName != "") { result = eaName; } } } FileClose(handle); FileDelete("ea_name_checking_" + (string)chartId + ".tpl"); return result; } bool SaveTemplate(const long chartId) { ResetLastError(); if(!ChartSaveTemplate(chartId, "\\Files\\ea_name_checking_" + (string)chartId + ".tpl")) { Print ( "Error in ", __FILE__,", line ", __LINE__, ": can't save template to the file 'ea_name_checking_" + (string)chartId + ".tpl', error code = ", GetLastError() ); return false; } return true; } #endif 并更正函数本身: static bool Is( const long Chart_ID = 0 ) { #ifdef __MQL4__ string chartEAName = GetChartEAName(Chart_ID); #endif #ifdef __MQL5__ string chartEAName = ChartGetString(Chart_ID, CHART_EXPERT_NAME); #endif return(chartEAName != NULL); } 还有其他问题吗? fxsaber 2019.04.09 07:53 #27 Andrey Khatimlianskii:还有其他困难吗?只运行一个指标的图表。 ZY 应该这样操作 SubstringParser eaSectionTextParser(text, "\r\n\r\n<expert>", "</expert>"); fxsaber 2019.04.09 13:04 #28 程序库的所有功能现在都能在 MT4 上运行。 程序库已实现跨平台。 fxsaber 2019.04.09 13:05 #29 所有程序库功能 现在都能在 MT4 上运行。该库已实现跨平台。 MT4 示例: Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Библиотеки:专家 fxsaber, 2019.04.09 13:19 #include <fxsaber\Expert.mqh> //https://www.mql5.com/ru/code/19003 void OnStart() { MqlParam Params[2]; // Путь к советнику Params[0].string_value = "Moving Average"; // Первый входной параметр советника Params[1].type = TYPE_DOUBLE; Params[1].double_value = 0.5; Print(EXPERT::Run(ChartOpen(_Symbol, _Period), Params)); } fxsaber 2019.04.09 13:19 #30 Vitaly Muzichenko:在 .ex4 中运行 EA 的最佳方法是什么?#include <fxsaber\Expert.mqh> //https://www.mql5.com/zh/code/19003 void OnStart() { MqlParam Params[2]; // 辅导员之路 Params[0].string_value = "Moving Average"; // 专家顾问的第一个输入参数 Params[1].type = TYPE_DOUBLE; Params[1].double_value = 0.5; Print(EXPERT::Run(ChartOpen(_Symbol, _Period), Params)); } 12345678910...13 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
交易、自动交易系统和交易策略测试论坛
ParameterGetRange()
fxsaber, 2018.11.16 09:17
如何将 .ex4 格式的智能交易系统连接到不同名称的智能交易系统中运行,而且必须显示输入参数,即可以完全使用它。
我们有一个已编译的 Expert Advisor,名称为 "Trade.ex4"。
创建一个新的智能交易系统,名称为 "Hand.ex4"。
如何将它们结合起来,以便在启动 "Hand.ex4 "时,"Trade.ex4 "将完全正常运行,而 "Trade.ex4 "将嵌入到 "Hand.ex4 "中。
也就是说,我们的机器上只有 Hand.ex4 文件,但我们在工作中使用 Trade.ex4 文件。
谢谢!
如何运行 .ex4 格式的智能交易系统?
当前形式的库仅适用于 EX5。
在我自己的某个项目中,我就是这样解决的("名称 "标签就是这样):
谢谢,就是这样!
只是我在保存的模板名称中添加了 chartId,这样不同图表上的相同 EA 就不会争夺同一个文件了。
@fxsaber,代码中有 "#ifndef __MQL5__",为什么不将跨平台进行到底呢?
为了让 Is 工作,我们在代码的开头添加:
并更正函数本身:
还有其他问题吗?
还有其他困难吗?
只运行一个指标的图表。
ZY 应该这样操作
程序库的所有功能现在都能在 MT4 上运行。
程序库已实现跨平台。
MT4 示例:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки:专家
fxsaber, 2019.04.09 13:19
在 .ex4 中运行 EA 的最佳方法是什么?