![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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);
}
}
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
<<
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
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
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!
solarisVersuchen 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!
Dave
<<Bitte sehen Sie sich die letzten Backtest-Ergebnisse an. Entschuldigen Sie die logo.htm - ich kann sie nicht loswerden.
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!
Dave
<<Haben Sie schon versucht, das lila oben hinzuzufügen?
theif( OrderStopLoss() > Ask + Point * 15 || OrderStopLoss() == 0 )
und if( OrderStopLoss() < Bid - Point * 15 )