EA, AL ve SATIŞ siparişlerini karıştırıyor - sayfa 3

 
WHRoeder :

int OrderType = OrderType() doğru değil, biri diğerini saklıyor olabilir (yerel bildirimler globalleri hatasız olarak gizler.) Deneyin

int orderType = OrderType()

Orijinal kod şudur. . . .

 int orderType;
   for (cnt = total- 1 ; cnt >= 0 ; cnt--)
   {
       while (! OrderSelect (cnt, SELECT_BY_POS)) { Sleep ( 500 );}
      orderType = OrderType();

. . . hangisi etkili bir şekilde önerdiğinizle aynı?

Sanırım dvarrin , sorununun bilet numarasıyla ilgili olduğunu söylüyor.

 

hayır değil.

Döngü dışında bildirilen emir tipi , orderType'ın değerini sonraki Döngüye etkin bir şekilde aktaracak ve hata meydana gelse bile, bu değer bir sonraki koşula girecektir.

OrderType()'ın anında değer ayarıyla döngü içi bildirirseniz, böyle bir hataya yer olmayacaktır.

(belki OP'lerin sorunu değildir, ancak başkalarının olmasını engelleyebilir) denememek için ne var?

Ayrıca uykuda yarım saniye biraz aşırıya kaçıyor. Döngü, 10 milisaniyelik uyku zamanlayıcısıyla, cpu yükünüz ne olursa olsun herhangi bir darbe almadan iyi olsa da (neredeyse: P)

 
forexCoder :

hayır değil.

Döngü dışında bildirilen emir tipi, orderType'ın değerini sonraki Döngüye etkin bir şekilde aktaracak ve hata meydana gelse bile, bu değer bir sonraki koşula girecektir.

OrderType()'ın anında değer ayarıyla döngü içi bildirirseniz, böyle bir hataya yer olmayacaktır.

(belki OP'lerin sorunu değildir, ancak başkalarının olmasını engelleyebilir) denememek için ne var?

Ayrıca uykuda yarım saniye biraz aşırıya kaçıyor. Döngü, 10 milisaniyelik uyku zamanlayıcısıyla, cpu yükünüz ne olursa olsun herhangi bir darbe almadan iyi olsa da (neredeyse: P)


EA'yı ileriye doğru test ederken sorunun "manuel onay iste" kullanımı olduğundan şüpheleniyorum, ancak tam olarak ne olduğunu anlamıyorum.

Tek bildiğim, OrderType adlı bir değişkenin aynı ada sahip bir yöntemle müdahale etmesinin bir yolu olmadığı ve ayrıca bildirim konumunun sorunumla hiçbir ilgisi olmadığı.

Sorun şu ki OrderTicket(), OrderStoploss(), ... OrderSelect() kullanıldıktan sonra aynı sipariş için veri vermiyor.

Yerel değişkenleri kullanır ve onları OrderSelect() çağrısından sonra ayarlarsam çalışır, ancak doğrudan OrderTicket() veya OrderStoploss() kullanırsam yanlış değerler verir.


Neden benim kodumda OrderStopLoss(), "for" döngüsünün aynı yinelemesi içinde başka bir siparişin stoploss değerini döndürüyor?

 

İşte EA'nın tam kodu:

Sorun, updateFbOrders() yönteminin ilk "for" döngüsündedir.

Test etmek için, bir çizelgeye timsah ve fraktal göstergeleri ekledim ve bir çizelge buldum, yukarı doğru son fraktal timsah çizgilerinin üstünde ve son alt fraktal timsah çizgilerinin altında.

Ardından bekleyen alış ve satış emirleri oluşturmalıdır. Fraktallardan birinin kopması durumunda, anında bir sipariş açılacaktır.

Daha sonra, fraktallar her değiştiğinde her emrin stoploss'unu değiştirir, ancak stoploss'u yanlış sipariş için ayarlar.

Uyarı pencerelerini kontrol edin ve aşağıdaki gibi bir mesaj arayın: Alış emri için Sayı: 1 Stoploss 1.41008000: 46454014 orderType: 5 ve 46454014 emrini kontrol ederseniz, bunun aslında bir "sat" emri olduğunu göreceksiniz. Stoploss değişmese bile emirleri değiştirmeye devam eder, bunun nedeni yanlış stoploss seviyesini almasıdır.
Dosyalar:
 

Bu aptalca. Kodun tamamını yapıştırmıyorsunuz.

senin bir

satınalmaSiparişlerKarda

İçini göremediğimiz işlev , lütfen yapıştırın. Başka bir yerde hata yapmış olma ihtimalin çok yüksek. OrderSelect işlevini başka bir yerde mi kullanıyorsunuz?

Ayrıca, longSL ve shortSL değişkenlerinizi nerede ayarlarsınız? Lütfen kodun o kısmını da yapıştırın.

EDIT: Ben yazarken yapıştırmışsınız, şimdi yeni mesaja bakıyorum.

 
forexCoder :

Bu aptalca. Kodun tamamını yapıştırmıyorsunuz.

senin bir

satınalmaSiparişlerKarda

İçini göremediğimiz işlevi, lütfen yapıştırın. Başka bir yerde hata yapmış olma ihtimalin çok yüksek. OrderSelect işlevini başka bir yerde mi kullanıyorsunuz?

Ayrıca, longSL ve shortSL değişkenlerinizi nerede ayarlarsınız? Lütfen kodun o kısmını da yapıştırın.

EDIT: Ben yazarken yapıştırmışsınız, şimdi yeni mesaja bakıyorum.

Merhaba forexCoder

EA'yı önceki gönderiye ekledim.


Ama sanırım sorunu işaret ettiniz: "areBuyOrdersInProfitAt" yönteminde OrderSelect() kullanıyorum . :-))))))))))))

 

Evet düşündüğüm gibi.

areBuyOrdersInProfitAt, başka bir OrderSelect işlevi içerir ve orijinal snippet'teki işlevin üzerine yazar. Bu,BuyOrdersInProfitAt işlevi döndüğünde, OrderSelect değiştirilir ve bilet de değişir. Bu durumda, listenizdeki son siparişi her zaman burada almalısınız.

 

OrderSelect'i bir for döngüsü içinde kullanmaya başladığınızda , tüm emirleri gözden geçirerek, onun içinde başka bir OrderSelect for döngüsü oluşturamazsınız, çünkü ikincisi geri döndüğünde, ticaret havuzunuzdaki son emrin biletini kullanacaksınız.

Orada oldukça uzun bir kodunuz var, bu yüzden onu düzeltmek istemiyorum (sry:P) ama artık doğru yönde bir işaretçiniz var.

 
dvarrin :

Ama sanırım sorunu işaret ettiniz: "areBuyOrdersInProfitAt" yönteminde OrderSelect() kullanıyorum. :-))))))))))))

Çözüm yolunda olduğunuzu duymak güzel. :-)
 
RaptorUK :
Çözüm yolunda olduğunuzu duymak güzel. :-)
Herkese çok teşekkür ederim. Yaptığım gerçekten aptalca bir hataydı :-((