Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği) - sayfa 11

 
secret :
Erteleme önceden ayarlandı. Fiyat ona dokunur, ancak uygulama daha sonra, daha kötü bir fiyata gerçekleşir.

Hayır, limitin daha kötü olduğu ortaya çıktıysa, komisyoncu nafiktir veya siz çözebilirsiniz.

Ve eğer durursan, o zaman bu olduğu gibi normaldir. 20-30 ms, siparişin yalnızca eklenti tarafından kontrol edilmeyip daha ileri bir yerde görüntülenmesi durumunda oldukça kabul edilebilir.

Peki, kaç tane kene vardı - hiç önemli değil.

 
Andrei Trukhanovich :

Komisyonun dolar cinsinden hacminden dolar cinsinden hesaplanması nasıl yardımcı olur?

Garip ama hesabın para birimi etkiliyor. Görünüşe göre, dönüştürme sırasında kullanılan mevcut oran değil, bir tür sabit orandır. Ayrıca parti küçükse yuvarlama.

 

Kendim için bir şeyler bulmam gerekiyordu ve siparişlerle çalışmanın kolaylığını gösteren, çoğaltılması çok kolay bir örnek doğdu.


Öyleyse, OnTick'te klasik olarak çalışan bir Expert Advisor'ın başlatıldığını düşünelim. OnTick, Terminal'in ticaret ortamının herhangi bir zamanında ortaya çıkabileceğinden, EA'nın neler görebileceğini görmek ilginçtir. Bu nedenle OnTick Expert Advisor'ın karşılaşabileceği durumları aşağıdaki şekilde çıkardım.

 #define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnTradeTransaction ( const MqlTradeTransaction &, const MqlTradeRequest &, const MqlTradeResult & )
{
   static int i = 0 ;
  
   Print (i++);
  
   if ( HistorySelect ( 0 , INT_MAX ))
     Print (TOSTRING( PositionsTotal ()) + TOSTRING( OrdersTotal ()) + TOSTRING( HistoryDealsTotal ()) + TOSTRING( HistoryOrdersTotal ()));
        
   Print ( "----------------" );
}

Bu kod basitçe, kaç tane mevcut pozisyonun/siparişin ve kaç tane kapatılmış işlemin/siparinin çıktısını alır.


Ellerimizle bir pozisyon başlatır ve basitçe açar ve kapatırız. Başka hiçbir şey. Böyle bir çıktı aldım (koşmadan koşuya değişebilir).

         // Открываем позицию руками.

         0
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         1
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         2
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         3
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         4
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         5 // Открывающий позицию ордер исчез полностью - нет среди живых и мертвых.
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         6 // Открылась позиция, но нет соответствующей ей сделки.
         PositionsTotal () = 1 OrdersTotal () = 0 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 26 
        ----------------
         7
         PositionsTotal () = 1 OrdersTotal () = 0 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------

         // Закрываем позицию руками.
         8 // Позиция и закрывающий ее ордер.
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         9
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         10
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         11
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         12 // Позиция закрыта, но закрывающий ее ордер продолжает висеть.
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 26 
        ----------------
         13 // Закрывающий позицию ордер полностью исчез - нет среди мертвых/живых.
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 26 
        ----------------
         14
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 26 
        ----------------
         15
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 27 
        ----------------

Böylece, OnTick-EA, ilginç olan yukarıda yorumlanmış olan bu 16 durumdan herhangi biriyle karşılaşabilir.

Belirli bir örnek seçmedim. Başlattı ve sonucu yayınladı. Lansmanlar başka ilginç seçenekler sunabilir.


Sonuçlar hakkında yorum yapabildim çünkü tam olarak ne yaptığımı biliyordum (ellerimle tek bir pozisyon açıp kapatıyordum).

Bunu bilmeyen danışman nedir? Birkaç Uzman Danışmanın hesapta paralel olarak çalıştığını hayal edelim. Yukarıdaki durumların simbiyozundan ortaya çıkan karışıklığı ayrıştırmanın kolaylığı, bence, açıktır.


Kısa kod ektedir, herkes çoğaltabilir.

 
fxsaber :

Kendim için bir şeyler bulmam gerekiyordu ve siparişlerle çalışmanın kolaylığını gösteren, çoğaltılması çok kolay bir örnek doğdu.


Öyleyse, OnTick'te klasik olarak çalışan bir Expert Advisor'ın çalıştığını düşünelim. OnTick, Terminal'in ticaret ortamının herhangi bir zamanında ortaya çıkabileceğinden, EA'nın neler görebileceğini görmek ilginçtir. Bu nedenle OnTick Expert Advisor'ın karşılaşabileceği durumları aşağıdaki şekilde çıkardım.

Bu kod basitçe, kaç tane mevcut pozisyonun/siparişin ve kaç tane kapatılmış işlemin/siparinin çıktısını alır.


Ellerimizle bir pozisyon başlatıyoruz ve basitçe açıp kapatıyoruz. Başka hiçbir şey. Böyle bir çıktı aldım (koşmadan koşuya değişebilir).

Bu nedenle, OnTick-EA, ilginç olanı yukarıda yorumlanmış olan bu 16 durumdan herhangi biriyle karşılaşabilir.

Belirli bir örnek seçmedim. Başlattı ve sonucu yayınladı. Lansmanlar başka ilginç seçenekler sunabilir.


Sonuçlar hakkında yorum yapabildim çünkü tam olarak ne yaptığımı biliyordum (ellerimle tek bir pozisyon açıp kapatıyordum).

Bunu bilmeyen danışman nedir? Birkaç Uzman Danışmanın hesapta paralel olarak çalıştığını hayal edelim. Yukarıdaki durumların simbiyozundan ortaya çıkan karışıklığı ayrıştırmanın kolaylığı, bence, açıktır.


Kısa kod ektedir, herkes çoğaltabilir.

OnTradeTransaction'ın kaç kez arandığını ve hangi anda ne alınabileceğini öğrenmelisiniz.

TRADE_TRANSACTION_ORDER_ADD

Yeni bir açık sipariş ekleme.

TRADE_TRANSACTION_ORDER_UPDATE

Açık bir siparişi değiştirme. Bu değişiklikler, yalnızca müşteri terminali veya ticaret sunucusu kısmındaki açık değişiklikleri değil, aynı zamanda yerleştirildiğinde durumundaki bir değişikliği de (örneğin, ORDER_STATE_STARTED durumundan ORDER_STATE_PLACED'e veya ORDER_STATE_PLACED'den ORDER_STATE_PARTIAL'e geçiş vb.) içerir.

TRADE_TRANSACTION_ORDER_DELETE

Açık listeden bir siparişin kaldırılması. Açık olanlardan bir emir, ilgili talebin yapılması veya yürütülmesi (doldurulması) ve geçmişe aktarılması sonucunda silinebilir.

TRADE_TRANSACTION_DEAL_ADD

Tarihe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.

TRADE_TRANSACTION_DEAL_UPDATE

Tarihte bir anlaşmayı değiştirmek. Sunucuda daha önce yürütülen bir anlaşmanın değiştirildiği durumlar olabilir. Örneğin, bir anlaşma, bir komisyoncu tarafından geri çekildiği bir harici ticaret sisteminde (değişim) değiştirildi.

TRADE_TRANSACTION_DEAL_DELETE

Tarihten bir anlaşma siliniyor. Sunucuda daha önce yürütülen bir işlemin silindiği durumlar olabilir. Örneğin, bir işlem, bir komisyoncu tarafından geri çekildiği harici bir ticaret sisteminde (değişim) silindi.

TRADE_TRANSACTION_HISTORY_ADD

İcra veya iptal sonucu tarihe emir ekleme.

TRADE_TRANSACTION_HISTORY_UPDATE

Sipariş geçmişindeki bir siparişi değiştirme. Bu tür, ticaret sunucusu tarafında işlevselliği genişletmek için sağlanmıştır.

TRADE_TRANSACTION_HISTORY_DELETE

Sipariş geçmişinden bir siparişin silinmesi. Bu tür, ticaret sunucusu tarafında işlevselliği genişletmek için sağlanmıştır.

TRADE_TRANSACTION_POSITION

İşlemin yürütülmesi ile ilgili olmayan pozisyon değişikliği. Bu işlem türü, ticaret sunucusu tarafında pozisyonun değiştirildiğini gösterir. Bir pozisyonun hacmi, açılış fiyatı ve Zarar Durdur ve Kâr Al seviyeleri değişebilir. Değişikliklerle ilgili bilgiler MqlTradeTransaction yapısında OnTradeTransaction işleyicisi aracılığıyla iletilir. Bir anlaşma sonucunda bir pozisyonun değiştirilmesi (ekleme, değiştirme veya tasfiye), TRADE_TRANSACTION_POSITION işleminin görünmesini gerektirmez.

TRADE_TRANSACTION_REQUEST

Bir ticaret talebinin sunucu tarafından işlendiğine ve işlemenin sonucunun alındığına dair bildirim. MqlTradeTransaction yapısında bu tür işlemler için sadece bir alan tipinin (işlem tipi) analiz edilmesi gerekir. Ek bilgi elde etmek için OnTradeTransaction fonksiyonunun ikinci ve üçüncü parametrelerini (istek ve sonuç) analiz etmek gerekir.

 
Alexey Viktorov :

OnTradeTransaction'ın kaç kez arandığını ve hangi anda ne alınabileceğini öğrenmelisiniz.

Mümkün olduğu kadar çiğnemiş gibi görünüyor.
 
fxsaber :
Mümkün olduğu kadar çiğnemiş gibi görünüyor.

Tüm bunları OnTradeTransaction'da işlerseniz OnTick() hangi durumlarda

OnTradeTransaction'ı çağırmanın nedenini öğrenin ve bu çağrıda mevcut olanı buna göre ele alın.
 
Alexey Viktorov :

Tüm bunları OnTradeTransaction'da işlerseniz OnTick() hangi durumlarda

OnTradeTransaction'ı çağırmanın nedenini öğrenin ve bu çağrıda mevcut olanı buna göre ele alın.

Belki forum üyelerinden biri açıklayabilir. ben çıkmıyorum

 
Alexey Viktorov :

Tüm bunları OnTradeTransaction'da işlerseniz OnTick() hangi durumlarda

OnTradeTransaction'ı çağırmanın nedenini öğrenin ve bu çağrıda mevcut olanı buna göre ele alın.

OnTick'te kesinlikle tüm bu tuhaflıklar yerinde. OnTick ile sadece tekrarlanabilir bir örnek yapmak zordur. Örnek olarak OnTradeTransaction seçilmiştir, ancak bu özü değiştirmez.

 
traveller00 :

OnTick'te kesinlikle tüm bu tuhaflıklar yerinde. OnTick ile sadece tekrarlanabilir bir örnek yapmak zordur. Örnek olarak OnTradeTransaction seçilmiştir, ancak bu özü değiştirmez.

Don Kişot'u taklit etmeye devam edin...

 
fxsaber :

 нет среди живых и мертвых

Bu noktayı MT4Orders seviyesinde atlamak harika olurdu..

Şimdi maalesef çift sipariş var. Büyük ihtimalle bu yüzden.

Neden: