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
Hallo!
Um den Indikator zu korrigieren, mussten Sie alle Punkte "." durch ein leeres "" ersetzen.
Grüße.
Ich habe die Art derAuftragsauswahl in der geschriebenen Funktion bestimmter Auftragszählungen von Auswahl nach Auftrag auf Auswahl nach Ticket geändert.
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
Danach, wenn ein paar Dutzend Kerzen laufen, funktioniert alles korrekt, und danach gibt es wiederholt Fehler im Protokoll:
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1: unbekanntes Ticket 2 für OrderModify-Funktion
2016.12.17 17:44:31.608 2016.12.07 00:25 test3 EURUSD,M1: OrderModify error 4108 // Ungültige Ticketnummer.
Hier ist der vollständige Text, ich habe ihn in allen vier Funktionen geändert:
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1;
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
OrderModify(ticketD, maxpr1, slS, tpS, 0, Blue);}
if (z!=minpr1){z=minpr1;
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
OrderModify(ticketUP, minpr1, slB, tpB, 0, Red);}
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
int BuyCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}return(count);}
int SellLimitCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}return(count);}
int SellCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}return(count);}
Und hier gibt es einen Moment - nachdem ich die Auswahlfunktion geändert hatte, begann die Funktion zum Ändern von Aufträgen einen Fehler zu erzeugen, und erst nach einiger Zeit desTestens war zunächst alles normal.
Warum passiert das und wie kann man damit umgehen?
Grüße.
Ich habe die Art derAuftragsauswahl in der geschriebenen Funktion bestimmter Auftragszählungen von Auswahl nach Auftrag auf Auswahl nach Ticket geändert.
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
Danach, wenn ein paar Dutzend Kerzen laufen, funktioniert alles korrekt, und danach gibt es wiederholt Fehler im Protokoll:
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1: unbekanntes Ticket 2 für OrderModify-Funktion
2016.12.17 17:44:31.608 2016.12.07 00:25 test3 EURUSD,M1: OrderModify error 4108 // Ungültige Ticketnummer.
Hier ist der vollständige Text, ich habe ihn in allen vier Funktionen geändert:
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1;
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
OrderModify(ticketD, maxpr1, slS, tpS, 0, Blue);}
if (z!=minpr1){z=minpr1;
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
OrderModify(ticketUP, minpr1, slB, tpB, 0, Red);}
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
int BuyCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}return(count);}
int SellLimitCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}return(count);}
int SellCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}return(count);}
Und hier gibt es einen Moment - nachdem ich die Auswahlfunktion geändert hatte, begann die Funktion zum Ändern von Aufträgen einen Fehler zu erzeugen, und erst nach einiger Zeit desTestens war zunächst alles normal.
Warum passiert das und wie kann man damit umgehen?
Wahrscheinlich erhalten Sie diese Fehlermeldung, weil Sie versuchen, einen schwebenden Auftrag zu ändern, der bereits ausgelöst oder gelöscht wurde. Sie müssen die Variablen zurücksetzen, in denen das schwebende Ticket gespeichert ist, z. B. wann der schwebende Auftrag ausgelöst wurde.
Hallo zusammen, helfen Sie mir zu verstehen, was falsch ist.
Mein Expert Advisor öffnet ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green);
for(int prev=0; prev<OrdersTotal();prev++) //Prüfung der vorherigen EA-Operation
{
ViborOrdera=OrderSelect(prev,SELECT_BY_POS);
if(AuftragsSymbol()==Symbol())
//*************************************
//-------Check the Purchasing cycle--------
if(OrderType()==OP_BUY && OrderMagicNumber()==1111)
{
PriceAsk=OrderOpenPrice();//offener Preis, benötigt für die weitere Arbeit des EA
}
Frage: Wo liegt der Fehler, gibt es keine Prüfung? Der Hauptteil der Schleife befindet sich in der Inite.
Keine Zeit, das zu klären..........
Versuchen Sie zu lesen und an den richtigen Stellen zu platzieren.
boolRefreshRates();
Hallo zusammen, helfen Sie mir zu verstehen, was falsch ist.
Mein Expert Advisor öffnet ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green);
Frage: Wo liegt der Fehler, wenn es keine Prüfung gibt? Der Hauptteil der Schleife ist in Inite.
Keine Zeit, das zu klären..........
Versuchen Sie zu lesen und an den richtigen Stellen zu platzieren.
boolRefreshRates();
Und beweisen Sie, dass es der Kreislauf ist, der nicht in Gang kommt. Außerdem, warum sollten wir ALLE Aufträge von Anfang an prüfen, wenn wir nur die neuesten brauchen?
Beweis: Print("Previous PriceAsk-",PriceAsk); das Protokoll ist leer.
Außerdem, warum sollten wir ALLE Aufträge von Anfang an prüfen, wenn wir nur die neuesten brauchen? - Wie soll man es sonst machen, wenn 10 Währungspaare geöffnet sind?
Alles war in Ordnung, bis wir ViborOrdera=OrderSelect(prev,SELECT_BY_POS) in MQL geändert haben;
Früher hieß esOrderSelect(prev,SELECT_BY_POS);. Das ist zwar schon lange her, aber es hat funktioniert.