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
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
MladenHallo 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:
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
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
TerranceTerrance
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:
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);
}
//+------------------------------------------------------------------+
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:
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
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):
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
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 MunshawMladen,
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
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 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 :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);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
TerranceHallo 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);
}
Probieren Sie diese Funktion aus:
{
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 :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);