Ticaret ortamıyla çalışırken yaygın hatalar ve bunları ortadan kaldırmanın yolları - sayfa 9

 
Algotrader18 :

Tünaydın!

Herkese ve öncelikle fxsaber'a benzer bir sorum var.
İlk bakışta soru ilkel geliyor ama bir cevap bulamıyorum.
Burada https://www.mql5.com/ru/forum/6343/page939 "Aramaya çalış, fxsaber bir kez bu sorunla uğraştı. Ne olduğunu bilmiyorum, ilgilenmedim" söylendi. bu yüzden sana sormaya karar verdim.

Soru. Bir pozisyon açıyorum ve MqlTradeResult içeriğini şu şekilde yazdırmak istiyorum:

retcode, sipariş ve hacim çıktı, anlaşma ve fiyat her zaman sıfırdır.
Lütfen bana neyi yanlış yaptığımı ve sonuç yapısının içeriğine nasıl erişileceğini (başlangıç için, en azından Yazdırma yoluyla çıktı) söyler misiniz?

Belki bu yüzden?

 //+------------------------------------------------------------------+
   MqlTradeRequest request={ 0 };
   MqlTradeResult   result={ 0 };
//---
   request.action   = TRADE_ACTION_DEAL ;     // type of trade operation
   request.symbol   = Pair1;                 // symbol
   request.volume   = lots;                 // volume of lot
   request.type     = oper;                 // order type
   request.price    = priceOpen;             // price for opening
   request.deviation= Slippage;             // allowed deviation from the price
   request.magic    = magic;   
//---
   if ( OrderSend (request,result))
     {
       Print ( "retcode = " + IntegerToString (result.retcode) + "; " );        
       Print ( "deal = " + IntegerToString (result.deal) + "; " );
       Print ( "order = " + IntegerToString (result.order) + "; " ); 
       Print ( "volume = " + DoubleToString (result.volume) + "; " );  
       Print ( "price = " + DoubleToString (result.price) + "; " );
     }
   else
     {
       // Здесь действия при ошибке открытия
     }
//+------------------------------------------------------------------+
 
Algotrader18 :

Bir pozisyon açıyorum ve MqlTradeResult içeriğini şu şekilde yazdırmak istiyorum:

retcode, order ve volume çıktısı alınırken, anlaşma ve fiyat her zaman sıfırdır .
Lütfen bana neyi yanlış yaptığımı ve sonuç yapısının içeriğine (yeni başlayanlar için, en azından Yazdırma yoluyla çıktı) nasıl erişeceğimi söyler misiniz?

Sıfırlar ve sonuç olarak yazılır.

 
Artyom Trishkin :

Belki bu yüzden?

Teşekkürler ama sonuç aynı...
 
fxsaber :

Sıfırlar ve sonuç olarak yazılır.

Peki, o zaman tamamen anlaşılmaz - yanlış bir şey yaptığımı düşündüm, ama eğer sıfırlar varsa, sonucun anlamı nedir?
Açık bir sipariş görüyorum, sonuç.retcode 10009 ve sonuç.fiyat = 0 alıyorum?
Sonuç içermiyorsa sonucun ne anlama geldiğini açıklayabilir misiniz?
 
Algotrader18 :
Sonuç içermiyorsa sonucun ne anlama geldiğini açıklayabilir misiniz?

Bu, sonuç yalnızca bir sipariş olduğunda (bilet ve fiyat yok), ancak bir anlaşma olmadığında MT5'in bir özelliğidir. birkaç yolunuz var

  1. Her şeyin nasıl çalıştığını kendiniz anlayın.
  2. Neredeyse tüm tuzakların atlandığı, hazır üst düzey (alt düzey gizli) geliştirmeleri kullanın.
 
fxsaber :

Bu, sonuç yalnızca bir sipariş olduğunda (bilet ve fiyat yok), ancak bir anlaşma olmadığında MT5'in bir özelliğidir. birkaç yolunuz var

  1. Her şeyin nasıl çalıştığını anlayın.
  2. Neredeyse tüm tuzakların atlandığı, hazır üst düzey (alt düzey gizli) geliştirmeleri kullanın.
Teşekkür ederim.

MQL4'te sonuç yapısı yoktu ve bir bilet aldıktan sonra ilgili siparişi seçtik ve gerekli verileri istedik. MQL5, birçok gerekli veriyi içeren bir sonuç yapısına sahiptir ve kullanmamak mantıksız olacaktır.

1. Forumda soru sormadan önce "Her şeyin nasıl çalıştığını anlamaya" çalıştım. ve gördüklerim - sonuç yapısında:

 struct MqlTradeResult
  {
   uint      retcode;           // Operation return code
   ulong     deal;             // Deal ticket, if it is performed
   ulong     order;             // Order ticket, if it is placed
   double    volume;           // Deal volume, confirmed by broker
   double    price;             // Deal price, confirmed by broker
   double    bid;               // Current Bid price
   double    ask;               // Current Ask price
   string    comment;           // Broker comment to operation (by default it is filled by description of trade server return code)
   uint      request_id;       // Request ID set by the terminal during the dispatch
   uint      retcode_external; // Return code of an external trading system
  };


çifte fiyat var; // Komisyoncu tarafından onaylanan anlaşma fiyatı.

Geliştiriciden kod örneğinde

 //--- send the request
   if (! OrderSend (request,result))
       PrintFormat ( "OrderSend error %d" , GetLastError ());     // if unable to send the request, output the error code
//--- information about the operation
   PrintFormat ( "retcode=%u  deal=%I64u  order=%I64u" ,result.retcode,result.deal,result.order);
sonuç.deal çıktıdır, yani. bunun mantıklı olduğu varsayılır ve sonuç yapısında her zaman sıfır ile temsil edilmez. Sonuç.fiyatın yanı sıra sonuç.deal'in de MqlTradeResul'den alınabileceğini gösteren başka örnekler verebilirsiniz, yapmaya çalıştığım buydu.


Hiçbir yerde "Bu, sonucun yalnızca bir sipariş (bilet ve fiyatsız) olduğunda, ancak bir anlaşma olmadığında, MT5'in bir özelliğidir" bilgisini görmedim. Lütfen bu sonuca hangi bilgilere dayanarak ulaştığınızı söyleyin.

2. Bir pozisyonun parametrelerini, açıldıktan hemen sonra (kod 10009'un görünümü), önce bir bilet seçmeden almanıza izin veren "hazır yüksek seviyeli (alt seviye gizli) gelişmeler" biliyorsanız, , lütfen bir örnek verin veya ona bir bağlantı verin.

 
Algotrader18 :
Teşekkür ederim.

MQL4'te sonuç yapısı yoktu ve bir bilet aldıktan sonra ilgili siparişi seçtik ve gerekli verileri istedik. MQL5, birçok gerekli veriyi içeren bir sonuç yapısına sahiptir ve kullanmamak mantıksız olacaktır.

1. Forumda soru sormadan önce "Her şeyin nasıl çalıştığını anlamaya" çalıştım. ve gördüklerim - sonuç yapısında:


çifte fiyat var; // Komisyoncu tarafından onaylanan anlaşma fiyatı.

Geliştiriciden alınan kod örneğinde

sonuç.deal çıktıdır, yani. bunun mantıklı olduğu varsayılır ve sonuç yapısında her zaman sıfır ile temsil edilmez. Sonuç.fiyatın yanı sıra sonuç.deal'in de MqlTradeResul'den alınabileceğini gösteren başka örnekler verebilirsiniz, yapmaya çalıştığım buydu.


Hiçbir yerde "Bu, sonucun yalnızca bir sipariş (bilet ve fiyatsız) olduğunda, ancak bir anlaşma olmadığında, MT5'in bir özelliğidir" bilgisini görmedim. Lütfen bu sonuca hangi bilgilere dayanarak ulaştığınızı söyleyin.

2. Eğer biletle önceden seçim yapmadan, açıldıktan hemen sonra pozisyon parametrelerini (kod 10009 görünümü) almanızı sağlayan "hazır üst seviye (alt seviye gizli) geliştirmeler" biliyorsanız, lütfen veriniz. bir örnek veya ona bir bağlantı verin.

Bir ticaret talebi sonucunda ya bir ret ya da bir piyasa emri vardır. Bu bir ticaret değil, bir ticaret tarafından oluşturulan bir pozisyon da değil.

  1. Bir pozisyon açmak için sunucuya bir ticaret talebi gönderilir (emir = emir)
  2. Siparişin kabul edilmesi durumunda siparişin kabul edilip kuyruğa alınması sonucu iade edilir.
  3. Emir yerine getirildiyse, bir anlaşma görünür - emrin yürütülmesinin sonucu.
  4. İşlemin sonucu ya yeni bir pozisyon ya da mevcut bir pozisyonun hacminde bir artış / azalış veya bir pozisyonun kapanması veya bir darbe olacaktır. Veya yeni bir pozisyon (bir riskten korunma hesabı için)
 
Artyom Trishkin :

Bir ticaret talebi sonucunda ya bir ret ya da bir piyasa emri vardır. Bu bir ticaret değil, bir ticaret tarafından oluşturulan bir pozisyon da değil.

  1. Bir pozisyon açmak için sunucuya bir ticaret talebi gönderilir (emir = emir)
  2. Siparişin kabul edilmesi durumunda siparişin kabul edilip kuyruğa alınması sonucu iade edilir.
  3. Emir yerine getirildiyse, bir anlaşma görünür - emrin yürütülmesinin sonucu.
  4. İşlemin sonucu ya yeni bir pozisyon ya da mevcut bir pozisyonun hacminde bir artış / azalış veya bir pozisyonun kapanması veya bir darbe olacaktır. Veya yeni bir pozisyon (bir riskten korunma hesabı için)
Teşekkür ederim - lütfen şunu söyleyin:
- Ne düşünüyorsunuz, sıraladığınız işlemlerden hangi adımdan sonra İşlem Talebi Sonuç Yapısı (MqlTradeResult) çıkıyor?

- MQL5 açıklamasına göre:
"Ticaret talebi sonucunun yapısı (MqlTradeResult)
İşlem sistemine bir emir vermek için bir işlem talebine yanıt olarak, işlem sunucusu, önceden tanımlanmış özel bir yapı MqlTradeResult." ve "10009 TRADE_RETCODE_DONE Sipariş tamamlandı" biçiminde bir işlem talebinin işlenmesinin sonucu hakkında bilgi içeren verileri döndürür.

O. ticaret sunucusu dönüş kodu 10009, OrderSend isteğinin başarıyla tamamlandığı anlamına gelir, yani 10009 kodunu aldıktan sonra MqlTradeResult'dan veri istersem, bu sonuç.price = 0 nasıl açıklanır?
 
Algotrader18 :
Teşekkür ederim - lütfen şunu söyleyin:
- hangi adımdan sonra, listeledikleriniz arasından İşlem Talebi Sonuç Yapısı (MqlTradeResult) çıkıyor?

- MQL5 açıklamasına göre:
"Ticaret talebi sonucunun yapısı (MqlTradeResult)
İşlem sistemine bir emir vermek için bir işlem talebine yanıt olarak, işlem sunucusu, önceden tanımlanmış özel bir yapı MqlTradeResult." ve "10009 TRADE_RETCODE_DONE Sipariş tamamlandı" biçiminde bir işlem talebinin işlenmesinin sonucu hakkında bilgi içeren verileri döndürür.

O. ticaret sunucusu dönüş kodu 10009, OrderSend isteğinin başarıyla tamamlandığı anlamına gelir, yani 10009 kodunu aldıktan sonra MqlTradeResult'dan veri istersem, bu sonuç.price = 0 nasıl açıklanır?

10009 TRADE_RETCODE_DONE - bunu kendiniz açıkladınız - sipariş tamamlandı. Bu basitçe, siparişin yürütme için kuyrukta sunucuya başarıyla yerleştirildiği gerçeğidir.

Ayrıca, bu emir yerine getirilirse (sonuçta sunucu tarafından reddedilebilir), o zaman bir anlaşma görünür - anlaşmanın sonucu olarak, açılış fiyatına sahip bir pozisyon görünecektir.

Hakkında okumak

OnTicaretİşlem

TradeTransaction olayı gerçekleştiğinde Uzman Danışmanlarda çağrılır. İşlev, bir ticaret talebinin yürütülmesinin sonuçlarını işlemek için tasarlanmıştır.

geçersiz OnTradeTransaction ()
    const MqlTradeTransaction&      trans , // ticari işlem yapısı
    const MqlTradeRequest&          istek , // istek yapısı
    const MqlTradeResult&           sonuç       // yanıt yapısı
);

Документация по MQL5: Обработка событий / OnTradeTransaction
Документация по MQL5: Обработка событий / OnTradeTransaction
  • www.mql5.com
При обрабокте транзакций типа TRADE_TRANSACTION_REQUEST для получения дополнительной информации необходимо анализировать второй и третий параметры функции OnTradeTransaction() – Отправка торгового запроса на покупку приводит к цепи торговых транзакций, которые совершаются на торговом счете: 1) запрос  принимается на обработку, 2) далее для...
 
Algotrader18 :

Hiçbir yerde "Bu, sonucun yalnızca bir sipariş (bilet ve fiyatsız) olduğunda, ancak bir anlaşma olmadığında, MT5'in bir özelliğidir" bilgisini görmedim. Lütfen bu sonuca hangi bilgilere dayanarak ulaştığınızı söyleyin.

Kendi deneyimi.

2. Bir pozisyonun parametrelerini, açıldıktan hemen sonra (kod 10009'un görünümü), önce bir bilet seçmeden almanıza izin veren "hazır yüksek seviyeli (alt seviye gizli) gelişmeler" biliyorsanız, , lütfen bir örnek verin veya ona bir bağlantı verin.

 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void Variant1()
{
   if ( OrderSelect ( OrderSend ( _Symbol , OP_BUY , 0.1 , Ask , 100 , 0 , 0 ), SELECT_BY_TICKET ))
     OrderPrint ();
}

void Variant2()
{
   OrderSend ( _Symbol , OP_SELL , 0.1 , Bid , 100 , 0 , 0 );
   MqlTradeResult result = MT4ORDERS::LastTradeResult ;
  
   Print ( "retcode = " + IntegerToString (result.retcode) + "; " );        
   Print ( "deal = " + IntegerToString (result.deal) + "; " );
   Print ( "order = " + IntegerToString (result.order) + "; " ); 
   Print ( "volume = " + DoubleToString (result.volume) + "; " );  
   Print ( "price = " + DoubleToString (result.price) + "; " );
}

void OnStart ()
{
  Variant1();
  Variant2();
}
 # 2212868739 2018.11 . 02 21 : 09 : 33 buy 0.10 EURUSD 1.13895 0.00000 0.00000 1.13892 - 0.18 0.00 - 0.26 0
retcode = 10009 ; 
deal = 2210317244 ; 
order = 2212868740 ; 
volume = 0.10000000 ; 
price = 1.13892000 ; 


Başka bir seçenek daha var, ancak "gelişmiş".