OnTradeTransaction işlevi hakkında soru - sayfa 6

 
Mikalas :

Hayır, işlemler kaybolmaz, sadece belirli bir sırayla gelmeyebilir.

Yalnızca TRADE_TRANSACTION_REQUEST her zaman önce gelir, aksi takdirde sipariş bileti alamazsınız.

Belgeleri DİKKATLİCE okuyun.

Michael, üzgünüm, ama bana sadece son gönderiye cevap verdin gibi geldi ve o, bu sayfadaki ilkinde açıklanan her şeyin bir sonucu olarak.

Ve adresinizdeki belgeleri okumanız için bir öneri duymak bir şekilde garip. Okudum, tekrar okudum ve tekrar okudum.

Lütfen "bilet siparişi" ile ne demek istediğinizi açıklar mısınız? Bunu belgelerde görmedim.

 
AlexeyVik :

Michael, üzgünüm, ama bana sadece son gönderiye cevap verdin gibi geldi ve o, bu sayfadaki ilkinde açıklanan her şeyin bir sonucu olarak.

Ve adresinizdeki belgeleri okumanız için bir öneri duymak bir şekilde garip. Okudum, tekrar okudum ve tekrar okudum.

Lütfen "bilet siparişi" ile ne demek istediğinizi açıklar mısınız? Bunu belgelerde görmedim.

Bilet (ulong bilet), verilen bir siparişe atanan benzersiz bir numaradır.

Bu sayı , varantın ömrü boyunca olduğu gibi tarihte de değişmez.

Bilet (tikcet) ile sipariş hakkında bilgi alıyoruz.

 
Mikalas :

Bilet (ulong bilet), verilen bir siparişe atanan benzersiz bir numaradır.

Bu sayı , varantın ömrü boyunca olduğu gibi tarihte de değişmez.

Bilet (tikcet) ile sipariş hakkında bilgi alıyoruz.

Teşekkürler Michael. Genel olarak, bir sipariş biletini bir bilet olarak adlandırdığınızı varsaydım. Ama açıklığa kavuşturulması gerekiyordu.


Ama yine de biletlerin davranışı oldukça garip.

Örnek: test cihazındaki bir çalıştırmadan biletler ve hacimler.

Bir Buy pozisyonu 0,1 lot, bilet 2 açılır. SellStop 0,78 bilet 3 yerleştirilir.

SellStop etkinleştirildiğinde, 0,68 pozisyonu kalır ve 0,78 hacimli ve negatif kârlı 3. sipariş tarihe girer.

Aynı zamanda, bilet 4 ile pozisyon kalır

Ve bilet 2 ile pozisyon kaybının nerede kaybolduğu tamamen belirsiz.


Genel olarak, yazılanlara her zaman inanamazsınız. Çünkü tam yazılmamış.

Geciktirici etkinleştirilirse biletin kaldığı, ancak başka bir pozisyon kapatılırsa bilete yeni bir tane atandığı ortaya çıktı.

 

Konum ve geciktirici aynı yöndeyse, biletlerde de aynı şey olur. Bilet değişiyor.


 
AlexeyVik :

Görünüşe göre bu işlem kaybı ... ve her şeyden önce (belgelerden keserek)

Vasily, bu bir test cihazı mı yoksa bir demo mu? Test cihazından örneklerim var. Test cihazında ve hesapta OnTradeTransaction tetiklenmesi arasında bir fark olup olmadığını merak ediyorum. Her ihtimale karşı kontrol edeceğim.

Bu bir demo. Belki de test cihazındaki ve gerçek zamanlı olay modeli farklıdır.

 

Forts'ta MT5'te birkaç botum var. Bir enstrümanda birkaç dahil. İşlemlerin geçmişinde kaç tane "robot" sözleşmesinin geçtiğini belirlemek için kullanıyorum. Prensip olarak, her şey çalışır. Şimdi OnTradeTransaction kullanmayı denemeye karar verdim. Nasıl uygulanacağı fikri basittir - bir anlaşma gelir, üzerinde kaç sözleşmenin satıldığına veya satın alındığına ve anlaşmayı hangi botun yaptığına bakarız (anlaşma veya Magic Number hakkındaki özel bir yoruma göre), yazıyoruz bu bilgiyi bir dosyaya Ve soru şu. OnTradeTransaction her bir Uzman Danışmanda olacaksa, sırayla veya bir şekilde paralel olarak nasıl çağrılacaklar? Diyelim ki bir anlaşma oldu - bir dizi olay gerçekleşti ve her olay için OnTradeTransaction her botta sırayla çağrılacak mı? Yani, anladığım kadarıyla, tüm botlardan sorumlu olacak bir OnTradeTransaction işleyicisi yapmak daha mı kolay? Zaten bir sürü şey programlamış olmama rağmen, bir programcı değilim. Kod zayıf olabilir, ancak her zaman olması gerektiği gibi çalıştığından emin olurum.

 
votor :

Forts'ta MT5'te birkaç botum var. Bir enstrümanda birkaç dahil. İşlemlerin geçmişinde kaç tane "robot" sözleşmesinin geçtiğini belirlemek için kullanıyorum. Prensip olarak, her şey çalışır. Şimdi OnTradeTransaction kullanmayı denemeye karar verdim. Nasıl uygulanacağı fikri basittir - bir anlaşma gelir, üzerinde kaç sözleşmenin satıldığına veya satın alındığına ve anlaşmayı hangi botun yaptığına bakarız (anlaşma veya Magic Number hakkındaki özel bir yoruma göre), yazıyoruz bu bilgiyi bir dosyaya Ve soru şu. OnTradeTransaction her bir Uzman Danışmanda olacaksa, sırayla veya bir şekilde paralel olarak nasıl çağrılacaklar? Diyelim ki bir anlaşma oldu - bir dizi olay gerçekleşti ve her olay için OnTradeTransaction her botta sırayla çağrılacak mı? Yani, anladığım kadarıyla, tüm botlardan sorumlu olacak bir OnTradeTransaction işleyicisi yapmak daha mı kolay? Zaten her şeyi bir sürü programlamış olmama rağmen, ben bir programcı değilim. Kod zayıf olabilir, ancak her zaman olması gerektiği gibi çalıştığından emin olurum.

Evet, her Uzman Danışman OnTradeTransaction'ı çalıştıracaktır. Sembolle filtrelenmeleri gerekir ve bir sembolde birden fazla danışman varsa, o zaman sihirle.

 

Cevap için teşekkürler. Bunu zaten kontrol ettim ve tüm danışmanlarda çalıştığını görüyorum. Soru farklı (belki aptalca bir soru), tüm danışmanlardaki tüm bu OnTradeTransactions , önce bir danışmanda, sonra bir sonrakinde vb. sırayla işlenecek ve paralel olarak değil, değil mi? Onlar. Teorik olarak, işlemleri sıralı (?) olduğundan, tüm botlar için bir işleyici yapmak ve ihtiyacınız olanı filtrelemek daha iyidir.

 
votor :

Cevap için teşekkürler. Bunu zaten kontrol ettim ve tüm danışmanlarda çalıştığını görüyorum. Soru farklı (belki aptalca bir soru), tüm danışmanlardaki tüm bu OnTradeTransactions , önce bir danışmanda, sonra bir sonrakinde vb. sırayla işlenecek ve paralel olarak değil, değil mi? Onlar. Teorik olarak, işlemleri sıralı (?) olduğundan, tüm botlar için bir işleyici yapmak ve ihtiyacınız olanı filtrelemek daha iyidir.

Test etmedim, ancak bir model gibi görünmüyor. İlk kim kalktı ve terlikler gibi. Ve aynı anda kalkarlarsa, her birinin bir terliği olması mümkündür.

Şimdiye kadar, bana en iyi seçenek sembol ve sihir ile filtrelemek gibi görünüyor. Onun bilgileri hakkında kimin pozisyonu yazıyor.

 

Açıklayamadığım bir şey. İşte gerçek bir örnek. İşte kod:

void OnTradeTransaction(const MqlTradeTransaction ve işlem,

const MqlTradeRequest&request,

const MqlTradeResult&sonucu)

{

Say++;

Print("Ontrade_test = ",Sayı);

}

İşleyici iki Expert Advisor'da kullanılır, 1 işlem yapılırken iki Expert Advisor'da defalarca işlenir. Kod çıktıları:

18:31:06,495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06,495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06,497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06,497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06,498 ontrade_trans_functions (MXI-12.17,M5) ontrade_test = 3

18:31:06,498 ontrade_trans_functions2 (MXI-12.17,H1) ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) ontrade_test = 4 ...

vb.

OnTradeTransaction'ın iki Expert Advisor'da işlem süresinin milisaniyelere kadar denk geldiği görülmektedir. Dolayısıyla soru ortaya çıktı, "anlaşma" olayı önce bir Uzman Danışmandaki bir OnTradeTransaction'a, ardından başka bir Uzman Danışmandaki bir sonrakine mi geliyor, yoksa bir şekilde tüm Uzman Danışmanlardaki tüm işleyicilere aynı anda mı geliyor? Paralel çok iş parçacıklı çalışma gibi veya programlamada çağrıldığı gibi. Her şeyin sırayla gerçekleştiğine eminim, sadece bir milisaniyede hızlı bir şekilde çalışıyor, ama her ihtimale karşı sordum.