Hatalar, hatalar, sorular - sayfa 2219

 
fxsaber :


ForexTimeFXTM-Demo01 ile ilgili sonuç


Senaryo, ne mevcut olanlar arasında ne de tarihte bir "hayalet düzen" bulana kadar pozisyonları açar ve kapatır. Bunu bir hata mı yoksa platformun bir özelliği olarak mı değerlendiriyorsunuz?


Not: Senaryo, bu nüans nedeniyle birkaç pozisyon açılabilecek şekilde yazılmıştır. Ancak bu, "hayali bir siparişin" alınmasını engellemez.

Sıkıcı görünmek istemem ama işte ifadeler:

( ENUM_ORDER_TYPE )( 1 - PositionGetInteger ( POSITION_TYPE ))

kodu anlamayı çok zorlaştırıyor. Belki belirli bir numaralandırmanın tüm sayısal değerlerini ve hangi sırayla gittiklerini ezbere hatırlarsınız, ancak diğer insanlar bu içselleri bilmeyebilir. Enum'a böyle davranmamalısın. Kısalık elbette yeteneğin kardeşidir, ancak kalite pahasına değilse.

Ve tartışılan konu ile ilgili olarak, açılan pozisyon için sonuç.sipariş değil, order.deal kontrol edilmelidir. Buna göre emirler arasında değil, pozisyonlar arasında aramanız gerekiyor. Değil mi?

 
Alexey Navoykov :

Kısalık elbette yeteneğin kardeşidir, ancak kalite pahasına değilse.

Yaygın bir MQL işlemi gibi görünüyor.

Ve tartışılan konu ile ilgili olarak, açılan pozisyon için sonuç.sipariş değil, order.deal kontrol edilmelidir. Buna göre emirler arasında değil, pozisyonlar arasında aramanız gerekiyor. Değil mi?

OrderSend'den hemen sonra gönderilen orijinal sipariş hiçbir yere gitmeyebilir. Bir pozisyon, bir emirden çok daha sonradır.


Not: Kodda, özellikle ticaret algoritmasının en anlaşılır dilini - MQL4'ü yorumlarda bıraktım.

 
fxsaber :

OrderSend'den hemen sonra gönderilen orijinal sipariş hiçbir yere gitmeyebilir. Bir pozisyon, bir emirden çok daha sonradır.

Evet, prensipte mesele bu değil. Sonuçta, belgelere göre OrderSend'in herhangi bir bilet alması gerekmiyor:

Bir piyasa emri gönderirken (MqlTradeRequest.action= TRADE_ACTION_DEAL ), OrderSend() fonksiyonunun başarılı sonucu, emrin gerçekleştiği (ilgili işlemlerin yapıldığı) anlamına gelmez: bu durumda true sadece emrin gerçekleştiği anlamına gelir. daha fazla yürütme için ticaret sistemine başarıyla yerleştirildi. Ticaret sunucusu , OrderSend() çağrısına yanıtın oluşturulduğu sırada bu veriler biliniyorsa, döndürülen sonuç yapısında anlaşma veya sipariş alanlarının değerlerini doldurabilir. Genel durumda, bir siparişe karşılık gelen işlemlerin yürütülmesi olayı veya olayları, OrderSend() çağrısına yanıt gönderildikten sonra gerçekleşebilir. Bu nedenle, herhangi bir ticaret talebi türü için, OrderSend() yürütmesinin sonucunu alırken, her şeyden önce ticaret sunucusu ret kodunun dönüş kodunu ve harici ticaret sistemi retcode_external'ın yanıt kodunu ( gerekirse) kontrol etmek gerekir. , bunlar döndürülen sonuç yapısında mevcuttur .

Yani hiçbir durumda OnTradeTransaction olmadan yapamazsınız.

Onlar. MQL5'te garantili senkronize ticaret işlemlerinin olmadığı ortaya çıktı.

 
Alexey Navoykov :

Evet, prensipte mesele bu değil. Gerçekten de, belgelere göre OrderSend'in herhangi bir bilet alması gerekmiyor:

Bu yüzden OnTradeTransaction'ın yine de kontrol edilmesi gerekiyor.

Kontrol etmek zorunlu değildir. Sadece isteğe bağlıdır.

Senkronize bir OrderSend yürütüldükten sonra sıfır olmayan bir Result.order her zaman ticaret sunucusundan üzerinde kayıtlı bir emir ile bir yanıt alındığını gösterir. Bu bilet sunucudan geliyor. Ve OrderSend başarılı olursa, bu bilet her zaman alınır.

Bummer, öyle görünüyor ki, OrderSend yüzünden değil, şu anda sipariş bir anlaşmaya kabul edildi. Bu tür durumlar için ORDER_STATE_REQUEST_ADD olmasına rağmen. Genel olarak, MQ'dan bir yanıt bekliyoruz. Benim düşünceme göre, bu, ticaret sunucusunda bir emir olduğunda bir hatadır ve Terminalde senkronize bir OrderSend'den sonra bu konuda bir nefes yoktur.

 
fxsaber :

Genel olarak, MQ'dan bir yanıt bekliyoruz. Benim düşünceme göre, bu, ticaret sunucusunda bir emir olduğunda bir hatadır ve Terminalde senkronize bir OrderSend'den sonra bu konuda bir nefes yoktur.

Daha fazlasını söyleyeceğim, geliştiricilerden OrderSend'in hem terminalde hem de sunucuda tamamen senkronize olduğundan emin olmalarını istememiz gerekiyor. Aksi takdirde, yürütme senkronizasyonu garanti edilmezse, bu işleve neden ihtiyaç duyulur? Bu amaçlar için, OrderSendAsync zaten var.

 
Dmitriy :

Merhaba. Bugün 1860 sürümüne yükselttim ve EA'yı optimize ederken aşağıdaki sorunla karşılaştım:

geçişler arasındaki gecikme 1 dakikadır! Lütfen söyle bana, sorun ne olabilir?

ps güncellemeden önce, her şey bir saat gibi çalıştı.

Barlar işlevini hiç kullandınız mı?
Evet ise, o zaman buna bakın.

 

Sadece bir soru:

Belki paylaşılan dosyalar yapmak mantıklıdır? Şimdi evrensel kodlar yazıyorum, hem mt 4 hem de mt 5'te editsiz çalışıyorlar, beni rahatsız eden tek şey mq4 ve mq5'in sürekli yeniden adlandırılması, projelerle ilgili bir fikir edindim, genel bir uzantı yapabilir miyim? mq?

Ve uzantıları düzenlemeden kodu terminalden terminale kopyalayabilirsiniz...

 
Vladimir Pastushak :

Sadece bir soru:

Belki de paylaşılan dosyalar yapmak mantıklıdır? Şimdi evrensel kodlar yazıyorum, hem mt 4 hem de mt 5'te editsiz çalışıyorlar, beni rahatsız eden tek şey mq4 ve mq5'in sürekli yeniden adlandırılması, projelerle ilgili bir fikir edindim, genel bir uzantı yapabilir miyim? mq?

Ve uzantıları düzenlemeden kodu terminalden terminale kopyalayabilirsiniz...

Ve bu kodları mqh dosyalarına yazmayı ve (#include) kullanarak eklemeyi kim yasaklıyor? bir süredir yapmakta olduğum eylem.

 
Konstantin Nikitin :

Ve bu kodları mqh dosyalarına yazmayı ve (#include) kullanarak eklemeyi kim yasaklıyor? bir süredir yapmakta olduğum eylem.

sen bağlan, ben uzantıları değiştireyim... komşular...

 
Alexey Navoykov :

Daha fazlasını söyleyeceğim, geliştiricilerden OrderSend'in hem terminalde hem de sunucuda tamamen senkronize olduğundan emin olmalarını istememiz gerekiyor. Aksi takdirde, yürütme senkronizasyonu garanti edilmezse, bu işleve neden ihtiyaç duyulur? Bu amaçlar için, OrderSendAsync zaten var.

açıklığa kavuşturacağım. Platformun ticaret sistemine ve Terminal'in kendisine bir SİPARİŞ vermenin senkronizasyonu.

Neden: