mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 96

 

그런데 여기에서 대화는 GetSystemTimePreciseAsFileTime에 대해 다뤘습니다. 이러한 함수는 MQL에서 매우 부족하거나 최소한 마이크로/밀리초로 반올림됩니다. 초 단위의 시간은 너무 가혹합니다. MT 자체에서는 밀리초가 모든 곳에서 사용됩니다. 이제 동일한 GetMicrosecondCount를 사용하여 정확한 시간을 합성하여 정원을 울타리로 만들어야 합니다.

 long TimeLocal_mcs() 
{ 
   static long time0_mcs= 0 ;
   if (time0_mcs== 0 ) { datetime t= TimeLocal ();   while ( TimeLocal ()==t);  time0_mcs= (t+ 1 )* 1 e6 - GetMicrosecondCount (); }
   datetime time= TimeLocal ();
   long time_mcs= time0_mcs + GetMicrosecondCount ();
   long delta= time_mcs - time*( long ) 1 e6; 
   if (delta< 0 ) { time0_mcs-=delta;  time_mcs-=delta; }  
   return time_mcs;
}
 
알렉세이 나보이코프 :

그런데 여기에서 대화는 GetSystemTimePreciseAsFileTime에 대해 다뤘습니다. 이러한 함수는 MQL에서 매우 부족하거나 최소한 마이크로/밀리초로 반올림됩니다. 초 단위의 시간은 너무 가혹합니다. MT 자체에서는 밀리초가 모든 곳에서 사용됩니다. 이제 동일한 GetMicrosecondCount를 사용하여 정확한 시간을 합성하여 정원을 울타리로 만들어야 합니다.

WinApi 기능을 통해 mcs에서 생성으로 콜백 생성

 
콘스탄틴 :

WinApi 기능을 통해 mcs에서 생성으로 콜백 생성

왜 콜백이 여기에 있습니까?

 
알렉세이 나보이코프 :

왜 콜백이 여기에 있습니까?

글쎄, 전체 스트림을 원하면 링 기능으로 충분하고 이벤트로 작업하려면 콜백

 
보이지 않는 메커니즘 이 있는지 작업을 확인하십시오. 당신은 심각하게 "때릴"수 있습니다 ...
 
오래된 주제 이지만 문제를 이해하기 위한 매우 간단한 코드

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

PositionOpen 호출 후 주문이 실행되었는지 확인하는 방법

fxsaber , 2018.08.09 20:35

ForexTimeFXTM-Demo01 (또는 FXOpen-MT5 )에서 이 스크립트를 사용해 보세요.

 #include <Trade/Trade.mqh>

void OnStart ()
{
   const int PrevTotal = PositionsTotal ();
  
  CTrade Trade;  
  
   while ( PositionsTotal () == PrevTotal)
    Trade.Buy( 1 );    
}

때때로 하나가 아닌 두 개의 새로운 직책이 열릴 것입니다.


우리는 스크립트로 하나의 새로운 위치를 열려고 노력하지만 때로는 두 가지를 얻습니다.

 
fxsaber :
오래된 주제 이지만 문제를 이해하기 위한 매우 간단한 코드

우리는 스크립트로 하나의 새로운 위치를 열려고 노력하지만 때로는 두 가지를 얻습니다.

따라서 이미 KB에 솔루션이 있었던 것 같습니다.

 //+------------------------------------------------------------------+
//| Возвращает "неопределённое" состояние торгового окружения        |
//+------------------------------------------------------------------+
bool IsUncertainStateEnv( const string symbol_name, const ulong magic_number)
  {
   if ( MQLInfoInteger ( MQL_TESTER )) return false ;
   int total= OrdersTotal ();
   for ( int i=total- 1 ; i> WRONG_VALUE ; i--)
     {
       if ( OrderGetTicket (i)== 0 ) continue ;
       if ( OrderGetInteger ( ORDER_TYPE )> ORDER_TYPE_SELL ) continue ;
       if ( OrderGetInteger ( ORDER_MAGIC )!=magic_number) continue ;
       if (! OrderGetInteger ( ORDER_POSITION_ID ) && OrderGetString ( ORDER_SYMBOL )==symbol_name)
         return true ;
     }
   return false ;
  }

//+------------------------------------------------------------------+
//| Заполняет массивы тикетов позиций                                |
//+------------------------------------------------------------------+
bool FillingListTickets( const uint number_of_attempts)
  {
//--- Проверка состояния окружения
   int n= 0 ,attempts= int (number_of_attempts< 1 ? 1 : number_of_attempts);
   while (IsUncertainStateEnv(symb,InpMagic) && n<attempts && ! IsStopped ())
     {
      n++;
       Sleep (sleep);
     }
   if (n>=attempts && IsUncertainStateEnv(symb,InpMagic))
     {
       Print ( __FUNCTION__ , ": Uncertain state of the environment. Please try again." );
       return false ;
     }
//---

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- Проверка нулевых цен
   if (! RefreshRates () || Point ()== 0 ) return ;
//--- Заполнение списков тикетов позиций
   int positions_total= PositionsTotal ();
   if (prev_total!=positions_total)
     {
       if (FillingListTickets(num_attempts))
         prev_total=positions_total;
       else return ;
     }

 
fxsaber :
보이지 않는 메커니즘 이 있는지 작업을 확인하십시오. 당신은 심각하게 "때릴"수 있습니다 ...

나는 링크를 따라갔지만 우리가 말하는 투명 메커니즘의 종류를 이해하지 못했습니다.

 
알렉세이 나보이코프 :

나는 링크를 따라갔지만 우리가 말하는 투명 메커니즘의 종류를 이해하지 못했습니다.

차트에서 숨겨진 모드의 표시기. 어드바이저를 언로드합니다. 휴대폰으로 얼핏 보고 이해한 내용입니다.

 
알렉세이 나보이코프 :

나는 링크를 따라갔지만 우리가 말하는 투명 메커니즘의 종류를 이해하지 못했습니다.

제거하지 마십시오.