Kodlama yardımı - sayfa 62

 

...

2 şey yapmanız gerekir:
- "dönem" değişkenini double olarak bildirin (MQL, bölmede tamsayı tipi bir değişken kullanıldığında bazen garip davranır)

- bu "dönem" değişkenini başlat (şu anda başlatılmamış ve bu nedenle son adım işe yaramadı)

Bundan sonra şöyle bir şey alacaksınız:

İyi hafta sonları

chenairbin:
#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 1

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

#özellik göstergesi_maksimum 100

#özellik göstergesi_level1 70

#özellik göstergesi_level2 50

#özellik göstergesi_level3 30

#özellik göstergesi_minimum 0

//---- giriş parametreleri

harici int rsiperiod = 14 ;

extern int Kısa Süre = 5 ;

dış int Ortadönem = 8;

extern int Uzunperiyot = 13;

harici int mamode = 2 ;

//---- arabellekler

çift RSI[];

çift KısaRSI[];

çift OrtaRSI[];

çift UzunRSI[];

çift SMRSI[];

int dönem ;

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

//| Özel gösterge başlatma işlevi |

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

int init()

{

//---- göstergeler

GöstergeTamponları(5);

SetIndexBuffer(0,SMRSI);

SetIndexBuffer(1,RSI);

SetIndexBuffer(2,ShortRSI);

SetIndexBuffer(3,OrtaRSI);

SetIndexBuffer(4,LongRSI);

//---- DataWindow ve gösterge alt pencere etiketi için isim

IndicatorShortName("SMRSI("+rsiperiod+","+Kısaperiyot+","+Ortaperiyod+","+Uzunperiyod +","+mamode+")");

SetIndexDrawBegin(0,rsiperiod+Uzundönem);

periyot=Kısa periyot+Orta periyot+Uzun periyot;

dönüş(0);

}

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

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

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

int başlangıç()

{

int counted_bars=IndicatorCounted();

int i,limit;

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

if(counted_bars>0) counted_bars--;

limit = Barlar-sayılan_barlar;

for( i=limit; i>=0; i--) RSI=iRSI(NULL,0,rsiperiod,0,i);

for( i=limit; i>=0; i--) ShortRSI=iMAOnArray(RSI,0,Shortperiod,0,mamode,i);

for( i=limit; i>=0; i--) MiddleRSI=iMAOnArray(RSI,0,Ortadönem,0,mamode,i);

for( i=limit; i>=0; i--) LongRSI=iMAOnArray(RSI,0,Longperiod,0,mamode,i);

for( i=limit; i>=0; i--) { if(dönem!=0) SMRSI=(Kısadönem/dönem)*KısaRSI+(Orta dönem/dönem)*OrtaRSI+(Uzun dönem/dönem)*UzunRSI;}

dönüş(0);

}

//+------------------------------------------- -------------------+
Dosyalar:
smrsi.gif  33 kb
_test0.mq4  3 kb
 

n_n

mladen:
2 şey yapmanız gerekir:
- "dönem" değişkenini double olarak bildirin (MQL, bölmede tamsayı tipi bir değişken kullanıldığında bazen garip davranır)

- bu "dönem" değişkenini başlat (şu anda başlatılmamış ve bu nedenle son adım işe yaramadı)

Bundan sonra şöyle bir şey alacaksınız:

İyi hafta sonları

Teşekkür ederim !

 

Merhaba,

mql4 web sitesinde ekli göstergeyi indirdim. Bu göstergeye dayalı bir EA yapmaya çalışıyorum ama birkaç saniye sonra geriye dönük testi başlattığımda platformlar çöküyor ve bunun göstergenin bir hatası olduğunu düşünüyorum çünkü çok fazla işlemci kullanıyor.

Bu sorunu çözmek için kodu hafifletmenin mümkün olup olmadığını soruyorum.

Disponibility için teşekkür ederim.

cronex_taichi.mq4

Dosyalar:
 

dasio

Bu snippet ile test ettim ve sorunsuz çalışıyor. Kullandığın parametreleri bilmiyorum, bu yüzden bu sadece varsayılan bir göstergeyi çağırıyor, ancak bu şekilde bir sorun yok

int init()

{

return(0);

}

int start()

{

Comment(iCustom(NULL,0,"Cronex Taichi",0,0));

return(0);

}

dasio:
Merhaba,

mql4 web sitesinde ekli göstergeyi indirdim. Bu göstergeye dayalı bir EA yapmaya çalışıyorum ama birkaç saniye sonra geriye dönük testi başlattığımda platformlar çöküyor ve bunun göstergenin bir hatası olduğunu düşünüyorum çünkü çok fazla işlemci kullanıyor.

Bu sorunu çözmek için kodu hafifletmenin mümkün olup olmadığını soruyorum.

Disponibilite için teşekkür ederim.

cronex_taichi.mq4
 
mladen:
dasio

Bu snippet ile test ettim ve sorunsuz çalışıyor. Kullandığın parametreleri bilmiyorum, bu yüzden bu sadece varsayılan bir göstergeyi çağırıyor, ancak bu şekilde bir sorun yok

int init()

{

return(0);

}

int start()

{

Comment(iCustom(NULL,0,"Cronex Taichi",0,0));

return(0);

}

Cevabın için teşekkürler,

Gördüğüm şey, geçmişte gösterge tekrar tekrar yüklendi, bu yüzden icustom kodunu yalnızca yeni bir mum olayında hareket ettiriyorum ama sorun hala devam ediyor.

Neden bilmiyorum.

Yine de ilgisizliğiniz için teşekkür ederim.

 

Merhaba,

sorunu buldum. Şimdi her şey yolunda.

Başka bir ea ile başka bir sorunum var.

Bu iki koda sahibim ve Lotti() işlevi bana bir sipariş gönderimi için lot sayısını döndürür.

Derlediğimde Posizioni Dahili Hatası alıyorum. Sorun nedir? Teşekkür ederim;

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

intPOS++;

}

else

boolTerm=true;

}

return(intCount);

}

[/PHP]

[PHP]int Lotti(){

int Lotti;

int Posizioni=OTBM(MagicNumber);

switch (Posizioni)

{

case 0 : Lotti=0.1; break;

case 1 : Lotti=0.2; break;

case 2 : Lotti=0.4; break;

case 3 : Lotti=0.8; break;

case 4 : Lotti=1.6; break;

case 5 : Lotti=3.2; break;

case 6 : Lotti=6.4; break;

case 7 : Lotti=12.8; break;

}

return(Lotti);

}
 

OTBM()'yi şununla değiştirmeyi deneyin:

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

for (int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

}

}

return(intCount);

}

[/PHP]

dasio:
Hi,

i found the problem. Now all its ok.

I have another problem with another ea.

I have this two code and the function Lotti() would be return me the number of lot for an ordersend.

When i compile it i receive Posizioni Internal Error. What's wrong? Thank you;

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

intPOS++;

}

else

boolTerm=true;

}

return(intCount);

}

[PHP]int Lotti(){

int Lotti;

int Posizioni=OTBM(MagicNumber);

switch (Posizioni)

{

case 0 : Lotti=0.1; break;

case 1 : Lotti=0.2; break;

case 2 : Lotti=0.4; break;

case 3 : Lotti=0.8; break;

case 4 : Lotti=1.6; break;

case 5 : Lotti=3.2; break;

case 6 : Lotti=6.4; break;

case 7 : Lotti=12.8; break;

}

return(Lotti);

}
 

Merhaba, -.-"

Bu kodlarla huzur bulamıyorum eheheh.

Bana tüm openorder kârıyla sonuçlanması gereken bir fonksiyonla ilgili bir sorunum var ama bence işe yaramıyor çünkü koşula asla saygı gösterilmedi. Kodun altında:

.....

if(Profit()>=0.....[/PHP]

[PHP]double Profit()

{

int total=OrdersTotal();

double profit=0;

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}
 

dasio

Şu şekilde deneyin:

.....

if(Profit()>=0.....[/PHP]

double Profit()

{

int total=OrdersTotal();

double profit=0;

for(int i=0; i<total-1; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}[/PHP]

dasio:
Hi, -.-"

I do not find peace with these codes eheheh.

I have a problem with a function that have to result me the profit of all openorder but i think it's not work because the condition never been respected. Below the code:

[PHP].....

if(Profit()>=0.....

[PHP]double Profit()

{

int total=OrdersTotal();

double profit=0;

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}
 
mladen:
dasio

Şu şekilde deneyin:

.....

if(Profit()>=0.....[/PHP]

[PHP]double Profit()

{

int total=OrdersTotal();

double profit=0;

for(int i=0; i<total-1; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}

Bu şekilde belirtilen sihirli sayı ile açılmayan siparişleri kontrol ediyorum değil mi? Belirli bir sembol ve sihirli numara ile sırayı kontrol etmem gerekiyor. Önemli mi bilmiyorum ama hatayı strateji test cihazında buldum

Neden: