Yerel saat ile taze kene saati arasında bir buçuk dakikalık fark. Ne yapalım. - sayfa 6

 
prostotrader :

Koda dikkatlice bakın!

TimeTradeServer() sadece günü ve HER ŞEYİ belirlemek için alınır (bu kontrol "her ihtimale karşı" yapılır)!

TimeTradeServer() tamamen atlanabilir!

Baktı. Katılıyorum, biraz yanlış yazdım, ancak bence işlev hala sorunu çözmüyor. Dürüst olmak gerekirse, neden gerekli olduğu tam olarak belli değil. Sana benziyor:

1. Bir onay işaretinden milisaniye sayısını alın;

2. Keneyi bileşenlere ayırın;

3. Ardından keneyi tekrar toplayın!? Burada bunun neden gerekli olduğu bana açık değil mi? Her zaman, başlangıçta işleve iletilen aynı değeri alırsınız. Yoksa bir şey mi kaçırıyorum?

4. Ardından, tıklanma süresini bir öncekiyle karşılaştırırsınız;


Ayrıca sunucu saatini de bilmemiz gerekiyor. Sunucu zamanı olmadan, bir karakterin akışının diğer karakterlerin akışlarına göre geç olup olmadığını belirleyemeyiz.

Onlar. Kodunuz sunucu saatine bağlı değildir ve sunucu saatini iş parçacığı süresiyle karşılaştırmaz, yapmanız gereken budur. Sipariş defterinin biriktirme listesini bir sembolün işaretlerinden değil (başlangıçta bu tartışmaya katıldığımda düşündüğüm gibi) değil, sunucudan terminale birçok sembol üzerinden veri iletimindeki gecikmeyi anlamak.

 
Alexey Kozitsyn :

Görünüşe göre kontrolün TimeGMTOffset aracılığıyla yapılması gerekiyor. Daha sonra bir örnek yayınlayacağım.

Sadece saçma, deneyimli bir insansın (yeni başlayan değil).

Genel olarak, gelen kenelerin zamanı dışında zamana ihtiyaç yoktur!

Son tıklamanın zamanını (başlatma sırasında) hatırladık ve ardından tüm karşılaştırmalar bu zamanla yapıldı!

 
Alexey Kozitsyn :

Baktı. Katılıyorum, biraz yanlış yazdım, ancak bence işlev hala sorunu çözmüyor. Dürüst olmak gerekirse, neden gerekli olduğu tam olarak belli değil. Sana benziyor:

3. Ardından keneyi tekrar toplayın!? Burada bunun neden gerekli olduğu bana açık değil mi? Her zaman başlangıçta işleve iletilen aynı değeri alırsınız. Yoksa bir şey mi kaçırıyorum?


Bu kod, kenenin alaka düzeyini ve kenenin içinde olduğu zamanı kontrol ettiğim Uzman Danışmanımdan "çıkarılır".

ticaret seansları

Katma

Kesin (milisaniye) süreyi (tarih olmadan) belirlemek için bir onay işareti gereklidir, çünkü EA oturumlarımın ayarlarında

sadece zamanı gösteririm

 input string           TimeStMon    = "10:00:00" ;               //Время начала утренней сессии
input string           TimeStDay    = "14:05:00" ;               //Время начала дневной сессии
input string           TimeStEvn    = "19:05:00" ;               //Время начала вечерней сессии
 
prostotrader :

Bu çok saçma, sen deneyimli bir insansın (yeni başlayan değil).

Genel olarak, gelen kenelerin zamanı dışında zamana ihtiyaç yoktur!

Son tıklamanın zamanını (başlatma sırasında) hatırladık ve ardından tüm karşılaştırmalar bu zamanla yapıldı!

Daha sonra örneğimi yazacağım, soruyu daha ayrıntılı olarak inceleyeceğim. Belki yanıldığımı (pivomoe gibi) ve senin haklı olduğunu dışlamıyorum.

 
prostotrader :

Bu kod, kenenin alaka düzeyini ve kenenin içinde bulunduğu zamanı kontrol ettiğim Uzman Danışmanımdan "çıkarılır".

ticaret seansları

Katma

EA oturumlarımın ayarlarında olduğundan, tam zamanı (tarih olmadan) belirlemek için "çözülme" işareti gereklidir.

sadece zamanı gösteririm

Aynen, pervazım gözden kaçmış.

 
Alexey Kozitsyn :

Aynen, pervazım gözden kaçmış.

Evet, sadece TS başlangıçta ne almak istediğine karar vermedi (ya da belki doğru anlamadılar)

İşte, çalıştırın ve kontrol edin:

 //+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK,
  OLD_TICK
};
//
MqlTick stored_ticks[];
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   int result = CopyTicks ( Symbol (), stored_ticks, COPY_TICKS_ALL , 0 , 1 );
   if (result > 0 )
  {
    is_book = MarketBookAdd ( Symbol ());
     if (is_book == false ) return ( INIT_FAILED );
  } else return ( INIT_FAILED );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (is_book == true ) MarketBookRelease ( Symbol ()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent ( const string &symbol)
{
   if (symbol == Symbol ())
  {
     MqlTick a_ticks[];
     int result = CopyTicks (symbol, a_ticks, COPY_TICKS_ALL , 0 , 1 );
     if (result > 0 )
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[ 0 ]);
       switch (tick_state)
      {
       case UNKNOWN_TICK: Print ( EnumToString (UNKNOWN_TICK), " - Тик не определен." ); //Тик не определен
       break ;
       case NEW_TICK: Print ( EnumToString (NEW_TICK), " - Новый тик" );     //Торговое время, можно отсылать ордера;
       break ;
       case CUR_TICK: Print ( EnumToString (CUR_TICK), " - Текущий тик" );     //По усмотрению разработчика;
       break ;
       case OLD_TICK: Print ( EnumToString (OLD_TICK), " - Старый тик" );     //По усмотрению разработчика;
       break ;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime( MqlTick &a_tick)
{
   if (a_tick.time_msc > stored_ticks[ 0 ].time_msc)
  {
    stored_ticks[ 0 ] = a_tick;
     return (NEW_TICK);
  }
   else
  {
     if (stored_ticks[ 0 ].time_msc == a_tick.time_msc)
    {
       if ((stored_ticks[ 0 ].ask == a_tick.ask) && (stored_ticks[ 0 ].bid == a_tick.bid) &&
         (stored_ticks[ 0 ].flags == a_tick.flags) && (stored_ticks[ 0 ].last == a_tick.last) &&
         (stored_ticks[ 0 ].time == a_tick.time) && (stored_ticks[ 0 ].volume == a_tick.volume) &&
         (stored_ticks[ 0 ].volume_real == a_tick.volume_real))
        {
           return (CUR_TICK);
        }
         else return (OLD_TICK);
        
    }
     else return (OLD_TICK);
  }
   return (UNKNOWN_TICK);
} 
      
 
prostotrader :

Evet, sadece TC başlangıçta ne almak istediğine karar vermedi

İşte, çalıştırın ve kontrol edin:

Mikhail, yeni bir kenenin gelişi / eski bir kene kontrolü hakkında soru yok. Kodunuz için - çok. Soru farklı. Aşağıdaki durumu kontrol etmeniz gerekir:

 14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Получен НОВЫЙ тик по символу                     GAZR- 3.19 time_msc= 2019.03 . 20 14 : 53 : 11.638
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   ХОТЯ до этого был получeн тик                     RTS- 3.19 time_msc  2019.03 . 20 14 : 53 : 13.695
 
Alexey Kozitsyn :

Mikhail, yeni bir kenenin gelişi / eski bir kene kontrolü hakkında soru yok. Kodunuz için - çok. Soru farklı. Aşağıdaki durumu kontrol etmeniz gerekir:

Kodu düzelttim (yukarıya bakın) çıktı (OLD_TICK).

Ve yeni paketin "eski" bir onay işaretine sahip olabileceğini bilerek, geliştirici bunu kendi takdirine bağlı olarak kullanmalıdır.

 
prostotrader :

Kodu düzelttim (yukarıya bakın) çıktı (OLD_TICK).

Fark etmez... FARKLI karakterlerin akışları.

 
Alexey Kozitsyn :

Fark etmez... FARKLI karakterlerin akışları.

O zaman NE GEREKLİ OLDUĞUNU hiç anlamıyorum????

Şu anki saat SUNUCU ise, yayınlanana kadar unutmanız gerekir!
veya TimeTradeServer() nedir kullanın

Neden: