Hatalar, hatalar, sorular - sayfa 2220

 
1861 - Alpari'de demo açılamadı. Bir komisyoncu seçmek işe yaramaz.
 
fxsaber :

Benim düşünceme göre, bu, ticaret sunucusunda bir emir olduğunda bir hatadır ve Terminalde senkronize bir OrderSend'den sonra bu konuda bir nefes yoktur.

Sipariş sistemdeyken, Terminal'de değilken, bu tür hayali sipariş durumlarının ne kadar sürdüğünü kontrol etmeye karar verdim.

 // Советник отслеживает длительность ситуаций, когда ордер отсутствует среди текущих и исторических

#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

bool OrderIsExist( const ulong & OrderTicket )
{
   return ( OrderTicket ? OrderSelect ( OrderTicket ) || HistoryOrderSelect ( OrderTicket ) : true );
}

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &, const MqlTradeResult & )
{
   static bool PrevIsExist = true ;
   static ulong StartTime = 0 ;
   static ulong MaxInterval = 0 ;
  
   const ulong NowTime = GetMicrosecondCount ();
   const bool IsExist = OrderIsExist(Trans.order);
    
   if (!IsExist)
  {
     Print (TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING( OrderSelect (Trans.order)) + TOSTRING( HistoryOrderSelect (Trans.order)));       
  
     if (PrevIsExist) 
      StartTime = NowTime;
  }
   else if (!PrevIsExist)
  {
     const ulong Interval = NowTime - StartTime;
    
     Print (TOSTRING(Interval) + TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING( OrderSelect (Trans.order)) + TOSTRING( HistoryOrderSelect (Trans.order)));       
    
     if (Interval > MaxInterval)
    {
      MaxInterval = Interval;
      
       Comment (TOSTRING(MaxInterval) + TOSTRING(Trans.order)); // mcs.
    }
  }
          
  PrevIsExist = IsExist;
}


Sonuç

 2018.06 . 21 00 : 10 : 31.047 Trans.type = TRADE_TRANSACTION_ORDER_DELETE ( 2 )
2018.06 . 21 00 : 10 : 31.047 Trans.order = 2210967406
2018.06 . 21 00 : 10 : 31.047 OrderSelect (Trans.order) = false
2018.06 . 21 00 : 10 : 31.047 HistoryOrderSelect (Trans.order) = false
2018.06 . 21 00 : 10 : 31.047 
2018.06 . 21 00 : 10 : 31.080 Interval = 32643
2018.06 . 21 00 : 10 : 31.080 Trans.type = TRADE_TRANSACTION_HISTORY_ADD ( 3 )
2018.06 . 21 00 : 10 : 31.080 Trans.order = 2210967406
2018.06 . 21 00 : 10 : 31.080 OrderSelect (Trans.order) = false
2018.06 . 21 00 : 10 : 31.080 HistoryOrderSelect (Trans.order) = true


32 milisaniyelik bir emir var ama Terminalde yok! Bu aralıkta ticaret mantığı yürütülürse bunun ne gibi sonuçlara yol açabileceğini hayal edin...


İlginç bir şekilde, hayali siparişler çoğunlukla yalnızca TRADE_TRANSACTION_ORDER_DELETE ve TRADE_TRANSACTION_DEAL_ADD (çok daha az sıklıkla) işlem türleri için mevcuttur.


Platformun çok kötü nüansı.


ZY Ne yazık ki ilk beşte alım satım işlemlerinin şüpheli performansı.

Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
  • 2016.09.13
  • MetaQuotes Software Corp.
  • www.mql5.com
Многие трейдеры зачастую не задумываются над тем, как быстро доходит их заявка до биржи, как долго она там исполняется и когда торговый терминал трейдера узнает о результате. В результате они не знают, что легко могут улучшить качество исполнения своих сделок за счет более быстрой реакции и скорости проведения транзакций. 12 сентября 2016 года...
 
fxsaber :

Sipariş sistemdeyken, Terminal'de değilken, bu tür hayali sipariş durumlarının ne kadar sürdüğünü kontrol etmeye karar verdim.


Sonuç


32 milisaniyelik bir emir var ama Terminalde yok! Bu aralıkta ticaret mantığı yürütülürse bunun ne gibi sonuçları olabileceğini hayal edin...

Evet, bu bir karışıklık. Görüldüğü gibi bu işlem sonuçları farklı paketlerde gönderilmektedir. Ve bir arada olmalılar.

 
Alexey Navoykov :

