하나의 표시기에 0으로 나누기 오류가 있습니다. - 페이지 6

 
Aleksey Vyazmikin :

논리적으로 전혀 0이 아니어야 합니다. 왜 이런 일이 발생하는지 명확하지 않습니다!

귀하의 d1은 미니어처 숫자를 제공하므로 가격을 int로 변환하여 이러한 문제를 방지합니다. 예를 들어 int bid=int((tick_array[0].bid+_Point/10)/_Point);, 계산이 이중으로 이루어진 경우 5-아이콘에 0.00000999999가 제공되는 경우가 있습니다.
 
Aleksey Vyazmikin :

논리적으로 전혀 0이 아니어야 합니다. 왜 이런 일이 발생하는지 명확하지 않습니다!

Si-9.18의 디버거에서 시작되었습니다. 어떤 이유로 요금의 시간은 2016년입니다. i의 값은 2189이지만, 따라서 유동성이 없는 차트의 시작 부분 에서 계산을 시작합니다. 시작과 중지 사이의 초기 시간은 1시간입니다. 그러나 이 시간 동안 - 단 하나의 시간 가치. 시작 변수와 중지 변수로 모두 찾습니다. 결과적으로 시작 = 중지입니다. 당연하지. 그것들을 빼면 0이 됩니다. 더 이상 알아내지 못했습니다.

 
ovak77 :
귀하의 d1은 미니어처 숫자를 생성합니다. 저는 price를 int로 변환하여 이러한 문제를 방지합니다. 예를 들어 intbid=int((tick_array[0].bid+_Point/10)/_Point);, 계산이 이중으로 이루어진 경우 0이 발행되는 경우가 있습니다.

예, d1에 대해 논의하지 않겠습니다. 필요합니다. 그러면 필요합니다. 모든 것이 거기에서 올바르게 간주됩니다. 문제는 start_time과 stop_time, start_index와 stop_index에 대해 동일한 값을 얻는 이유입니다.

 
Aleksey Vyazmikin :

예, d1에 대해 논의하지 않겠습니다. 필요합니다. 그러면 필요합니다. 모든 것이 거기에서 올바르게 간주됩니다. 문제는 start_time과 stop_time, start_index와 stop_index에 대해 동일한 값을 얻는 이유입니다.

그것은 당신에게 달려 있습니다. 예를 들어 0.0000099999를 2로 나누어보십시오.
 

다음 정지 후 터미널이 켜지지 않습니다 .... 다시 설치하지 않고 되살리는 방법은 무엇입니까?

그것은 메모리에 매달려있는 것으로 판명되었습니다 - 강제로 프로세스를 종료 - 시작되었습니다.

 
Aleksey Vyazmikin :

어떻게 시간이 평등해질 수 있습니까? 반년 동안 모든 것이 올바르게 작동했습니다 ...

 void CreateFigure( int i, const datetime & Time [], const double & Open [], const double & High [], const double & Low [], const double & Close [], MqlRates &rates[])
  {                                                               //i = 2189 
   datetime start_time=rates[i].time;                             //start_time=rates[i].time = D'2016.10.06 12:00:00'
   datetime stop_time=(start_time+ PeriodSeconds (TimeFrames));     //stop_time = D'2016.10.06 13:00:00'
//---                                                            //Time[38572] = D'2016.10.05 19:23:00'
   int start_index,stop_index,limit;                             //Time[38571] = D'2016.10.06 12:35:00'
   datetime vertical_line_time;                                   //Time[38570] = D'2016.10.06 19:05:00'
//---
   start_index= ArrayBsearch ( Time ,start_time);                     //start_index = 38571
   if ( Time [start_index]<start_time) start_index=(start_index> 0 ?start_index- 1 :start_index);
   start_time= Time [start_index];                                 //start_time = D'2016.10.06 12:35:00'
   if (i> 0 )
     {
      stop_index= ArrayBsearch ( Time ,stop_time);                   //stop_index = 38571
       if ( Time [stop_index]>stop_time) stop_index++;
      stop_time= Time [stop_index];                                 //stop_time  = D'2016.10.06 12:35:00'
      limit=start_index-stop_index+ 1 ;
      vertical_line_time= Time [start_index-(limit>> 1 )];
먼저 limit=start_index-stop_index+ 1, 즉 limit==1을 작성한 다음 2로 나누면 limit=(int)(stop_time-start_time)/PeriodSeconds(_Period)입니다. 유닛이 추가되지 않았습니다. 0은 마침표로 나뉩니다.
 
Sergey Savinkin :

Si-9.18의 디버거에서 시작되었습니다. 어떤 이유로 요금의 시간은 2016년입니다. i의 값은 2189이지만, 따라서 유동성이 없는 차트의 시작 부분 에서 계산을 시작합니다. 시작과 중지 사이의 초기 시간은 1시간입니다. 그러나 이 시간 동안 - 단 하나의 시간 가치. 시작 변수와 중지 변수로 모두 찾습니다. 결과적으로 시작 = 중지입니다. 당연하지. 그것들을 빼면 0이 됩니다. 더 이상 알아내지 못했습니다.

입력 매개변수에서 BarsUsed=100을 설정합니다.

 
Aleksey Vyazmikin :

입력 매개변수에서 BarsUsed=100을 설정합니다.

예, 오류가 없습니다. 그러나 액체가 적은 기기나 비유동적인 시간을 사용하는 경우 - 예를 들어 저녁 세션에서 한 시간 이내에 쉽게 1개의 낮은 막대가 있을 수 있습니다. 여기에 제한 = 0이 있고 확보되었습니다! 그리고 따옴표가 2이면 limit/2는 반올림할 때 여전히 0을 제공합니다.

 
Sergey Savinkin :

예, 오류가 없습니다. 그러나 액체가 적은 기기나 비유동적인 시간을 사용하는 경우 - 예를 들어 저녁 세션에서 한 시간 이내에 쉽게 1개의 낮은 막대가 있을 수 있습니다. 여기에 제한 = 0이 있고 확보되었습니다! 그리고 따옴표가 2이면 limit/2는 반올림할 때 여전히 0을 제공합니다.

감사합니다. 하지만 글로벌 문제는 다른데.... 문제는 안정적이지 않다는 것입니다.

 
ovak77 :
그것은 당신에게 달려 있습니다. 예를 들어 0.0000099999를 2로 나누어보십시오.

인쇄된 d1 - 내 작업의 경우

 2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 35.71428571428572
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 32.78688524590164
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 32.78688524590164
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 32.78688524590164
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 43.47826086956522

일반적으로 그렇지 않습니다. 감사합니다.