Nasıl kodlanır? - sayfa 297

 

...

teras

Kapalı bir çubukta çarpı işareti olup olmadığını test etmek istediniz. Vardiya 1, ilk kapalı çubuk anlamına gelir ve vardiya 2, bundan önceki ilk çubuk anlamına gelir. Ve eğer kapalı bir çubuk üzerinde bir çarpı testi yapmak istiyorsanız, test etmeniz gereken çubuklar bunlardır.

(diff1*diff2)<0) itibariyle: aslında oldukça basit

fark1, çubuk 1'deki 2 ortalama arasındaki farktır

diff2, çubuk 2'deki 2 ortalama arasındaki farktır

Herhangi biri olumlu veya olumsuz olabilir. Bizim ilgilendiğimiz, birinin pozitif, diğerinin negatif olması, çünkü bu, ortalamaların aşıldığı anlamına geliyor. Çarpma varsa bize hızlı bir cevap verir (işaretler farklıysa sonuç 0'dan küçüktür, işaretler eşitse o çarpmanın sonucu 0'dan büyüktür)

Umarım bu, bu kodun ne yaptığını açıklığa kavuşturmuştur.

tkuan77:
Merhaba Mladen, bana söylediklerini denedim ve harikalar yarattı. Ancak, kodların arkasındaki mantığı tam olarak anlamıyorum. iMA'nın kaymasını neden 1 ve 2'ye ayarladınız ve neden şunu da kodluyorsunuz: (diff1*diff2)<0)? Üzgünüm ama şu anda hala öğrenme ifadesindeyim.

Teşekkürler ve saygılar

teras
 

Oklar Nasıl Eklenir

Ekli, son birkaç gönderide tartışılan MA crossover EA'nın kısaltılmış bir versiyonudur.

Kapalı bir mum üzerinde bir geçiş meydana geldiğinde, bu sürüm günlük dosyasına bir mesaj yazdırır.

Grafikte yukarı/aşağı okları görüntülemek için Yazdırma mantığını kodla değiştirmek mümkün müdür?

Yardımın için teşekkürler.

Dosyalar:
 

...

Bu şekilde deneyin...

Ok çizecek ve grafiğin sağ alt köşesinde bir yorum gösterecektir - bunun gibi (ne yaptığını açıklığa kavuşturmak için grafikteki ortalamaları ekledi):

michaelB:
Ekli, son birkaç gönderide tartışılan MA crossover EA'nın kısaltılmış bir versiyonudur.

Kapalı bir mum üzerinde bir geçiş meydana geldiğinde, bu sürüm günlük dosyasına bir mesaj yazdırır.

Grafikte yukarı/aşağı okları görüntülemek için Yazdırma mantığını kodla değiştirmek mümkün müdür?

Yardımın için teşekkürler.
 

MA Okları

"Yorumlu 2MAcrossover" gerçekten iyi çalışıyor.

Sadece bir soru - bir kez bir ok belirdiğinde, yeni bir mum açıldığında kaybolacaktır, bu kasıtlı mıydı?

Grafiğin sağ alt köşesindeki yorumu beğendim.

Tekrar teşekkürler.

 
mladen:
teras

Kapalı bir çubukta çarpı işareti olup olmadığını test etmek istediniz. Vardiya 1, ilk kapalı çubuk anlamına gelir ve vardiya 2, bundan önceki ilk çubuk anlamına gelir. Ve eğer kapalı bir çubuk üzerinde bir çarpı testi yapmak istiyorsanız, test etmeniz gereken çubuklar bunlardır.

(diff1*diff2)<0) itibariyle: aslında oldukça basit

fark1, çubuk 1'deki 2 ortalama arasındaki farktır

diff2, çubuk 2'deki 2 ortalama arasındaki farktır

Herhangi biri olumlu veya olumsuz olabilir. Bizim ilgilendiğimiz, birinin pozitif, diğerinin negatif olması, çünkü bu, ortalamaların aşıldığı anlamına geliyor. Çarpma varsa bize hızlı bir cevap verir (işaretler farklıysa sonuç 0'dan küçüktür, işaretler eşitse o çarpmanın sonucu 0'dan büyüktür)

Umarım bu, bu kodun ne yaptığını açıklığa kavuşturmuştur.

Yardımın için teşekkürler Mladen! Ancak bu kodu eklediğimde, EA'm biraz kontrolden çıkmış gibi görünüyor. Bazen, ekran görüntüsünde gösterildiği gibi gerçek SL veya TP'ye ulaşılmadan önce bile kendi kendine otomatik SL veya TP olacaktır. neden böyle?

Teşekkürler ve saygılar

teras

//--- giriş parametreleri

harici çift TakeProfit=1000.0;

dış çift Lot = 0.1;

harici çift StopLoss=1500.0;

//+------------------------------------------- -------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- -------------------+

int init()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| uzman sıfırlama işlevi |

//+------------------------------------------- -------------------+

int tanım()

{

//----

//----

dönüş(0);

}

int mainCrossed (çift ana hat1, çift ana hat2)

{

statik int mainlast_direction = 0;

statik int maincurrent_dirction = 0;

if(mainline1>mainline2)maincurrent_dirction = 1; // ana yukarı

if(mainline1<mainline2)maincurrent_dirction = 2; // ana aşağı

if(maincurrent_dirction != mainlast_direction) //main değişti

{

mainlast_direction = maincurrent_dirction;

dönüş (mainlast_direction);

}

başka

{

dönüş (0);

}

}

//+------------------------------------------- -------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- -------------------+

int başlangıç()

{

//----

int cnt, bilet, toplam;

double shortEma, longEma, mainshortEma, mainlongEma;

if(Çubuklar<100)

{

Print("100'den küçük barlar");

dönüş(0);

}

if(Kâr Al<10)

{

Print("Kar Al 10'dan az");

dönüş(0); // TakeProfit'i kontrol edin

}

int Çapraz = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);

çift fark1 = kısaEma1-uzunEma1;

çift fark2 = kısaEma2-uzunEma2;

mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);

mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);

int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);

eğer ((fark1*fark2)<0)

{

if (kısaEma1>uzunEma1)

çapraz = 1;

yoksa Çapraz = 2;

}

toplam = SiparişlerToplam();

if(toplam < 1)

{

if(isCrossed == 1 && mainshortEma > mainlongEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,

"EA'm",12345,0,Yeşil);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

Print("Satın alma emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());

dönüş(0);

}

if(isCrossed == 2 && mainshortEma < mainlongEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Kırmızı);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

Print(" SAT emri açıldı : ",OrderOpenPrice());

}

else Print("SATIŞ emrini açarken hata: ",GetLastError());

dönüş(0);

}

dönüş(0);

}

dönüş(0);

}

//+------------------------------------------- -------------------+

Dosyalar:
ps.jpg  16 kb
 

teras

Bu kodun SL veya TP ile ilgisi yok. Sadece çaprazlar için 2 ortalamayı test eder (bakın michaelB'nin aynı kodu 2MACross'unda nasıl kullandığına bakın, çünkü bu da nan EA'dır). Bu SL ve TP hataları için kodunuzun geri kalanının revize edilmesi gerekiyor.

tkuan77:
Yardımın için teşekkürler Mladen! Ancak bu kodu eklediğimde, EA'm biraz kontrolden çıkmış gibi görünüyor. Bazen, ekran görüntüsünde gösterildiği gibi gerçek SL veya TP'ye ulaşılmadan önce bile kendi kendine otomatik SL veya TP olacaktır. neden böyle?

Teşekkürler ve saygılar

teras

//--- giriş parametreleri

harici çift TakeProfit=1000.0;

dış çift Lot = 0.1;

harici çift StopLoss=1500.0;

//+------------------------------------------- -------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- -------------------+

int init()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| uzman sıfırlama işlevi |

//+------------------------------------------- -------------------+

int tanım()

{

//----

//----

dönüş(0);

}

int mainCrossed (çift ana hat1, çift ana hat2)

{

statik int mainlast_direction = 0;

statik int maincurrent_dirction = 0;

if(mainline1>mainline2)maincurrent_dirction = 1; // ana yukarı

if(mainline1<mainline2)maincurrent_dirction = 2; // ana aşağı

if(maincurrent_dirction != mainlast_direction) //main değişti

{

mainlast_direction = maincurrent_dirction;

dönüş (mainlast_direction);

}

başka

{

dönüş (0);

}

}

//+------------------------------------------- -------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- -------------------+

int başlangıç()

{

//----

int cnt, bilet, toplam;

double shortEma, longEma, mainshortEma, mainlongEma;

if(Çubuklar<100)

{

Print("100'den küçük barlar");

dönüş(0);

}

if(Kâr Al<10)

{

Print("Kar Al 10'dan az");

dönüş(0); // TakeProfit'i kontrol edin

}

int Çapraz = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);

çift fark1 = kısaEma1-uzunEma1;

çift fark2 = kısaEma2-uzunEma2;

mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);

mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);

int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);

eğer ((fark1*fark2)<0)

{

if (kısaEma1>uzunEma1)

çapraz = 1;

yoksa Çapraz = 2;

}

toplam = SiparişlerToplam();

if(toplam < 1)

{

if(isCrossed == 1 && mainshortEma > mainlongEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,

"EA'm",12345,0,Yeşil);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

Print("Satın alma emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());

dönüş(0);

}

if(isCrossed == 2 && mainshortEma < mainlongEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Kırmızı);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

Print("SAT emri açıldı : ",OrderOpenPrice());

}

else Print("SATIŞ emrini açarken hata: ",GetLastError());

dönüş(0);

}

dönüş(0);

}

dönüş(0);

}

//+------------------------------------------- -------------------+
 

...

Evet kasıtlı

Bir gösterge değil, bir EA yaptığınız için, ekleme yalnızca son aktif çarpıyı gösterecek ve aktif çarpı olmadığında ok göstermeyecekti. Birden fazla ok gösterebilmesi için önce göstergeye dönüştürülmesi ve ardından her şeyin yeniden yazılması gerekir, ancak bence zaten grafikte ortalamaları gösteren birçok gösterge var.

michaelB:
"Yorumlu 2MAcrossover" gerçekten iyi çalışıyor.

Sadece bir soru - bir kez bir ok belirdiğinde, yeni bir mum açıldığında kaybolacaktır, bu kasıtlı mıydı?

Grafiğin sağ alt köşesindeki yorumu beğendim.

Tekrar teşekkürler.
 
mladen:
Terrance Bu kodun SL veya TP ile ilgisi yok. Sadece çaprazlar için 2 ortalamayı test eder (bakın michaelB'nin aynı kodu 2MACross'unda nasıl kullandığına bakın, çünkü bu da nan EA'dır). Bu SL ve TP hataları için kodunuzun geri kalanının revize edilmesi gerekiyor.

Merhaba Mladen,

TP ve SL'mi ayarlama şeklim yanlış mı demek istiyorsun?

Saygılarımızla

teras

 

...

teras

TSD: Dersler'in bu bölümünü gördünüz mü?

Orada birçok sorunun zaten yanıtlandığını ve genel EA yazımı için çok iyi örnekler bulabileceğinizi düşünüyorum. Sorunuz itibariyle: EA'nızı test etmedim, bu yüzden bilmiyorum. Başka birinin EA'sını test etmedeki sorun, kişinin onun fikrini ve mantığını bilmesi gerektiği ve çoğu zaman bunları kodun kendisinden "okumanın" imkansız olmasıdır. Bahsettiğimiz kod parçası, kapalı bir çubukta 2 ortalama çarpı işaretinin nasıl tespit edileceği ile ilgiliydi ve bu kod sadece bunu yapıyor ve bundan başka bir şey yapmıyor. O yüzden "SL veya TP ile alakası yok" dedim.

Saygılarımızla

Mladen

tkuan77:
Merhaba Mladen,

TP ve SL'mi ayarlama şeklim yanlış mı demek istiyorsun?

Saygılarımızla

teras
 

MQL Dersleri Konusu

mladen-- bağlantı için teşekkürler!!

Neden: