MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 989

 

안녕하세요. 어디가 잘못되었는지 보여주세요.

 void OnStart ()
  {
datetime current_time= TimeCurrent ();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time- 60 )- MathMod ((current_time- 60 ), 60 );
datetime t1=our_time;
datetime t2=our_time+ 60 ;
PrintFormat ( "current_time=%s" , TimeToString (current_time, TIME_DATE | TIME_MINUTES | TIME_SECONDS ));
PrintFormat ( "our_time=%s" , TimeToString (our_time, TIME_DATE | TIME_MINUTES | TIME_SECONDS ));
string stock= "MSFT" ;
MqlTick tick_array[]; // массив для приема тиков
int received= CopyTicksRange (stock, tick_array, COPY_TICKS_TRADE , t1* 1000 , t2* 1000 );
Print (stock, " Всего тиков " ,received);
Print (tick_array[ 0 ].time, ": Last = " ,tick_array[ 0 ].last, "  Volume = " ,tick_array[ 0 ].volume );
ulong total=tick_array[ 0 ].volume; ulong buy=tick_array[ 0 ].volume; ulong sell= 0 ; bool flag= 'b' ;
int ticks= ArraySize (tick_array); double pprice=tick_array[ 0 ].last; int i= 1 ;
while (i<ticks)
      { 
        total=total+tick_array[i].volume; //{считаем общий объем}
         if (pprice<tick_array[i].last)  flag= 'b' ; //{если пред.тик меньше зн.'b'}
         if (pprice<=tick_array[i].last)
             if (flag= 'b' )
                buy=buy+tick_array[i].volume; //{считаем,что сделка по BID} 
         if (pprice>tick_array[i].last)  flag= 's' ; //{если пред.тик больше зн.'s'} 
         if (pprice>=tick_array[i].last)
             if (flag= 's' )
               sell=sell+tick_array[i].volume; //{считаем,что сделка по ASK}
        pprice=tick_array[i].last; //{ставим счетчик на последн. тик}
        i=i+ 1 ; 
      }               
Print (total, " " ,buy, " " ,sell);       
  }
 
werter :

안녕하세요. 어디가 잘못되었는지 보여주세요.

코드 어딘가에

 
Vladimir Pastushak :

코드 어딘가에

재미있다.

BuySellVolume입니다. 총 거래량은 매수 및 매도 합계와 같지 않고 약간만 더 있습니다.

 

MLQ5 표시기에서 "inf'는 무엇을 의미합니까?

이런 경우는 처음이지만 설명서에서 아무 것도 찾지 못했습니다.

 
Alexandr Sokolov :

MLQ5 표시기에서 "inf'는 무엇을 의미합니까?

이런 경우는 처음이지만 설명서에서 아무 것도 찾지 못했습니다.

심하게 검색됨: INF 를 검색하면 여러 결과가 반환됩니다.

예를 들어 MathLog살펴보십시오 .

반환 값

성공한 경우 값의 자연 로그입니다. val이 음수이면 함수는 NaN(정의되지 않은 값)을 반환합니다. 값이 0이면 함수 는 INF(무한대) 를 반환합니다.


이 결과는 다음을 의미합니다. 코드에 값 계산 알고리즘에 오류가 포함되어 있습니다(예: 변수 초기화를 잊었습니다. 기회를 원하지만 나눗셈에서는 생각하지 않습니다...).

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov :

심하게 검색됨: INF 를 검색하면 여러 결과가 반환됩니다.

예를 들어 MathLog살펴보십시오 .

반환 값

성공한 경우 값의 자연 로그입니다. val이 음수이면 함수는 NaN(정의되지 않은 값)을 반환합니다. 값이 0이면 함수 는 INF(무한대) 를 반환합니다.


이 결과는 다음을 의미합니다. 코드에 값 계산 알고리즘에 오류가 포함되어 있습니다(예: 변수 초기화를 잊어버렸습니다.

그게 내가 검색 >>> 문서에서 본 전부입니다(하지만 각각에 대한 설명을 읽지 않았고 항상 제목으로 찾습니다. 습관입니다)


변수 초기화에 관해서는(내가 당신을 잘못 이해했거나 그것에 대해 처음 들었습니다) 예를 들면 다음과 같습니다.

 double a = 0 , b;

... 충분하지 않습니까? 나는 보통 변수를 선언하고

 
Alexandr Sokolov :

그것이 내가 검색 >>> 문서에서 본 전부입니다 (하지만 각각에 대한 설명을 읽지 않았고 항상 제목으로 찾습니다 - 습관 입니다)

***

나쁜 습관 .


알렉산드르 소콜로프 :


... 충분하지 않습니까? 나는 보통 변수를 선언하고

그리고 여기에 "검은 백조"가 있습니다. 변수 b 는 초기화되지 않았으며 어떤 쓰레기도 포함할 수 있습니다.

 
Alexandr Sokolov :

MLQ5 표시기에서 "inf'는 무엇을 의미합니까?

이런 경우는 처음이지만 설명서에서 아무 것도 찾지 못했습니다.

뭐가 문제인지 알아냈어요!

EMPTY_VALUE로 버퍼를 초기화한 경우

 ArrayInitialize (Bufer, EMPTY_VALUE );

... 그런 다음 추가 계산에서 불충분한 수의 시계열을 복사하거나 계산한 다음 버퍼에서 EMPTY_VALUE로 값을 곱합니다.


여기에서 방금 경고했으며 EMPTY_VALUE를 곱한 경우에만 정보를 얻습니다.


 
Vladimir Karputov :

감사해요

 
Alexandr Sokolov :

뭐가 문제인지 알아냈어요!

EMPTY_VALUE로 버퍼를 초기화한 경우

... 그런 다음 추가 계산에서 불충분한 수의 시계열을 복사하거나 계산한 다음 버퍼에서 EMPTY_VALUE로 값을 곱합니다.


여기에서 방금 경고했으며 EMPTY_VALUE를 곱한 경우에만 정보를 얻습니다.


이유를 찾은 것 같습니다. 이는 산술 연산 중에 EMPTY_VALUE 값으로 버퍼를 초기화할 때 먼저 "EMPTY_VALUE가 현재 이 인덱스의 버퍼에 있는 것이 우연이 아닌지"를 확인해야 함을 의미합니다.