一个指标出现了除以零的错误 - 页 5 1234567891011 新评论 Aleksey Vyazmikin 2018.07.04 13:57 #41 Alexey Kozitsyn:这是正确的。如果用公式limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) 来计算极限。那么结果将是=0。现在我们需要看看停止和开始时间是如何形成的。原来如此,这是我之前发布的代码 void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[]) { datetime start_time=rates[i].time; datetime stop_time=(start_time+PeriodSeconds(TimeFrames)); int start_index,stop_index,limit; datetime vertical_line_time; start_index=ArrayBsearch(Time,start_time); if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index); start_time=Time[start_index]; if(i>0) { stop_index=ArrayBsearch(Time,stop_time); if(Time[stop_index]>stop_time) stop_index++; stop_time=Time[stop_index]; limit=start_index-stop_index+1; vertical_line_time=Time[start_index-(limit>>1)]; } else { if(TimeFrames==PERIOD_MN1) { MqlDateTime mql_time; TimeToStruct(start_time+2678400,mql_time); int days=32-mql_time.day; stop_time=start_time+days*86400; } else if(TimeFrames==PERIOD_W1) stop_time-=86400; vertical_line_time=start_time+(stop_time-start_time)/2; limit=(int)(stop_time-start_time)/PeriodSeconds(_Period); } //--вырезано } 原来是这样的数据时间 stop_time=(start_time+PeriodSeconds(TimeFrames)); ?也就是说,它没有增加? [删除] 2018.07.04 14:38 #42 Aleksey Vyazmikin:原来如此,这是我之前发布的代码 原来是关于这个数据时间 stop_time=(start_time+PeriodSeconds(TimeFrames)); ?也就是说,它没有增加? 试图取代 /PeriodSeconds(_Period)на /(_Period*60) и +PeriodSeconds(TimeFrames)); на +_Period*60); Aleksey Vyazmikin 2018.07.04 14:54 #43 ovak77: 尝试更换 现在这个错误一直在跳出来。 [删除] 2018.07.04 14:59 #44 Aleksey Vyazmikin:现在,错误不断弹出。я /PeriodSeconds(_Period)на /(_Period*60)我肯定会取代它,这将减少访问时间,但现在你需要看到所有的代码,所有的计算结果。 Sergey Savinkin 2018.07.04 15:09 #45 Aleksey Vyazmikin:现在,错误不断弹出。它是在哪句话上骂人? Konstantin Erin 2018.07.04 15:11 #46 试试这个拐杖。 double Delta = 0.000001; // 通过实验找到。 如果分母小于Delta,警告("分母=",分母);否则计算。你需要《快讯》,它更快、更方便。当它工作时,寻找一个错误 [删除] 2018.07.04 15:11 #47 Aleksey Vyazmikin:现在这个错误一直在跳出来。 错误发生在哪一行? 如果你在MetaEditor中运行,它会在错误处停止编译(懒得重读帖子)。 Aleksey Vyazmikin 2018.07.04 15:20 #48 Sergey Savinkin:它是在哪句话上骂人?除以0 也是有的。 Aleksey Vyazmikin 2018.07.04 15:20 #49 ovak77: 如果你在MetaEditor中运行,它会在错误处停止编译(懒得重读帖子)。编译运行没有错误。 Aleksey Vyazmikin 2018.07.04 15:27 #50 这不是关于零的问题,而是关于它为什么会发生...也就是说,为什么索引和日期是一样的。 以下是在分钟图上回放的代码,最好不要改变设置 //+------------------------------------------------------------------+ //| IndDrafter.mq5 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //---- input int IndId =1; //номер индикатора input ENUM_TIMEFRAMES TimeFrames =PERIOD_H1; //период работы input bool UseDeltaPrice =true; //разрешение использовать для расчета ширины канала индикатор DeltaPrice input int HighPoint =1000; //фиксированная ширина канала для верхней цены, в пунктах input int LowPoint =1000; //фиксированная ширина канала для нижней цены, в пунктах input int VariantDraft =6; //вариант построения графических фигур, 1-8 input int BarsUsed =100; //количество отображаемых баров, 0-вся история input int PeriodDeltaPrice =3; //период индикатора DeltaPrice input bool UsePriceInfo =true; //разрешение вывода показаний положения цены input ENUM_APPLIED_PRICE Price =PRICE_CLOSE; //тип цены input bool UseVerticalLine =true; //разрешение вывода вертикальной линии раздела времени input ENUM_LINE_STYLE StyleDraft =STYLE_DASH; //стиль линии графических фигур input color ColorDraft1 =clrLimeGreen; //первый цвет линии графических фигур input color ColorDraft2 =clrDarkOrchid; //второй цвет линии графических фигур input color ColorDraft3 =clrDarkTurquoise; //третий цвет линии графических фигур input ENUM_DRAW_TYPE StyleBuffer =DRAW_LINE; //стиль линии индикатора положения цены input color ColorBuffer =clrRed; //цвет линии индикатора положения цены input int WidhtBuffer =1; //ширина линии индикатора положения цены input bool UseFiboGrid =true; //разрешение накладывать сеть на графические фигуры input ENUM_LINE_STYLE StyleFiboUp =STYLE_DOT; //стиль линий сетки input color ColorFiboUp =clrWhite; //цвет верхней сетки input int WidhtFiboUp =1; //ширина линий верхней Fibo сетки input double LevelUp01 =23.6; //значение первого уровня input double LevelUp02 =38.2; //значение второго уровня input double LevelUp03 =50.0; //значение третье уровня input double LevelUp04 =61.8; //значение четвертого уровня input double LevelUp05 =76.4; //значение пятого уровня input double LevelUp06 =100.0; //значение шестого уровня input double LevelUp07 =123.6; //значение седьмого уровня input double LevelUp08 =138.2; //значение восьмого уровня input double LevelUp09 =150.0; //значение девятого уровня input double LevelUp10 =161.8; //значение десятого уровня input ENUM_LINE_STYLE StyleFiboDn =STYLE_DOT; //стиль линий сетки input color ColorFiboDn =clrAqua; //цвет нижней сетки input int WidhtFiboDn =1; //ширина линий нижней Fibo сетки input double LevelDn01 =23.6; //значение первого уровня input double LevelDn02 =38.2; //значение второго уровня input double LevelDn03 =50.0; //значение третье уровня input double LevelDn04 =61.8; //значение четвертого уровня input double LevelDn05 =76.4; //значение пятого уровня input double LevelDn06 =100.0; //значение шестого уровня input double LevelDn07 =123.6; //значение седьмого уровня input double LevelDn08 =138.2; //значение восьмого уровня input double LevelDn09 =150.0; //значение девятого уровня input double LevelDn10 =161.8; //значение десятого уровня //input uint InpCenterTime=12; //время центральной линии //---- double ExtBuffer[]; //---- double level_up[10]; double level_dn[10]; //---- int counted_bars; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { IndicatorSetInteger(INDICATOR_DIGITS,_Digits); IndicatorSetDouble(INDICATOR_MAXIMUM,2.05); IndicatorSetDouble(INDICATOR_MINIMUM,-0.05); IndicatorSetString(INDICATOR_SHORTNAME,"Drafter "+IntegerToString(IndId)+" "+IntegerToString(VariantDraft)); //---- SetIndexBuffer(0,ExtBuffer); PlotIndexSetInteger(0,PLOT_DRAW_TYPE,StyleBuffer); PlotIndexSetInteger(0,PLOT_LINE_WIDTH,WidhtBuffer); PlotIndexSetInteger(0,PLOT_LINE_COLOR,ColorBuffer); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetString(0,PLOT_LABEL,"var "+IntegerToString(VariantDraft)); //---- counted_bars=0; level_up[0]=LevelUp01; level_up[1]=LevelUp02; level_up[2]=LevelUp03; level_up[3]=LevelUp04; level_up[4]=LevelUp05; level_up[5]=LevelUp06; level_up[6]=LevelUp07; level_up[7]=LevelUp08; level_up[8]=LevelUp09; level_up[9]=LevelUp10; level_dn[0]=LevelDn01; level_dn[1]=LevelDn02; level_dn[2]=LevelDn03; level_dn[3]=LevelDn04; level_dn[4]=LevelDn05; level_dn[5]=LevelDn06; level_dn[6]=LevelDn07; level_dn[7]=LevelDn08; level_dn[8]=LevelDn09; level_dn[9]=LevelDn10; //---- ObjectsDeleteAll(0,"IndDrafter tline "+IntegerToString(IndId),0); ObjectsDeleteAll(0,"IndDrafter triangle "+IntegerToString(IndId),0); ObjectsDeleteAll(0,"IndDrafter fibo line "+IntegerToString(IndId),0); ObjectsDeleteAll(0,"IndDrafter fibo text "+IntegerToString(IndId),0); //---- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0,"IndDrafter tline "+IntegerToString(IndId),0); ObjectsDeleteAll(0,"IndDrafter triangle "+IntegerToString(IndId),0); ObjectsDeleteAll(0,"IndDrafter fibo line "+IntegerToString(IndId),0); ObjectsDeleteAll(0,"IndDrafter fibo text "+IntegerToString(IndId),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[]) { if(_Period>=TimeFrames) return(0); if(prev_calculated==0) counted_bars=0; //--- ArraySetAsSeries(time,true); ArraySetAsSeries(open,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); ArraySetAsSeries(ExtBuffer,true); //---- int Bars=Bars(_Symbol,TimeFrames); int limit=0; int pdprice=(UseDeltaPrice?PeriodDeltaPrice:0); MqlRates rates_array[]; if(counted_bars==0) { if(BarsUsed>0) limit=CopyRates(_Symbol,TimeFrames,time[0],BarsUsed+pdprice,rates_array); else if(BarsUsed==0) limit=CopyRates(_Symbol,TimeFrames,time[0],Bars(_Symbol,TimeFrames,time[rates_total-1],time[0])+pdprice,rates_array); //limit=CopyRates(_Symbol,TimeFrames,time[rates_total-1],time[0],rates_array); if(limit<=pdprice) return(0); ArraySetAsSeries(rates_array,true); for(int i=limit-pdprice-1;i>=0;i--) CreateFigure(i,time,open,high,low,close,rates_array); } else { limit=CopyRates(_Symbol,TimeFrames,0,Bars-counted_bars+pdprice+1,rates_array); if(limit<=pdprice) return(0); ArraySetAsSeries(rates_array,true); for(int i=limit-pdprice-1;i>=0;i--) CreateFigure(i,time,open,high,low,close,rates_array); } //---- counted_bars=Bars; return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[]) { datetime start_time=rates[i].time; datetime stop_time=(start_time+PeriodSeconds(TimeFrames)); //--- int start_index,stop_index,limit; datetime vertical_line_time; //--- start_index=ArrayBsearch(Time,start_time); if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index); start_time=Time[start_index]; if(i>0) { stop_index=ArrayBsearch(Time,stop_time); if(Time[stop_index]>stop_time) stop_index++; stop_time=Time[stop_index]; limit=start_index-stop_index+1; vertical_line_time=Time[start_index-(limit>>1)]; } else { if(TimeFrames==PERIOD_MN1) { MqlDateTime mql_time; TimeToStruct(start_time+2678400,mql_time); int days=32-mql_time.day; stop_time=start_time+days*86400; } else if(TimeFrames==PERIOD_W1) stop_time-=86400; vertical_line_time=start_time+(stop_time-start_time)/2; limit=(int)(stop_time-start_time)/PeriodSeconds(_Period); } //--- double center_line_point=rates[i].open; double delta_price_high=0.0; double delta_price_low=0.0; //---- if(UseDeltaPrice==true) { delta_price_high=center_line_point+HighPoint*_Point; delta_price_low=center_line_point-LowPoint*_Point; } //---- if(UseDeltaPrice==false) { delta_price_high=center_line_point+HighPoint*_Point; delta_price_low=center_line_point-LowPoint*_Point; } //---- if(UseVerticalLine){}; //---- if(VariantDraft==6) { if(UsePriceInfo==true) { if(limit/2==0) { //limit=2; Print("i=",i," start_time - ",TimeToString(start_time,TIME_DATE|TIME_MINUTES)," stop_time - ",TimeToString(stop_time,TIME_DATE|TIME_MINUTES)); Print("start_index=",start_index, " stop_index=",stop_index); Print("TimeFrames=",PeriodSeconds(TimeFrames)); //start_index=ArrayBsearch(Time,start_time); } double d1=(delta_price_high-center_line_point)/((double)limit/2.0); double d2=(center_line_point-delta_price_low)/((double)limit/2.0); //---- } //---- if(UseFiboGrid==true) { } } //---- } 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是正确的。如果用公式limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) 来计算极限。
那么结果将是=0。
现在我们需要看看停止和开始时间是如何形成的。
原来如此,这是我之前发布的代码
原来是这样的数据时间 stop_time=(start_time+PeriodSeconds(TimeFrames)); ?也就是说,它没有增加?
原来如此,这是我之前发布的代码
原来是关于这个数据时间 stop_time=(start_time+PeriodSeconds(TimeFrames)); ?也就是说,它没有增加?
尝试更换
现在这个错误一直在跳出来。
现在,错误不断弹出。
я
我肯定会取代它,这将减少访问时间,但现在你需要看到所有的代码,所有的计算结果。
现在,错误不断弹出。
它是在哪句话上骂人?
试试这个拐杖。
double Delta = 0.000001; // 通过实验找到。
如果分母小于Delta,警告("分母=",分母);否则计算。你需要《快讯》,它更快、更方便。当它工作时,寻找一个错误
现在这个错误一直在跳出来。
它是在哪句话上骂人?
除以0 也是有的。
如果你在MetaEditor中运行,它会在错误处停止编译(懒得重读帖子)。
编译运行没有错误。
这不是关于零的问题,而是关于它为什么会发生...也就是说,为什么索引和日期是一样的。
以下是在分钟图上回放的代码,最好不要改变设置