Wie programmiert man? - Seite 298

 
mladen:
Terrance

Haben Sie diesen Abschnitt des TSD gesehen: Lektionen?

Ich denke, dass viele Fragen dort bereits beantwortet werden und dass man dort sehr gute Beispiele für das Schreiben von EAs im Allgemeinen finden kann. Was Ihre Frage betrifft: Ich habe Ihren EA nicht getestet, also weiß ich es nicht. Das Problem beim Testen eines fremden EAs ist, dass man die Idee und die Logik des EAs kennen muss, und oft ist es einfach unmöglich, diese aus dem Code selbst zu "lesen". Das Code-Snippet, über das wir gesprochen haben, betraf die Erkennung von 2 Durchschnittskreuzen auf einem geschlossenen Balken, und dieser Code tut genau das und nichts anderes. Deshalb habe ich gesagt, dass "es nichts mit SL oder TP zu tun hat".

Grüße

Mladen

Hallo Mladen, entschuldige, dass ich dich wieder belästige. Ich bin meine Codes durchgegangen und habe festgestellt, dass nicht nur mein TP und SL, sondern manchmal auch meine Kauf- und Verkaufsaufträge falsch sind. Ich habe durch die Links auf Lektion, die Sie gab mir von codersgurus und es ist die gleiche Reihe von Tutorials, die ich hatte und basiert meine Codes auf. Ich kann wirklich nicht scheinen, um die Ursache für meinen Fehler in den Codes zu finden.

Die Kreuze der MA funktioniert, wie es sollte zusammen mit der Long-und Short-Order, aber manchmal die Entry und Exit scheint zu gehen haywire, auch wenn ich eine grundlegende ASK-Funktion, um es heraus zu testen. Bitte bringen Sie mir hier etwas Licht ins Dunkel.

Vielen Dank und herzliche Grüße

Terrance

 

...

Terrance

Erstens: Ist Ihr Broker ECN/STP-ähnlich? Wenn ja, dann können Sie Stop-Loss und Take-Profit nicht zusammen mit der Ordereröffnung platzieren, sondern Sie müssen zuerst eine Order öffnen, bei der diese auf 0 gesetzt sind, und dann OrderModify() verwenden, um Stop-Loss und/oder Take-Profit für eine bereits geöffnete Order zu setzen.

