Nasıl kodlanır? - sayfa 298

 
mladen:
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

Merhaba Mladen, tekrar rahatsız ettiğim için özür dilerim. Kodlarımı inceledim ve sadece TP ve SL'mi değil, bazen alış ve satış siparişlerimin bile kapalı olduğunu fark ettim. Kodlayıcılar guruları tarafından bana verdiğiniz dersle ilgili bağlantıları inceledim ve bu, sahip olduğum ve kodlarımı temel alan aynı öğreticiler seti. Kodlarda hatamın nedenini cidden bulamıyorum.

MA'nın çaprazları, Uzun ve Kısa siparişle birlikte olması gerektiği gibi çalışır, ancak bazen Giriş ve Çıkış, test etmek için temel bir ASK işlevi yaptığımda bile kontrolden çıkıyor gibi görünüyor. Lütfen bana biraz ışık tut.

Teşekkürler ve saygılar

teras

 

...

teras

Birincisi: Brokeriniz ECN/STP gibi mi? Evet ise, emir açılışı ile birlikte zararı durdur ve kar al koyamazsınız, ancak önce 0'a ayarlanmış olan bir emir açmalı ve zararı durdur ve/veya önceden açılmış bir emirde kar al için OrderModify()'ı kullanmalısınız. .

İkincisi: Ayrıca, her zaman terminal penceresinin uzmanlar sekmesinde yazılı bir şey olup olmadığını kontrol edin (orada bazı hataların yazılıp yazılmadığını kontrol edin: muhtemelen neler olduğunu ve neden olduğunu öğreneceksiniz.

Üçüncüsü: Bunun gibi bir satır yerleştirmek iyi bir fikir olabilir:

int err=GetLastError(); Print(err);

Her Sipariş yönetimi işlevinden sonra. Uzmanlar/include/stderror.mqh dosyasında bulabileceğiniz hata açıklamaları (siparişlerde meydana gelebilecek birçok hata vardır (sadece olası hata kodlarının ve açıklamalarının listesine bakın) ve olası her hatayı izlemeniz gerekir) bilinen hata kodları (yukarıdaki kod satırı), neler olduğunu tahmin etmek yerine belirli hataları düzeltmeye odaklanabilirsiniz.

tkuan77:
Merhaba Mladen, tekrar rahatsız ettiğim için özür dilerim. Kodlarımı inceledim ve sadece TP ve SL'mi değil, bazen alış ve satış siparişlerimin bile kapalı olduğunu fark ettim. Kodlayıcılar guruları tarafından bana verdiğiniz dersle ilgili bağlantıları inceledim ve bu, sahip olduğum ve kodlarımı temel alan aynı öğreticiler seti. Kodlarda hatamın nedenini cidden bulamıyorum.

MA'nın çaprazları, Uzun ve Kısa siparişle birlikte olması gerektiği gibi çalışır, ancak bazen Giriş ve Çıkış, test etmek için temel bir ASK işlevi yaptığımda bile kontrolden çıkıyor gibi görünüyor. Lütfen bana biraz ışık tut.

Teşekkürler ve saygılar

teras
Dosyalar:
terminal_1.gif  62 kb
 
mladen:
teras

Birincisi: Brokeriniz ECN/STP gibi mi? Evet ise, emir açılışı ile birlikte zararı durdur ve kar al koyamazsınız, ancak önce 0'a ayarlanmış olan bir emir açmalı ve zararı durdur ve/veya önceden açılmış bir emirde kar al için OrderModify()'ı kullanmalısınız. .

İkincisi: Ayrıca, her zaman terminal penceresinin uzmanlar sekmesinde yazılı bir şey olup olmadığını kontrol edin (orada bazı hataların yazılıp yazılmadığını kontrol edin: muhtemelen neler olduğunu ve neden olduğunu öğreneceksiniz.

Üçüncüsü: Bunun gibi bir satır yerleştirmek iyi bir fikir olabilir:

int err=GetLastError(); Print(err);
Her Sipariş yönetimi işlevinden sonra. Uzmanlar/include/stderror.mqh dosyasında bulabileceğiniz hata açıklamaları (siparişlerde meydana gelebilecek birçok hata vardır (sadece olası hata kodlarının ve açıklamalarının listesine bakın) ve olası her hatayı izlemeniz gerekir) bilinen hata kodları (yukarıdaki kod satırı), neler olduğunu tahmin etmek yerine belirli hataları düzeltmeye odaklanabilirsiniz.

Merhaba Mladen,

ECN/STP meselesine dikkat çektiğiniz için teşekkürler. Sen söyleyene kadar bunlardan haberim yoktu. Önerdiğiniz gibi değişiklikleri yaptım, ancak şimdi sadece benim için daha kötü oldu. Sadece Giriş ve Çıkış sorunu devam etmekle kalmıyor, şimdi SL'm de kayıp. Bu düşündüğümden daha zor.

//--- 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,Sor,3,0,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,0,Teklif Al-Kar*Puan,

"EA'm",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);

}

for(cnt=0;cnt<toplam;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // uzun pozisyon açıldı

{

OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet);

// konumu kapat

dönüş(0); // çıkış

}

else // kısa pozisyona git

{

OrderClose(OrderTicket(),OrderLots(),Teklif+StopLoss*Puan,3,Violet);

// konumu kapat

dönüş(0); // çıkış

}

}

}

dönüş(0);

}

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

 
mladen:
teras

Birincisi: Brokeriniz ECN/STP gibi mi? Evet ise, emir açılışı ile birlikte zararı durdur ve kar al koyamazsınız, ancak önce 0'a ayarlanmış olan bir emir açmalı ve zararı durdur ve/veya önceden açılmış bir emirde kar al için OrderModify()'ı kullanmalısınız. .

İkincisi: Ayrıca, her zaman terminal penceresinin uzmanlar sekmesinde yazılı bir şey olup olmadığını kontrol edin (orada bazı hataların yazılıp yazılmadığını kontrol edin: muhtemelen neler olduğunu ve neden olduğunu öğreneceksiniz.

Üçüncüsü: Bunun gibi bir satır yerleştirmek iyi bir fikir olabilir:

int err=GetLastError(); Print(err);
Her Sipariş yönetimi işlevinden sonra. Uzmanlar/include/stderror.mqh dosyasında bulabileceğiniz hata açıklamaları (siparişlerde meydana gelebilecek birçok hata vardır (sadece olası hata kodlarının ve açıklamalarının listesine bakın) ve olası her hatayı izlemeniz gerekir) bilinen hata kodları (yukarıdaki kod satırı), neler olduğunu tahmin etmek yerine belirli hataları düzeltmeye odaklanabilirsiniz.

Hey Mladen, bu birkaç gündeki yardımların için sana teşekkür etmek istiyorum. Kodumda giriş ve çıkış hatasına neden olan hatayı bulmayı başardım.

Saygılarımızla

teras

 

1'den fazla işlem açma

Herkese selam, EA'mı birden fazla işlem açabilecek hale getirmeye çalışıyorum, ancak şu ana kadar bunu yalnızca 1 işlemle sınırlayabiliyorum.

Amacım basit:

LWMA 10, LWMA 20'nin altına düştüğünde, sistem hem LWMA 10 hem de 20'nin SMA 50'nin altına düşmesi ve uzun işlemler için tam tersi olması koşuluyla kısa devre yapacaktır.

EA'mı 2'den fazla işlem açmayacak şekilde sınırlamak istiyorum, ancak kodları değiştirdiğimde, kriter başına 1 işlem açmak yerine bir seferde 2 işlem açma oluyor.

Bir sayaç sistemi veya herhangi bir şey kurmam gerekiyor mu veya sayacımı, ticaretimin 1'inde zaten TP veya SL olduğunda tepki verecek şekilde nasıl ayarlarım?

Birisi lütfen bana kodlarımda neyin yanlış olduğu konusunda biraz ışık tutabilir mi?

çok teşekkürler ve saygılar

teras

//--- giriş parametreleri

harici çift TakeProfit=500.0;

dış çift Lot = 0.1;

harici çift StopLoss=500.0;

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

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

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

int tanım()

{

//----

//----

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

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);

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,50,0,MODE_SMA,PRICE_CLOSE,0);

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

{

if (kısaEma1>uzunEma1)

çapraz = 1;

yoksa Çapraz = 2;

}

toplam = SiparişlerToplam();

if(toplam < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Sor+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 && shortEma < mainshortEma && longEma < mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,

"EA'm",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);

}

if(toplam == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Sor+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 && shortEma < mainshortEma && longEma < mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,

"EA'm",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);

}

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

 

sorular

Mladen,

Bana gösterdiğiniz bağlantının altındaki Dersleri aramaya çalışıyorum, ancak bunlar genel dersler, özellikle Henderson'ın göstergesi için bilgi arıyorum ...

Ayrıca, yayınlanan konuları inceledim ve bundan sonra aşağıdaki şeyleri bulmak istiyorum.

-Basit ve anlaşılır bir dille sormak istediğim, yaklaşık olarak kaç çubuk geçtikten sonra renk değişiyor.

Başka bir deyişle, çizginin rengi maviden pembeye dönüşene kadar en fazla kaç çubuk gerekir? Ne yazık ki, süslü terminolojiyi anlamıyorum ve devam edip stratejiyi başlatabileceğim çok basit bir cevap alırdım. Herhangi bir grafik çok takdir edilir. premalmunshaw@yahoo.com benim e-posta adresim.

Bu paketin etkinleştirilmesi için 39 dolar ödemeye çalışıyorum.

OLUMLU CEVAP BEKLİYORUZ!

Saygılarımızla,

Premal Munshaw

mladen:
açıkçası ne sorduğunu anlamadım

Renk ne zaman değişir diye soruyorsanız, cevap : eğim değiştiğinde

Renk değiştirmenin nasıl kodlandığını soruyorsanız, bu bölümde aramanız gereken cevap: Dersler .
 

...

Ne yazık ki sorularınızı anlamıyorum, bu yüzden tek yapacağım kendimden alıntı yapmak (hesaplama uzunluğu Henderson'ın filtre hesaplama uzunluğunu ifade eder):

hesaplama uzunluğunuz 5 ise, son 2 çubuk değişebilir

hesaplama uzunluğunuz 7 ise, son 3 çubuk değişebilir

hesaplama uzunluğunuz 9 ise, son 4 çubuk değişebilir

Bundan daha basit cevap vermek imkansız. Ve Henderson'ın filtresinin nasıl hesaplandığının daha basit bir açıklaması yok: Fourier dönüşümünü "1+1 = 2" cinsinden açıklamaya çalışsaydım böyle olurdu. Lütfen size verilen bağlantıları inceleyin

Geri kalanı itibariyle: filtrenin arkasındaki matematiğe bağlantılarınız var, kaç çubuğun yeniden hesaplandığına dair bilgi aldınız, hatta elit bölüm haber dizisinden örnekler aldınız. Bu filtreyi kullanan strateji olarak: 1000'lerce gönderide 1000 kez, yeniden hesaplanan göstergelerin (SSA, Henderson'ın filtresi, merkezli TMA, Fourier dönüşümleri, regresyon analizi, ...) "sinyalleme modunda" kullanılmaması gerektiğini söyledim. "tahmin modu". Henderson'ın filtresinden gelen bir sinyalin peşindeyseniz, tamamen yanlış yoldasınız ve elit bölüm aboneliğini düşünmenizin tek nedeni buysa, abone olmamanız daha iyidir.

Not: E-postanızı herkese açık hale getirmek kötü bir uygulamadır. Bu şekilde alacağınız tek şey e-posta kutunuzdaki bir ton spam mesajıdır.

________________________

Bir ticaret sistemi arayışınızda size en iyisini diliyorum

Saygılarımızla

Mladen

premalmunshaw:
Mladen,

Bana gösterdiğiniz bağlantının altındaki Dersleri aramaya çalışıyorum, ancak bunlar genel dersler, özellikle Henderson'ın göstergesi için bilgi arıyorum ...

Ayrıca, yayınlanan konuları inceledim ve bundan sonra aşağıdaki şeyleri bulmak istiyorum.

-Basit ve anlaşılır bir dille sormak istediğim, yaklaşık olarak kaç çubuk geçtikten sonra renk değişiyor.

Başka bir deyişle, çizginin rengi maviden pembeye dönüşene kadar en fazla kaç çubuk gerekir? Ne yazık ki, süslü terminolojiyi anlamıyorum ve devam edip stratejiyi başlatabileceğim çok basit bir cevap alırdım. Herhangi bir grafik çok takdir edilir. premalmunshaw@yahoo.com benim e-posta adresim.

Bu paketin etkinleştirilmesi için 39 dolar ödemeye çalışıyorum.

OLUMLU CEVAP BEKLİYORUZ!

Saygılarımızla,

Premal Munshaw
 

Mladen,

İşlemimde TP veya SL olduğunda karşı atlamayı tetikleyebilmem için işlemime bir sayaç ayarlamamın bir yolu var mı?

Saygılarımızla

teras

tkuan77:
Herkese selam, EA'mı birden fazla işlem açabilecek hale getirmeye çalışıyorum, ancak şu ana kadar bunu yalnızca 1 işlemle sınırlayabiliyorum.

Amacım basit:

LWMA 10, LWMA 20'nin altına düştüğünde, sistem hem LWMA 10 hem de 20'nin SMA 50'nin altına düşmesi ve uzun işlemler için tam tersi olması koşuluyla kısa devre yapacaktır.

EA'mı 2'den fazla işlem açmayacak şekilde sınırlamak istiyorum, ancak kodları değiştirdiğimde, kriter başına 1 işlem açmak yerine bir seferde 2 işlem açma oluyor.

Bir sayaç sistemi veya herhangi bir şey kurmam gerekiyor mu veya sayacımı, ticaretimin 1'inde zaten TP veya SL olduğunda tepki verecek şekilde nasıl ayarlarım?

Birisi lütfen bana kodlarımda neyin yanlış olduğu konusunda biraz ışık tutabilir mi?

çok teşekkürler ve saygılar

teras

//--- giriş parametreleri

harici çift TakeProfit=500.0;

dış çift Lot = 0.1;

harici çift StopLoss=500.0;

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

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

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

int tanım()

{

//----

//----

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

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);

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,50,0,MODE_SMA,PRICE_CLOSE,0);

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

{

if (kısaEma1>uzunEma1)

çapraz = 1;

yoksa Çapraz = 2;

}

toplam = SiparişlerToplam();

if(toplam < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Sor+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 && shortEma < mainshortEma && longEma < mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,

"EA'm",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);

}

if(toplam == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Sor+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 && shortEma < mainshortEma && longEma < mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,

"EA'm",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);

}

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

...

Bu işlevi deneyin:

int countOpenedOrders(int type)

{

int openedOrders = 0;

for(int i=0; i < OrdersTotal(); i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
ve sonra kontrol edebilirsiniz:
eğer açılırsaBuys==0 açık satın al

eğer openSells==0 açık satış

tkuan77:
Mladen,

İşlemimde TP veya SL olduğunda karşı atlamayı tetikleyebilmem için işlemime bir sayaç ayarlamamın bir yolu var mı?

Saygılarımızla

teras
 

Merhaba Mladen,

"Barlar" işlevini kullanarak başka bir yol buldum. Bir ticaret tetiklendiğinde, çubuk işleviyle bir tamsayı sayısı ayarlayacağım (örneğin, çubuk 122'de bir satın alma işlemi tetiklenir, dolayısıyla sayı 122 olur) ve kriterlerim yeniden tetiklendiğinde, çubuk işlevini tekrar çağırırım. ve sayı ile karşılaştırın ve ticaret yalnızca yeni sayım, bu durumda 122 olan öncekinden daha yüksekse tetiklenir.

Ancak, yine de kriter başına 1 yerine 2 işlemi birlikte tetikliyorum. Bu neden böyle?

Lütfen yardım et

Teşekkürler ve saygılar

teras

//--- giriş parametreleri

harici çift TakeProfit=530.0;

dış çift Lot = 0.1;

harici çift StopLoss=520.0;

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

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

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

int tanım()

{

//----

//----

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

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0);

int Çapraz = 0;

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

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

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

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

çift fark1 = kısaEma1-uzunEma1;

çift fark2 = kısaEma2-uzunEma2;

mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0);

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

{

if (kısaEma1>uzunEma1)

çapraz = 1;

yoksa Çapraz = 2;

}

int BarCounter, BarCounter2;

toplam = SiparişlerToplam();

if(toplam < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Sor+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());

BarCounter = Barlar;

}

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

dönüş(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,

"EA'm",12345,0,Kırmızı);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

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

BarCounter = Barlar;

}

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

dönüş(0);

}

dönüş(0);

}

if(toplam == 1)

{

BarCounter2 = Çubuklar;

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Sor+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());

BarCounter = BarCounter2;

}

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

dönüş(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,

"EA'm",12345,0,Kırmızı);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

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

BarCounter = BarCounter2;

}

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

dönüş(0);

}

dönüş(0);

}

dönüş(0);

}

mladen:
Bu işlevi deneyin:
int countOpenedOrders(int type)

{

int openedOrders = 0;

for(int i=0; i < OrdersTotal(); i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
ve sonra kontrol edebilirsiniz:
eğer açılırsaBuys==0 açık satın al

eğer openSells==0 açık satış