Hilfe bei der Codierung - Seite 143

 
arroganzmaschine:
Hallo mladen, noch eine Frage:

Wie kann ich alle offenen Aufträge daraufhin überprüfen, ob ihr Gewinn unter -20 liegt und sie dann schließen?

Etwa so?

//int currentTicket;

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);

if(OrderProfit() <= -20) {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

arroganzmaschine

Ja, so sollte es gehen.

Sie könnten nur die Zeile, in der Sie den Gewinn prüfen, wie folgt ändern:

if ((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)

um sicherzustellen, dass es sich um einen "reinen" Gewinn handelt, den du prüfst

 

Muss ich bei OrderClose ein Bid oder Ask setzen? Oder ist die Zeile korrekt?

 

Hm, da stimmt etwas nicht. Der Backtest schließt die Aufträge, die im Minus sind, nicht. Am Ende des Tests gibt es offene Aufträge mit -230 Gewinn.

 

int start()

{

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

}

Dies funktioniert nicht.

 
arroganzmaschine:
int start()

{

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

}

Das klappt nicht.

Sie haben die Funktion OrderSelect() vergessen (Sie müssen die Bestellung immer auswählen, bevor Sie etwas mit ihr machen). Außerdem wäre es eine gute Idee, den Teil hinzuzufügen, der prüft, welche Art von Auftrag Sie zu schließen versuchen

Etwas wie dies :

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)

{

if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);

}

 

Könnte mir jemand bei der Umwandlung von Histogrammen in Balken im TrendHistogram Indikator helfen? Ich würde gerne die gleichen Balken wie im beigefügten TrendFilter-Indikator erhalten

TrendHistogram benötigt den Indikator EMA_Adaptive, um korrekt zu funktionieren

 
freakout:
Könnte mir jemand bei der Umwandlung von Histogrammen in Balken im TrendHistogram Indikator helfen? Ich möchte die gleichen Balken wie im beigefügten TrendFilter-Indikator TrendHistogram benötigt den EMA_Adaptive-Indikator, um korrekt zu funktionieren

ausflippen

So geht's

Setzen Sie den Parameter DrawAsBars auf true und es wird so gezeichnet, wie Sie es beschrieben haben. Wenn Sie diesen Parameter auf false setzen, wird es wie das Original funktionieren.

Dateien:
 

Hallo,

Kann mir jemand helfen, diesen Code zu bearbeiten Backtesting ist gut, aber EA nicht auf Demo / Real Account arbeiten.

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

//| Hans123Trader v1 |

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

#include

#property copyright "hans123"

#property link ""

// programmiert von fukinagashi

extern int BeginSession1=6;(während des Backtests editiere ich und setze 0 für alle Sessions und erhalte so die endgültigen Ergebnisse)

extern int EndSession1=10;

extern int BeginSession2=10;

extern int EndSession2=14;

extern double TrailingStop = 0;

extern double TakeProfit = 452;

extern double InitialStopLoss=40;

double Lots = 0.1;

datetime bartime = 0;

double Slippage=3;

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

//| |

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

int start()

