Pazar kapalı - sayfa 5

 

Sevgili geliştiriciler!

LÜTFEN BU MESAJI DİKKATLİCE OKUYUN.

Zaman farkı olmasının sebebini buldum sanırım!!!

Bugün:

terminal

23:49:58.148    Trades  'xxxxx': buy limit 2.00 UCHF-3.18 at 0.9310
23:49:58.154    Trades  'xxxxx': accepted buy limit 2.00 UCHF-3.18 at 0.9310
23:49:58.156    Trades  'xxxxx': buy limit 2.00 UCHF-3.18 at 0.9310 placed for execution in 8.040 ms

Uzman

 2017.09 . 21 23 : 49 : 58.182 trader (UCHF- 3.18 ,H1)     StopTrading: Время сервера = 23 : 50 : 00 ; Статус ордера = BUY_ORDER; Билет = 77833993   Buy ордер отклонён.
2017.09 . 21 23 : 49 : 58.182 trader (UCHF- 3.18 ,H1)     Alert : Эксперт остановлен. Инструмент UCHF- 3.18
2017.09 . 21 23 : 49 : 58.182 trader (UCHF- 3.18 ,H1)     OnTradeTransaction : Buy ордер отклонён брокером(биржей). Билет = 77833993 Причина: 0 0

Zaman Kontrol Mekanizması

Bir enstrüman için Piyasa Derinliğini değiştirirken ( sadece Piyasa Derinliği ile çalışıyorum )

 //+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent ( const string &symbol)
{
   if (symbol == Symbol ()))
  {
     if (CheckMarketTime(symbol)
    {
       //Выставление ордеров и т.д.
    }
  }     
}

CheckMarketTime işlevi çağrılır

 //+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime( const string a_symbol)
{
   if ( SymbolInfoTick (a_symbol, cur_tick))
  {
    sv_time.year = 0 ;
     TimeToStruct (cur_tick.time, sv_time);
     if (sv_time.year > 0 )
    {
       if ((sv_time.day_of_week == int (FirstDay)) ||
         (sv_time.day_of_week == int (SecondDay))) return ( false );
      tts_time.year = 0 ;
       TimeTradeServer (tts_time);
       if (tts_time.year > 0 )
      {   
         if ((tts_time.day_of_week == sv_time.day_of_week) &&
           (tts_time.hour == sv_time.hour) &&
           (tts_time.min == sv_time.min))
        {
           ulong cur_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
           if (((cur_time >= time_st_mon) && (cur_time < 50370 )) ||
             ((cur_time >= time_st_day) && (cur_time < 67470 )) ||
             ((cur_time >= time_st_evn) && (cur_time < 85770 )))
          {
             return ( true );
          }
        }
      }
    }
  }
   return ( false );
}

Enstrüman için son onay işaretine ilişkin verileri almış olmak

 if ( SymbolInfoTick (a_symbol, cur_tick))

Zaman dilimlerini kontrol ediyorum, AMA ( ÇOK ÖNEMLİ )!!!!

MqlTick'te (ÇOK ÇOĞU) , eğer son kez girilmezse

SADECE aynı fiyatın hacmi Pazar Derinliği'nde değişti .

Bu varsayımı yapıyorum çünkü bayraklar içermiyor

T ICK_FLAG_ASK_VOLUME ve T ICK_FLAG_BID_VOLUME bayrakları

OnBookEvent işlevi çalıştı (böyle bir fiyatın hacmi değişti) ve

MqlTick bu değişikliğin zamanını kaydetmedi.

Lütfen bu bayrakları zaman güncellemesine göre MqlTick'e ekleyin.

Katma

Nedense SD'ye yazamıyorum.

 
prostotrader :

MqlTick'te (ÇOK ÇOĞU) , eğer son kez girilmezse

SADECE aynı fiyatın hacmi Pazar Derinliği'nde değişti .

Kesinlikle doğru . Ve bu doğru davranış. MqlTick, onay geçmişinin doldurulduğu aynı kaynaktan veri alır. Kene geçmişinde yinelenen komşular olmamalıdır, çünkü MT5'teki kene geçmişi, en iyi bantlarda bile ses kaydetmez.

Camın hangi zamana tekabül ettiğini bilmenin doğrudan bir yolu olmadığı sorusu uzun zamandır gündeme geldi. Farklı bir şekilde öğrenin.

 
fxsaber :

Kesinlikle doğru . Ve bu doğru davranış. MqlTick, onay geçmişinin doldurulduğu aynı kaynaktan veri alır. Kene geçmişinde yinelenen komşular olmamalıdır, çünkü MT5'teki kene geçmişi, en iyi bantlarda bile ses kaydetmez.

Camın hangi zamana tekabül ettiğini bilmenin doğrudan bir yolu olmadığı sorusu uzun zamandır gündeme geldi. Farklı bir şekilde öğrenin.


Lütfen söyle bana nasıl?

Katma

Takanda bir şeylerin değiştiğine dair bir bildirim alırsam, o zaman

neden kolaylık sağlamak için ("küçük kan dökülmesi"), bir alan eklemeyin

tarihsaat book_change; ?

Veya daha da kolayı, MqlBookInfo yapısına bir alan ekleyin

tarihsaat book_change;

Üstelik bu sefer borsa tarafından yayınlanıyor.

 
prostotrader :

Lütfen söyle bana nasıl?

 // Время последнего тика символа
long GetSymbolTime( const string Symb )
{
   MqlTick Tick;
  
   return ( SymbolInfoTick (Symb, Tick) ? Tick.time_msc : 0 );
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
   long Res = 0 ;
  
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const long TmpTime = GetSymbolTime( SymbolName (i, true ));
    
     if (TmpTime > Res)
      Res = TmpTime;
  }
  
   return (Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
   static ulong StartTime = GetMicrosecondCount ();
   static long PrevTime = 0 ;
  
   const long TmpTime = GetMarketWatchTime();
  
   if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount ();
  }
  
   return (PrevTime + ( long )(( GetMicrosecondCount () - StartTime) / 1000 ));
}

void OnInit ()
{
   MarketBookAdd ( _Symbol );
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol );
}

string TimeToString ( const long Value )
{
   return (( string )( datetime )(Value / 1000 ) + "." + ( string ) IntegerToString (Value % 1000 , 3 , '0' ));
}

void OnBookEvent ( const string & )
{
   Comment ( TimeToString (GetCurrenTime()));
}
 
fxsaber :

Beni güldürme... :)

 
prostotrader :

Takanda bir şeylerin değiştiğine dair bir bildirim alırsam, o zaman

neden kolaylık sağlamak için ("küçük kan dökülmesi"), bir alan eklemeyin

tarihsaat book_change; ?

Veya daha da kolayı, MqlBookInfo yapısına bir alan ekleyin

tarihsaat book_change;

Üstelik bu sefer borsa tarafından yayınlanıyor.

Sadece tarih saat değil, uzun - milisaniye. İyi

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Pazar kapalı

fxsaber , 2017.09.22 09:17

Camın karşılık geldiği zamanı bulmanın doğrudan bir yolu olmadığı sorusu uzun zamandır gündeme geldi.

benzer tekliflerle.

 

Belki OnBookEvent başlatıldıktan sonra

Belirli bir sembol için CopyTicks istensin mi?

Deneyeceğim...

 
prostotrader :

Belki OnBookEvent başlatıldıktan sonra

Belirli bir sembol için CopyTicks istensin mi?

Elbette yardımcı olmayacak. Şimdi tek seçenek, cam led'in zamanını bulmak.

 
fxsaber :

Elbette yardımcı olmayacak. Şimdi tek seçenek, cam led'in zamanını bulmak.


İlginç çıkıyor :)

 #property copyright "Copyright 2017 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//
MqlTick a_ticks[], b_ticks;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (! MarketBookAdd ( Symbol ()))
   {
     Print ( "Book not added!" );
     return ( INIT_FAILED );
   }
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
     MarketBookRelease ( Symbol ());   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
     if (symbol == Symbol ())
    {
       int res = CopyTicks (symbol, a_ticks, COPY_TICKS_ALL , 0 , 1 );
       if (res > 0 )
      {
         if ( SymbolInfoTick (symbol, b_ticks))
        {
           Print ( "CopyTicks time = " , TimeToString (a_ticks[ 0 ].time, TIME_SECONDS ), "; SymbolInfoTick = " , TimeToString (b_ticks.time, TIME_SECONDS ));
        }
      }
    }
  }

Sonuç

 2017.09 . 22 11 : 18 : 36.029 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 27 ; SymbolInfoTick = 11 : 18 : 35
2017.09 . 22 11 : 18 : 36.933 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 27 ; SymbolInfoTick = 11 : 18 : 35
2017.09 . 22 11 : 18 : 37.577 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 27 ; SymbolInfoTick = 11 : 18 : 37
2017.09 . 22 11 : 18 : 38.257 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 27 ; SymbolInfoTick = 11 : 18 : 37
2017.09 . 22 11 : 18 : 38.317 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 38 ; SymbolInfoTick = 11 : 18 : 38
2017.09 . 22 11 : 18 : 38.511 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 38 ; SymbolInfoTick = 11 : 18 : 38
2017.09 . 22 11 : 18 : 38.871 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 38 ; SymbolInfoTick = 11 : 18 : 38
2017.09 . 22 11 : 18 : 39.071 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 38 ; SymbolInfoTick = 11 : 18 : 38
2017.09 . 22 11 : 18 : 39.545 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 38 ; SymbolInfoTick = 11 : 18 : 38
2017.09 . 22 11 : 18 : 39.655 Test_time (RTS- 12.17 ,M1)         CopyTicks time = 11 : 18 : 38 ; SymbolInfoTick = 11 : 18 : 39

???????

Ne diyeceğimi bile bilmiyorum....

 
prostotrader :

Ne diyeceğimi bile bilmiyorum....

 void OnInit ()
{
   MarketBookAdd ( _Symbol );
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol );
}

string GetTickFlag( uint tickflag )
{
   string flag = "" ;

#define TICKFLAG_MACRO(A) flag += (( bool )(tickflag & TICK_FLAG_ ##A)) ? " TICK_FLAG_" + #A : "" ;
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

   if (flag == "" )
    flag = " FLAG_UNKNOWN (" + ( string )tickflag + ")" ;
     
   return (flag);
}

#define TOSTRING(A) " " + #A + " = " + ( string )Tick.A

string TickToString( const MqlTick &Tick )
{
   return (TOSTRING(time) + "." + ( string ) IntegerToString (Tick.time_msc % 1000 , 3 , '0' ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnBookEvent ( const string &Symb )
{
   if (Symb == _Symbol )
  {
     MqlTick Tick1, Tick2[];
    
     if ( SymbolInfoTick ( _Symbol , Tick1) && ( CopyTicks ( _Symbol , Tick2, COPY_TICKS_ALL , 0 , 1 ) > 0 ))
       Print ( "\nMqlTick: " + TickToString(Tick1) + "\nCopyTick: " + TickToString(Tick2[ 0 ]));
  }
}

zamanın sadece bu gibi durumlarda değişeceğini göreceksin

Test3 (RTS- 12.17 ,M1)     MqlTick :  time = 2017.09 . 22 11 : 21 : 50.668 bid = 112000.0 ask = 112010.0 last = 112000.0 volume = 5 FLAG_UNKNOWN ( 0 )
Test3 (RTS- 12.17 ,M1)    CopyTick:  time = 2017.09 . 22 11 : 21 : 50.572 bid = 112000.0 ask = 112010.0 last = 112000.0 volume = 5 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL


MqlTick'in olduğu gibi bir onay işareti döndürmediği birkaç kez tartışıldı. İki onay akışı olduğunu - teklif ve anlaşmalar. Ve CopyTicks'te bazen geriye dönük olarak birleştirilirler, çünkü Konular senkronize değil. Ve bu MqlTick ve CopyTicks süreleri eşleşmeyebilir.

Neden: