
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
Oder sagen Sie mir, wie ich diese Löschfunktion unter dieser Bedingung schreiben kann.
müssen Sie zunächst das Ticket des zu löschenden Auftrages definieren
Wenn das Ticket null oder undefiniert ist, darf es nicht gelöscht werden.
Dies gilt für verschiedene Aufträge. Die Funktion des Entfernens des einen durch eine Bedingung, das Entfernen des anderen ohne eine Bedingung.
Die Frage ist, warum in meinem Fall die Löschfunktion ohne Bedingung erfolgreich funktioniert, aber wenn ich sie in eine Bedingung einfüge, erzeugt sie einen Fehler, wenn die Bedingung eintritt.
müssen Sie zunächst das zu löschende ticketD und ticketUP definieren
Wenn das Ticket null oder undefiniert ist, wird es nicht gelöscht.
So definiert, ein TicketD, das andereTicketUP .
Oder verwechsle ich da etwas?
So definiert, ein TicketD, das andereTicketUP .
Oder bringe ich etwas durcheinander?
Wie kann es definiert werden, wennticketUP bereits gelöscht ist ?
Sie haben es gelöscht, aktualisieren Sie ticketUP auf den Zustand, den Sie benötigen, wobei die Bedingung zum Löschen von ticketUP nicht funktioniert, und diese Bedingung muss ebenfalls in den Code eingefügt werden
Wie kann sie definiert werden, wenndas TicketUP bereits gelöscht wurde?
Sie haben es gelöscht, aktualisieren Sie ticketUP auf den Zustand, den Sie benötigen, in dem die Bedingung zum Löschen des Tickets nicht funktioniert, und diese Bedingung muss ebenfalls zum Code hinzugefügt werden.
So werden die Aufträge mitticketD, einem anderenticketUP zuerst erstellt (entsprechend der Abwesenheitsbedingung), und danach werden sie bereits gelöscht.
if(BuyLimitCount()==0&& BuyCount()==0){slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}
if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}
if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}
OrderDelete(ticketUP);
Wenn ich verwirrt bin, was dann?
So werden Aufträge mitticketD, ein anderesticketUP zuerst erstellt (entsprechend der Abwesenheitsbedingung), und dann werden sie gelöscht.
if(BuyLimitCount()==0&& BuyCount()==0){slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointsl*Point,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}
if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1+pointsl*Point,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}
if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}
OrderDelete(ticketUP);
Wenn ich was verwechsle?
Wieder haben Sie einen Befehl ohne Bedingung:
OrderDelete(ticketUP);
Warum haben Sie den Code nicht geändert?
Nehmen Sie sich eine Auszeit, um zumindest "nachzudenken" und alles zu sortieren + lesen Sie, was Sie geschrieben haben, welche Ratschläge gegeben wurden.
Übrigens, hier gibt es Freelancer , wenn Sie nicht...
Sie haben also wieder einen Befehl ohne Bedingung:
OrderDelete(ticketUP);
Warum haben Sie den Code nicht geändert?
Nehmen Sie sich eine Auszeit, um zumindest "nachzudenken" und es herauszufinden + lesen Sie, was Ihnen geschrieben wurde, welche Ratschläge Ihnen gegeben wurden.
Übrigens, wenn es nicht klappt, kann man hier freiberuflich arbeiten ...
Ohne Bedingung - denn so erfolgt die Entfernung, und mit Bedingung - nein. Also schrieb ich, um anzuzeigen, dass ich nicht kann. Sie können es so schreiben:
OrderDelete(ticketD);
OrderDelete(ticketUP);
Dann werden bei jedem Tick die bereits erstellten Aufträge gelöscht (gemäß der Abwesenheitsbedingung). Und wenn wir es mit der Bedingung schreiben:
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Wenn dann die Bedingung eintritt, wird ein Löschfehler geschrieben.
Wie schreibe ich die Löschung der angegebenen Aufträge in diese Bedingung?
Ohne Bedingung, weil die Löschung so funktioniert, mit Bedingung nicht. Ich habe es so geschrieben, um darauf hinzuweisen, was ich nicht tun kann. Wenn Sie es so schreiben:
OrderDelete(ticketD);
OrderDelete(ticketUP);
Dann werden bei jedem Tick die bereits erstellten Aufträge gelöscht (gemäß der Abwesenheitsbedingung). Und wenn wir es mit der Bedingung schreiben:
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Wenn dann die Bedingung eintritt, wird ein Löschfehler geschrieben.
Wie sollte die Bedingung für die Löschung der angegebenen Aufträge formuliert werden?
Sie können die Bedingung zum Löschen von Aufträgen nicht entfernen!
ticketUP und ticketD sollten beim Öffnen eines Tickets in die globalen Variablen geschrieben werden
GlobalVariableSet("ticketUP",ticketUP);
GlobalVariableSet("ticketD",ticketD);
und lesen Sie dort nach, bevor Sie ein schwebendes Ticket löschen
ticketUP=GlobalVariableGet("ticketUP")
ticketD=GlobalVariableGet("ticketD")
Übrigens, sehen Sie dort (in global) - was Sie haben, was Ticket geschrieben ist
Ich denke, dass danach alles so funktionieren wird, wie es sollte.
{
private:
template <typename T>
T _array[];
int _index;
int _err;
int _err_sys;
public:
CArray(){_index = -1; _err = 0; _err_sys = 0;}
~CArray(){}
// template <typename T>
T operator[](int i){
if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
return (_array[i]);
}
T at(int i){
if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
return (_array[i]);
}
void push_back(T value){
_array[++_index] = value;
}
};
Teil des Programmcodes:
#property link "https://www.mql5.com"
#property version "1.1"
#property strict
#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
CArray *array;
int OnInit()
{
int b = 1;
array = new CArray();
array.push_back(b);
int a = array.at(0);
//---
return(INIT_SUCCEEDED);
}
...
Nach dem Versuch, den Expert Advisor auf realen Daten auszuführen, wird der folgende Fehler ausgegeben: interner Fehler #-1005
Was mache ich falsch? Vielen Dank im Voraus!