Fragen Sie! - Seite 29

 
Yannis:
Dave,

Versuchen Sie, Ihren Code in das folgende Snippet zu ändern, und lassen Sie mich wissen, ob das den Trick gebracht hat.

Yannis

int i=0;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && ( OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Punkt),Bid-(20*Punkt),Cyan); //Ändern Sie Stop Loss und Take Profit

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && ( OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Punkt),Ask+(20*Punkt),Cyan); //Stop Loss und Take Profit ändern

return(0);

}

return(0);

}

}

Ich habe ein Problem damit, dass die Trades im Backtester immer wieder geändert werden. Wie kann ich erreichen, dass die Abschlüsse nur einmal geändert werden. Da das Programm in den Ruhezustand geht, müssen nur die noch offenen Geschäfte geändert werden.

Siehe beigefügtes .Gif der Backtest-Ergebnisse. Ich bin so nah dran, das richtig zu machen - Bitte beraten Sie mich!!! Ich verwende diese Take Profit- und Stop Loss-Änderung in Verbindung mit dem Schlafmodus. Bitte sehen Sie den folgenden Code

int start()

{

if (UseHourTrade)

{

int a=0;

int b=0;

int c=0;

if(!(Hour()>=FromHourTrade1 && Hour()<=ToHourTrade1)) a=1;

if(!(Stunde()>=VonStundeHandel2 && Stunde()<=BisStundeHandel2)) b=1;

if(!(Stunde()>=VonStundeHandel3 && Stunde()<=BisStundeHandel3)) c=1;

if(a==1 && b==1 && c==1)

{

Comment(

"\n"," * SOLAR WIND EXPERT ADVISOR *",

"\n",

"\n", " - PROGRAMM IM SCHLAFZYKLUS - ",

"\n",

"\n"," > NON-TRADING HOURS! <");

///////////////////ÄNDERUNG VON STOP LOSS UND TAKE PROFIT ZU BEGINN DES SCHLAFZYKLUS /////////////////

int h=0;

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

OrderSelect(h, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Punkt),Bid-(20*Punkt),Cyan); //Ändern Sie Stop Loss und Take Profit

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Punkt),Ask+(20*Punkt),Cyan); //Stop Loss und Take Profit ändern

return(0);

}

return(0);

}

}

Dave <<<

BITTE SEHEN SIE SICH DAS ANGEHÄNGTE VORSCHAUBILD AN!

 

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

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

die gleiche Anzahl zählen lassen

 

Ich verstehe das nicht. Wie kann ich diesen Fehler korrigieren? Vielleicht sehe ich es ja doch - ich ändere cnt1 in h. Liege ich richtig?

Dave

<<

 
phoenix:
Ihr OrderSelect() hat nicht auf der Basis der laufenden Schleife gezählt.

int start()

{

if (UseHourTrade)

{

int a=0;

int b=0;

int c=0;

if(!(Hour()>=FromHourTrade1 && Hour()<=ToHourTrade1)) a=1;

if(!(Stunde()>=VonStundeHandel2 && Stunde()<=BisStundeHandel2)) b=1;

if(!(Stunde()>=VonStundeHandel3 && Stunde()<=BisStundeHandel3)) c=1;

if(a==1 && b==1 && c==1)

{

Comment(

"\n"," * SOLAR WIND EXPERT ADVISOR *",

"\n",

"\n", " - PROGRAMM IM SCHLAFZYKLUS - ",

"\n",

"\n"," > NON-TRADING HOURS! <");

///////////////////MODIFY STOP LOSS & TAKE PROFIT AT START OF SLEEP CYCLE /////////////////

//int h=0;

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

OrderSelect(h, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Punkt),Bid-(20*Punkt),Cyan); //Ändern Sie Stop Loss und Take Profit

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Punkt),Ask+(20*Punkt),Cyan); //Stop Loss und Take Profit ändern

return(0);

}

return(0);

}

}

///////////////////////////////////////////////////////////////////////////////////////

Ich habe die Änderungen vorgenommen, erhalte aber immer noch eine ständige Änderungsschleife im Gegensatz zu einer einmaligen Änderung.

Bitte beraten Sie mich noch einmal!

Dave

<<<

 

Bitte veröffentlichen Sie Ihren Code innerhalb des [PHP][/PHP]-Codes. Es ist viel einfacher, formatierten Code zu lesen und zu debuggen.

 

Indikator-Eingabe-Registerkarte

Wie und wo kann ich einen Indikator so kodieren, dass die Registerkarte "Input" nicht mehr angezeigt wird, wenn er an den Chart angehängt ist?

Vielen Dank!

solaris

 
iscuba11:
int start()

{

wenn (UseHourTrade)

{

int a=0;

int b=0;

int c=0;

if(!(Hour()>=FromHourTrade1 && Hour()<=ToHourTrade1)) a=1;

if(!(Stunde()>=VonStundeHandel2 && Stunde()<=BisStundeHandel2)) b=1;

if(!(Stunde()>=VonStundeHandel3 && Stunde()<=BisStundeHandel3)) c=1;

if(a==1 && b==1 && c==1)

{

Comment(

"\n"," * SOLAR WIND EXPERT ADVISOR *",

"\n",

"\n", " - PROGRAMM IM SCHLAFZYKLUS - ",

"\n",

"\n"," > NON-TRADING HOURS! <");

///////////////////MODIFY STOP LOSS & TAKE PROFIT AT START OF SLEEP CYCLE /////////////////

//int h=0;

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

OrderSelect(h, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber() == MagicNumber || MagicNumber==0))

{if( OrderStopLoss() > Ask + Point * 15 || OrderStopLoss() == 0 )

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Punkt),Bid-(20*Punkt),Cyan); //Stop Loss und Take Profit ändern

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if( OrderStopLoss() < Bid - Point * 15 )

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Punkt),Ask+(20*Punkt),Cyan); //StopLoss und TakeProfit ändern

return(0);

}

return(0);

}

}

///////////////////////////////////////////////////////////////////////////////////////

Ich habe die Änderungen vorgenommen, erhalte aber immer noch eine ständige Änderungsschleife im Gegensatz zu einer einmaligen Änderung.

Bitte beraten Sie mich noch einmal!

Dave

<<<

Versuchen Sie, die violette Zeile hinzuzufügen ... vielleicht hilft das

 
solaris:
Wie und wo kann ich einen Indikator so programmieren, dass die Registerkarte "Input" nicht mehr angezeigt wird, wenn er an den Chart angehängt ist?

Danke!

solaris

Versuchen Sie stattdessen, ihn als Vorlage zu speichern... dann müssen Sie keine Parameter mehr einstellen, wenn Sie alle Ihre Indikatoren in einem neuen Diagramm aufrufen.

 

Ich habe getan, was Sie vorgeschlagen haben! (Ich danke Ihnen für Ihre Geduld)

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

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

** Aber ich erhalte immer noch massive Schleifenänderungen bei einem einzigen Handel wie zuvor!

Ich habe offensichtlich eine Schleife innerhalb einer Schleife in der Logik!

Dave

<<

Bitte sehen Sie sich die letzten Backtest-Ergebnisse an. Entschuldigen Sie die logo.htm - ich kann sie nicht loswerden.

 
iscuba11:
Ich habe das gemacht, was Sie vorgeschlagen haben! (Ich danke Ihnen für Ihre Geduld)

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

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

** Aber ich erhalte immer noch massive Schleifenänderungen bei einem einzigen Handel wie zuvor!

Ich habe offensichtlich eine Schleife innerhalb einer Schleife in der Logik!

Dave

<<
Bitte sehen Sie sich die letzten Backtest-Ergebnisse an. Entschuldigen Sie das logo.htm - Ich kann es nicht loswerden.

Haben Sie schon versucht, das lila oben hinzuzufügen?

theif( OrderStopLoss() > Ask + Point * 15 || OrderStopLoss() == 0 )

und if( OrderStopLoss() < Bid - Point * 15 )