MT5 ve iş başında hız - sayfa 5

 
fxsaber :

Savaş danışmanlarında, şüpheli yerlerde her yerde _B(FuncName(...), AlertTime) işlevleri giydim.

Çok pahalı olduğunu unutmuşum.

         Alert : Time[SyncEA.mqh 309 : :: TerminalInfoInteger ( TERMINAL_MEMORY_USED ) ] = 21 ms.
 
fxsaber :

Tehdit Her tıklamada, en fazla, yalnızca HistorySelect nedeniyle toplam onlarca milisaniye harcıyorum.

Bir savaş danışmanının profilini çıkarmak.


 
Toli kayaklar, çatı keçeleri veya başka bir şey gitmez. Sipariş başarılı bir şekilde verilirse bileti iade edilir mi? HistoryOrderSelect (bilet) işlevinin geri dönüşü sizin için bir şey ifade ediyor mu? Robotu başlatmanın dışında neden pahalı HS kullanıyorsunuz?
 
Vladimir Simakov :
Robotu başlatmanın dışında neden pahalı HS kullanıyorsunuz?

Konunun başında yayınlandı.

 
fxsaber :

Bir OrderSend yapıyorsun. OrderSend'in bitiminden HEMEN sonra, belirli bir pozisyon bir alımla kapatılmadıysa, o zaman başka bir OrderSend yaparsınız. Programlanması gereken tüm mantık budur. Zaman uyumsuz kullanılmaz.

Şimdi robotumuz için olan durum. Bir OrderSend gönderdiniz ve yürütülürken limit limiti tetiklendi ve bundan sonra yukarıda bahsettiğimiz pozisyonumuzu alma tetiklendi.

Burada gerçekten hiçbir şey anlamadım - mümkünse lütfen adımları daha ayrıntılı olarak açıklayın. Anladığım tek şey, yalnızca OnTradeTransaction olay işleyicisinin kullanıldığı, bu da olay işleme öncelik kontrolünün gerekli olmadığı ve önerilen

 bool HandleNextEvent(ENUM_EVENT_TYPE);

dejenere olur

 bool HandleNextEvent();
Talep neydi? Bize HandleNextEvent()'i verin
 OnTradeTransaction (...)
{
         /*вычисления1*/
        HandleNextEvent();
         /*вычисления2*/
}
Şimdi şemadaki ikincil olay işleyicisinin aşağıdaki gibi uygulanması önerilmektedir:
On2TradeTransaction(...)
{
         if флаг установлен goto label
         /*вычисления1*/
                запомнить результаты вычислений
                установить флаг
                 return ;
label:          извлечь результаты вычислений
         /*вычисления2*/
}
 
A100 :

Burada gerçekten hiçbir şey anlamadım - mümkünse lütfen adımları daha ayrıntılı olarak açıklayın.

 void OnMain()
{
   OrderSend (OP_BULIMIT); // Во время выполнения сработал и другой отложенник и тейк позиции (после отложенника).
  
   // Следующий OrderSend должен быть незамедлительно вызван.
   if (наблюдаемая позиция закрылась по тейку) // Проблема определить это без доступа к очереди.
     OrderSend (OP_BUYLIMIT)  
   else
     OrderSend (OP_SELLLIMIT)    
}
 
fxsaber :

OrderSend'i aradıktan sonra neden geri dönemiyorsunuz ?

 void OnMain()
{
         if (first)
        {
                 OrderSend (OP_BULIMIT); // Во время выполнения сработал и другой отложенник и тейк позиции (после отложенника).
                 return ;
        }
//...
}

Kuyruğa (veya zamanlayıcıya göre) zaten yeni bir olay eklendiğinde OnMain'e bir sonraki döndüğünüzde

 

A100 :

OrderSend'i aradıktan sonra neden geri dönemiyorsunuz ?

Bu konuda herhangi bir kısıtlama yoktur.

Kuyruğa (veya zamanlayıcıya göre) zaten yeni bir olay eklendiğinde OnMain'e bir sonraki döndüğünüzde

Bir sonraki olay, pozisyonun alınması değil, gecikmenin uygulanmasıdır.

 
fxsaber :

Bir sonraki olay, pozisyonun alınması değil, gecikmenin uygulanmasıdır.

Mevcut kuyruğun tamamını veya belirli sayıda olay okunana kadar tekrarlanan bir dönüş (dönüş) yapılması önerilir. Ticaret etkinlikleri sona erdiğinde, zamanlayıcıda bir geri dönüş olacak ve tüm etkinliklere aynı anda erişebileceksiniz.

 
void OnMain()
{
         if (first)
        {
                 OrderSend (OP_BULIMIT); // Во время выполнения сработал и другой отложенник и тейк позиции (после отложенника).
                 return ; 
        }
         if ( OnTrade событие последнее )
                 return ; //может еще есть
         if ( OnTimer событие последнее )
        { // все торговые события в лукошке
                 if (наблюдаемая позиция закрылась по тейку) // Проблема определить это без доступа к очереди.
                         OrderSend (OP_BUYLIMIT)  
                 else
                         OrderSend (OP_SELLLIMIT)
        }
}
OnTimer olmadan daha zarif bir çözüm de var...düşün