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

 
Mikhail Mishanin :

"시간 값"을 도착한(새) 시간과 마지막으로 계산된 시간의 차이로 바꾸면? 맞다?

저것들. 우리는 새로운 시간이 왔다는 것을 알게 될 것입니다:

- 새로운 날부터

- 새로운 주부터

-또는 지정된 것보다 큰 차이

어떻게 적용해야할지 모르겠네요!


22-00시에 화면 롤오버 및 스프레드 확장, 대부분의 다른 거래에서 00-00시, 정확히 1시간 후에 스프레드 확장.

입력 매개변수에서 프로그램을 시간으로 제한하지 않고 롤오버가 발생할 때 프로그래밍 방식으로 찾는 방법은 무엇입니까?

---

추신: 이 코드는 잘 작동하지만 롤오버 500틱 전에 실행된다는 조건으로

 bool CheckSpr( int _sp)
{
   static int ts= 0 , res= 0 ;
   static long tc= 0 ;
   // Comment( res,"=",tc );
   if (tc> 500 && res* 3 <_sp) return ( false ); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if (tc> LONG_MAX - 1 ) {
      tc= 0 ;
      ts= 0 ;
   }
   // Comment( res,"=",tc );
   if (tc< 500 ) return ( false );
   return (res>_sp? true : false );
}
 
Vitaly Muzichenko :

어떻게 적용해야할지 모르겠네요!


22-00시에 화면 롤오버 및 스프레드 확장, 대부분의 다른 거래에서 00-00시, 정확히 1시간 후에 스프레드 확장.

입력 매개변수에서 프로그램을 시간으로 제한하지 않고 롤오버가 발생할 때 프로그래밍 방식으로 찾는 방법은 무엇입니까?

---

추신: 이 코드는 잘 작동하지만 롤오버 500틱 전에 실행된다는 조건으로

거래에 의한 스프레드가 확대되는 이유 는 거래 세션 이 열리기 때문입니다. 많은 주문을 처리하기 위해 "떨어지는 것", 따라서 모든 것이 어떻게(어떤 가격으로) "안착"될 것인지에 대한 불확실성. 거래가 보장되고 스프레드가 확대됩니다. 거래 세션의 끝/시작에서 뒤로 물러나면 됩니다.

 
Mikhail Mishanin :

거래에 의한 스프레드가 확대되는 이유 는 거래 세션 이 열리기 때문입니다. 많은 주문을 처리하기 위해 "떨어지는 것", 따라서 모든 것이 어떻게(어떤 가격에) "안착"될 것인지에 대한 불확실성. 거래가 보장되고 스프레드가 확대됩니다. 거래 세션의 끝/시작에서 뒤로 물러나면 됩니다.

예, 하지만 도구 사양에는 없습니다.

이것은 롤오버가 22-00에 있는 곳입니다.

그리고 이것은 00-00시 롤오버입니다.


 
Vitaly Muzichenko :

예, 하지만 도구 사양에는 없습니다.

 TimeCurrent ()- TimeGMT ()
 

최종 버전이 모든 것을 고려하기를 바랍니다.

 MqlDateTime dt;
bool CheckSpr( int _sp)
{
   TimeGMT (dt);
   static int ts= 0 , res= 0 ;
   static long tc= 0 ;
   if (dt.hour== 22 ) return ( false );
   tc++;
   ts += _sp;
   res =ts/tc;
   if (tc> LONG_MAX - 1 ) {
      tc= 0 ;
      ts= 0 ;
   }
   // Comment( res,"=",tc );
   if (tc< 500 ) return ( false );
   return (res>_sp? true : false );
}
 
Vitaly Muzichenko :

최종 버전이 모든 것을 고려하기를 바랍니다.

두 개의 변수

날짜/시간 daLAST=0;

datetimedaOLD=0;


"거래"할 수 있는 각 기능, 즉 틱 시간을 얻을 수 있습니다

daOLD = daLAST;

daLAST= "틱 시간"

if ( daLAST - daOLD > "시간 간격") - 새 세션이 시작되고 일종의 시간 간격이 있었습니다.

{

// 적절하다고 생각되는 대로 저장하고 사용하고 버립니다.

}

 
Mikhail Mishanin :

두 개의 변수

날짜/시간 daLAST=0;

datetimedaOLD=0;


"거래"할 수 있는 각 기능, 즉틱 시간을 얻을 수 있습니다

daOLD = daLAST;

daLAST= "틱 시간"

if ( daLAST - daOLD > "시간 간격") - 새 세션이 시작되고 일종의 시간 간격이 있었습니다.

{

// 적절하다고 생각되는 대로 저장하고 사용하고 버립니다.

}

롤오버 시간이 21-59에서 22-01 사이인 동안 아시아 세션에서 최대 몇 분 동안 틱이 없을 수 있는 쌍 및 거래가 있습니다. 즉, 아시아에서 틱이 도착하는 것보다 빠릅니다.

 
Vitaly Muzichenko :

롤오버 시간이 21-59에서 22-01 사이인 동안 아시아 세션에서 최대 몇 분 동안 틱이 없을 수 있는 쌍 및 거래가 있습니다. 즉, 아시아에서 틱이 도착하는 것보다 빠릅니다.

원래대로 돌아가자.

과제는 무엇입니까? 엄청나게 넓어진 스프레드로 거래 를 건너뛰세요 - 맞습니까?

그러면 시간이 완전히 무시될 수 있으므로 스프레드 자체를 분석합니다.

질문 - 입찰 > "임계값"인 경우 - 일종의 추적/누적을 활성화합니다.

if A sk - Bid < "threshold" - 끄거나 누적됩니다.

그런 "소"는 나에게 유용한 것 같습니다. 그런 것을 수집하고 통계를 수집합니다 ...


그리고 몇 분 동안 새로운 틱이 없으면 거래에서 첫 번째 (다소) 건너 뛰는 것이 더 합리적입니다.

특정 쌍 및 거래에 대한 통계를 수집해야 합니다. 모든 "곡률"은 "-"와 "+" 모두에서 작동할 수 있습니다.

 
Mikhail Mishanin :

원래대로 돌아가자.

과제는 무엇입니까? 엄청나게 넓어진 스프레드로 거래 를 건너뛰세요 - 맞습니까?

그러면 시간이 완전히 무시될 수 있으므로 스프레드 자체를 분석합니다.

질문 - 입찰 > "임계값"인 경우 - 일종의 추적/누적을 활성화합니다.

if A sk - Bid < "threshold" - 끄거나 누적됩니다.

그런 "소"는 나에게 유용한 것 같습니다. 그런 것을 수집하고 통계를 수집합니다 ...


그리고 몇 분 동안 새로운 틱이 없으면 거래에서 첫 번째 (다소) 건너 뛰는 것이 더 합리적 입니다.

특정 쌍 및 거래에 대한 통계를 수집해야 합니다. 모든 "곡률"은 "-"와 "+" 모두에서 작동할 수 있습니다.

설명된 모든 것은 노란색으로 강조 표시된 것을 제외하고는 이전에 게시된 코드에 의해 수행됩니다. 나는 그것이 불필요하고 완전히 정확하지 않다고 생각합니다. 여하튼 저는 누군가 다른 시간에 롤오버를 하는 것을 본 적이 없습니다. 모두가 항상 같은 것을 가지고 있습니다. 22-00 GMT에 제가 틀릴 수도 있습니다.

그러나 나는 종종 다른 롤오버 기간을 만났습니다. 일부는 5분이고 다른 일부는 1분 이상입니다.

---

인증 코드, 변경할 수 있습니까?

 //+------------------------------------------------------------------+
void OnTick ( void )
{
   int sp = SymbolInfoInteger ( Symbol (), SYMBOL_SPREAD );
   static int ts= 0 ;

   if (CheckSpr(sp)) {
       // Здесь код отправки
       Comment ( sp, "=" ,ts++, "=" ,res );
   } else Comment ( "false: " ,sp, "=" ,ts++, "=" ,res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res= 0 ;
bool CheckSpr( int _sp)
{
   TimeGMT (dt);
   static int ts= 0 ;
   static long tc= 0 ;
   if (dt.hour== 22 ) return ( false );
   tc++;
   ts += _sp;
   res =ts/tc;
   if (tc> LONG_MAX - 1 ) {
      tc= 0 ;
      ts= 0 ;
   }
   // Comment( res,"=",tc );
   if (tc< 500 ) return ( false );
   return (res>_sp? true : false );
}
 
Vitaly Muzichenko :

내가 틀릴 수 있지만 22-00 GMT에 모두가 같은 것을 가지고 있습니다.

당신은 착각하지 않습니다.