Evet, bu bir karışıklık. Görüldüğü gibi bu işlem sonuçları farklı paketlerde gönderilmektedir. Ve bir arada olmalılar.

OrderSend'den hemen sonra siparişin hayali olabileceği, ancak OnTradeTransaction ile paralel bir Uzman Danışmanın bu durumu her zaman yakalayamayacağı ortaya çıktı. Onlar. OnTradeTransaction'ın kendisi bazen yavaşlar.


Genel olarak, MT5'te farklı yerlerde ortadan kaldırılması zor olan mimari gecikmeler vardır. Bunlar, kene gelişlerinin ve şimdi ticari işlemlerin gecikmeleridir. Yürütme hızına güveniyorsanız, platformun neler yapabileceğini açıkça anlamanız gerekir. Örneğin, makul bir gecikmeyle gelen keneler, ardından işlemler .. ve sonuç olarak, MT5 veya başka bir platformdaki başka biri, siz borsaya yakın oturuyor olsanız bile sollayabilir.

 
Ticaret işlemleri , geri kalanını geride bırakan öncelikli paketlere girer. Bu, gecikmeyi ciddi şekilde azaltır.
 
Renat Fatkhullin :
Ticaret işlemleri, geri kalanını geride bırakan öncelikli paketlere girer. Bu, gecikmeyi ciddi şekilde azaltır.

Nasıl olur da OrderSend'den sonraki komut dosyası bir hayali sipariş durumunu algılarken, paralel bir Expert Advisor'daki OnTradeTransaction bunu yapmaz (her zaman değil ama olur)?

 
Renat Fatkhullin :
Ticaret işlemleri, geri kalanını geride bırakan öncelikli paketlere girer. Bu, gecikmeyi ciddi şekilde azaltır.

Sorun, TRADE_TRANSACTION_ORDER_DELETE ve TRADE_TRANSACTION_HISTORY_ADD işlemlerinin farklı gruplar halinde gelmesi ve bu nedenle, öncelik ne olursa olsun, yine de ağ gecikmesi olacaktır. Ve bu işlemler, herhangi bir ara durum olmaksızın, birbiri ardına senkronize olarak yürütülmelidir. Onlar. aslında tek bir atomik işlemdir. Sonuçta, geçmiş listesine silinmiş bir sipariş vermenin borsa ile hiçbir ilgisi yok.

Onlar. iki seçenek var: ya bu işlemlerin ikisi tek bir pakette bir araya geliyor ya da ikincisi gelene kadar ilk işlem terminalde gerçekleştirilmiyor.

 
Alexey Navoykov :

Onlar. iki seçenek var: ya bu işlemlerin ikisi tek bir pakette bir araya geliyor ya da ikincisi gelene kadar ilk işlem terminalde gerçekleştirilmiyor.

TRADE_TRANSACTION_DEAL_ADD'nin TRADE_TRANSACTION_ORDER_DELETE işleminden ÖNCE ulaştığı durumlar vardır. Aynı zamanda, TRADE_TRANSACTION_ORDER_DELETE'den önce bile sipariş hala hayali.

 

Uzak aracılar optimizasyonu durdurdu

 2018.06 . 22 14 : 05 : 24.901 SVA_03  pass 19 tested with error "task rejected by tester agent" in 0 : 00 : 00.000
2018.06 . 22 14 : 05 : 27.387 SVA_03  pass 19 tested with error "task rejected by tester agent" in 0 : 00 : 00.000

Yeni derleyici nedeniyle tahmin ediyorum, çalışması için nasıl güncellenebilirler?

Ek olarak, böyle bir hata nedeniyle, optimize edicideki geçişlerin yalnızca bir kısmı 28 üzerinden 13'ü geçti.
 

Alglib paket koduna bakıyorum. Kodun okunabilirliğini zorlaştıran birçok yapı var:

         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=xy[i][i_];
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v= 0.0 ;
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            v+=tmp[i_]*tmp[i_];

Bu daha kolay değil mi?

v= 0.0 ;
for (i_= 0 ;i_<=nvars- 1 ;i_++){
   tmp=xy[i][i_]-ct[xyc[i]][i_];
   v+=tmp*tmp;
}

Bana öyle geliyor ki yürütme hızı daha da yüksek olacak.

Kod neden bu kadar karmaşık? Veya herhangi bir ayar yapmadan başka bir dilden mi aktarıldı? Ama yine de orijinalinde neden böyle bir komplikasyon olduğunu merak ediyorum?