OrderSend ile MT5'te nasıl düzgün çalışılır - sayfa 2

 
fxsaber :
Bu terminolojik bir anlaşmazlıktır. Kötü durum yukarıda ayrıntılı olarak açıklanmıştır. Standart kütüphaneler bunu hesaba katmaz bile.

Numara.

Ama ısrar etmeye devam edin. Daha fazla açıklamayacağım.

 
Renat Fatkhullin :

Numara.

Ama ısrar etmeye devam edin. Daha fazla açıklamayacağım.

İnsanlar forumda yazıyor. Ve bir kez değil. Tepki aynen bu şekilde.

 
fxsaber :

İnsanlar forumda yazıyor. Ve bir kez değil. Tepki aynen bu şekilde.

İnsanlar kendileri için düşünmek istemiyorlar, ancak başkalarının bizim için yapmasını istiyorlar… Maalesef bu böyle.
 
prostotrader :

Bu olayları aşmanıza yardım etmemi ister misiniz (MT5 robotlarıyla gerçek bir hesapta ticaret yapma konusundaki kişisel deneyimimden)?

Katma

Tamamen ücretsiz :)

kumbaranıza ekleyin

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

OrderSend() gönderdikten sonra sunucu yanıtı bekleniyor

Denis Sartakov , 2016.10.08 15:43

fonksiyon senkronizedir, sadece geçmiş bu fonksiyonun tamamlanmasıyla senkronize olarak güncellenmez,

Bunu böyle yapıyorum, OnTrade() ve diğer sorunlarla uğraşmaktan daha kolay olduğunu düşünüyorum:

 bool ClosePosition()
{
   if (! PositionSelect ( _Symbol ))
   {
       return ( false );
   }

   bool    b_Result;
   
   b_Result = m_trade.PositionClose( _Symbol ,mi_Deviation);
   
   if (!b_Result)
   {
       Print ( "The PositionClose() method has failed. Return code=" ,m_trade.ResultRetcode(),
             ". Code description: " ,m_trade.ResultRetcodeDescription());
       return ( false );
   }
   
   if (b_Result)
   {
       if (m_trade.ResultRetcode() == TRADE_RETCODE_DONE )
      {
         while ( PositionSelect ( _Symbol ))
         {
         }
         
         Print ( "The PositionClose() has been successfully executed. Return code=" ,m_trade.ResultRetcode(),
               " (" ,m_trade.ResultRetcodeDescription(), ")" );
         return ( true );
      }
       if (m_trade.ResultRetcode() != TRADE_RETCODE_DONE )
      {
         Print ( "The PositionClose() failed. Return code=" ,m_trade.ResultRetcode(),
               " (" ,m_trade.ResultRetcodeDescription(), ")" );
         return ( false );
      }
   }
   return ( false );
}      
//+------------------------------------------------------------------+

 
prostotrader :
İnsanlar kendileri için düşünmek istemiyorlar, ancak başkalarının bizim için yapmasını istiyorlar… Maalesef bu böyle.

İnsanlar sadece düşünmekle kalmaz, aynı zamanda kararlarını paylaşırlar. Geliştiriciler ne yazık ki bu konuda sessizler.

Bu konuyla ilgili Belgelerde tek bir örnek yok. Ve bu ana işlevle birlikte.

 
fxsaber :

İnsanlar sadece düşünmekle kalmaz, aynı zamanda kararlarını paylaşırlar. Geliştiriciler ne yazık ki bu konuda sessizler.

Bu konuyla ilgili Belgelerde tek bir örnek yok. Ve bu ana işlevle birlikte.

Yukarıda verdiğiniz örnek, üzgünüm - tamamen saçmalık.

Başlamanız gereken yer burası değil!

 
prostotrader :

Yukarıda verdiğiniz örnek, üzgünüm - tamamen saçmalık.

Burası nereden başlayacağınız değil!

Benim versiyonum

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2016.10.09 09:39

OrderSend gönderilirse, bunun yapıldığını UNUTMAYIN (burada olası bir güvenlik açığı vardır). Ayrıca, ilgili mesaj OnTrade'e ulaşana kadar mevcut geçmişe (işlem ortamı) dikkat etmeyin. Gelir gelmez HATIRLANAN UNUTULMALIDIR.

DEPOLANMIŞ veri olmadığında, MT4'te olduğu gibi geçmişe güvenilebilir.


 
//+------------------------------------------------------------------+
//|                                                    OrderSend.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//
bool is_busy;
ulong order_ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   is_busy= false ; 
   order_ticket= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (!is_busy && (order_ticket== 0 )) //Только при выполнении данного условия мы продолжаем работать(кроме отложенного ордера)
   {
     MqlTradeRequest request={ 0 };
     MqlTradeResult   result={ 0 };
     
     if ( PositionSelect ( Symbol ()))
     {
       if ( OrderSend (request, result)
       {
         if (result.retcode== TRADE_RETCODE_PLACED ) //для биржи TRADE_RETCODE_PLACED
         {
           if (result.order> 0 )
           {
             is_busy= true ;
             order_ticket=result.order;
             Print ( "Order plased, ticket = " ,result.order);
           }
           else
           {
             Print ( "Internal error!" );
           }  
         }
         else
         {
           //смотрим причину result.retcode
         }
       }
       else
       {
         Print ( "Order NOT send!" );
       }
     }
     else
     {
     }
   }   
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction & trans,
                         const MqlTradeRequest & request,
                         const MqlTradeResult & result)
  {
//--- В зависимости от того, квкой тип ордера мы устанавливали, смотрим, что с ордером произошло
// и только после полного понимания снимаем флаг is_busy=false; order_ticket=0;
// вот и все премудрости OrderSend
   
  }
//+------------------------------------------------------------------+

Zevk almak.

 
prostotrader :

Zevk almak.

Peki, bunun yukarıda yazdıklarımdan ne farkı var? İyi bir insan bana bu konuyla ilgili ciddi bir İncil bile attı.

İnsanlar çözüm buluyor. Geliştiricilerin kendilerinin, Güvenlik Konseyi'nde bile buna sahip olmadığı gerçeğiyle ilgiliydi.

 
fxsaber :

Peki, bunun yukarıda yazdıklarımdan ne farkı var? İyi bir insan bana bu konuyla ilgili ciddi bir İncil bile attı.

İnsanlar çözüm buluyor. Geliştiricilerin kendilerinin, Güvenlik Konseyi'nde bile buna sahip olmadığı gerçeğiyle ilgiliydi.

Beğenmeyin - kullanmayın.