{

int cnt, ticket, err, i, j, cmd;

int MagischeZahl;

double ts, tp, NiedrigsterPreis, HöchsterPreis, Preis;

bool Bestellung[5];

string Einrichtung;

datetime Validity=0;

if(IsTesting() && Bars<100) return(0);

MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;

setup="H123_" + Symbol();

if (bartime == Time[0]) {

return(0);

} sonst {

bartime = Time[0];

}

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

///////////////// ÄNDERUNGEN BEI OFFENEN AUFTRÄGEN ////////////////////////////////////////////////////////////////////

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

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {

Print(".");

OrderClose(OrderTicket(), Lots, Bid, 3, Red);

if (err>1) { Print("Fehler beim Schließen der Kauforder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;

} sonst { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;

} sonst { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);

if (err>1) { Print("Fehler beim Ändern der Kauforder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = Bid-Point*TrailingStop;

wenn (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {

Print(".");

OrderClose(OrderTicket(), Lots, Ask, 3, Red);

if (err>1) { Print("Fehler beim Schließen der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;

} sonst { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;

} sonst { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = Ask+Point*TrailingStop;

if (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

}

}

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

///////////////// AUFTRÄGE EINSTELLEN ////////////////////////////////////////////////////////////////////

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

if(AccountFreeMargin()<(1000*Lots)) return(0);

Gültigkeit=StrToTime(TimeYear(Time[0]) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + " 23:59");

if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HöchsterPreis=Hoch;

//// ist notwendig, um einen BUYSTOP/SELLSTOP Preis zu vermeiden, der zu nahe an Bid/Ask liegt,

//// In diesem Fall erhalten wir 130 ungültige Stops.

//// Ich habe experimentiert, um zu den richtigen OP_BUY und OP_SELL zu wechseln, aber die Ergebnisse waren nicht zufriedenstellend

//if (HöchsterPreis+5*Punkt<Ask+Spread*Punkt) {

// cmd=OP_BUY;

// Preis=Ask;

//} sonst {

cmd=OP_BUYSTOP;

Preis=HöchsterPreis+5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (NiedrigsterPreis-5*Punkt>Gebotsspanne*Punkt) {

// cmd=OP_SELL;

// Preis=Gebot;

//} sonst {

cmd=OP_SELLSTOP;

Preis=NiedrigsterPreis-5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HöchsterPreis=Hoch;

//if (HöchsterPreis+5*Punkt<Ask+Spanne*Punkt) {

// cmd=OP_BUY;

// Preis=Ask;

//} sonst {

cmd=OP_BUYSTOP;

Preis=HöchsterPreis+5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (NiedrigsterPreis-5*Punkt>Gebotsspanne*Punkt) {

// cmd=OP_SELL;

// Preis=Gebot;

//} sonst {

cmd=OP_SELLSTOP;

Preis=NiedrigsterPreis-5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

}

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

///////////////// DIVERSE UNTERPROGRAMME /////////////////////////////////////////////////////////////////////////////

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

int func_Symbol2Val(string symbol) {

if(symbol=="AUDUSD") { return(01);

} else if(symbol=="CHFJPY") { return(10);

} else if(symbol=="EURAUD") { return(10);

} sonst if(symbol=="EURCAD") { return(11);

} sonst if(symbol=="EURCHF") { return(12);

} sonst if(symbol=="EURGBP") { return(13);

} sonst if(symbol=="EURJPY") { return(14);

} sonst if(symbol=="EURUSDm") { return(15);

} sonst if(symbol=="GBPCHF") { return(20);

} sonst if(symbol=="GBPJPY") { return(21);

} sonst if(symbol=="GBPUSD") { return(22);

} sonst if(symbol=="USDCAD") { return(40);

} sonst if(symbol=="USDCHF") { return(41);

} sonst if(symbol=="USDJPY") { return(42);

} sonst if(symbol=="GOLD") { return(90);

} else { Comment("unerwartetes Symbol"); return(0);

}

}

int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {

datetime OldCurTime;

int timeout=30;

int ticket;

OldCurTime=CurTime();

while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {

if(OldCurTime+timeout<=CurTime()) {

Print("Fehler in OrderSendExtended(): Timeout aufgetreten");

return(0);

}

Sleep(1000);

}

GlobalVariableSet("InTrade", CurTime()); // Sperrkennzeichen setzen

ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);

GlobalVariableDel("InTrade"); // Sperrkennzeichen löschen

return(ticket);

}

 
ccd:
Hallo,

Kann mir jemand helfen, diesen Code zu bearbeiten Backtesting ist gut, aber EA nicht auf Demo / Real Account arbeiten.

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

//| Hans123Trader v1 |

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

#include

#property copyright "hans123"

#property link ""

// programmiert von fukinagashi

extern int BeginSession1=6;(während des Backtests editiere ich und setze 0 für alle Sessions und erhalte so die endgültigen Ergebnisse)

extern int EndSession1=10;

extern int BeginSession2=10;

extern int EndSession2=14;

extern double TrailingStop = 0;

extern double TakeProfit = 452;

extern double InitialStopLoss=40;

double Lots = 0.1;

datetime bartime = 0;

double Slippage=3;

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

//| |

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

int start()

{

int cnt, ticket, err, i, j, cmd;

int MagischeZahl;

double ts, tp, NiedrigsterPreis, HöchsterPreis, Preis;

bool Bestellung[5];

string Einrichtung;

datetime Validity=0;

if(IsTesting() && Bars<100) return(0);

MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;

setup="H123_" + Symbol();

if (bartime == Time[0]) {

return(0);

} sonst {

bartime = Time[0];

}

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

///////////////// ÄNDERUNGEN BEI OFFENEN AUFTRÄGEN ////////////////////////////////////////////////////////////////////

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

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {

Print(".");

OrderClose(OrderTicket(), Lots, Bid, 3, Red);

if (err>1) { Print("Fehler beim Schließen der Kauforder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;

} sonst { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;

} sonst { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);

if (err>1) { Print("Fehler beim Ändern der Kauforder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = Bid-Point*TrailingStop;

wenn (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {

Print(".");

OrderClose(OrderTicket(), Lots, Ask, 3, Red);

if (err>1) { Print("Fehler beim Schließen der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;

} sonst { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;

} sonst { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = Ask+Point*TrailingStop;

if (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

}

}

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

///////////////// AUFTRÄGE EINSTELLEN ////////////////////////////////////////////////////////////////////

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

if(AccountFreeMargin()<(1000*Lots)) return(0);

Gültigkeit=StrToTime(TimeYear(Time[0]) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + " 23:59");

if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HöchsterPreis=Hoch;

//// ist notwendig, um einen BUYSTOP/SELLSTOP Preis zu vermeiden, der zu nahe an Bid/Ask liegt,

//// In diesem Fall erhalten wir 130 ungültige Stops.

//// Ich habe experimentiert, um zu den richtigen OP_BUY und OP_SELL zu wechseln, aber die Ergebnisse waren nicht zufriedenstellend

//if (HöchsterPreis+5*Punkt<Ask+Spread*Punkt) {

// cmd=OP_BUY;

// Preis=Ask;

//} sonst {

cmd=OP_BUYSTOP;

Preis=HöchsterPreis+5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (NiedrigsterPreis-5*Punkt>Gebotsspanne*Punkt) {

// cmd=OP_SELL;

// Preis=Gebot;

//} sonst {

cmd=OP_SELLSTOP;

Preis=NiedrigsterPreis-5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HöchsterPreis=Hoch;

//if (HöchsterPreis+5*Punkt<Ask+Spanne*Punkt) {

// cmd=OP_BUY;

// Preis=Ask;

//} sonst {

cmd=OP_BUYSTOP;

Preis=HöchsterPreis+5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (NiedrigsterPreis-5*Punkt>Gebotsspanne*Punkt) {

// cmd=OP_SELL;

// Preis=Gebot;

//} sonst {

cmd=OP_SELLSTOP;

Preis=NiedrigsterPreis-5*Punkt;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);

err = GetLastError();

if (err>1) { Print("Fehler beim Ändern der Verkaufsorder [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

}

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

///////////////// DIVERSE UNTERPROGRAMME /////////////////////////////////////////////////////////////////////////////

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

int func_Symbol2Val(string symbol) {

if(symbol=="AUDUSD") { return(01);

} else if(symbol=="CHFJPY") { return(10);

} else if(symbol=="EURAUD") { return(10);

} sonst if(symbol=="EURCAD") { return(11);

} sonst if(symbol=="EURCHF") { return(12);

} sonst if(symbol=="EURGBP") { return(13);

} sonst if(symbol=="EURJPY") { return(14);

} sonst if(symbol=="EURUSDm") { return(15);

} sonst if(symbol=="GBPCHF") { return(20);

} sonst if(symbol=="GBPJPY") { return(21);

} sonst if(symbol=="GBPUSD") { return(22);

} sonst if(symbol=="USDCAD") { return(40);

} sonst if(symbol=="USDCHF") { return(41);

} sonst if(symbol=="USDJPY") { return(42);

} sonst if(symbol=="GOLD") { return(90);

} else { Comment("unerwartetes Symbol"); return(0);

}

}

int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {

datetime OldCurTime;

int timeout=30;

int ticket;

OldCurTime=CurTime();

while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {

if(OldCurTime+timeout<=CurTime()) {

Print("Fehler in OrderSendExtended(): Timeout aufgetreten");

return(0);

}

Sleep(1000);

}

GlobalVariableSet("InTrade", CurTime()); // Sperrkennzeichen setzen

ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);

GlobalVariableDel("InTrade"); // Sperrkennzeichen löschen

return(ticket);

}

Versuchen Sie, den InitialStopLoss mit 10 auf einem Live-Konto zu multiplizieren. Dieser EA ist für 4-stellige Makler geschrieben

______________________

PS: Sie sollten auch den TakeProfit mit 10 multiplizieren, um konsistent zu sein und das als Pips zu haben, aber wenn Sie es mit diesen Zahlen getestet haben, werden Sie nicht die gleichen Ergebnisse wie beim Backtest erhalten (einfach weil der Backtest Ihnen erlaubt hat, Werte für diese beiden zu verwenden, die Ihnen weder das Demokonto noch das Live-Konto erlauben)

 
mladen:
zigflip Die letzten zwei Psar wie in "letztes oberes/unteres Paar von Psar" oder "letzte 2 Bars"?

Sorry für die späte Antwort mladen, ich dachte, ich hatte E-Mail-Abonnement auf, aber ...

Ich meine das letzte Paar von psars!

Ich möchte vor allem den letzten Psar überwachen, aber wenn obere/untere Änderung auftritt würde die letzten beiden Ebenen benötigen, hmm vielleicht sollte x Bars zurück sein... ach ich sehe, was Sie jetzt sagen, auf Sekunden Gedanken vielleicht die letzte Reihe von oben/unten, die Trimmung auf letzte Umstellung bei der Ankunft der ersten neuen Richtung Psar!

Vielen Dank für Ihre Hilfe in dieser Sache,