İyi akşamlar.
Arkadaşlar lütfen çözmeme yardım edin. Sorun muhtemelen yeni değil, ancak net bir çözüm bulamadım (ne pratikte ne de forumlarda).
2 araçtaki terminalde 2 farklı robot başlatıyorum. Büyüler her yerde farklıdır. Robot bekleyen limitler belirler, OnTradeTransaction prosedüründe işlemin işlemlerini yakalarım ve buna bağlı olarak bekleyen stop emirleri veririm.
İşlem işlem kodu aşağıdadır
Bir anlaşmanın bir robota ait olup olmadığını kontrol etmek için fonksiyon kodu
Bekleyen durdurma emirleri vermek için prosedür kodu
Tarihte değil, geçmişte sipariş arama fonksiyonunun kodu
İşlemlerin gelişiyle ilgili bilgileri, terminalde alındıkları sıraya göre günlükte gösteririm. Şimdi bir demo hesapta işlem yaparken karşılaştığım sorun:
Periyodik olarak, işlemler şu sırayla gelir: TRADE_TRANSACTION_ORDER_DELETE, ardından TRADE_TRANSACTION_DEAL_ADD, ardından TRADE_TRANSACTION_HISTORY_ADD. Genellikle bu durumda, işlem tamamlandıktan sonra stop emirleri verilmez. Bence bu, siparişin zaten silinmiş olması, ancak henüz tarihe girmemiş olmasından kaynaklanmaktadır. Yani ne tarihte ne de terminalde anlaşmadan bir emir bulamıyoruz. Bu şüpheli olsa da, robot tüm boyutlarda bir sipariş aradıktan sonra ( isFindOrder= false ) bulamadığı için durdurma emirlerinin verilmediği gerçeği devam etmektedir. İşlemlerin sırası doğru olabilir, ancak sipariş hala hiçbir yerde bulunamadı.
Farklı yaklaşımlar denedim, hiçbir şey yardımcı olmuyor. Şimdi bekleyen siparişler için prosedürün başlangıcına 1 saniyelik bir uyku eklemeyi düşünüyorum, belki yeterli zaman yoktur. Genel olarak, başka nerede kazacağımı bile bilmiyorum.
Lütfen deneyimlerinizi ve fikirlerinizi paylaşın.
Kodun tamamını anlamadım. Bana göre, yaklaşım hiç doğru değil.
TRADE_TRANSACTION_DEAL_ADD işlem tipi sırasında, trans.position ile bir pozisyon seçmeniz ve sihrini kontrol etmeniz gerekir.
if ( PositionSelectByTicket (trans.position) && PositionGetInteger ( POSITION_MAGIC ) == mag)
Ayrıca sembolü trans.symbol == _Symbol ile kontrol edebilir ve bu kontrollerin sonuçlarına göre bir karar verebilirsiniz.
Kodun tamamını anlamadım. Bana göre, yaklaşım hiç doğru değil.
TRADE_TRANSACTION_DEAL_ADD işlem tipi sırasında, trans.position ile bir pozisyon seçmeniz ve sihrini kontrol etmeniz gerekir.
Ayrıca sembolü trans.symbol == _Symbol ile kontrol edebilir ve bu kontrollerin sonuçlarına göre bir karar verebilirsiniz.
Netleştirme modunu eklemeyi unuttum. Konum tüm robotlar için aynıdır. Yani bir robot pozisyonu satın aldı, ikincisi pozisyon aldı, TRADE_TRANSACTION_DEAL_ADD olayları ters sırada geldi ve sonuç olarak ilk robot görmedi.
Evet ve mantığa göre işlemden emir yorumu almam gerekiyor pozisyonun burada pek bir faydası olmayacaktır.Lütfen deneyimlerinizi ve fikirlerinizi paylaşın.
bir durum
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
fxsaber , 2018.06.20 23:18
Sipariş sistemdeyken, Terminal'de değilken, bu tür hayali sipariş durumlarının ne kadar sürdüğünü kontrol etmeye karar verdim.
// Советник отслеживает длительность ситуаций, когда ордер отсутствует среди текущих и исторических #define TOSTRING(A) #A + " = " + ( string )(A) + "\n" #define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n" bool OrderIsExist( const ulong & OrderTicket ) { return ( OrderTicket ? OrderSelect ( OrderTicket ) || HistoryOrderSelect ( OrderTicket ) : true ); } void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &, const MqlTradeResult & ) { static bool PrevIsExist = true ; static ulong StartTime = 0 ; static ulong MaxInterval = 0 ; const ulong NowTime = GetMicrosecondCount (); const bool IsExist = OrderIsExist(Trans.order); if (!IsExist) { Print (TOSTRING2(Trans.type) + TOSTRING(Trans.order) + TOSTRING( OrderSelect (Trans.order)) + TOSTRING( HistoryOrderSelect (Trans.order))); if (PrevIsExist) StartTime = NowTime; } else if (!PrevIsExist) { const ulong Interval = NowTime - StartTime; Print (TOSTRING(Interval) + TOSTRING2(Trans.type) + TOSTRING(Trans.order) + TOSTRING( OrderSelect (Trans.order)) + TOSTRING( HistoryOrderSelect (Trans.order))); if (Interval > MaxInterval) { MaxInterval = Interval; Comment (TOSTRING(MaxInterval) + TOSTRING(Trans.order)); // mcs. } } PrevIsExist = IsExist; }
Sonuç
2018.06 . 21 00 : 10 : 31.047 Trans.type = TRADE_TRANSACTION_ORDER_DELETE ( 2 ) 2018.06 . 21 00 : 10 : 31.047 Trans.order = 2210967406 2018.06 . 21 00 : 10 : 31.047 OrderSelect (Trans.order) = false 2018.06 . 21 00 : 10 : 31.047 HistoryOrderSelect (Trans.order) = false 2018.06 . 21 00 : 10 : 31.047 2018.06 . 21 00 : 10 : 31.080 Interval = 32643 2018.06 . 21 00 : 10 : 31.080 Trans.type = TRADE_TRANSACTION_HISTORY_ADD ( 3 ) 2018.06 . 21 00 : 10 : 31.080 Trans.order = 2210967406 2018.06 . 21 00 : 10 : 31.080 OrderSelect (Trans.order) = false 2018.06 . 21 00 : 10 : 31.080 HistoryOrderSelect (Trans.order) = true
32 milisaniyelik bir emir var ama Terminalde yok! Bu aralıkta ticaret mantığı yürütülürse bunun ne gibi sonuçlara yol açabileceğini hayal edin...
İlginç bir şekilde, hayali siparişler çoğunlukla yalnızca TRADE_TRANSACTION_ORDER_DELETE ve TRADE_TRANSACTION_DEAL_ADD (çok daha az sıklıkla) işlem türleri için mevcuttur.
Platformun çok kötü nüansı.
ZY Ne yazık ki ilk beşte alım satım işlemlerinin şüpheli performansı.
İkinci
Pozisyon açan bir piyasa emri verildi ve Emir Toplamı bir arttı.
Örneğin, pozisyon veya emir yok - PositionsTotal = 0, OrdersTotal = 0.
Bir piyasa emri veriyorsunuz. Bu durumda, PozisyonlarToplam = 0, SiparişlerToplam = 1.
Piyasa emri tamamlandı - Emir Toplamı = 0. Ancak Pozisyon Toplamı = 0 !
Netleştirme modunu eklemeyi unuttum. Konum tüm robotlar için aynıdır
Önemli değil. Bir pozisyonun her zaman bir bileti vardır, ancak sembolle de seçebilirsiniz. İşlem hacmi veya başka bir şey için bir çek eklemeniz gerekebilir. Örneğin, siparişleri seçin ve anlaşmaları konumlandırın ve doğru olanı bulmak için bunları sallayın. Ama anlaşma anlaşmadır... Ve hiç kimse işlemlerin sırasını garanti etmez. Çok uzun zaman önce, genellikle olası işlem kayıpları hakkında bir uyarı vardı.
Gönderinizdeki ek göz önüne alındığında, uymuyor. Bu durumda, daha yakından bakmanız gerekir.
Farklı yaklaşımlar denedim, hiçbir şey yardımcı olmuyor.
Gerçekleştirmek için basit bir eylem yazın.
bir durum
İkinci
Teşekkürler, okuyacağım ama ilk bakışta varsayımımı doğruluyor.
Önemli değil. Bir pozisyonun her zaman bir bileti vardır, ancak sembolle de seçebilirsiniz. İşlem hacmi veya başka bir şey için bir çek eklemeniz gerekebilir. Örneğin, siparişleri seçin ve anlaşmaları konumlandırın ve doğru olanı bulmak için bunları sallayın. Ama anlaşma anlaşmadır... Ve hiç kimse işlemlerin sırasını garanti etmez. Çok uzun zaman önce, olası işlem kaybı hakkında bir uyarı vardı.
Gönderinizdeki ek göz önüne alındığında, uymuyor. Bu durumda, daha yakından bakmanız gerekir.
İşlem kaybıyla ilgili bir gönderi gördüm, ancak orada moderatörler bunun geçmişin kalıntısı olduğunu ve belgelerden çıkarmayı unuttuğunu söylediler.
Gerçekleştirmek için basit bir eylem yazın.
Basit bir eylem yazmayı tam olarak anlamadım) Lütfen açıklayın.
Zaten silindi, ama çok uzun zaman önce değildi.
Basit bir eylem yazmayı tam olarak anlamadım) Lütfen açıklayın.
Ticaret görevi nedir?
Ticaret görevi nedir?
Limit gecikmeleri belirliyoruz, tetiklendiğinde bir durdurma emri ve kar al emri belirliyoruz. Durdurma tetiklenir, kar al'ı kaldırırız ve bunun tersi de geçerlidir. Durdurma emirleri verdiğimiz ve kar aldığımız temel limitin bileti, durdurma emirlerini yazıyorum ve yorumda kar alıyorum. Bu nedenle emir yorumları almak önemlidir, böylece bir stop emri tetiklendiğinde, aynı yorumla bir kar al ve silebilirsiniz.
Robot yeniden doldurma sağlar, bu nedenle, yeniden satın alırken, ayrıca bir durdurma emri verir ve kar alırız ve yeniden doldurma biletini yoruma gireriz.
1 saniyede uyku fikri günü kurtarabilir mi? Tüm TRADE_TRANSACTION_ORDER_DELETE ve TRADE_TRANSACTION_HISTORY_ADD işlemlerini yapmak için zamana sahip olmak
![Общие принципы - Торговые операции - MetaTrader 5 Общие принципы - Торговые операции - MetaTrader 5](https://c.mql5.com/36/23/obschie-principi-torgovie-operacii__4.png)
- www.metatrader5.com
Илья Ребенок :
Robot yeniden doldurma sağlar, bu nedenle, yeniden satın alırken, ayrıca bir durdurma emri verir ve kar alırız ve yeniden doldurma biletini yoruma gireriz.
Aynı anda >=2 alma ve durma olabilir mi?
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
İyi akşamlar.
Arkadaşlar lütfen çözmeme yardım edin. Sorun muhtemelen yeni değil, ancak net bir çözüm bulamadım (ne pratikte ne de forumlarda).
2 araçtaki terminalde 2 farklı robot başlatıyorum. Büyüler her yerde farklıdır. Robot bekleyen limitler belirler, OnTradeTransaction prosedüründe işlemin işlemlerini yakalarım ve buna bağlı olarak bekleyen stop emirleri veririm.
İşlem işlem kodu aşağıdadır
Bir anlaşmanın bir robota ait olup olmadığını kontrol etmek için fonksiyon kodu
Bekleyen durdurma emirleri vermek için prosedür kodu
Tarihte değil, geçmişte sipariş arama fonksiyonunun kodu
İşlemlerin gelişiyle ilgili bilgileri, terminalde alındıkları sıraya göre günlükte gösteririm. Şimdi bir demo hesapta işlem yaparken karşılaştığım sorun:
Periyodik olarak, işlemler şu sırayla gelir: TRADE_TRANSACTION_ORDER_DELETE, ardından TRADE_TRANSACTION_DEAL_ADD, ardından TRADE_TRANSACTION_HISTORY_ADD. Genellikle bu durumda, işlem tamamlandıktan sonra stop emirleri verilmez. Bence bu, siparişin zaten silinmiş olması, ancak henüz tarihe girmemiş olmasından kaynaklanmaktadır. Yani ne tarihte ne de terminalde anlaşmadan bir emir bulamıyoruz. Bu şüpheli olsa da, robot tüm boyutlarda bir sipariş aradıktan sonra ( isFindOrder= false ) bulamadığı için durdurma emirlerinin verilmediği gerçeği devam etmektedir. İşlemlerin sırası doğru olabilir, ancak sipariş hala hiçbir yerde bulunamadı. Her durumda, robot anlaşmayı doğru bir şekilde belirler, ancak siparişlerin verilmesine ulaşmaz. Aynı zamanda her şey zaman zaman düzgün çalışıyor ve siparişler veriliyor.
Farklı yaklaşımlar denedim, hiçbir şey yardımcı olmuyor. Şimdi bekleyen siparişler için prosedürün başlangıcına 1 saniyelik bir uyku eklemeyi düşünüyorum, belki yeterli zaman yoktur. Genel olarak, başka nerede kazacağımı bile bilmiyorum.
Lütfen deneyimlerinizi ve fikirlerinizi paylaşın.