新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1653 1...164616471648164916501651165216531654165516561657165816591660...1953 新评论 Volodymyr Zubov 2021.10.08 16:04 #16521 对于一个测试人员来说,这 OrderSend 可以,甚至可以在快速服务器上工作,但如果不是测试人员,最好根据文档来做 :) Artis98 2021.10.08 16:12 #16522 伙计们,我需要帮助,我已经好几天没能对以下代码进行必要的修改了。 void start() { StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Определение направления пересечения мувингов if (Init) InitMetod(); // Трейлинг стоп открытых позиций if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber); // Ожидание нового бара на графике if(timeprev == Time[0]) return; timeprev = Time[0]; // Открытие ордера по методу Пуриа CheckForOpen(); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res; // Считывание параметров индикаторов malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); // Проверяем положение мувмнгов if(malw>mas1 && malw>mas2 && OrderSell) { OrderBuy=true; OrderSell=false; Order=true; } if(malw<mas1 && malw<mas2 && OrderBuy) { OrderBuy=false; OrderSell=true; Order=true; } // Открываем ордер Buy if(macd>0 && OrderBuy && Order) { res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue); Order=false; return; } // Открываем ордер Sell if(macd<0 && OrderSell && Order) { res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red); Order=false; return; } } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double Lots() // Расчет объема лота { double Lots; if (Lot > 0) return(Lot); Lots=AccountFreeMargin()/5000; Lots=MathMin(15,MathMax(0.01,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); } //+------------------------------------------------------------------+ //| Init metod Puria function | //+------------------------------------------------------------------+ void InitMetod() // Опредеоение начального пересечения мувингов { double malw,mas1,mas2; malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2)) { Init=false; OrderBuy=true; OrderSell=true; } return; }实际上,我尝试过但无法在此补充的是:让EA 在所有指标(蜡烛开盘价)重合后连续等待4个蜡烛开盘价。 1.第1根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上--4次确认中的1次是; 2.第2根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4次确认中的2次是; 3。第3根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4 次确认中的3次 是; 4.第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4次确认中 的4次是-- 在同一根蜡烛(第4次)上打开交易买入。 卖出 订单的 情况也一样,只是在另一个方向的指标应该打开。有一点很重要--如果在第1根蜡烛到第4根蜡烛的任何阶段, 指标改变了它们的位置(例如,在第3根开盘的蜡烛上,MACD柱打开时低于0,或者=0)--那么一切都会重置,因为在连续第4根蜡烛的开盘时没有检查信号。 有经验的程序员,请指点一下,在代码中需要改变什么才能使这些条件发挥作用?我已经尝试了很多东西,我不知道... Volodymyr Zubov 2021.10.08 16:25 #16523 if(malw>mas1 && malw>mas2 && OrderSell) 正如他们所说,不要相信我们的话。 OrderSell 不知道里面可能有什么,分享代码中的决策逻辑。 Tretyakov Rostyslav 2021.10.08 16:43 #16524 artem artem #: 第1根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上--4个确认中的1个是。 2 第二根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4个 确认中的2个 是。 3 第三根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4 次确认中的3次 是。 4 第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4个中的4 个确认是-- 在同一根蜡烛(第4根)上打开交易买入。 //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(CheckForOpen()==0) { if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK"); } if(CheckForOpen()==1) { if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK"); } } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res=-1, buy=0, sell=0; // Считывание параметров индикаторов 3 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 2 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 1 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 0 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} if(buy ==4) res=0; if(sell==4) res=1; return(res); } Volodymyr Zubov 2021.10.08 17:11 #16525 malw 用一种价值来衡量另一种价值,没有什么?分割第一块=解决方案,第二块=解决方案,比较块。 Tretyakov Rostyslav 2021.10.08 17:13 #16526 Volodymyr Zubov #:用一种价值来衡量另一种价值,没有什么?分割第一块=解决方案,第二块=解决方案,比较块。 这是写给谁的?或写给什么? Volodymyr Zubov 2021.10.08 17:15 #16527 事实证明,你的代码里有malw,那里出现了一个逻辑错误。 Tretyakov Rostyslav 2021.10.08 17:16 #16528 Volodymyr Zubov #: 事实证明,在代码中,你有一个逻辑错误。 写作前检查 Volodymyr Zubov 2021.10.08 17:17 #16529 好吧,但如果你这样使用,变量会崩溃,然后你就不知道什么是 "奇迹 "了 Tretyakov Rostyslav 2021.10.08 17:19 #16530 Volodymyr Zubov #:好吧,但如果你这样使用,变量会崩溃,然后你就不知道 "奇迹 "是什么了。 如果你知道其他选择,请写下来... 你可以帮助别人)。 1...164616471648164916501651165216531654165516561657165816591660...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
对于一个测试人员来说,这
OrderSend
可以,甚至可以在快速服务器上工作,但如果不是测试人员,最好根据文档来做 :)
实际上,我尝试过但无法在此补充的是:让EA 在所有指标(蜡烛开盘价)重合后连续等待4个蜡烛开盘价。
1.第1根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上--4次确认中的1次是;
2.第2根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4次确认中的2次是;
3。第3根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4 次确认中的3次 是;
4.第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4次确认中 的4次是-- 在同一根蜡烛(第4次)上打开交易买入。
卖出 订单的 情况也一样,只是在另一个方向的指标应该打开。有一点很重要--如果在第1根蜡烛到第4根蜡烛的任何阶段, 指标改变了它们的位置(例如,在第3根开盘的蜡烛上,MACD柱打开时低于0,或者=0)--那么一切都会重置,因为在连续第4根蜡烛的开盘时没有检查信号。
有经验的程序员,请指点一下,在代码中需要改变什么才能使这些条件发挥作用?我已经尝试了很多东西,我不知道...
if(malw>mas1 && malw>mas2 && OrderSell)
正如他们所说,不要相信我们的话。
OrderSell
不知道里面可能有什么,分享代码中的决策逻辑。
artem artem #:
第1根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上--4个确认中的1个是。
2 第二根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4个 确认中的2个 是。
3 第三根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4 次确认中的3次 是。
4 第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4个中的4 个确认是-- 在同一根蜡烛(第4根)上打开交易买入。
用一种价值来衡量另一种价值,没有什么?分割第一块=解决方案,第二块=解决方案,比较块。
用一种价值来衡量另一种价值,没有什么?分割第一块=解决方案,第二块=解决方案,比较块。
事实证明,在代码中,你有一个逻辑错误。
好吧,但如果你这样使用,变量会崩溃,然后你就不知道什么是 "奇迹 "了
好吧,但如果你这样使用,变量会崩溃,然后你就不知道 "奇迹 "是什么了。
如果你知道其他选择,请写下来...
你可以帮助别人)。