"MQL5 Cookbook: TradeTransaction Olayının İşlenmesi" makalesi için tartışma - sayfa 2

 

İşte tetiklenen bir Kâr Al tarafından kapatılan bir pozisyonun günlük girişleri. Bu durum OnTradeTransaction( const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) içinde nasıl tespit edilebilir?

Ne const MqlTradeResult& sonucunun dönüş kodu (result.retcode) ayarlanmıştır (0 seçenek değildir, TRADE_RETCODE_DONE = 10009) ne de tüm anlaşmalarda her seferinde döngü yapmadan bunları bulmak için kimliklerden biri (Anlaşma bileti, Sipariş bileti, Talep Kimliği).

Bu, ilgili(?) bayrakları yazdıran #376 satırındaki Yazdırmadır:

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
...// line 376:
   Print(__LINE__," ",counter," prc:",_ToStr2Dig(trans.price)," tckt: ",trans.position //," pTrigg:",_ToStr2Dig(trans.price_trigger)
            ," Tr.Type: ",EnumToString(trans.type)//," DL.Type: ",EnumToString(trans.deal_type)
            ," Tr.OrdType: ",EnumToString(trans.order_type)," Tr.OrdFill: ",EnumToString(trans.order_state)
            ," Tr.tckt:",trans.order," ",trans.position," ",trans.position_by
            ," retCode:",result.retcode," ",result.deal," ",result.order," ",result.deal," ",result.request_id         );
...
  }

Ve günlükte okuyabildiğim şey bu:

10:04:40   take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40   deal #3 buy 0.01 EURUSD at 1.00171 done (based on order #3)
10:04:40   deal performed [#3 buy 0.01 EURUSD at 1.00171]
10:04:40   order performed buy 0.01 at 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40   373  New trade operation dTime1970.01.01 09:03:41
10:04:40   376 0 prc:trans.price=1.00171   tckt: 2 Tr.Type: TRADE_TRANSACTION_DEAL_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_STARTED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40   489 MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #3 DEAL_TYPE_BUY EURUSD 0.01 lot   
10:04:40   376 1 prc:trans.price=1.00171   tckt: 2 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40   383 1 prc:trans.price=1.00171   tckt: 2  res.Ord:0 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdFill: ORDER_STATE_FILLED Tr.OrdType: ORDER_TYPE_BUY Tr.tckt:3 2 0 Res::0 0 0 0 0
10:04:40   408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
10:04:40   376 2 prc:trans.price=1.00171   tckt: 2 Tr.Type: TRADE_TRANSACTION_HISTORY_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40   408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
2022.09.26 14:08:33.755    disconnected

Terminal çok güzel yazıyor "kar al tetiklendi #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]"

Peki neden TRADE_TRANSACTION_TRIGGERED_PT ve TRADE_TRANSACTION_TRIGGERED_SL gibi bir bayrak yok?

Ve isteğin dönüş kodu her zaman ayarlanmıyor mu?

 
Karışıklığın bir kısmı ENUM_ORDER_TYPE 0 = ORDER_TYPE_BUY olmasından kaynaklanmaktadır. Dolayısıyla bir EA, alanın değerinin ORDER_TYPE_BUY ile mi ayarlandığını yoksa iptal mi edildiğini, dolayısıyla ayarlanmadığını ayırt edemez - harika!!!
 

Denis, makale için teşekkür ederim! İlgiyle okudum, ancak okuduklarımın henüz tam olarak farkına varmadım. Ayrıca TradeProcessor Uzman Danışmanınızı indirdim ve şu anda açık bir pozisyonumun olduğu terminalimde çalıştırdım. Çıktılara baktım ve hemen kendi başıma cevap bulmak istediğim bazı sorular ortaya çıktı. Eğer ben yapamazsam, sizi rahatsız etmek zorunda kalacağım. ))

Saygılarımla, Vladimir.

 
MrBrooklin açık bir pozisyonumun olduğu terminalimde çalıştırdım. Çıktılara baktım ve hemen kendi başıma cevap bulmak istediğim bazı sorular ortaya çıktı. Eğer ben yapamazsam, sizi rahatsız etmek zorunda kalacağım. ))

Saygılarımla, Vladimir.

Görüşleriniz için teşekkür ederim. Rica ederim, BayBrooklin! ))

 
Denis Kirichenko #:

Görüşleriniz için teşekkür ederim. Rica ederim, BayBrooklin! ))

Denis, üzgünüm ama senin yardımın olmadan aklım "patlıyor". İşte EA'nızın geçişlerinden birinin sonucu (bu arada, çok havalı bir EA!!!):

2023.10.27 17:11:02.514 TradeProcessor (EURUSDrfd,D1)   Проход : #100
2023.10.27 17:11:02.514 TradeProcessor (EURUSDrfd,D1)   Поступил запрос: изменить параметры отложенного ордера
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   ---===Транзакция===---
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет сделки: 0
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип сделки: DEAL_TYPE_BUY
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет ордера: 1030195768
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Состояние ордера: ORDER_STATE_PLACED
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип ордера: ORDER_TYPE_SELL_STOP
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Цена: 1.05853
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Уровень Stop Loss: 1.(скрыл значения стоп-лосса)
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Уровень Take Profit: 1.05803
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Цена срабатывания стоп-лимитного ордера: 0.00000
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Торговый инструмент: EURUSDrfd
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Срок истечения отложенного ордера: 2023.10.27 00:00
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип ордера по времени действия: ORDER_TIME_DAY
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет позиции: 0
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Объём в лотах: 0.04
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Проход : #101

Anlamadığım şey:

  1. EA'm bekleyen bir SELL_STOP emri verdi;
  2. EA'nız yazıyor - ticaret türü DEAL_TYPE_BY (sarı ile vurgulanmıştır). Her ihtimale karşı, MQL5 Referans Kılavuzuna bakıyorum. DEAL_TYPE_BY olduğunu söylüyor :

ENUM_DEAL_TYPE

Tanımlayıcı

Açıklama

DEAL_TYPE_BUY

Satın Al


Soru - bekleyen bir SELL_STOP emri değiştirilirken işlem türü nasıl BUY????? olarak belirlenir? ))

Saygılarımla, Vladimir.

 

Ve hiçbir işlem yoktur. Bekleyen bir emrin verilmesi ve işleme alınması herhangi bir işlem gerektirmez. İşlem bileti = 0, tür = 0, burada 0, ENUM_DEAL_TYPE numaralandırması için DEAL_TYPE_BUY 'a eşdeğerdir. Yani, MqlTradeTransaction trans yapısında bazı alanlar doldurulur ve bazıları doldurulmaz. Doldurulmamış alanlar genellikle boş bırakılır.

Daha fazla ayrıntı: Bekleyen emirler hakkındaki Dokümantasyonda.

Anlaşma alanı bu tür bir işlem için doldurulacaktır:

TRADE_TRANSACTION_DEAL_*

İşlem işleme ile ilgili ticari işlemler için MqlTradeTransaction yapısında aşağıdaki alanlar doldurulur (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE ve TRADE_TRANSACTION_DEAL_DELETE):

  • deal - işlemin bileti;
  • emir - işlemin yapıldığı emrin bileti;
  • sembol - işlemdeki finansal aracın adı;
  • type - ticari işlemin türü;
  • deal_type - işlemin türü;
  • price - işlemin yapıldığı fiyat;
  • price_sl - Zararı Durdur fiyatı (işlemin yapıldığı emirde belirtilmişse doldurulur);
  • price_tp - Kar Al fiyatı (işlemin yapıldığı emirde belirtilmişse doldurulur);
  • volume - lot cinsinden işlem hacmi.
  • position - bir işlemin gerçekleştirilmesi sonucunda açılan, değiştirilen veya kapatılan bir pozisyonun bileti.
  • position_by - bir karşı pozisyonun bileti. Yalnızca bir pozisyonu karşı pozisyonla (out by) kapatmaya yönelik işlemler için doldurulur.


Sadece 3 tür işlem "anlaşma" türlerine aittir: TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE, TRADE_TRANSACTION_DEAL_DELETE.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Denis Kirichenko #:

Ve hiçbir işlem yoktur. Bekleyen bir emir vermek herhangi bir işlem gerektirmez. İşlem bileti = 0, tür = 0, burada 0 ENUM_DEAL_TYPE numaralandırması için DEAL_TYPE_BUY 'a eşdeğerdir. Yani, MqlTradeTransaction trans yapısında bazı alanlar doldurulur ve bazıları doldurulmaz. Doldurulmamış alanlar genellikle sıfırlanır.

Daha fazla ayrıntı: Bekleyen siparişlerle ilgili Dokümantasyonda.

Ahhhh, işte bu!!! Dostum, kafamı kırdı! ))

Teşekkürler!!!

Saygılarımla, Vladimir.