Zweitens: Prüfen Sie auch immer, ob Sie etwas in der Experten-Registerkarte des Terminal-Fensters geschrieben haben (prüfen Sie, ob dort Fehler geschrieben werden: Sie werden dann wahrscheinlich herausfinden, was los ist und warum

Drittens: Es könnte eine gute Idee sein, eine Zeile wie diese einzufügen:

int err=GetLastError(); Print(err);

Nach jeder Funktion zur Auftragsverwaltung. Fehlerbeschreibungen finden Sie in der Datei experts/include/stderror.mqh (es gibt viele Fehler, die bei Orders auftreten können (siehe die Liste der möglichen Fehlercodes und Beschreibungen), und Sie müssen jeden einzelnen möglichen Fehler überwachen) Mit bekannten Fehlercodes (die obige Codezeile) können Sie sich auf die Korrektur spezifischer Fehler konzentrieren, anstatt zu raten, was los ist

tkuan77:
Hallo Mladen, entschuldige, dass ich dich wieder belästige. Ich bin meine Codes durchgegangen und habe festgestellt, dass nicht nur meine TP und SL, sondern manchmal sogar meine Kauf- und Verkaufsaufträge nicht stimmen. Ich habe durch die Links auf Lektion, die Sie gab mir von codersgurus und es ist die gleiche Reihe von Tutorials, die ich hatte und basierte meine Codes auf. Ich kann wirklich nicht scheinen, um die Ursache für meinen Fehler in den Codes zu finden.

Das Kreuzen des MA funktioniert, wie es sollte, zusammen mit der Long- und Short-Order, aber manchmal scheint der Entry und Exit durchzudrehen, auch wenn ich eine einfache ASK-Funktion zum Testen ausgeführt habe. Bitte bringen Sie mir hier etwas Licht ins Dunkel.

Vielen Dank und beste Grüße

Terrance
Dateien:
terminal_1.gif  62 kb
 
mladen:
Terrance

Erstens: Ist Ihr Broker ECN/STP-ähnlich? Wenn ja, dann können Sie Stop-Loss und Take-Profit nicht zusammen mit der Ordereröffnung platzieren, sondern Sie müssen zuerst eine Order öffnen, bei der diese auf 0 gesetzt sind, und dann OrderModify() verwenden, um Stop-Loss und / oder Take-Profit auf eine bereits geöffnete Order zu setzen.

Zweitens: Überprüfen Sie auch immer, ob Sie etwas in der Experten-Registerkarte des Terminal-Fensters geschrieben haben (überprüfen Sie, ob dort Fehler geschrieben werden: Sie werden dann wahrscheinlich herausfinden, was los ist und warum

Drittens: Es könnte eine gute Idee sein, eine Zeile wie diese einzufügen:

int err=GetLastError(); Print(err);
Nach jeder Funktion zur Auftragsverwaltung. Fehlerbeschreibungen finden Sie in der Datei experts/include/stderror.mqh (es gibt viele Fehler, die bei Aufträgen auftreten können (siehe die Liste der möglichen Fehlercodes und Beschreibungen), und Sie müssen jeden einzelnen möglichen Fehler überwachen). Mit bekannten Fehlercodes (die Codezeile von oben) können Sie sich auf die Korrektur bestimmter Fehler konzentrieren, anstatt zu raten, was los ist

Hallo Mladen,

danke für den Hinweis auf die ECN/STP-Sache. Ich wusste nichts davon, bis du es erwähnt hast. Ich habe die von dir vorgeschlagenen Änderungen vorgenommen, aber jetzt ist es für mich nur noch schlimmer geworden. Nicht nur, dass das Entry- und Exit-Problem weiter besteht, jetzt fehlt auch noch mein SL. Das ist schwieriger als ich dachte.

//--- Eingabeparameter

extern double TakeProfit=1000.0;

extern double Lots=0.1;

extern double StopLoss=1500.0;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

int mainCrossed (double mainline1 , double mainline2)

{

static int mainlast_direction = 0;

static int maincurrent_dirction = 0;

if(mainline1>mainline2)maincurrent_dirction = 1; //main up

if(mainline1<mainline2)maincurrent_dirction = 2; //main down

if(maincurrent_dirction != mainlast_direction) //main geändert

{

mainlast_direction = maincurrent_dirction;

return (mainlast_direction);

}

sonst

{

return (0);

}

}

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

//| Expertenstartfunktion |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma, mainshortEma, mainlongEma;

if(Bars<100)

{

Print("Balken weniger als 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit kleiner als 10");

return(0); // TakeProfit prüfen

}

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PREIS_SCHLIESSEN,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);

mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PREIS_SCHLIESSEN,0);

int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);

if ((diff1*diff2)<0)

{

wenn (shortEma1>longEma1)

isCrossed = 1;

sonst isCrossed = 2;

}

total = OrdersTotal();

if(gesamt < 1)

{

if(isCrossed == 1 && mainshortEma > mainlongEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && mainshortEma < mainlongEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<gesamtzahl;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // Long-Position wird eröffnet

{

OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet);

// Position schließen

return(0); // Ausstieg

}

else // auf Short-Position gehen

{

OrderClose(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet);

// Position schließen

return(0); // Ausstieg

}

}

}

return(0);

}

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

 
mladen:
Terrance

Erstens: Ist Ihr Broker ECN/STP-ähnlich? Wenn ja, dann können Sie Stop-Loss und Take-Profit nicht zusammen mit der Ordereröffnung platzieren, sondern Sie müssen zuerst eine Order öffnen, bei der diese auf 0 gesetzt sind, und dann OrderModify() verwenden, um Stop-Loss und / oder Take-Profit auf eine bereits geöffnete Order zu setzen.

