하나의 표시기에 0으로 나누기 오류가 있습니다. - 페이지 5 1234567891011 새 코멘트 Aleksey Vyazmikin 2018.07.04 15: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 ); } //--вырезано } 이 datetime stop_time=(start_time+ PeriodSeconds (TimeFrames)); ? 저것들. 더하지 않습니까? [삭제] 2018.07.04 16:38 #42 Aleksey Vyazmikin : 그래서, 여기에 이전에 게시된 코드가 있습니다. 이 datetime stop_time=(start_time+ PeriodSeconds (TimeFrames)); ? 저것들. 더하지 않습니까? 교체 시도 /PeriodSeconds ( _Period )на /(_Period*60) и + PeriodSeconds (TimeFrames)); на +_Period*60); Aleksey Vyazmikin 2018.07.04 16:54 #43 ovak77 : 교체 시도 이제 오류가 계속 나타납니다. [삭제] 2018.07.04 16:59 #44 Aleksey Vyazmikin : 이제 오류가 계속 나타납니다. 나 /PeriodSeconds ( _Period )на /(_Period*60) 100파운드를 교체하고 통화 시간을 줄입니다. 그렇지 않으면 전체 코드, 모든 계산을 볼 필요가 있습니다. Sergey Savinkin 2018.07.04 17:09 #45 Aleksey Vyazmikin : 이제 오류가 계속 나타납니다. 그리고 어떤 라인에서 맹세합니까? Konstantin Erin 2018.07.04 17:11 #46 이 목발을 사용해보십시오: 이중 델타 = 0.000001; // 실험적으로 선택합니다. Denominator가 Delta Alert 보다 작은 경우("Denominator = ", Denominator); 그렇지 않으면 계산. 더 빠르고 더 편리하게 경고합니다. 작동할 때 - 침착하게 오류를 찾으십시오. [삭제] 2018.07.04 17:11 #47 Aleksey Vyazmikin : 이제 오류가 계속 나타납니다. 어떤 줄에서 오류가 발생합니까? MetaEditor에서 실행하면 오류 발생 시 컴파일이 중지됩니다(포스트를 다시 읽기에는 너무 게으름). Aleksey Vyazmikin 2018.07.04 17:20 #48 Sergey Savinkin : 그리고 어떤 라인에서 맹세합니까? 0으로 나누는 것은 동일합니다. Aleksey Vyazmikin 2018.07.04 17:20 #49 ovak77 : 어떤 줄에서 오류가 발생합니까? MetaEditor에서 실행하면 오류 발생 시 컴파일이 중지됩니다(포스트를 다시 읽기에는 너무 게으름). 컴파일은 오류 없이 진행됩니다. Aleksey Vyazmikin 2018.07.04 17:27 #50 그것은 0에 관한 것이 아니라 그것이 발생하는 이유에 관한 것입니다. 즉. 인덱스와 날짜가 같은 이유. 다음은 설정을 변경하지 않고 분 차트에서 재생하기 위한 코드입니다. //+------------------------------------------------------------------+ //| 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 =10 0 ; //количество отображаемых баров, 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으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
괜찮은. 제한이 공식을 사용하여 계산되는 경우 limit=( int )(stop_time-start_time)/ PeriodSeconds ( _Period );
그러면 결과는 = 0이 됩니다.
이제 중지 및 시작 시간이 어떻게 형성되는지 관찰해야 합니다.
그래서, 여기에 이전에 게시된 코드가 있습니다.
이 datetime stop_time=(start_time+ PeriodSeconds (TimeFrames)); ? 저것들. 더하지 않습니까?
그래서, 여기에 이전에 게시된 코드가 있습니다.
이 datetime stop_time=(start_time+ PeriodSeconds (TimeFrames)); ? 저것들. 더하지 않습니까?
교체 시도
이제 오류가 계속 나타납니다.
이제 오류가 계속 나타납니다.
나
100파운드를 교체하고 통화 시간을 줄입니다. 그렇지 않으면 전체 코드, 모든 계산을 볼 필요가 있습니다.
이제 오류가 계속 나타납니다.
그리고 어떤 라인에서 맹세합니까?
이 목발을 사용해보십시오:
이중 델타 = 0.000001; // 실험적으로 선택합니다.
Denominator가 Delta Alert 보다 작은 경우("Denominator = ", Denominator); 그렇지 않으면 계산. 더 빠르고 더 편리하게 경고합니다. 작동할 때 - 침착하게 오류를 찾으십시오.
이제 오류가 계속 나타납니다.
그리고 어떤 라인에서 맹세합니까?
0으로 나누는 것은 동일합니다.
어떤 줄에서 오류가 발생합니까? MetaEditor에서 실행하면 오류 발생 시 컴파일이 중지됩니다(포스트를 다시 읽기에는 너무 게으름).
컴파일은 오류 없이 진행됩니다.
그것은 0에 관한 것이 아니라 그것이 발생하는 이유에 관한 것입니다. 즉. 인덱스와 날짜가 같은 이유.
다음은 설정을 변경하지 않고 분 차트에서 재생하기 위한 코드입니다.