Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Karputov Vladimir Ve OnTradeTransaction()'ı basitleştirin - yalnızca geçmişe bir anlaşma eklemeyi düşünün - sipariş yok
Pekala, senin için her şey yoluna girecek, yazmaya bile başlama (zaman kaybetme).
Ve bu konuyla ilgilenmeye başladı çünkü gerçek hayatta başarısızlıklar başladı.
Görünüşe göre hafta sonu sunucuyu güncellediler. Milisaniye göründü. Belki daha fazla sürpriz olacak.
Görünüşe göre OnTradeTransaction işlevi, işlem günlüğünden bağımsız olarak çalışıyor.
Bence işlevin bu davranışı haklı, işlem akışını yavaşlatmaya ve günlükte her şey kaydedilip hesaplanana kadar beklemeye gerek yok.
Sizin durumunuzda, OnTrade kullanmak muhtemelen daha iyidir,
veya bekleyin ve minimum duraklama ile periyodik olarak işlemin geçmişte ne zaman göründüğünü kontrol edin.
Görünüşe göre hafta sonu sunucuyu güncellediler. Milisaniye göründü. Belki daha fazla sürpriz olacak.
Görünüşe göre OnTradeTransaction işlevi, işlem günlüğünden bağımsız olarak çalışıyor.
Bence işlevin bu davranışı haklı, işlem akışını yavaşlatmaya ve günlükte her şey kaydedilip hesaplanana kadar beklemeye gerek yok.
Sizin durumunuzda, OnTrade kullanmak muhtemelen daha iyidir,
veya bekleyin ve minimum duraklama ile periyodik olarak işlemin geçmişte ne zaman göründüğünü kontrol edin.
Merhaba Sergey!
Evet, güncellediler, ancak hafta sonu değil, Perşembe günü akşam seansından sonra (brokere sordum).
Trade() olayını kullanamıyorum ve terminaldeki verilerin güncellenmesini bekleyemiyorum.
Expert Advisor uzun zaman önce yazılmıştı ve yakın zamana kadar "saat gibi" çalışıyordu (belki ben şanslıydım ve TRADE_TRANSACTION_DEAL_ADD olayı her zaman önce gelirdi ).
Expert Advisor'ın mümkün olan en kısa sürede iade işlemi yapması önemlidir, bu nedenle asenkron mod ve OnTradeTransaction().
Şimdi, EA bir pozisyonu açmak ve kapatmak için (bazen) mükerrer emirler gönderir.
Siz: "Bence işlevin bu davranışı haklı, işlem akışını yavaşlatmaya ve günlükte her şey kaydedilip hesaplanana kadar beklemeye gerek yok."
Neyse TRADE_TRANSACTION_DEAL_ADD geldikten sonra yazılır ve hesaplanır :)
Gerçek şu ki, TRADE_TRANSACTION_DEAL_ADD kaybolabilir ve TRADE_TRANSACTION_HISTORY_ADD görünebilir ve ardından terminal güncel olmayan konum verilerini içerecektir. :(,
ki aslında oluyor.
Geliştiricilerin bunu düşünmemesi garip.
TRADE_TRANSACTION_HISTORY_ADD, yalnızca siparişin gerçekleşmesi veya silinmesi (iptal edilmesi) durumunda gelir, bu nedenle,
emir durumu değiştiğinde (buna göre pozisyon değişebilir), terminal pozisyon değişikliği hakkında bilgi almalıdır,
TRADE_TRANSACTION_DEAL_ADD kaybolsa bile
Bakalım geliştiriciler ne diyecek.
Karputov Vladimir Ve OnTradeTransaction()'ı basitleştirin - yalnızca geçmişe bir anlaşma eklemeyi düşünün - sipariş yok
Pekala, senin için her şey yoluna girecek, yazmaya bile başlama (zaman kaybetme).
"Öğretmenlere" ve "her şeyi bilenlere" esas hakkında konuşma talebi,
ve işaretlemek için sadece bacağınızı direğe kaldırmayın.
Size yardım etmek isteyen insanların önünde gösteriş yapmadan önce, normalde sorunuzu formüle edersiniz. Ve burada, OrderSend() işlevi tarafından kısmi kapatma gerçekleştirilirse, sipariş eşzamansız olarak gönderilir. Ne hakkında soruyorsun?
Süper!
Bu bir yardım olarak görülmeli mi?
Ve Karputov'un bununla hiçbir ilgisi yok, tam mesajımı yazdığımda, zaten kendi mesajını gönderdi, ama ben görmedim.
Başlangıçta soru şu şekilde soruldu (önce oturmak için çok tembelse)
Geliştiricilere bir hatanın varlığını göstermek için günlük kaydı nasıl oluşturulur?
Neden, her şeyi kendim yaptım ve günlüklerden açıkça görülüyor ki
TRADE_TRANSACTION_HISTORY_ADD'nin gelmesinden sonra ( TRADE_TRANSACTION_DEAL_ADD'den önce )
terminal konum bilgisini güncellemez.
prostotrader , Dmitry size doğru bir şekilde kısmi (ve tam) kapatmanın kodunuzda eşzamansız bir sırada değil, eşzamanlı bir sırada gerçekleştiğini söylüyor ... bu nedenle program sunucudan bir yanıt bekliyor ...
OnTradeTransaction'ın pozisyonun kendisinden daha hızlı tetiklenmesi muhtemeldir.
Sonra burada:
Konum kontrolünü döngüye almayı deneyebilirsiniz. Yardımcı olabilir....
Bunun gibi bir şey:
Kesin algoritmayı bilmeden ( programdan NE gereklidir), uygulamasının doğruluğunu değerlendirmek zordur ...
Tamamen eşzamansız moda değiştirildi
Ama hiçbir şey değişmedi
Belliydi ama deneyin "saflığı adına"...
Bodrumda tam günlükler
1. > Algoritmayı tam olarak bilmeden ( programdan NE istenir ), uygulamasının doğruluğunu değerlendirmek zordur...
Programın ne yaptığını anlamanın zor olmadığını düşündüm, eğer net değilse, o zaman
Uzman, FORTS piyasasında 2 kontrat hacmi ile pozisyon açar, pozisyon açık ise 1 kontrat hacmi ile kısmen kapanır,
sonra pozisyon tamamen kapatılır. Ve böylece tr_cnt<50 sayacına kadar birkaç kez
2. PositionSelect() 'i milyonlarca kez bile "bükebilirsiniz" - bu hiçbir şeyi değiştirmez çünkü
döngüdeyken TRADE_TRANSACTION_DEAL_ADD olayı gelmeyecek, bu da terminalin güncellenmeyeceği anlamına geliyor
konum bilgisi
...
Yukarıda söyledim - emirlere kapılmayın: fırsatlara bakın. Pozisyon hacminin NE ZAMAN değiştiğini ve ne tür bir işlem olduğunu gösteren kısa bir kod:
Ve işte kısmi kapatmalı baskılar:
Açıkça görülüyor ki, TRADE_TRANSACTION_DEAL_ADD ticari işlem tipindeki olaylar geçer geçmez - işte bu kadar, terminaldeki pozisyon verilerinin güncellenmesi.