Zweitens: Überprüfen Sie auch immer, ob Sie etwas in der Experten-Registerkarte des Terminal-Fensters geschrieben haben (überprüfen Sie, ob dort Fehler geschrieben werden: Sie werden dann wahrscheinlich herausfinden, was los ist und warum

Drittens: Es könnte eine gute Idee sein, eine Zeile wie diese einzufügen:

int err=GetLastError(); Print(err);
Nach jeder Funktion zur Auftragsverwaltung. Fehlerbeschreibungen finden Sie in der Datei experts/include/stderror.mqh (es gibt viele Fehler, die bei Aufträgen auftreten können (siehe die Liste der möglichen Fehlercodes und Beschreibungen), und Sie müssen jeden einzelnen möglichen Fehler überwachen). Mit bekannten Fehlercodes (die Codezeile von oben) können Sie sich auf die Korrektur bestimmter Fehler konzentrieren, anstatt zu raten, was los ist

Hallo Mladen, ich möchte mich bei dir für deine Hilfe in den letzten Tagen bedanken. Es ist mir gelungen, den Fehler in meinem Code zu finden, der den Ein- und Ausstiegsfehler verursacht.

Mit freundlichen Grüßen

Terrance

 

Eröffnung von mehr als 1 Handel

Hallo zusammen, ich habe versucht, meinen EA in der Lage, mehrere Trades zu öffnen, aber bisher bin ich nur in der Lage zu machen, es auf 1 Handel zu begrenzen.

Mein Ziel ist einfach:

Wenn LWMA 10 unter LWMA 20 kreuzt, wird das System short gehen, sofern sowohl LWMA 10 als auch 20 unter SMA 50 kreuzt, und umgekehrt für long Trades.

Ich möchte meine EA zu begrenzen, um nicht mehr als 2 Trades zu öffnen, jedoch, wenn ich die Codes zu ändern, wird es öffnen 2 Trades zu einer Zeit, anstatt öffnen 1 Handel pro Kriterien.

Muss ich ein Counter-System oder irgendetwas einrichten oder wie stelle ich meinen Counter ein, um zu reagieren, wenn 1 meiner Trades bereits TP oder SL hat?

Kann mir bitte jemand sagen, was mit meinen Codes nicht stimmt?

Vielen Dank und viele Grüße

Terrance

//--- Eingabeparameter

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma, mainshortEma, mainlongEma;

if(Bars<100)

{

Print("Balken weniger als 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit kleiner als 10");

return(0); // TakeProfit prüfen

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PREIS_SCHLIESSEN,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PREIS_SCHLIESSEN,0);

wenn ((diff1*diff2)<0)

{

wenn (shortEma1>longEma1)

isCrossed = 1;

sonst isCrossed = 2;

}

total = OrdersTotal();

if(gesamt < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

if(gesamt == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

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

 

Fragen

Mladen,

Ich versuche, unter dem Link, den Sie mir gezeigt haben, nach Lektionen zu suchen, aber es sind allgemeine Lektionen, ich suche nach Informationen speziell für den Henderson-Indikator...

Außerdem bin ich die geposteten Threads durchgegangen und möchte nun folgende Dinge herausfinden.

-Einfache und leicht verständliche Sprache, ich möchte fragen, ist, dass etwa nach wie vielen Bars vergeht, und die Farbe ändert.

Mit anderen Worten, maximal wie viele Balken dauert es, bevor die Farbe der Linie ändert sich von blau nach rosa? Leider verstehe ich nicht, ausgefallene Terminologie und ich würde appriciated sehr einfache Antwort, wo ich auf und starten Sie die Strategie bewegen kann. Jedes Diagramm ist sehr willkommen. premalmunshaw@yahoo.com ist meine Email-Adresse.

Ich versuche, $39 für dieses Paket zu zahlen, um aktiviert zu werden.

ICH FREUE MICH AUF EINE POSITIVE ANTWORT!

Mit freundlichen Grüßen,

Premal Munshaw

mladen:
Ehrlich gesagt verstehe ich nicht, was Sie fragen.

Wenn Sie fragen, wann sich die Farbe ändert, dann lautet die Antwort: wenn sich die Steigung ändert.

Wenn Sie fragen, wie der Farbwechsel kodiert ist, dann sollten Sie die Antwort in diesem Abschnitt suchen: Lektionen.
 

...

Leider verstehe ich Ihre Fragen nicht, also werde ich mich nur wiederholen (die Berechnungslänge bezieht sich auf die Berechnungslänge des Henderson-Filters):

wenn Ihre Berechnungslänge 5 ist, dann können sich die letzten 2 Balken ändern

wenn Ihre Berechnungslänge 7 ist, dann können sich die letzten 3 Takte ändern

wenn Ihre Berechnungslänge 9 ist, können sich die letzten 4 Takte ändern

Einfacher kann man die Frage nicht beantworten. Und es gibt keine einfachere Erklärung, wie der Henderson-Filter berechnet wird: das wäre so, als würde ich versuchen, die Fourier-Transformation mit den Worten "1+1 = 2" zu erklären. Bitte prüfen Sie die Links, die Sie erhalten haben

Was den Rest betrifft: Sie haben Links zu den mathematischen Grundlagen des Filters, Sie haben Informationen darüber, wie viele Balken neu berechnet werden, Sie haben sogar Beispiele aus dem News-Thread der Elite-Sektion. Zur Strategie, die diesen Filter verwendet: Ich habe 1000 Mal in 1000en von Beiträgen gesagt, dass neu berechnende Indikatoren (SSA, Henderson-Filter, zentrierte TMA, Fourier-Transformationen, Regressionsanalyse, ...) nicht im "Signalisierungsmodus", sondern im "Schätzungsmodus" verwendet werden sollten. Wenn Sie auf der Suche nach Signalen aus dem Henderson-Filter sind, dann sind Sie auf einem völlig falschen Weg, und wenn dies der einzige Grund ist, warum Sie ein Abonnement der Elitesektion in Erwägung ziehen, dann ist es besser, wenn Sie es nicht abonnieren.

PS: Es ist eine schlechte Praxis, Ihre E-Mail öffentlich zu machen. Auf diese Weise werden Sie nur eine Unmenge von Spam-Nachrichten in Ihrem E-Mail-Postfach erhalten.

______________________________________

Ich wünsche Ihnen alles Gute bei Ihrer Suche nach einem Handelssystem

Viele Grüße

Mladen

premalmunshaw:
Mladen,

Ich versuche, unter dem Link, den Sie mir gezeigt haben, nach Lektionen zu suchen, aber das sind allgemeine Lektionen, ich suche nach Informationen speziell für den Henderson-Indikator...

Außerdem bin ich die geposteten Threads durchgegangen und möchte nun folgende Dinge herausfinden.

-Einfache und leicht verständliche Sprache, ich möchte fragen, ist, dass etwa nach wie vielen Bars vergeht, und die Farbe ändert.

Mit anderen Worten, maximal wie viele Balken dauert es, bevor die Farbe der Linie ändert sich von blau nach rosa? Leider verstehe ich nicht, ausgefallene Terminologie und ich würde appriciated sehr einfache Antwort, wo ich auf und starten Sie die Strategie bewegen kann. Jedes Diagramm ist sehr willkommen. premalmunshaw@yahoo.com ist meine Email-Adresse.

Ich versuche, $39 für dieses Paket zu zahlen, um aktiviert zu werden.

ICH FREUE MICH AUF EINE POSITIVE ANTWORT!

Mit freundlichen Grüßen,

Premal Munshaw
 

Mladen,

Gibt es eine Möglichkeit für mich, einen Zähler für meinen Handel zu setzen, so dass ich, wenn mein Handel TP oder SL hat, den Zählersprung auslösen kann?

Mit freundlichen Grüßen

Terrance

tkuan77:
Hallo zusammen, ich habe versucht, meinen EA in die Lage zu versetzen, mehrere Trades zu öffnen, aber bisher kann ich ihn nur auf 1 Trade beschränken.

Mein Ziel ist einfach:

Wenn LWMA 10 unter LWMA 20 kreuzt, wird das System short gehen, sofern sowohl LWMA 10 als auch 20 unter SMA 50 kreuzt, und umgekehrt für long Trades.

Ich möchte meinen EA darauf beschränken, nicht mehr als 2 Trades zu öffnen. Wenn ich jedoch die Codes ändere, wird er 2 Trades auf einmal öffnen, anstatt 1 Trade pro Kriterium zu öffnen.

Muss ich ein Counter-System oder irgendetwas einrichten oder wie stelle ich meinen Counter ein, um zu reagieren, wenn 1 meiner Trades bereits TP oder SL hat?

Kann mir bitte jemand sagen, was mit meinen Codes nicht stimmt?

Vielen Dank und viele Grüße

Terrance

//--- Eingabeparameter

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma, mainshortEma, mainlongEma;

if(Bars<100)

{

Print("Balken weniger als 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit kleiner als 10");

return(0); // TakeProfit prüfen

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PREIS_SCHLIESSEN,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PREIS_SCHLIESSEN,0);

wenn ((diff1*diff2)<0)

{

wenn (shortEma1>longEma1)

isCrossed = 1;

sonst isCrossed = 2;

}

total = OrdersTotal();

if(gesamt < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

if(gesamt == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

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

...

Versuchen Sie diese Funktion:

int countOpenedOrders(int type)

{

int openedOrders = 0;

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

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
und dann können Sie prüfen
:if openedBuys==0 open buy

if openedSells==0 open sell

tkuan77:
Mladen,

Gibt es eine Möglichkeit für mich, einen Zähler für meinen Handel zu setzen, so dass ich den Zähler-Sprung auslösen kann, wenn mein Handel TP oder SL hat?

Mit freundlichen Grüßen

Terrance
 

Hallo Mladen,

Ich habe einen anderen Weg gefunden, indem ich die Funktion "Bars" verwende. Wenn ein Handel ausgelöst wird, setze ich einen ganzzahligen Zähler mit der Bars-Funktion (z.B. ein Kaufhandel wird in Bar 122 ausgelöst, daher wird der Zähler 122 sein) und wenn meine Kriterien wieder ausgelöst werden, rufe ich die Bar-Funktion erneut auf und vergleiche sie mit dem Zähler und der Handel wird nur ausgelöst, wenn der neue Zähler höher ist als der vorherige, der in diesem Fall 122 ist.

Allerdings löse ich immer noch 2 Trades zusammen aus, anstatt 1 pro Kriterium. Warum ist das so?

Bitte um Hilfe

Vielen Dank und Grüße

Terrance

//--- Eingabeparameter

extern double TakeProfit=530.0;

extern double Lots=0.1;

extern double StopLoss=520.0;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma, mainshortEma, mainlongEma;

if(Bars<100)

{

Print("Balken weniger als 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit kleiner als 10");

return(0); // TakeProfit prüfen

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0);

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PREIS_SCHLIESSEN,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PREIS_SCHLIESSEN,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0);

wenn ((diff1*diff2)<0)

{

wenn (shortEma1>longEma1)

isCrossed = 1;

sonst isCrossed = 2;

}

int BarCounter, BarCounter2;

total = OrdersTotal();

if(gesamt < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

BalkenZähler = Balken;

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

BalkenZähler = Balken;

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

if(gesamt == 1)

{

BarCounter2 = Bars;

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

BarZähler = BarZähler2;

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mein EA",12345,0,Rot);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

BarZähler = BarZähler2;

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

mladen:
Probieren Sie diese Funktion aus:
int countOpenedOrders(int type)

{

int openedOrders = 0;

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

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
und dann können Sie prüfen
:if openedBuys==0 open buy

if openedSells==0 open sell

Grund der Beschwerde: