Wie programmiert man? - Seite 6

 

Fehler-Code: 4109

Hallo zusammen:

Ich habe ein Skript geschrieben, um alle Trades einschließlich der Pending Orders zu schließen, war aber nach dem Testen enttäuscht. Die Funktionen: OrderClose, und Orderdelete scheitern beim Schließen der Trades. Wenn ich die Funktion GetLastError aufrufe, erhalte ich den Fehlercode: 4109, der in der Fehler-Header-Datei als TRADE_NOT_ALLOWED definiert ist.

Ich habe sogar versucht, die Skripte auszuführen, die mit der Plattform geliefert werden, aber ohne Erfolg.

Ich hoffe, jemand kann das Problem lösen.

Vielen Dank!

Dateien:
closeall2.mq4  2 kb
 

Okay, versuchen Sie dies. Ich denke, die Variablen Lots und Price sollten double und nicht integer sein. Hoffentlich hilft das

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

//| CloseAll.mq4 |

//| FX5 |

//| |

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

#property copyright "FX5"

#property link " "

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

//| script program start function |

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

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

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

Versuchen Sie dies

FX5:
Hallo zusammen:

Ich habe ein Skript geschrieben, um alle Trades einschließlich der Pending Orders zu schließen, war aber nach dem Testen enttäuscht. Die Funktionen: OrderClose und Orderdelete scheitern beim Schließen der Trades. Wenn ich die Funktion GetLastError aufrufe, erhalte ich den Fehlercode: 4109, der in der Fehler-Header-Datei als TRADE_NOT_ALLOWED definiert ist.

Ich habe sogar versucht, die Skripte auszuführen, die mit der Plattform geliefert werden, aber ohne Erfolg.

Ich hoffe, jemand kann das Problem lösen.

Vielen Dank!

Gehen Sie in Metatrader zu Tools -> Optionen, klicken Sie auf die Registerkarte Expert Advisor und wählen Sie Live-Trading zulassen, klicken Sie auf Dll-Importe zulassen und deaktivieren Sie die Option Aufrufe bestätigen. Ich habe ein paar Skripte geschrieben und hatte das gleiche Problem.

 
firedave:
Okay, versuchen Sie dies. Ich denke, die Variablen Lots und Price sollten double und nicht integer sein. Ich hoffe, das hilft
//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

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

#property copyright "FX5"

#property link " "

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

//| script program start function |

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

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

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

Dies ist möglicherweise falsch: Um mehrere Aufträge zu löschen, müssen Sie mit dem letzten Auftrag beginnen, da ihre Indizes nach dem Löschvorgang dekrementiert werden.

Also, anstelle von " for(int i=0;i=0;i--) "

 

Danke firedave für die Codeänderung. Es war ein kleiner Fehler, auf den ich nicht geachtet habe.

Crepuscular, vielen Dank für den Hinweis. Ich hätte ein Jahrhundert damit verbringen können, die Lösung herauszufinden. Endlich habe ich einen funktionierenden Code.

 

Michel, das war ein sehr kluger Hinweis, vielen Dank.

 

Funktion zum Ermitteln des maximalen Drawdowns

Ich möchte eine Funktion schreiben, die den maximalen Drawdown von geschlossenen Geschäften ermittelt. Ich habe zwei Lösungen gefunden.

1. den Drawdown berechnen, während der Handel noch aktiv ist. die Zahl in einer globalen Variable speichern und die Daten entsprechend der Ticketnummer in eine Datei schreiben. MT4 müsste immer online sein.

2. den Drawdown zu ermitteln, indem man das höchste Hoch oder das niedrigste Tief aus dem 1-Minuten-Chart ermittelt. (Ich würde diese Methode verwenden, wenn ich die erforderlichen 1-Minuten-Balken bekommen könnte, wenn sie nicht bereits heruntergeladen wurden)

Ich würde gerne einen besseren Weg finden, um den maximalen Drawdown zu erreichen.

Jeder Beitrag wird geschätzt.

 
harriss:
Ich möchte eine Funktion schreiben, die den maximalen Drawdown von geschlossenen Geschäften ermittelt. Ich habe zwei Lösungen gefunden.

1. den Drawdown berechnen, während der Handel noch aktiv ist. die Zahl in einer globalen Variablen speichern und die Daten entsprechend der Ticketnummer in eine Datei schreiben. MT4 müsste immer online sein.

2. den Drawdown zu ermitteln, indem man das höchste Hoch oder das niedrigste Tief aus dem 1-Minuten-Chart ermittelt. (Ich würde diese Methode verwenden, wenn ich die erforderlichen 1-Minuten-Balken bekommen könnte, wenn sie nicht bereits heruntergeladen wurden)

Ich würde gerne einen schöneren Weg finden, um den maximalen Drawdown zu erreichen.

Jeder Input ist willkommen.

Salam harriss,

Was haben Sie mit "Drawdown" gemeint?

Meinen Sie den maximalen Verlust, den man bei geschlossenen Geschäften gemacht hat?

 

Drawdown

Was ich mit Drawdown meine, ist der niedrigste Punkt im Handel. Zum Beispiel, wenn der Handel traf die Stoploss, dann die Stoploss wäre der Drawdown. Wenn der Handel nun auf der positiven Seite endete und zu einem bestimmten Zeitpunkt bei -15 Pips lag, dann wäre der Drawdown 15. Und schließlich, wenn der Handel mit -15 Pips schloss, aber zu einem Zeitpunkt bei -30 lag, dann wäre der Drawdown 30.

 

Wie kodiere ich Warnungen/Alarme für Indikatoren?

Hallo, ich würde gerne mehr darüber erfahren, wie man Alarme programmiert.

Ich bin kein Programmierer, aber ich habe einen Kopf auf meinen Schultern und bin in der Regel in der Lage, mit etwas zu basteln, nehmen Sie es auseinander, und setzen Sie es wieder zusammen näher an die Art, wie ich es will.

Ich habe mir einige der Indikatoren mit Alarmen angeschaut und die allgemeinen Alarmfunktionen, die ich gesehen habe, auf andere Indikatoren übertragen, die ich mit Alarmen versehen wollte. Ich habe gemischte Ergebnisse erzielt.

Ich stelle fest, dass die wichtigsten Funktionen, die für Alarme aufgerufen werden, die Alert()-Funktion, die Comment()-Funktion und die Playsound()-Funktion sind. Bisher bin ich mit der Alert()-Funktion am meisten vertraut. Gibt es einen wesentlichen Unterschied zwischen Alert() und Playsound() zum Beispiel?

Das generelle Problem, das ich habe, ist, dass ich nicht weiß, wie ich die Alerts so kodieren kann, dass sie einerseits auffallen, andererseits aber auch nicht lächerlich ablenken. Wenn ich z. B. die Funktion Alert() für einige Kreuze verwende und der Indikator den aktuellen Balken nicht endgültig gedruckt hat, kann sich die Warnung immer und immer wieder wiederholen, und ich habe Schwierigkeiten, die Warnung abzuschalten. Normalerweise muss ich den Zeitrahmen des Charts ändern.

Gibt es erstens eine einfache Möglichkeit, den Alarm nur für den aktuellen Balken zu deaktivieren?

Zweitens: Gibt es eine Möglichkeit, eine Warnung so zu kodieren, dass sie nicht zu einem unendlichen Ärgernis wird, indem man einen Code einführt, der die Anzahl der Wiederholungen einschränkt oder der Warnung eine feste Dauer gibt? Wie würden Sie das codieren?

Eine Lösung, die ich sehe, ist, den Alarm bis zum nächsten Balken zu verzögern, so dass er sich nicht ständig ändert, aber das hat den Nachteil, dass er nicht zeitgemäß ist.

Um den Ärger mit Berserker-Alarmen bei Indikatoren zu vermeiden, habe ich die vorgegebenen Preisalarme verwendet, die man über das Terminal-Fenster einstellen kann, und das hilft, ist aber nicht ideal.

Ich weiß auch, dass Expert Advisors erstellt werden können, um Alarme auszulösen, und dass es eine Schaltfläche gibt, mit der diese Alarme einfach ein- und ausgeschaltet werden können. Das Problem, das ich mit EAs habe, ist jedoch, dass ich feststelle, dass ein anderes wichtiges Programm, das ich gleichzeitig mit MetaTrader ausführe, gestört zu werden scheint, wenn Expert Advisors aktiviert sind, und nur langsam läuft.

Gibt es irgendwelche anderen Lösungen für dieses Problem?

Wenn es Indikatoren gibt, die einen Alarmcode haben, der die von mir aufgezählten Fallstricke vermeidet und als gutes Beispiel für die Programmierung und den Alarm dienen kann, könnten Sie mich bitte darauf hinweisen und/oder ihn veröffentlichen?

Ich danke Ihnen vielmals.

Grund der Beschwerde: