OnTradeTransaction işlevi hakkında soru - sayfa 2

 
Mikalas :

Evet, OnTradeTransaction'ı kullanamazsınız, ancak daha sonra danışmanın genel performansını büyük ölçüde azaltacak olan geçmişi araştırmanız gerekecektir.

Her geliştiricinin bir seçeneği vardır!

Bu yüzden bu yönde kazmaya başladım...

Açıklama için teşekkürler. Daha fazla kazacağım. Kimsenin acelesi yok. :))))

 
AlexeyVik :

Bu yüzden bu yönde kazmaya başladım...

Açıklama için teşekkürler. Daha fazla kazacağım. Kimsenin acelesi yok. :))))

Gerçek şu ki verdiğim örnek sadece TradeTransaction olayının oluşmayacağı gerçeğine karşı sigortadır .

Aslında, danışmanın 6 aylık günlük çalışmamda, günde 2000 işlemle gerçek bir hesapta ,

HİÇBİR ZAMAN "acil" bir durum olmadı!

İyi şanlar!

 
C-4 :
Sanki hepimiz anladık ve sevinç için ellerimizi çırptık. Üzgünüm, ama şeytan senin kodunda bacağını kıracak.

Evet, tamamen unutmuşum Vasili!

Kod %100 çalışıyor - EA'yı demoya bırakın ve nasıl çalıştığını görün

normal modda ve ardından OnTradeTransaction işlevini yorumlayın;

"Acil" modunun nasıl çalıştığını görebilirsiniz.

 
AlexeyVik :

Yani, asenkron kullanmazsanız, baykuşlar sunucudan bir yanıt bekleyeceğinden OnTradeTransaction işleyicisine gerek yoktur?

Karıştırmayın. FORTS üzerinde ticaret yapmak için eşzamansızlığa gerek yoktur. Başlamak için, Bölüm 3: "Eşzamansız İşlemlerin Temelleri" başlıklı bu makaleye göz atın. Çok fazla ve çok temel bilgiler yok, ancak öğrenmeye başlamak için yeterli. Orada açıklanan kod %100 eşzamansızdır, ancak bu, herhangi bir OnTradeTransaction ve diğer olayları almadan senkron modda çalışmasını engellemez.

Alexey Vik :

Ancak şu ana kadar bir durdurma emrinin etkinleştirildiğini belirlemenin en iyi yolunu bulamadım. Örneğin, bir piyasa Buy 0.1 ve SellStop 0.3 ayarlanır ve 0.3 etkinleştirildiğinde, 0.2 kalır ve hangi noktada izlemeniz gerekir ... Her tikte iki siparişi izlemeniz gerektiği ortaya çıkıyor. Ben de baykuşları indirip ancak işlem tamamlandıktan sonra kontrol etmek istedim. Kontrol bile etmeyin, ancak bir kez ne olduğunu kontrol edin ve ne yapacağınıza karar verin. Ama görünüşe göre bu kader değil ... Muhtemelen eski kanıtlanmış yöntemlere dönmek daha iyidir ...

Çözüm, görevinizden gelmelidir. MetaTrader 5'te aynı anda yalnızca bir aktif pozisyonunuz vardır, bu yüzden gözünüz üzerinde olsun. Siparişlerin tarihine girmeye gerek yok. Sipariş geçmişi ihtiyacı hala ortaya çıkıyorsa, görevinizi netleştirmeniz gerekir.

 
Mikalas :

Evet, tamamen unutmuşum Vasili!

Kod %100 çalışıyor - EA'yı demoya bırakın ve nasıl çalıştığını görün

normal modda ve ardından OnTradeTransaction işlevini yorumlayın;

"Acil durum" modunun nasıl çalıştığını görebilirsiniz.

Kodunuza daha yakından baktım. zorlaştırıyorsun. Herhangi bir "acil durum" modu olmamalıdır. Senkronize veya asenkron bir ticaret türü kullanmanıza bakılmaksızın, ticaret ortamının analizine odaklanmanız gerekir. OnTradeTransaction türündeki olayların analizi yardımcı niteliktedir.

Mikalas :

Evet, OnTradeTransaction'ı kullanamazsınız, ancak daha sonra danışmanın genel performansını büyük ölçüde azaltacak olan geçmişi araştırmanız gerekecektir.

Her geliştiricinin bir seçeneği vardır!

Bu doğru değil. Geçmiş analizi, Expert Advisor'ın performansını düşürmez. Uzun CheckOrder() kodunuz yerine şunun gibi bir şey yazmanız yeterlidir (gerçek çalışma kodu):

 ///
/// Отслеживает поступление новых трейдов в истории трейдов.
///
void TrackingHistoryDeals()
{
    int total = HistoryDealsTotal ();
    //Перебираем все доступные трейды и формируем на их основе прототипы будущих позиций типа COrder
    for (; dealsCountNow < HistoryDealsTotal (); dealsCountNow++)
    {  
         ulong ticket = HistoryDealGetTicket (dealsCountNow);
        AddNewDeal(ticket);
        graphRebuild = true ;
    }
}

Herşey. Yeni anlaşmaların gelişi TrackingHistoryDeals() işlevi tarafından otomatik olarak algılanacak ve sistem zamanlayıcı tarafından çağrılacaktır. Hızlanma elde etmek ve ayarlanan zamanlayıcı çözünürlüğüne bağlı olmamak için, örneğin TRADE_TRANSACTION_DEAL_ADD olayı meydana geldiğinde, bu işlev OnTradeTransaction() içinde de çağrılmalıdır. Olay kaybolursa kötü bir şey olmaz, biraz sonra (200 milisaniyem var) Expert Advisor yapılan değişiklikleri öğrenir, bir sonraki zamanlayıcı çağrısını bekler ve güvenli bir şekilde sipariş tetiklemeyi öğrenir.

 
C-4 :

Kodunuza daha yakından baktım. zorlaştırıyorsun. Herhangi bir "acil durum" modu olmamalıdır. Senkronize veya asenkron bir ticaret türü kullanmanıza bakılmaksızın, ticaret ortamının analizine odaklanmanız gerekir. OnTradeTransaction türündeki olayların analizi yardımcı niteliktedir.

Bu doğru değil. Geçmiş analizi, Expert Advisor'ın performansını düşürmez. Uzun CheckOrder() kodunuz yerine şunun gibi bir şey yazmanız yeterlidir (gerçek çalışma kodu):

Herşey. Yeni anlaşmaların gelişi TrackingHistoryDeals() işlevi tarafından otomatik olarak algılanacak ve sistem zamanlayıcı tarafından çağrılacaktır. Hızlanma elde etmek ve ayarlanan zamanlayıcı çözünürlüğüne bağlı olmamak için, örneğin TRADE_TRANSACTION_DEAL_ADD olayı meydana geldiğinde, bu işlev OnTradeTransaction() içinde de çağrılmalıdır. Olay kaybolursa kötü bir şey olmaz, biraz sonra (200 milisaniyem var) Expert Advisor yapılan değişiklikleri öğrenir, bir sonraki zamanlayıcı çağrısını bekler ve güvenli bir şekilde sipariş tetiklemeyi öğrenir.

Sizinle "farklı dillerde" konuşuyoruz.

Fikrinizle kalın, ben de izninizle benimkiyle kalacağım.

Bariz şeyleri bile görmüyorsunuz:

TradeTransaction etkinliğinin ortaya çıkmasıyla HİÇBİR ŞEYİN kontrol edilmesine gerek YOKTUR - TÜM veriler zaten orada!

TradeTransaction olayı geldiyse CheckOrder() işlevi HİÇ ÇALIŞMAZ!!!

 
Mikalas :

Sizinle "farklı dillerde" konuşuyoruz.

Fikrinizle kalın, ben de izninizle benimkiyle kalacağım.

Hayır, aynı dili konuşuyoruz - MQL5 ve onun asenkron OrderSendAsync lehçesi. Beğenin ya da beğenmeyin, Async ile görevler aynı şekilde çözülmelidir. Yukarıdaki makaleme bakın . Eşzamansız kod - harici uzmanlarla eşzamanlı olarak etkileşime girer. Aslında, polimorfizmin önemsiz bir tezahürü. Bunun nedeni, bu koddaki vurgunun ticaret ortamındaki değişikliklerin analizi üzerinde olmasıdır. Bu da olay modelinin yararlı olduğunu ancak ikincil olduğunu ve bu olmadan asenkron işlemler olmadan yapabileceğinizi bir kez daha kanıtlıyor.
 
C-4 :
Hayır, aynı dili konuşuyoruz - MQL5 ve onun asenkron OrderSendAsync lehçesi. Beğenin ya da beğenmeyin, ancak Async ile görevler aynı şekilde çözülmelidir. Yukarıdaki makaleme bakın . Eşzamansız kod - harici uzmanlarla eşzamanlı olarak etkileşime girer. Aslında, polimorfizmin önemsiz bir tezahürü. Bunun nedeni, bu koddaki vurgunun ticaret ortamındaki değişikliklerin analizi üzerinde olmasıdır. Bu da olay modelinin yararlı olduğunu ancak ikincil olduğunu ve bu olmadan asenkron işlemler olmadan yapabileceğinizi bir kez daha kanıtlıyor.
Vasily, ısrar etmeyin, ancak demo örneğini çalıştırın - o zaman HER ŞEYİ anlayacaksınız!
 
Mikalas :
Vasily, ısrar etmeyin, ancak demo örneğini çalıştırın - o zaman HER ŞEYİ anlayacaksınız!

Teşekkürler, daha fazlasını istemiyorum.

2015.02.05 23:37:21.147 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 14

2015.02.05 23:37:20.767 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 13

2015.02.05 23:37:20.464 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 12

2015.02.05 23:37:20.105 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 11

2015.02.05 23:37:19.912 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. İstek = 10

2015.02.05 23:37:19.832 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 9

2015.02.05 23:37:19.036 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 7

2015.02.05 23:37:05.723 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 6

2015.02.05 23:36:59.919 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 5

2015.02.05 23:36:59.199 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. İstek = 4

2015.02.05 23:36:53.693 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 3

2015.02.05 23:36:52.689 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Sipariş bileti alınmadı. istek = 2

2015.02.05 23:36:44.410 uzmanlar Otomatik Ticaret etkinleştirildi

2015.02.05 23:36:41.995 TestTradeTrans (AUDCAD,H1) Sipariş gönderilmedi! AUDCAD Dönüş kodu = Müşteri terminali tarafından otomatik ticaret yasaktır

2015.02.05 23:36:39.996 TestTradeTrans (AUDCAD,H1) Sipariş gönderilmedi! AUDCAD Dönüş kodu = Müşteri terminali tarafından otomatik ticaret yasaktır

2015.02.05 23:36:39.958 TestTradeTrans (AUDCAD,H1) Sipariş gönderilmedi! AUDCAD Dönüş kodu = Müşteri terminali tarafından otomatik ticaret yasaktır

2015.02.05 23:36:34.581 MQL5 'TestTradeTrans.mq5' başarıyla derlendi

Onu kesmeyi başardım, aksi takdirde otlzhki tüm terminali doldururdu.

ZY Bu arada, bu kodu bir makalede dikmeyi düşünmeyin. Örnek hiçbir koşulda kabul edilemez, çünkü her tikte işe yaramaz siparişlerle korkunç bir şekilde spam gönderiyor !!!

 
C-4 :

Teşekkürler, daha fazlasını istemiyorum.

Onu kesmeyi başardım, aksi takdirde otlzhki tüm terminali doldururdu.

:)

1. FORTS İÇİN ÖRNEK

2. Kesme noktaları ayarlanamıyor mu?

3. Satır üzerinden mesajları okuyormuşsunuz gibi görünüyor :)

Aşağıdakileri yapalım.

Sana sorular soracağım ve sen cevaplayacaksın, tamam mı?

Soru 1. TradeTransaction olayı gelmediyse (veya kullanılmıyorsa) Order Ticket'ı ( OrderSendAsync komutunu göndererek) nasıl bilirsiniz?