Hilfe bei der Codierung - Seite 62

 

...

Sie müssen 2 Dinge tun
:- die Variable "period" als double deklarieren (MQL verhält sich manchmal seltsam, wenn bei der Division eine Variable vom Typ integer verwendet wird)

- die Variable "period" initialisieren (im Moment ist sie nicht initialisiert und deshalb hat der letzte Schritt nicht funktioniert)

Danach erhalten Sie so etwas wie das hier:

Ein schönes Wochenende

chenairbin:
#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Rot

#eigenschaft indicator_maximum 100

#Eigenschaft indicator_level1 70

#eigenschaft indicator_level2 50

#Eigenschaft indicator_level3 30

#Eigenschaft indicator_minimum 0

//---- Eingabeparameter

extern int rsiperiod = 14 ;

extern int Kurzfristige Periode = 5 ;

extern int Middleperiod = 8;

extern int Longperiod = 13;

extern int mamode = 2 ;

//---- Puffer

double RSI[];

double ShortRSI[];

double MiddleRSI[];

double LongRSI[];

double SMRSI[];

int period ;

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

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

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

int init()

{

//---- Indikatoren

IndicatorBuffers(5);

SetIndexPuffer(0,SMRSI);

SetIndexPuffer(1,RSI);

SetIndexPuffer(2,ShortRSI);

SetIndexBuffer(3,MiddleRSI);

SetIndexBuffer(4,LongRSI);

//---- Name für DataWindow und Bezeichnung des Indikator-Unterfensters

IndicatorShortName("SMRSI("+rsiperiod+", "+Shortperiod+", "+Middleperiod+", "+Longperiod +", "+mamode+")");

SetIndexDrawBegin(0,rsiperiod+Longperiod);

period=Shortperiod+Middleperiod+Longperiod;

return(0);

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int start()

{

int gezählte_Balken=IndicatorCounted();

int i,limit;

if(gezählte_Balken<0) return(-1);

if(gezählte_Balken>0) gezählte_Balken--;

limit = Balken-gezählte_Balken;

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,Middleperiod,0,mamode,i);

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

for( i=limit; i>=0; i--) { if(period!=0) SMRSI=(Shortperiod/period)*ShortRSI+(Middleperiod/period)*MiddleRSI+(Longperiod/period)*LongRSI;}

return(0);

}

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

n_n

mladen:
Sie müssen 2 Dinge tun
:- die Variable "period" als double deklarieren (MQL verhält sich manchmal seltsam, wenn in der Division eine Variable vom Typ integer verwendet wird)

- die Variable "period" initialisieren (im Moment ist sie nicht initialisiert und deshalb hat der letzte Schritt nicht funktioniert)

Danach erhalten Sie ein Ergebnis wie dieses:

Ich wünsche Ihnen ein schönes Wochenende

Vielen Dank!

 

Hallo,

ich habe den Indikator auf der mql4-Website heruntergeladen. Ich versuche, einen EA auf der Grundlage dieses Indikators zu tun, aber wenn ich den Backtest nach einigen Sekunden starten die Plattformen abstürzen und ich denke, es ist ein Fehler des Indikators, weil es eine Menge von cpu verwenden ist.

Also frage ich, ob es möglich ist, den Code zu erhellen, um dieses Problem zu lösen.

Vielen Dank für Ihre Bereitschaft.

cronex_taichi.mq4

Dateien:
 

dasio

Ich habe es mit diesem Snippet getestet, und es funktioniert gut. Ich kenne die Parameter nicht, die Sie verwendet haben, so dass dies nur einen Standardindikator aufruft, aber es gibt kein Problem auf diese Weise

int init()

{

return(0);

}

int start()

{

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

return(0);

}

dasio:
Hallo,

Ich habe den Indikator auf der mql4-Website heruntergeladen. Ich versuche, einen EA auf der Grundlage dieses Indikators zu tun, aber wenn ich den Backtest nach einigen Sekunden starten die Plattformen abstürzen und ich denke, es ist ein Fehler des Indikators, weil es eine Menge von cpu verwenden.

Also frage ich, ob es möglich ist, den Code zu erhellen, um dieses Problem zu lösen.

Vielen Dank für Ihre Bereitschaft.

cronex_taichi.mq4
 
mladen:
dasio

Ich habe es mit diesem Schnipsel getestet, und es funktioniert gut. Ich kenne die Parameter nicht, die Sie verwendet haben, so dass dies nur einen Standardindikator aufruft, aber es gibt kein Problem auf diese Weise

int init()

{

return(0);

}

int start()

{

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

return(0);

}

Vielen Dank für Ihre Antwort,

was ich sehe, ist, dass in der Geschichte der Indikator wiederholt geladen wurde, so dass ich den Code von icustom nur in einem neuen Kerze-Ereignis verschieben, aber das Problem bleibt weiterhin bestehen.

Ich weiß nicht, warum.

Wie auch immer, ich danke Ihnen für Ihre Bereitschaft.

 

Hallo,

ich habe das Problem gefunden. Jetzt ist alles in Ordnung.

Ich habe ein anderes Problem mit einem anderen ea.

Ich habe diese zwei Code und die Funktion Lotti() würde mir die Anzahl der Lot für eine ordersend zurück.

Wenn ich es kompilieren erhalte ich Posizioni Internal Error. Was ist das Problem? Ich danke Ihnen;

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

}
 

Versuchen Sie, OTBM() durch Folgendes zu ersetzen:

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

}
 

Hallo, -.-"

Ich finde keine Ruhe mit diesen Codes eheheh.

Ich habe ein Problem mit einer Funktion, die mir den Gewinn aller openorder ergeben soll, aber ich denke, es funktioniert nicht, weil die Bedingung nie eingehalten wurde. Unten der Code:

.....

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

Versuchen Sie es so:

.....

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

Versuchen Sie dies:

.....

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

}

Auf diese Weise prüfe ich die Aufträge, die nicht mit der angegebenen magischen Zahl geöffnet wurden, richtig? Ich muss die Order mit einem bestimmten Symbol und einer magischen Zahl überprüfen. Ich weiß nicht, ob es wichtig ist, aber ich habe den Fehler im Strategie-Tester gefunden

Grund der Beschwerde: