新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 372 1...365366367368369370371372373374375376377378379...1953 新评论 Maxim Kuznetsov 2017.11.09 12:40 #3711 PokrovMT5:马克西姆,你好!谢谢你的变体,我的变体几乎是一样的,它也可以工作,但阿列克谢-费多托夫 建议,我写道,有一个想法,如何纠正它?如果你不介意重新绘制(例如,无论如何你都会重新计算,像现在这样)--从OnCalculate函数 中返回你想重新计算的地方,在你的例子中--前一个小时的条形图。return rates_total-iBarShift(_Symbol,_Period,time[0]-TimeMinute(time[0])*60-TimeSeconds(time[0])-1 ); // 关于这个,写的是 "随手拈来,没有检查",以证明这个方法。 Konstantin Erin 2017.11.09 12:44 #3712 MakarFX: 我做了,但这并没有解决这个问题,因为 // #property copyright "Copyright © 2005, Yura Prokofiev" // #property link "Yura.prokofiev@gmail.com" #property strict #property indicator_separate_window #property indicator_buffers 3 extern int Barrs = 10; // Баров для расчета extern string simvol = "EURGBP"; double Buf_0[], Buf_1[], Buf_2[]; void OnInit() { SetIndexStyle(0,DRAW_NONE); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Yellow); SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2,Red); IndicatorDigits((int)SymbolInfoInteger(simvol,SYMBOL_DIGITS)); SetIndexBuffer(0,Buf_0); SetIndexBuffer(1,Buf_1); SetIndexBuffer(2,Buf_2); IndicatorShortName("Fisher "+simvol); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); } int start() { int i, limit, counted_bars=IndicatorCounted(); double prev,current; double Value=0, Value1=0, Value2=0, Fish=0, Fish1=0, Fish2=0; double price, MinL=0, MaxH=0; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(i=0; i<limit; i++) { MaxH = iHigh(simvol, 0, iHighest(simvol, 0, MODE_HIGH,Barrs,i)); MinL = iLow (simvol, 0, iLowest (simvol, 0, MODE_LOW, Barrs,i)); price = (iHigh(simvol, 0, i) + iLow(simvol, 0, i))/2; if(MaxH != MinL) Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); Buf_0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=Buf_0[i]; } bool up=true; for(i=limit-2; i>=0; i--) { current=Buf_0[i]; prev=Buf_0[i+1]; if(((current<0)&&(prev>0))||(current<0)) up= false; if(((current>0)&&(prev<0))||(current>0)) up= true; Buf_1[i]=0; Buf_2[i]=0; if(!up) Buf_2[i]=current; else Buf_1[i]=current; } return 0; } 下面 是旧的,上面是新的所用的图表时间框架是指标--零点所代表的时间框架。 Konstantin Erin 2017.11.09 12:55 #3713 YarTrade:请告诉我如何在新条形图出现时重置缓冲区,但要使以前的数据不被抹去并显示在图表上。由于某些原因,我无法将缓冲区重置为零,当新的条形图出现 时,新的数据会叠加在旧的累积数据上。我的代码有什么问题吗?谢谢你的澄清。 当一个新的条形图 出现时,终端将新的空项添加到缓冲区。在第3行......。6正是将 它们归零。其他一切都被保存起来 YarTrade 2017.11.09 12:58 #3714 STARIJ: 当一个新的条形图 出现时,终端会向缓冲区添加新的空元素。在第3行......。...6正好为零。所有其他元素都被保留下来为什么直方图中的条形图会随着新条形图 的出现而立即增长并继续增长,但下一个条形图出现时,前一个条形图也会增长? Konstantin Erin 2017.11.09 13:08 #3715 YarTrade: 为什么在一个新的 柱状图出现后,柱状图中的柱状图紧接着有前一个柱状图的增长,然后继续增长,而下一个柱状图出现时,有前一个柱状图的增长? 你有一个总结V2 = V1 + V2; ijonhson 2017.11.09 13:09 #3716 大家好,我自己也搞不清楚,是某种捣蛋鬼,虽然我可能是不专心。int ticket_order=0; void OnTick() { if(OrdersTotal()==0) { // километр кода ticket_order=OrderSend(Symbol(),up_down,lots,Ask,3,0,0); } if(OrdersTotal()==1) { OrderSelect(ticket_order,SELECT_BY_TICKET); bool Ans=OrderModify(ticket_order,Price,SL,TP,0); } } 我不知道该责备什么,也许我应该使用OrderModify()或OrderSelect通过引用发送票据,并以某种方式改变它? Konstantin Erin 2017.11.09 13:16 #3717 ijonhson: 错误信息 wrong ticket(OrderModify()) 有一个类似的。将第一个和第二个条件语句与内脏一起重新排列--可能有帮助。 Tretyakov Rostyslav 2017.11.09 13:23 #3718 STARIJ:下面是旧的,上面是新的所用图表的时间框架是指标--零点的位置 谢谢你,HUGE。这就是我想要的。 Ivan Ivanov 2017.11.09 13:23 #3719 ijonhson: 向大家问好,我自己也搞不清楚。这使我们更容易找到错误。if ( OrderSelect(ticket_order,SELECT_BY_TICKET) ) if ( OrderModify(ticket_order,Price,SL,TP,0) ) {} 但我认为在OrderSelect()之前,应该是tiket_order=(correct_ticket) Artyom Trishkin 2017.11.09 14:02 #3720 ijonhson: 大家好,我不能理解我自己,某种捣蛋鬼,虽然我可能不注意在这样一个连接的策略测试器中,错误的票据(OrderModify()),而且是在第n个订单上,而不是在第一个或第二个,我不知道该怪什么,也许在OrderModify(),或OrderSelect票据是通过引用和某种方式改变那里? 你通过票据选择订单,然后,在一公里的代码之后,试图修改它。但那时候可能已经关闭了。 1...365366367368369370371372373374375376377378379...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
马克西姆,你好!谢谢你的变体,我的变体几乎是一样的,它也可以工作,但阿列克谢-费多托夫 建议,我写道,有一个想法,如何纠正它?
如果你不介意重新绘制(例如,无论如何你都会重新计算,像现在这样)--从OnCalculate函数 中返回你想重新计算的地方,在你的例子中--前一个小时的条形图。
return rates_total-iBarShift(_Symbol,_Period,time[0]-TimeMinute(time[0])*60-TimeSeconds(time[0])-1 ); // 关于这个,写的是 "随手拈来,没有检查",以证明这个方法。
下面 是旧的,上面是新的
所用的图表时间框架是指标--零点所代表的时间框架。
请告诉我如何在新条形图出现时重置缓冲区,但要使以前的数据不被抹去并显示在图表上。由于某些原因,我无法将缓冲区重置为零,当新的条形图出现 时,新的数据会叠加在旧的累积数据上。我的代码有什么问题吗?谢谢你的澄清。
当一个新的条形图 出现时,终端会向缓冲区添加新的空元素。在第3行......。...6正好为零。所有其他元素都被保留下来
为什么直方图中的条形图会随着新条形图 的出现而立即增长并继续增长,但下一个条形图出现时,前一个条形图也会增长?
为什么在一个新的 柱状图出现后,柱状图中的柱状图紧接着有前一个柱状图的增长,然后继续增长,而下一个柱状图出现时,有前一个柱状图的增长?
下面是旧的,上面是新的
所用图表的时间框架是指标--零点的位置
向大家问好,我自己也搞不清楚。
这使我们更容易找到错误。
但我认为在OrderSelect()之前,应该是tiket_order=(correct_ticket)大家好,我不能理解我自己,某种捣蛋鬼,虽然我可能不注意在这样一个连接的策略测试器中,错误的票据(OrderModify()),而且是在第n个订单上,而不是在第一个或第二个,我不知道该怪什么,也许在OrderModify(),或OrderSelect票据是通过引用和某种方式改变那里?