新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 305 1...298299300301302303304305306307308309310311312...1953 新评论 Alexey Viktorov 2017.09.08 07:02 #3041 mila.com: 谢谢你,但对我来说,它的回报是零。可能的原因是什么? 这不可能是任何其他原因。没有一台电脑知道的年份比1970年少。从经纪人的报价中出现的年份开始。 Vitaly Muzichenko 2017.09.08 07:40 #3042 Alexey Viktorov:这不可能是任何其他年份。没有一台电脑知道的年份比1970年少。从经纪人的报价中出现的年份开始。这是一份好工作,是我们这个时代的第一年)。 Alexey Viktorov 2017.09.08 08:11 #3043 Vitaly Muzichenko:怎么了,很好,我们时代的第一年) 而-1将是BC的第一年。 Aleksey Vyazmikin 2017.09.08 15:00 #3044 Artyom Trishkin: 使用CopyXXX()。谢谢你。在MT5中,你可以这样转移图表。PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod); 如果在MT4中编译,它不会出现错误,但是没有任何效果,是否有MT4的对应软件? Alexey Viktorov 2017.09.08 15:17 #3045 Aleksey Vyazmikin: 谢谢你。在MT5中,有可能以这种方式转移图表。PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod); 如果你在MT4中编译,它不会出现任何错误,但是没有任何效果,是否有MT4的对应版本? Пользовательские индикаторы - Справочник MQL4 docs.mql4.com Пользовательские индикаторы - Справочник MQL4 Aleksey Vyazmikin 2017.09.08 16:00 #3046 Alexey Viktorov: 我选择了那里。SetIndexShift(0,InpChannelPeriod); 但效果完全不同,也就是说,代码不工作,逻辑不同--我不知道...... Aleksey Vyazmikin 2017.09.08 16:12 #3047 也许有人能提供帮助。 该指标的实质是像往常一样画出唐氏通道,然后将最后一个通道值的线条移到负数条后面。在MT5中,一切似乎都在工作,但在MT4中,我不明白哪里出了问题--我在这里和那里重新绘制了它,但它仍然是胡乱绘制的--它移动了通道本身,尽管我分别对将被移动的数值进行了计算....。//+------------------------------------------------------------------+ //| Donchian_Channel.mq5 | //+------------------------------------------------------------------+ #property copyright "Vyazmikin Aleksey Vyacheslavovich" #property link "https://www.mql5.com/ru/users/-aleks-" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Label1 #property indicator_label1 "High_Prognoz"; #property indicator_type1 DRAW_LINE; #property indicator_color1 clrAquamarine; #property indicator_style1 STYLE_DOT; #property indicator_width1 1; //--- plot Label2 #property indicator_label2 "Low_Prognoz"; #property indicator_type2 DRAW_LINE; #property indicator_color2 clrAquamarine; #property indicator_style2 STYLE_DOT; #property indicator_width2 1; //--- input parameters input int InpChannelPeriod=48; // Period //--- indicator buffers double ExtHighBufferPrognoz[]; double ExtLowBufferPrognoz[]; //--- int i,limit,start; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ExtHighBufferPrognoz,INDICATOR_DATA); SetIndexBuffer(1,ExtLowBufferPrognoz,INDICATOR_DATA); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //--- set first bar from what index will be drawn SetIndexDrawBegin(0,InpChannelPeriod); SetIndexDrawBegin(1,InpChannelPeriod); SetIndexShift(0,InpChannelPeriod); SetIndexShift(1,InpChannelPeriod); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- check for rates if(rates_total<InpChannelPeriod*2) return(0); //--- preliminary calculations if(prev_calculated==0) limit=InpChannelPeriod; else limit=prev_calculated; //--- the main loop of calculations for(i=limit;i<rates_total && !IsStopped();i++) { start=i-InpChannelPeriod; ExtHighBufferPrognoz[i-InpChannelPeriod]=high[ArrayMaximum(high,InpChannelPeriod,start)]; ExtLowBufferPrognoz[i-InpChannelPeriod] =low[ArrayMinimum(low,InpChannelPeriod,start)]; } for(int x=rates_total-InpChannelPeriod;x<rates_total && !IsStopped();x++) { ExtHighBufferPrognoz[x]=ExtHighBufferPrognoz[rates_total-InpChannelPeriod]; ExtLowBufferPrognoz[x]=ExtLowBufferPrognoz[rates_total-InpChannelPeriod]; } //--- return value of prev_calculated for next call return(rates_total); } Alexey Viktorov 2017.09.08 16:48 #3048 Aleksey Vyazmikin:也许有人能提供帮助。 该指标的实质是像往常一样画出唐氏通道,然后将最后一个通道值的线条移到负数条后面。在MT5中,一切似乎都在工作,但在MT4中,我不明白哪里出了问题--我在这里和那里重新绘制了它,但它仍然是胡乱绘制的--它移动了通道本身,尽管我分别对将被移动的数值进行了计算....。看看鳄鱼的代码,转变在那里起作用。虽然,也许逻辑是不同的。 Aleksey Vyazmikin 2017.09.08 18:04 #3049 Alexey Viktorov:好吧,看看鳄鱼代码,这就是转移的工作。不过,逻辑可能是不同的。是的,这种转变对我来说也是有效的。我用移位来填充数组,但看起来好像是在没有移位的情况下填充的,但移位本身在视觉上发生。代码的第一部分让缓冲区未被填满,直到从上一个条形图开始的InpChannelPeriod 的深度。 for(i=limit;i<rates_total && !IsStopped();i++) { start=i-InpChannelPeriod; ExtHighBufferPrognoz[i-InpChannelPeriod]=high[ArrayMaximum(high,InpChannelPeriod,start)]; ExtLowBufferPrognoz[i-InpChannelPeriod] =low[ArrayMinimum(low,InpChannelPeriod,start)]; }第二部分应该填补这个区域。 for(int x=rates_total-InpChannelPeriod;x<rates_total && !IsStopped();x++) { ExtHighBufferPrognoz[x]=ExtHighBufferPrognoz[rates_total-InpChannelPeriod]; ExtLowBufferPrognoz[x]=ExtLowBufferPrognoz[rates_total-InpChannelPeriod]; }但在现实中,结果是这样的。 Aleksey Vyazmikin 2017.09.08 18:09 #3050 MT5中的代码#property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Label1 #property indicator_label1 "Predicted_high_price"; #property indicator_type1 DRAW_LINE; #property indicator_color1 clrAquamarine; #property indicator_style1 STYLE_DOT; #property indicator_width1 1; //--- plot Label2 #property indicator_label2 "Predicted_low_price"; #property indicator_type2 DRAW_LINE; #property indicator_color2 clrAquamarine; #property indicator_style2 STYLE_DOT; #property indicator_width2 1; //--- input parameters input int InpChannelPeriod=48; // Period //--- indicator buffers double ExtHighBufferPrognoz[]; double ExtLowBufferPrognoz[]; //--- int i,limit,start; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ExtHighBufferPrognoz,INDICATOR_DATA); SetIndexBuffer(1,ExtLowBufferPrognoz,INDICATOR_DATA); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //--- set first bar from what index will be drawn PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpChannelPeriod); PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpChannelPeriod); PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod); PlotIndexSetInteger(1,PLOT_SHIFT,InpChannelPeriod); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- check for rates if(rates_total<InpChannelPeriod) return(0); //--- preliminary calculations if(prev_calculated==0) limit=InpChannelPeriod; else limit=prev_calculated; //--- the main loop of calculations for(i=limit;i<rates_total && !IsStopped();i++) { start=i-InpChannelPeriod; ExtHighBufferPrognoz[i-InpChannelPeriod]=high[ArrayMaximum(high,start,InpChannelPeriod)]; ExtLowBufferPrognoz[i-InpChannelPeriod]=low[ArrayMinimum(low,start,InpChannelPeriod)]; } for(int x=rates_total-InpChannelPeriod;x<rates_total && !IsStopped();x++) { //int calc=x--; ExtHighBufferPrognoz[x]=ExtHighBufferPrognoz[rates_total-InpChannelPeriod-1]; ExtLowBufferPrognoz[x]=ExtLowBufferPrognoz[rates_total-InpChannelPeriod-1]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+结果。 ZS:改变了代码--错误的ME是。 1...298299300301302303304305306307308309310311312...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你,但对我来说,它的回报是零。可能的原因是什么?
这不可能是任何其他原因。没有一台电脑知道的年份比1970年少。从经纪人的报价中出现的年份开始。
这不可能是任何其他年份。没有一台电脑知道的年份比1970年少。从经纪人的报价中出现的年份开始。
这是一份好工作,是我们这个时代的第一年)。
怎么了,很好,我们时代的第一年)
使用CopyXXX()。
谢谢你。
在MT5中,你可以这样转移图表。
PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod);
谢谢你。
在MT5中,有可能以这种方式转移图表。
PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod);
我选择了那里。
SetIndexShift(0,InpChannelPeriod);
也许有人能提供帮助。 该指标的实质是像往常一样画出唐氏通道,然后将最后一个通道值的线条移到负数条后面。
在MT5中,一切似乎都在工作,但在MT4中,我不明白哪里出了问题--我在这里和那里重新绘制了它,但它仍然是胡乱绘制的--它移动了通道本身,尽管我分别对将被移动的数值进行了计算....。
也许有人能提供帮助。 该指标的实质是像往常一样画出唐氏通道,然后将最后一个通道值的线条移到负数条后面。
在MT5中,一切似乎都在工作,但在MT4中,我不明白哪里出了问题--我在这里和那里重新绘制了它,但它仍然是胡乱绘制的--它移动了通道本身,尽管我分别对将被移动的数值进行了计算....。
看看鳄鱼的代码,转变在那里起作用。虽然,也许逻辑是不同的。
好吧,看看鳄鱼代码,这就是转移的工作。不过,逻辑可能是不同的。
是的,这种转变对我来说也是有效的。
我用移位来填充数组,但看起来好像是在没有移位的情况下填充的,但移位本身在视觉上发生。
代码的第一部分让缓冲区未被填满,直到从上一个条形图开始的InpChannelPeriod 的深度。
第二部分应该填补这个区域。
但在现实中,结果是这样的。
MT5中的代码
结果。
![](https://c.mql5.com/3/153/Si_SpliceH1__1.png)
ZS:改变了代码--错误的ME是。