Hatalar, hatalar, sorular - sayfa 2744

 
Aliaksandr Hryshyn :

Hata:


Mesaj için teşekkürler.
Düzeltildi.

 
Ilyas :

Optimizasyon sorusu. Test Cihazında, her onayda , daha fazla çalışma için bir onay almanız gerekir. ben böyle yapıyorum

 void OnTick ()
{
   static MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick))
     // ...
}


Bu seçeneğin daha yavaş olacağı açıktır:

 void OnTick ()
{
   MqlTick Tick;
  
   if ( SymbolInfoTick ( Symbol (), Tick))
     // ...
}


Ancak SymbolInfoTick de yavaşlar çünkü string parametresi referansla iletilmez.


Dizenin referans olarak iletildiği yerlerde standart SymbolInfo* aşırı yüklemelerine sahip olmak mümkün müdür?


olması daha iyi tabi

 const MqlTick _Tick; // Текущий _Symbol-тик.


Optimize Edici'de bu işlevler on milyarlarca kez çağrılır.

 
Ilyas :
GetNextEvent işlevi eklemeyi önerir misiniz?

Pek değil, bu işlevi olası bir imza olan HandleNextEvent olarak adlandırmayı tercih ederim:

 bool HandleNextEvent (ENUM_EVENT_TYPE);


Çağrıldığında, GetNextEvent'e benzer şekilde, kuyrukta belirtilen ENUM_EVENT_TYPE'nin varlığını kontrol eder,
ve bu olay mevcutsa, kontrolü otomatik olarak ilgili işleyicinin kullanıcı koduna aktarır (OnChartEvent, OnTrade, OnTradeTransaction, ... (ek için fxsaber sayesinde)).
Kuyrukta bir olay varsa true, değilse false döndürür.


Olası kullanım durumu:

 //....
for ( int i = 0 ; i < 10 ^ 6 ; ++i){
   // .... Data Calculations

   if ((i % 10 ^ 3) == 0 ){
       while (HandleNextEvent(EVENT_TYPE_ALL));
   }
}
//....
 
fxsaber :

Optimizasyon sorusu. Test Cihazında, her onayda , daha fazla çalışma için bir onay almanız gerekir. ben böyle yapıyorum
Bu seçeneğin daha yavaş olacağı açıktır.

Bu ifadeyi pratikte test ettiniz mi? Tam tersi olabilir.

MqlTick, başlatılmamış ilkel veri türlerinden oluşur.
Buna göre, tahsis için hiç zaman harcanmaz, çünkü bu aynı "alt esp" işlemidir, sadece farklı bir boyuttadır.
Sonuç olarak, darboğaz, bellekten bir değer okuma işlemi için işlemci önbelleğinin yanına bile gelebilir.

Genel olarak, test etmeniz gerekir))

 
Sergey Dzyublik :

bu olay meydana gelirse, kontrolü otomatik olarak ilgili işleyicinin kullanıcı koduna aktarır

Olası kullanım durumu:

Çok güzel ve kullanışlı bir çözüm!

 
Sergey Dzyublik :

Bu ifadeyi pratikte test ettiniz mi? Tam tersi olabilir.

Burada teorileştirme. Kontrol etmedim. Ancak referans dizesinden geçmek mantıklı görünüyor.

 
Sergey Dzyublik :

Olası kullanım durumu:

bir tür oyun sunduğunuz bir şey.

imzanıza ve açıklamanıza bakılırsa, terminal işleve göre bir sonraki olay işlemeyi çağırmalı ve ardından handlenextevent çağrı noktasında kontrolü programa geri vermelidir ?

ve eğer işlem sırasında tekrar bir çağrı handlenextevent olacaksa?

ve parametrelerde filtre kapsamına girmeyen olaylara ne olur? atlandı mı? Siparişi değiştir?

komut dosyalarının hiç bir olay sırası yok, danışmanlar ve göstergeler varsa neden koltuk değneklerine ekleyelim?

 
TheXpert :

1) bir tür oyun sunduğunuz bir şey.
2) imzanıza ve açıklamanıza bakılırsa, terminal bir sonraki olayın işlenmesini işleve göre çağırmalı ve ardından handlenextevent çağrı noktasındaki kontrolü programa geri vermelidir ?
3) Ya işlem sırasında tekrar handlenextevent çağrısı yapılırsa?
4) Parametrelerde filtre kapsamına girmeyen olaylarda ne olur? atlandı? Siparişi değiştir?


1) Önermek benim işim ve oyun olsun ya da olmasın - karar vermek sizin değil, geliştiriciler için biraz daha iyi biliyorlar ...
2) Bu doğru. Belirli bir olayı işlemekle ilgileniyorsam ve tümü sistemde mevcut değilse, diğer olayların işlenmesini her zamanki gibi bırakarak yalnızca bu tür olayı işleme yeteneği sağlamak güzel olurdu.
3) İşlem sırasında tekrar HandleNextEvent'e bir çağrı yapılacaksa - çağrı ve işlem. Olabilecek tek şey bir yığın taşmasıdır, ancak bu geliştiricilerin değil, kullanıcının ve kodunun sorunudur.
4) Filtrenin altına girmeyen olaylar aynı sırada kalır ve her zamanki gibi kullanıcı kontrolü sisteme geri verdiğinde çağrılır.


 
TheXpert :

komut dosyalarının hiç bir olay sırası yok, danışmanlar ve göstergeler varsa neden koltuk değneklerine ekleyelim?

İşte pozisyonlarını/siparişlerini eşzamansız olarak açan ve kapatan bir komut dosyası örneği.

 // Максимально быстро все закрывает. Возврат, когда действие подтверждено.
bool CloseAll()
{
   uint RequestID[];
  
   for ( int i = ArrayResize (RequestID, OrdersTotal ()) - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS ))
       // Отправили асинхронный приказ
      RequestID[i] = ( OrderType () <= OP_SELL ) ? OrderCloseAsync( OrderTicket (), OrderLots (), OrderClosePrice (), 100 ) : OrderDeleteAsync( OrderTicket ());
  
   return (Transactions.Waiting(RequestID)); // Дождались ответа от сервера на все асинхронные приказы
}
TradeTransactions
TradeTransactions
  • www.mql5.com
Асинхронные торговые приказы обладают огромным преимуществом - высокая скорость при массовой отправке. Однако, распространению таких приказов мешает некоторое неудобство - данные о результате приказа возможно увидеть только в OnTradeTransaction. Такое обстоятельство заставляет обывателя строить событийную модель своей ТС, если хочется...
 
Sergey Dzyublik :

1) Önermek benim işim ve oyun olsun ya da olmasın - karar vermek sizin değil, geliştiriciler için biraz daha iyi biliyorlar ...

Uygulaması daha kolay bir şey teklif ederseniz, daha büyük bir uygulama şansı vardır. Sürümümü kaldırdım çünkü pratikte hiçbir şey vermiyor.