FORTS. Yürütme soruları - sayfa 7

 

Tünaydın!

"Krallık" da bir şeyler yanlış

1

Çalışmalarda ilerleme var mı?

 
Mikalas :

Tünaydın!

"Krallık" da bir şeyler yanlış

Çalışmalarda ilerleme var mı?

Evet, büyük ilerleme.

Bu hafta yeni bir yapı yayınlayacağız ve sunucular güncellendiğinde bir hızlanma göreceksiniz. İş hala devam ediyor.

 
Renat :

Evet, büyük ilerleme.

Bu hafta yeni bir yapı yayınlayacağız ve sunucular güncellendiğinde bir hızlanma göreceksiniz. İş hala devam ediyor.

Aferin! Dört gözle beklemek!
 

İyi günler Renat!

ABD'deki herhangi bir komisyoncu, MT5'i aşağıdakiler için kullanıyor mu?

vadeli işlem?

 
Henüz değil.
 
Renat :
Henüz değil.
Ve planlar uzak mı yoksa öngörülebilir gelecekte mi?
 
Mikalas :
Ve planlar uzak mı yoksa öngörülebilir gelecekte mi?
Haber gelir gelmez yayınlayacağız.
 

İyi günler Renat!

OnTradeTransaction işleyicisini iyileştirmeyi planlıyor musunuz?

 
Ne demek istiyorsun?
 
Renat :
Ne demek istiyorsun?

Tünaydın!

Şekilde, bekleyen bir sipariş içeren eylem günlüğü:

 void OnTradeTransaction ( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
   Print ( "Type = " , EnumToString (trans.type), "; State = " , EnumToString ( trans.order_state ), "; Retcode = " , result.retcode );
}

Kurulum --> değiştirme --> kaldırma

Neden çoğaltma (kırmızı daire içine alınmış)?

Ve dönüş kodları yok.

Örneğin ben siparişi silebilirim, ancak komisyoncu yapabilir veya siparişin süresi dolmuş olabilir.

Nasıl öğrenilir?

Şimdi bekleyen bir sipariş vermeyi düşünün:

OrderSendAsync komutunu göndererek req_id = result.request_id istek numarasını alıyoruz.

 if ( OrderSendAsync ( request, result ) )
  {
     if ( result.retcode == TRADE_RETCODE_PLACED ) 
    {
      req_id = result.request_id;
    }
  }

OnTradeTransaction'da, siparişin verilsin (biletini alırız) olsun veya olmasın hemen bir yanıt (result.retcode) alırız.

 void OnTradeTransaction ( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
 // Print( "Type = ", EnumToString(trans.type), "; State = ", EnumToString( trans.order_state ), "; Retcode = ", result.retcode );

   switch ( trans.type )
  {
     case TRADE_TRANSACTION_REQUEST :       if ( trans.order_state == ORDER_STATE_STARTED )
                                         {
                                           if ( ( req_id != 0 ) && ( result.request_id == req_id ) )
                                           {
                                             if ( result.retcode == TRADE_RETCODE_PLACED )
                                             {
                                               ticket = result.order;
                                             }
                                             req_id = 0 ;   
                                           }
                                         }
                                         break ; 
}    

Neden 3 mesaja daha ihtiyacımız var,

EI       0        20 : 45 : 15.932     Forts_trader (SBRF- 3.15 ,H1)     Type = TRADE_TRANSACTION_ORDER_ADD ; State = ORDER_STATE_STARTED ; Retcode = 0
GD       0        20 : 45 : 15.932     Forts_trader (SBRF- 3.15 ,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE ; State = ORDER_STATE_REQUEST_ADD ; Retcode = 0
KI       0        20 : 45 : 15.961     Forts_trader (SBRF- 3.15 ,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE ; State = ORDER_STATE_PLACED ; Retcode = 0

zaten anladıysak?

Sonraki, modifikasyon.

neden mesaj,

KI       0        20 : 45 : 36.879     Forts_trader (SBRF- 3.15 ,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE ; State = ORDER_STATE_REQUEST_MODIFY ; Retcode = 0

bu işlemin sonucunu hala bilmiyorsak ( Retcode = 0 )?

Bir siparişi değiştirmek için bir komut gönderdikten sonra, sipariş verme durumunda olduğu gibi, değiştirildiğini zaten biliyoruz (bileti tekrar aldık ve result.retcode == TRADE_RETCODE_PLACED )

Mesaja Retcode = MODIFY_DONE eklemek çok daha bilgilendirici olacaktır.

RN       0        20 : 45 : 36.895     Forts_trader (SBRF- 3.15 ,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE ; State = ORDER_STATE_PLACED ; Retcode = MODIFY_DONE
Ну и с удалением ордера та же история, получив TRADE_TRANSACTION_REQUEST и result.retcode == TRADE_RETCODE_PLACED мы уже знаем, что ордер в состоянии удаления.
Да и вообще, зачем знать переходные состояния ордера, если с ним, в этот момент, ничего нельзя сделать? 
Т.е для отслеживания команд и состояния ордера
достаточно Type = TRADE_TRANSACTION_REQUEST и   result.retcode ==  TRADE_RETCODE_PLACED для понимания, что команда исполнена и происходит действие
 А для результата действия достаточно  Type = TRADE_TRANSACTION_ORDER_UPDATE ; State = ORDER_STATE_PLACED ; Retcode = PLACE_DONE | MODIFY_DONE | CANCELED_DONE | OTHER_ERRORS
Neden: