更少的代码,更多的行动......写一个EA - 页 4 12345678910 新评论 Vladimir Karputov 2019.03.10 11:48 #31 Maxim Kuznetsov: 你为什么把关于下一步的帖子拿下来?请用你的傲慢来检验。并阅读该资源的规则。 你们都可以在论坛帖子和KodoBaz的描述中写下。 fxsaber 2019.03.10 11:53 #32 Maxim Kuznetsov: 你为什么把关于下一步的帖子拿下来?看到了帖子,没有看到任何犯罪行为。我想我看得还不够仔细。 aleger 2019.03.10 12:46 #33 Maxim Kuznetsov: 当然,余额正在下降。 你对 "两个MAs交叉 "有什么期望? 你可以为EA采取不同的基础--MAs远非最佳选择。 Maxim Kuznetsov 2019.03.10 13:10 #34 aleger: 你可以为EA采取不同的基础--mashki远非最佳选择。如果你再仔细看一下,你会发现你已经可以实现相当多的东西了 :-) 因此,结果如下。 * 应用程序员(库的使用者)声明他/她有几个列的micro-excel(在用例中,这些是FAST_MA,SLOW_MA,SIGNAL_BUY,SIGNAL_SELL)。 *并勾画了一个函数,他知道如何计算各个单元。在这个例子中,他提到了iMA。 *同时,他可以自由地访问该表的其他单元格(如果可能的话,DataFrame将打破序列)。 *并分别由用户编写了 "检查行值和是否是交易时间 "的函数 很明显,这足以让EA开始交易。而且策略可以非常灵活地改变--任何你能想到的表格计算都是可能的。 另一件事是,这只是前半部分:-)到目前为止,该EA的交易就像猴子移位器一样,只是用最小的手数,在一个符号和一个时间框架上。 Maxim Kuznetsov 2019.03.12 10:52 #35 在前两部分中,我们获得了一个可以执行最简单策略的专家顾问,这些策略被描述为 "猴子 "或 "按信号翻转"。 信号本身的编程非常简单,几乎就像在Excel中一样:-) 现在是时候让专家顾问多学点东西了。至少要把StopLoss和trawl它。 在策略的艺术描述中补充 "止损放在距离STOPLOSS_POINTS上,并以分形进行追踪"。我们还介绍了上述用例中的变化。 新的EA参数输入int STOPLOSS_POINTS=100。在ENUM_SERIES中增加两个计算字段UPPER_FRACTAL,LOWER_FRACTAL。并在GetData函数中添加两个 "case: "来计算它们并为用户提供一个函数(EA类的方法),以设置EA。最简单的条目可以看作是 SetStopLoss(STOPLOSS_POINTS,LOWER_FRACTAL,UPPER_FRACTAL)。 读作 "在指定距离设置止损,并按LOWER_FRACTAL列拖曳买入,按UPPER_FRACTAL拖曳卖出";我认为该方法有一个明显的名称,其语法也大致清楚。 假设用户做了很多手势(声明了输入,添加了两列并调用了功能设置),我们将开发库,使他的行为导致预期的结果。我们还必须开发表格计算,并为消息/事件机制奠定基础。 在复制粘贴中,所有不必要的注释和MQL5代码都已被删除,以达到紧凑的效果。 input ENUM_APPLIED_PRICE FAST_MA_PRICE=PRICE_CLOSE; input ENUM_MA_METHOD FAST_MA_METHOD=MODE_EMA; input int FAST_MA_PERIOD=14; input int FAST_MA_SHIFT=0; input ENUM_APPLIED_PRICE SLOW_MA_PRICE=PRICE_CLOSE; input ENUM_MA_METHOD SLOW_MA_METHOD=MODE_SMA; input int SLOW_MA_PERIOD=54; input int SLOW_MA_SHIFT=0; // начальные значения StopLoss, TakeProfit input int STOPLOSS_POINTS=100; input int TAKEPROFIT_POINTS=200; #include "EA/EA.mqh" enum ENUM_SERIES { FAST_MA, // id. значений FAST_MA SLOW_MA, // id. значений SLOW_MA SIGNAL_BUY, // сигнал к покупкам SIGNAL_SELL, // сигнал к продажам UPPER_FRACTAL, // верхний фрактал (для трала стопов ордеров sell) LOWER_FRACTAL, // нижний фрактал TOTAL_SERIES // последний элемент перечисления = кол-во элементов }; double GetData(EA *ea,int id,int shift,DataFrame *table) { switch ((ENUM_SERIES)id) { case FAST_MA: return table[FAST_MA][shift]=iMA(ea.Symbol,ea.Period,FAST_MA_PERIOD,0,FAST_MA_METHOD,FAST_MA_PRICE,shift); case SLOW_MA: return table[SLOW_MA][shift]=iMA(ea.Symbol,ea.Period,SLOW_MA_PERIOD,0,SLOW_MA_METHOD,SLOW_MA_PRICE,shift); case SIGNAL_BUY: return table[SIGNAL_BUY][shift]=table.CrossedUp(FAST_MA,SLOW_MA,shift); break; case SIGNAL_SELL: return table[SIGNAL_SELL][shift]=table.CrossedDn(FAST_MA,SLOW_MA,shift); break; // Расчёт уровней трала case UPPER_FRACTAL: // верхний фрактал. уровень по которому тралятся sell return table[UPPER_FRACTAL][shift]=iFractal(ea.Symbol,ea.Period,MODE_UPPER,shift+2); case LOWER_FRACTAL: return table[UPPER_FRACTAL][shift]=iFractal(ea.Symbol,ea.Period,MODE_LOWER,shift+2); } return EMPTY_VALUE; } int SignalOfCross(EA *ea,int shift,DataFrame *data) { if (FAST_MA_PRICE!=PRICE_OPEN || SLOW_MA_PRICE!=PRICE_OPEN) shift++; if (data[SIGNAL_BUY][shift]==1.0) return OP_BUY; if (data[SIGNAL_SELL][shift]==1.0) return OP_SELL; return -1; } EA *ea=NULL; int OnInit() { ea = new EA(); ea.SetupTimeframe(_Symbol,_Period,TOTAL_SERIES,30,GetData); ea.SetupSignal(SignalOfCross); // укажем начальный стоп-лосс ордеров и уровни для тралов ea.SetupStopLoss(STOPLOSS_POINTS,LOWER_FRACTAL,UPPER_FRACTAL); // и заодно тейк-профит ea.SetupTakeProfit(TAKEPROFIT_POINTS); // остальная часть одинакова для всех советников //................ } fxsaber 2019.03.12 10:58 #36 Maxim Kuznetsov:看这样的代码已经很困难了。写作外在的简单是一项困难的任务。简洁是很重要的,但即使有了简洁,也很容易逃脱。 你对你的代码的看法,就像我对我的看法一样,是非常主观的。来自外部的观察者可以更客观地判断出它是复杂还是简单。 作为你的代码的观察者--复杂。 Maxim Kuznetsov 2019.03.12 11:09 #37 fxsaber:看这样的代码已经很困难了。写作外在的简单是一项困难的任务。简洁是很重要的,但即使有了简洁,也很容易逃脱。 你对你的代码的看法,就像我对我的看法一样,是非常主观的。来自外部的观察者可以更客观地判断出它是复杂还是简单。 作为你的代码的观察者--复杂。建议只为用例提供一个更清晰、更简洁的条目。或对当前的编辑。 这是最困难的一点--这也是主要提供给大家讨论的一点。 fxsaber 2019.03.12 11:16 #38 Maxim Kuznetsov:他们提出了一个更清晰和简明的符号,只是为了使用情况。或对当前的编辑。 这是最困难的一点--也是主要提出来讨论的一点。我不会建议这样做,因为我不知道,甚至不理解为什么需要这样做。对于一个外部观察者来说,MQL4几乎不会比MQL4更简单。MQL4的开发者已经出色地找到了一个简单的架构。 Vladimir Simakov 2019.03.12 11:37 #39 你想从中得到什么?说实话,我不明白。起初我以为是要建立一个la框架,但没有,没有指标、订单、标准决策算法的包装类,什么都没有。虽然这样的结构更易读:fast.Get(2)>=slow.Get(1);(这只是为了举例),但声明。 CMA fast=new CMA(NULL,0,12,...)。 CMA slow=new CMA(NULL,0,100,...)。 这是我们可以讨论的事情,而你,IMHO,却在现场跺脚。 Vasiliy Sokolov 2019.03.12 11:41 #40 fxsaber:作为你的代码的观察者--很难。我同意,即使你懂得语言,要读懂你的代码也是非常困难的。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你为什么把关于下一步的帖子拿下来?
请用你的傲慢来检验。并阅读该资源的规则。
你们都可以在论坛帖子和KodoBaz的描述中写下。
你为什么把关于下一步的帖子拿下来?
看到了帖子,没有看到任何犯罪行为。我想我看得还不够仔细。
当然,余额正在下降。 你对 "两个MAs交叉 "有什么期望?
你可以为EA采取不同的基础--MAs远非最佳选择。
你可以为EA采取不同的基础--mashki远非最佳选择。
如果你再仔细看一下,你会发现你已经可以实现相当多的东西了 :-)
因此,结果如下。
* 应用程序员(库的使用者)声明他/她有几个列的micro-excel(在用例中,这些是FAST_MA,SLOW_MA,SIGNAL_BUY,SIGNAL_SELL)。
*并勾画了一个函数,他知道如何计算各个单元。在这个例子中,他提到了iMA。
*同时,他可以自由地访问该表的其他单元格(如果可能的话,DataFrame将打破序列)。
*并分别由用户编写了 "检查行值和是否是交易时间 "的函数
很明显,这足以让EA开始交易。而且策略可以非常灵活地改变--任何你能想到的表格计算都是可能的。
另一件事是,这只是前半部分:-)到目前为止,该EA的交易就像猴子移位器一样,只是用最小的手数,在一个符号和一个时间框架上。
在前两部分中,我们获得了一个可以执行最简单策略的专家顾问,这些策略被描述为 "猴子 "或 "按信号翻转"。
信号本身的编程非常简单,几乎就像在Excel中一样:-)
现在是时候让专家顾问多学点东西了。至少要把StopLoss和trawl它。
在策略的艺术描述中补充 "止损放在距离STOPLOSS_POINTS上,并以分形进行追踪"。我们还介绍了上述用例中的变化。
并为用户提供一个函数(EA类的方法),以设置EA。最简单的条目可以看作是
SetStopLoss(STOPLOSS_POINTS,LOWER_FRACTAL,UPPER_FRACTAL)。
读作 "在指定距离设置止损,并按LOWER_FRACTAL列拖曳买入,按UPPER_FRACTAL拖曳卖出";我认为该方法有一个明显的名称,其语法也大致清楚。
假设用户做了很多手势(声明了输入,添加了两列并调用了功能设置),我们将开发库,使他的行为导致预期的结果。我们还必须开发表格计算,并为消息/事件机制奠定基础。
在复制粘贴中,所有不必要的注释和MQL5代码都已被删除,以达到紧凑的效果。
看这样的代码已经很困难了。写作外在的简单是一项困难的任务。简洁是很重要的,但即使有了简洁,也很容易逃脱。
你对你的代码的看法,就像我对我的看法一样,是非常主观的。来自外部的观察者可以更客观地判断出它是复杂还是简单。
作为你的代码的观察者--复杂。
看这样的代码已经很困难了。写作外在的简单是一项困难的任务。简洁是很重要的,但即使有了简洁,也很容易逃脱。
你对你的代码的看法,就像我对我的看法一样,是非常主观的。来自外部的观察者可以更客观地判断出它是复杂还是简单。
作为你的代码的观察者--复杂。
建议只为用例提供一个更清晰、更简洁的条目。或对当前的编辑。
这是最困难的一点--这也是主要提供给大家讨论的一点。
他们提出了一个更清晰和简明的符号,只是为了使用情况。或对当前的编辑。
这是最困难的一点--也是主要提出来讨论的一点。
我不会建议这样做,因为我不知道,甚至不理解为什么需要这样做。对于一个外部观察者来说,MQL4几乎不会比MQL4更简单。MQL4的开发者已经出色地找到了一个简单的架构。
你想从中得到什么?说实话,我不明白。起初我以为是要建立一个la框架,但没有,没有指标、订单、标准决策算法的包装类,什么都没有。虽然这样的结构更易读:fast.Get(2)>=slow.Get(1);(这只是为了举例),但声明。
CMA fast=new CMA(NULL,0,12,...)。
CMA slow=new CMA(NULL,0,100,...)。
这是我们可以讨论的事情,而你,IMHO,却在现场跺脚。
作为你的代码的观察者--很难。
我同意,即使你懂得语言,要读懂你的代码也是非常困难的。