[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 419

 

Forexman77 :
Program çıktısı olarak fiyat olarak EMA seviyesi nasıl yapılır? Diyelim ki ЕМА1 periyodu (1), ЕМА2 periyodu (0), ЕМА1 eşittir 1.3321 ve ЕМА2 cari dönem için 1.3200. (EMA1-EMA2) ifadesinin sonucunun 0.0121'e eşit olması gerekir. Kontrol etmek için komut dosyasını çalıştırdığınızda, uyarı sıfır değerini gösterir, ancak bunun "0.0121" olması gerekir. Bu sorun nasıl çözülür?

double delta = iMA ( NULL , 0 , 1 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) - iMA ( NULL , 0 , 0 , 0 , MODE_EMA , PRICE_CLOSE , 0 );

if (delta == 0.0121 ) Alert ( "Delta=0.0121" ); 
 
Forexman77 :
Program çıktısı olarak fiyat olarak EMA seviyesi nasıl yapılır? Diyelim ki ЕМА1 periyodu (1), ЕМА2 periyodu (0), ЕМА1 eşittir 1.3321 ve ЕМА2 cari dönem için 1.3200. (EMA1-EMA2) ifadesinin sonucunun 0.0121'e eşit olması gerekir. Kontrol etmek için komut dosyasını çalıştırdığınızda, uyarı sıfır değerini gösterir, ancak bunun "0.0121" olması gerekir. Bu sorun nasıl çözülür?

Senaryonun kendisini görmek mümkün mü? - Muhtemelen, ya çift yerine bir tamsayı almak için yanlış veri tipini kullanıyorsunuz (bu nedenle, sıfıra yuvarlanmıştır) ya da sıfır değerine yol açan başka bir şey kullanıyorsunuz: kod olmadan anlamak zor.

Bu arada, daha önce yazdıklarınızı kontrol etmek için bir komut dosyası kullanırsanız, hata komut dosyasının kendisinde (muhtemelen özellikle göstergenizi kontrol etmek için yazılmıştır) veya göstergenin kendi kodunda olabilir.

 
TarasBY :
Yazmanızı önerdiğim siparişlerinizin filtrelenmesi doğru yazılırsa ve hesaplamalarınızda komisyon ve takasları da hesaba katarsanız, her şey yolunda gider.


görünüşe göre çok zor bir yol vermişsin.

Hiçbir şey yapamam.


Aşağıdakileri aptalca örneğinize ekledim:

ld_Profit = fGet_ProfitLastCloseOrd ( 12 );    
Print (ld_Profit);

Bir rakam veriyor, ama gerçeklikten uzak.

Her şeyin çalışması için 12 sayısını girmem gereken özellikle aptal olanlar için GÖSTERİR MİSİNİZ? Çünkü “sipariş filtreleme” hakkında hiç bilgim yok ....

 
lottamer :


görünüşe göre çok zor bir yol vermişsin.

Hiçbir şey yapamam.


Aşağıdakileri aptalca örneğinize ekledim:

Bir rakam veriyor, ama gerçeklikten uzak.

Her şeyin çalışması için 12 sayısını girmem gereken özellikle aptal insanlar için GÖSTERİR misiniz? Çünkü “sipariş filtreleme” hakkında hiç bilgim yok ....

Fonksiyonun tam kontrolü için tüm ara hesaplamalar grafikte gösterildi.

Size sadece kodu yazmanız kalıyor.

İki yol vardır: ya kendiniz bulun (ve örnekler kullanarak - size çalışan bir senaryo verdim) ya da sizin için her şeyi yapacak birini arayın.

Not Aniden bunu çözme arzusu varsa, buradan başlayabilirsiniz.

 
Chiripaha :

Senaryonun kendisini görmek mümkün mü? - Muhtemelen, ya çift yerine bir tamsayı almak için yanlış veri tipini kullanıyorsunuz (bu nedenle, sıfıra yuvarlanmıştır) ya da sıfır değerine yol açan başka bir şey kullanıyorsunuz: kod olmadan anlamak zor.

Bu arada, daha önce yazdıklarınızı kontrol etmek için bir komut dosyası kullanırsanız, hata komut dosyasının kendisinde (muhtemelen özellikle göstergenizi kontrol etmek için yazılmıştır) veya göstergenin kendi kodunda olabilir.


Haklısın, EMA'yı int'den double'a kaldırdım ve her şey olması gerektiği gibi oldu.
 
TarasBY :

Fonksiyonun tam kontrolü için tüm ara hesaplamalar grafikte gösterildi.

Size sadece kodu yazmanız kalıyor.

İki yol vardır: ya kendiniz bulun (ve örnekler kullanarak - size çalışan bir senaryo verdim) ya da sizin için her şeyi yapacak birini arayın.

Not Aniden bunu çözme arzusu varsa, buradan başlayabilirsiniz.


Teşekkürler, kesinlikle çözmeye çalışacağım
 
Forexman77 :
Programın fiyat olarak EMA düzeyi çıktısı nasıl alınır? Diyelim ki ЕМА1 periyodu (1), ЕМА2 periyodu (0), ЕМА1 eşittir 1.3321 ve ЕМА2 cari dönem için 1.3200. (EMA1-EMA2) ifadesinin sonucunun 0.0121'e eşit olması gerekir. Kontrol etmek için komut dosyasını çalıştırdığınızda, uyarı sıfır değerini gösterir, ancak bunun "0.0121" olması gerekir. Bu sorun nasıl çözülür?

Hesaplamalarda int değil, double türündeki değişkenleri kullanın;

NormalizeDouble(sayı1-sayı2, istenen kesinlik) ifadesinin sonucunu hesaplarken normalleştirmeyi kullanın;

sonucu ekranda görüntülemek için kullanın (günlükte) DoubleToStr(alınan sonuç, istenen doğruluk);

Kodunuz olmadan söylenecek başka bir şey yok ...

 
Forexman77 :
Haklısın, EMA'yı int'den double'a kaldırdım ve her şey olması gerektiği gibi oldu.

Burada, onu zaten bulduk ... Neyse, lütfen unutmayın, gizli hatalardan ve yanlışlıklardan kaçınmak için, double türündeki verileri karşılaştırırken ve hesaplarken normalleştirmeyi kullanın.
 
Chiripaha :

Sonuç olarak: Tabii ki, ilgi uğruna, yalnızca genel bir tanım verdiğiniz için koşulları daha ayrıntılı olarak açıklamanızı isteyebilirim: gecikmeler robot tarafından ne zaman kuruldu (önceden veya değil; manuel olanlar) zaman olarak robotla yaklaşık olarak aynıdır veya değildir, vb.). Ama yine de, bu durumda, sadece komisyoncu ile uğraşmak zorunda kalacaksınız, çünkü. muhtemelen işlemlerin yürütülmesini sıraya koyan kendi iş parçacığına sahiptir. Diyelim ki, sıranızın önce manuel bir ertelemesi varsa, o zaman ertelemelerin yürütme süresi farklı olacaktır (diğer müşterilerin kuyruğu dahil), bu nedenle fiyat da farklı olabilir. Ve eğer robot sinyal oluşturma periyodu sırasında gecikmeler yaparsa, o zaman kuyruğa girmek tekrar belirgin değildir - bu nedenle uygulama fiyatında kaymalar mümkündür. Hakkında hiçbir şey yazmadığınız pozisyonların boyutu da etkileyebilir... vb...

Ama ... hepsi aynı, sadece bir komisyoncu (DC) ile öğrenebilirsiniz. Ve sanırım bahsetmediğim bir sürü sebep bulacaktır. - Ve tavsiye doğruydu: elbette, bekleyen siparişler için taleplerinizin taşındığını düşünüyorsanız, ellerinize ve komisyoncuya giriş yapın. Ancak sadece 2 farklı kavramı karıştırmayın: Bekleyen Emir ve bu Bekleyen Emir için bir Anlaşma. Bekleyen Emir, beyan edilen hacimle herhangi bir en yakın fiyattan piyasaya girmek için verilen bir emirdir. Anlaşma, beyan edilen para miktarı (lot) için emrinizi gerçekleştirmeyi başardığınız fiyattır. - Ve bu emirlerin fiyatları büyük olasılıkla (özellikle size link verilen hızlı piyasada) farklılık gösterecektir. Limit emirleri için - emir fiyatı ve uygulama fiyatı eşittir (tanım gereği).

Ve komisyoncu ve demo ile gerçeğin farklı olmaması gerçeği - bu iyi! - Bu, komisyoncunun müşterileri çekmek için (sizin sözlerinizden) hile işlemleri yapmadığını gösterir. - Bu durumda anlaşmazlık görülmez.


Bu kadar ayrıntılı bir cevap için teşekkür ederim, neyin ne olduğu belli oldu. Anında Yürütme emri yürütme sistemi kullanılarak bu sorun çözülecek mi?

Söylemediğim şartlara gelince:

Robot, gecikmeleri manuel olarak ayarlananlardan daha erken ayarladı, ancak bunlar haberlere göre değiştirildi.

İşlem hacmi aynıydı, mesafeler aşağı yukarı aynıydı.

genel koşullarda neredeyse tamamen benzerdi

 
TarasBY :
Geçerli gün, mevcut D1 çubuğunun başlangıcından başlar (iTime (NULL, PERIOD_D1, 0)), AMA kolay yollar aramıyor musunuz?! :)))


İşte sorun burada ortaya çıktı.

her şey çalışır, ancak yalnızca BİR kez. Onlar. Bir günün dönemini (iTime (NULL, PERIOD_D1 , 0)) ayarlarsam, ertesi gün artık çalışmaz.

test etmek için test kodu yazdı

GetProfitFromDateInCurrency ( Symbol (), - 1 , - 1 , iTime ( NULL , PERIOD_M1 , 0 ));  

if   (GetProfitFromDateInCurrency()< 1 && GetProfitFromDateInCurrency()>- 1 )
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок? 
Neden: