Nasıl kodlanır? - sayfa 327

 

Herkese selam, Stocastic'te EA'mda bu özel hatayı yaşıyorum.

Bu benim kriterlerim şöyle:

stocEquator'um yukarı doğru kesiştiğinde (Uptrend), stocTrigger'ım yukarıya geçtiğinde ve stocEquator aşağı doğru kesiştiğinde (Downtrend) yalnızca long tetiklenir, stocTrigger aşağı geçtiğinde yalnızca kısa tetiklenir.

Ancak, test için EA'yı çalıştırdığımda, tetiklenen hiçbir işlem yok ve burada sorunun ne olabileceğini merak ediyordum ve birisi bana burada yardımcı olabilirse memnun olurum.

Yardım için şimdiden teşekkür ederim.

Saygılarımızla

teras

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>uzunStoc1Trigger)

isCrossedTrigger= 1;

başka isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = kısaStoc1Equator-uzunStoc1Equator;

double diff2Equator = kısaStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (kısaStoc1Equator>uzunStoc1Equator)

isCrossedEquator = 1;

başka isCrossedEquator = 2;

}

if(toplam < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Satın almak

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Satmak

}

dönüş(0);

}

dönüş(0);

 
tkuan77:
Herkese selam, Stocastic'te EA'mda bu özel hatayı yaşıyorum.

Bu benim kriterlerim şöyle:

stocEquator'um yukarı doğru kesiştiğinde (Uptrend), stocTrigger'ım yukarıya geçtiğinde ve stocEquator aşağı doğru kesiştiğinde (Downtrend) yalnızca long tetiklenir, stocTrigger aşağı geçtiğinde yalnızca kısa tetiklenir.

Ancak, test için EA'yı çalıştırdığımda, tetiklenen hiçbir işlem yok ve burada sorunun ne olabileceğini merak ediyordum ve birisi bana burada yardımcı olabilirse memnun olurum.

Yardım için şimdiden teşekkür ederim.

Saygılarımızla

teras

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>uzunStoc1Trigger)

isCrossedTrigger= 1;

başka isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = kısaStoc1Equator-uzunStoc1Equator;

double diff2Equator = kısaStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (kısaStoc1Equator>uzunStoc1Equator)

isCrossedEquator = 1;

başka isCrossedEquator = 2;

}

if(toplam < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Satın almak

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Satmak

}

dönüş(0);

}

dönüş(0);

teras

Kontrol edemediğim tek şey "toplam" değişkeni

Toplam değişken doğru ayarlanmışsa kod çalışmalıdır. İşte koşullarınızla kullandığım bir test göstergesi ve geçerli al ve sat sinyalleri yükseltiyor (göstergeyi görsel modda çalıştırın ve uyarı verdiğinde göreceksiniz) yani hata başka bir yerde

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 

Merhaba mladen, vurgu için teşekkürler. Geri dönüp kodlarıma baktım ve "toplam" değişkeni ile ne demek istediğinizi anlayamadım. Hatamın nedeni ne olabilir?

Saygılarımızla

teras

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

//| My_First_EA.mq4 |

//| TK|

//| MetaTrader 4 İşlem Platformu / MetaQuotes Software Corp. |

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

#özellik telif hakkı "TK"

#özellik bağlantısı "http://www.metaquotes.net"

//--- 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 |

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

tarihsaat yeni çubuğu;

int başlangıç()

{

if(newbar==Zaman[0])dönüş(0);

başka newbar=Zaman[0];

int bilet, toplam;

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);

}

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

//| uzman başlatma işlevi | Stokastik Tetikleyici

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //orijinal Stok hareketi

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //orijinal Stok hareketi

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

//| uzman başlatma işlevi | Tetikleme ticaretini yalnızca çizgi aşıldığında ve mum kapandığında ayarlayın |//

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

int Çapraz = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

çift fark1 = kısaStoc1-uzunStoc1;

çift fark2 = kısaStoc2-uzunStoc2;

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

{

eğer (kısaStoc1>uzunStoc1)

çapraz = 1;

yoksa Çapraz = 2;

}

// Ekvator Stok Başlangıç -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = kısaStoc1Equator-uzunStoc1Equator;

double diff2Equator = kısaStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (kısaStoc1Equator>uzunStoc1Equator)

isCrossedEquator = 1;

başka isCrossedEquator = 2;

}

// Ekvator Stok Sonu -------------------------------------

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

//| uzman son işlevi | Tetikleme ticaretini yalnızca çizgi aşıldığında ve mum kapandığında ayarlayın |//

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

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

//| uzman son işlevi | Stokastik Tetikleyici

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

//| uzman başlatma işlevi | Tetik sırası

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

toplam = SiparişlerToplam();

if(toplam < 2) //açılan işlem sayısını sınırla

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

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 && isCrossedEquator == 2)

{

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);

}

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

//| uzman son işlevi |

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

mladen:
teras

Kontrol edemediğim tek şey "toplam" değişkeni

Toplam değişken doğru ayarlanmışsa kod çalışmalıdır. İşte koşullarınızla kullandığım bir test göstergesi ve geçerli al ve sat sinyalleri yükseltiyor (göstergeyi görsel modda çalıştırın ve uyarı verdiğinde göreceksiniz) yani hata başka bir yerde

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 
tkuan77:
Merhaba mladen, vurgu için teşekkürler. Geri dönüp kodlarıma baktım ve "toplam" değişkeni ile ne demek istediğinizi anlayamadım. Hatamın nedeni ne olabilir?

Saygılarımızla

teras

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

//| My_First_EA.mq4 |

//| TK|

//| MetaTrader 4 İşlem Platformu / MetaQuotes Software Corp. |

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

#özellik telif hakkı "TK"

#özellik bağlantısı "http://www.metaquotes.net"

//--- 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 |

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

tarihsaat yeni çubuğu;

int başlangıç()

{

if(newbar==Zaman[0])dönüş(0);

başka newbar=Zaman[0];

int bilet, toplam;

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);

}

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

//| uzman başlatma işlevi | Stokastik Tetikleyici

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //orijinal Stok hareketi

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //orijinal Stok hareketi

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

//| uzman başlatma işlevi | Tetikleme ticaretini yalnızca çizgi aşıldığında ve mum kapandığında ayarlayın |//

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

int Çapraz = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

çift fark1 = kısaStoc1-uzunStoc1;

çift fark2 = kısaStoc2-uzunStoc2;

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

{

eğer (kısaStoc1>uzunStoc1)

çapraz = 1;

yoksa Çapraz = 2;

}

// Ekvator Stok Başlangıç -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = kısaStoc1Equator-uzunStoc1Equator;

double diff2Equator = kısaStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (kısaStoc1Equator>uzunStoc1Equator)

isCrossedEquator = 1;

başka isCrossedEquator = 2;

}

// Ekvator Stok Sonu -------------------------------------

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

//| uzman son işlevi | Tetikleme ticaretini yalnızca çizgi aşıldığında ve mum kapandığında ayarlayın |//

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

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

//| uzman son işlevi | Stokastik Tetikleyici

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

//| uzman başlatma işlevi | Tetik sırası

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

toplam = SiparişlerToplam();

if(toplam < 2) //açılan işlem sayısını sınırla

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

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 && isCrossedEquator == 2)

{

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);

}

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

//| uzman son işlevi |

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

teras

EA'nın çalıştığı testlerimde

İşte test sonucu artı geri test raporu. 1 dakikalık zaman diliminde test edildi

Dosyalar:
tk.zip  16 kb
result.gif  13 kb
 

Herkese selam, lütfen birisi bana aşağıdaki kodla yardımcı olabilir mi,,,, sadece ticaret için gerekli koşullar tetiklendiğinde değil, her tıklamada bana sesli uyarı vermeye devam ediyor! Uyarının her tikte veya yeni mum çubuğu oluştuğunda ses çıkarmasını istemiyorum.

#özellik göstergesi_chart_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_color1 Kireç

#özellik göstergesi_renk2 Kırmızı

//---- giriş parametreleri

harici int ADXbars=14;

harici int CountBars=350;

//---- arabellekler

çift val1[];

çift val2[];

çift b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//| Özel gösterge sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| Özel gösterge yineleme işlevi |

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

int init()

{

//-- gösterge kısa adı

GöstergeShortName("PipsdatorPro1("+Symbol()+")");

//---- gösterge çizgisi

Gösterge Tamponları(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

dönüş(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

int başlangıç()

{

if (CountBars>=Barlar) CountBars=Barlar;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bars-CountBars);

int i,shift,counted_bars=IndicatorCounted();

//---- olası hataları kontrol et

if(counted_bars<0) return(-1);

//---- ilk sıfır

if(sayılan_barlar<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;

}

for (shift = CountBars; shift>=0; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

şimdiminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Düşük[shift]-5*Nokta;

// Alert("Buy Arrow","\n","Geçerli saat ",TimeToStr(CurTime()),"\n",Symbol());

ben++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=Yüksek[shift]+5*Nokta;

// Alert("Oku Sat",\n","Geçerli saat ",TimeToStr(CurTime()),"\n",Symbol());

ben++;

}

}

dönüş(0);

}

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

 
Mastercash:
Herkese selam, lütfen birisi bana aşağıdaki kodla yardımcı olabilir mi,,,, sadece ticaret için gerekli koşullar tetiklendiğinde değil, her tıklamada bana sesli uyarı vermeye devam ediyor! Uyarının her tikte veya yeni mum çubuğu oluştuğunda ses çıkarmasını istemiyorum.

#özellik göstergesi_chart_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_color1 Kireç

#özellik göstergesi_renk2 Kırmızı

//---- giriş parametreleri

harici int ADXbars=14;

harici int CountBars=350;

//---- arabellekler

çift val1[];

çift val2[];

çift b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//| Özel gösterge sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| Özel gösterge yineleme işlevi |

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

int init()

{

//-- gösterge kısa adı

GöstergeShortName("PipsdatorPro1("+Symbol()+")");

//---- gösterge çizgisi

Gösterge Tamponları(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

dönüş(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

int başlangıç()

{

if (CountBars>=Barlar) CountBars=Barlar;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bars-CountBars);

int i,shift,counted_bars=IndicatorCounted();

//---- olası hataları kontrol et

if(counted_bars<0) return(-1);

//---- ilk sıfır

if(sayılan_barlar<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;

}

for (shift = CountBars; shift>=0; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

şimdiminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Düşük[shift]-5*Nokta;

// Alert("Buy Arrow","\n","Geçerli saat ",TimeToStr(CurTime()),"\n",Symbol());

ben++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=Yüksek[shift]+5*Nokta;

// Alert("Oku Sat",\n","Geçerli saat ",TimeToStr(CurTime()),"\n",Symbol());

ben++;

}

}

dönüş(0);

}

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

Mastercash, burada bu göstergenin bir versiyonu var https://www.mql5.com/en/forum/173574/page320 belki yardımcı olabilir.

 
mladen:
teras

EA'nın çalıştığı testlerimde

İşte test sonucu artı geri test raporu. 1 dakikalık zaman diliminde test edildi

Merhaba mladen, yorumlarınıza göre kodu yeniden inceledim ve işlemin ancak stokastik çizgilerimin ikisi de aynı mumda yukarı veya aşağı tetiklendiğinde tetikleneceğini fark ettim.

Bununla birlikte, başarmaya çalıştığım şey, ekvator göstergesi yukarı trendi işaret ediyorsa, EA, hem ekvator hem de hızlı göstergenin aynı yönde tetiklenmesi yerine, hızlı gösterge yukarı tetiklendiğinde ve tam tersi olduğunda yalnızca uzun süre tetikleyecektir. aynı mum.

EA'yı bu kriterlere uyacak şekilde ayarlamaya çalıştım ama istenen sonuçları alamadım. Yanlış yaptığım bir şey mi var? Lütfen yardım et. Tekrar teşekkürler.

Saygılarımızla

teras

 
tkuan77:
Merhaba mladen, yorumlarınıza göre kodu yeniden inceledim ve işlemin ancak stokastik çizgilerimin ikisi de aynı mumda yukarı veya aşağı tetiklendiğinde tetikleneceğini fark ettim.

Bununla birlikte, başarmaya çalıştığım şey, ekvator göstergesi yukarı trendi işaret ediyorsa, EA, hem ekvator hem de hızlı göstergenin aynı yönde tetiklenmesi yerine, hızlı gösterge yukarı tetiklendiğinde ve tam tersi olduğunda yalnızca uzun süre tetikleyecektir. aynı mum.

EA'yı bu kriterlere uyacak şekilde ayarlamaya çalıştım ama istenen sonuçları alamadım. Yanlış yaptığım bir şey mi var? Lütfen yardım et. Tekrar teşekkürler.

Saygılarımızla

teras

teras

Bunu başarmak için muhtemelen özel bir gösterge yazmanız gerekecek (EA'larda bazı şeyleri yaptığınız gibi yapamazsınız göstergeler)

 
mladen:
Terrance Bunu başarmak için muhtemelen özel bir gösterge yazmanız gerekecek (EA'larda bazı şeyleri yaptığınız gibi yapamazsınız göstergeler)

Merhaba mladen, anlamadığım 1 şey, aynı kriterler olmasına rağmen bunu neden iMA ile değil de MA ile yapabiliyorum? Bir çeşit gösterge ayarları olabilir mi?

Saygılarımızla

teras

 
tkuan77:
Merhaba mladen, anlamadığım 1 şey, aynı kriterler olmasına rağmen bunu neden iMA ile değil de MA ile yapabiliyorum? Bir çeşit gösterge ayarları olabilir mi?

Saygılarımızla

teras

çünkü özel gösterge ile iki işaret arasındaki durumları (eğilimleri) kaydedebilirsiniz ve iMA kullandığınızda yapamazsınız (sadece bir örnek)