[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 636

 

Gute Leute, Hilfe, ich kann nicht verstehen, TrailingStop funktioniert nicht, wie es sollte, wenn das Geschäft auf dem SELL trall geöffnet ist, funktioniert gut, aber wenn Sie öffnen BUY, dann aus irgendeinem Grund sofort geändert stopper. Wo liegt der Fehler, den ich nicht verstehen kann.... HIER IST DER CODE:

extern int TP = 50;
extern int SL = 50;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Deckungsbeitrag berechnen ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (Auftragsart()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

wenn (Auftragsart()==OP_SELL)
{
lotsSEL=slotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;

//======== Position öffnen =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

wenn (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
wenn (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Nachlaufender Stopp =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE)
}
}
}
zurück(0);

}

Es gibt einen Moment, wenn ich priceBUY in OrderOpenPrice() im TrailingStop-Block ändere, funktioniert es, aber ich muss vom Breakeven-Level aus trailen, nicht vom Eröffnungskurs..... Auf VERKAUFEN funktioniert, aber auf kaufen aus irgendeinem Grund nicht.... Ich verstehe nicht, wo der Fehler liegt.....SOS!!!!!!!!

 
Roman.:


Dies ist kein Fehler - es ist eine Meldung, dass das Mindestguthaben erreicht wurde - d.h. das Konto ist leer - der Lauf wird beendet und ein neuer Lauf mit anderen Eingabeparametern gestartet - siehe Kontrollkästchen und eingestellte Grenzwerte auf der Registerkarte "Tester optimieren":

Ich danke Ihnen!
 

Guten Tag!!! Mein EA zieht die Aufträge mit diesem Ort zurück.

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

Mein EA hat vorher gut funktioniert, zumindest bis ich 2-5 Aufträge hatte. Jetzt haben wir so viele Aufträge, wie wir wollen - 20, 50 auf jeder Seite. Kurz gesagt, es wird nicht sauber. Nun, zwei-, drei- oder viermal schon, und dann plötzlich nicht mehr!

Ich frage mich, wie es im Tester aussieht - im Allgemeinen entfernt es mehrere Bestellungen in der Nähe des Preises, aber nicht alle! Welche Abweichungen können wir uns vorstellen, erfinden, erträumen, die es sicher schließen würden?

Wirklich, es war vorher in Ordnung. Früher wurde sie geschlossen, nicht wahr? Was braucht es sonst noch? ?????

 

Gute Leute, Hilfe, ich kann nicht verstehen, TrailingStop funktioniert nicht, wie es sollte, wenn das Geschäft auf dem SELL trall geöffnet ist, funktioniert gut, aber wenn Sie öffnen BUY, dann aus irgendeinem Grund sofort geändert stopper. Wo liegt der Fehler, den ich nicht verstehen kann.... HIER IST DER CODE:

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

Es gibt eine Zeit, wenn ich priceBUY in OrderOpenPrice() im Block TrailingStop ändere, funktioniert alles, aber ich brauche einen Trailing-Stop vom Breakeven-Level, nicht vom Eröffnungskurs..... Auf VERKAUFEN funktioniert, aber auf kaufen aus irgendeinem Grund nicht.... Ich verstehe nicht, wo der Fehler liegt.....SOS!!!!!!!!
 
MIR-ASOV:

Gute Leute, Hilfe, ich kann nicht verstehen, TrailingStop funktioniert nicht, wie es sollte, wenn das Geschäft auf dem SELL trall geöffnet ist, funktioniert gut, aber wenn Sie öffnen BUY, dann aus irgendeinem Grund sofort geändert stopper. Wo liegt der Fehler, den ich nicht verstehen kann.... HIER IST DER CODE:

Es gibt eine Zeit, wenn ich priceBUY in OrderOpenPrice() im Block TrailingStop ändere, funktioniert alles, aber ich brauche einen Trailing-Stop vom Breakeven-Level, nicht vom Eröffnungskurs..... Auf VERKAUFEN funktioniert, aber auf kaufen aus irgendeinem Grund nicht.... Ich verstehe nicht, wo der Fehler liegt.....SOS!!!!!!!!

Versuchen Sie, mit Print() den PreisBUY-Wert vor der Änderung auszugeben, um zu sehen, ob er den Erwartungen entspricht...
 
Versuchen Sie, mit Print() den PreisBUY-Wert vor der Änderung auszugeben, um zu sehen, ob er den Erwartungen entspricht...
Ja, ich habe es überprüft, es entspricht vollständig und vollständig ...... Im Wesentlichen ist das Break-Even-Level für BUY gleich dem Eröffnungskurs der Order, aber aus irgendeinem Grund funktioniert es nicht, ich setze OrderOpenPrice() alles funktioniert, ich setze priceBUY, no......
 
Höchstwahrscheinlich ist die VariablepriceBUY zum Zeitpunkt der Eröffnung Null, d. h. Bid-priceBUY(0)==Bid, und daher
 
Dimka-novitsek:

Guten Tag!!! Mein EA zieht die Aufträge mit diesem Ort zurück.

Mein EA scheint vorher gut funktioniert zu haben, zumindest bis ich 2-5 Aufträge hatte. Aber jetzt habe ich so viele Aufträge, wie ich will - 20, 50 auf jeder Seite. Kurz gesagt, es wird nicht sauber. Nun, zwei-, drei- oder viermal schon, und dann plötzlich nicht mehr!

Ich frage mich, wie es in der Testversion aussieht - es werden mehrere Bestellungen in der Nähe des Preises entfernt, aber nicht alle! Welche Art von Abweichungen können wir uns ausdenken, damit wir sie unbedingt schließen können?

Wirklich, vorher war alles in Ordnung? Früher wurde sie geschlossen, nicht wahr? Was braucht er sonst noch? ?????

Äh, nun, das wird nicht funktionieren.

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

Solange die Order nicht geschlossen ist, ist ihr OrderClosePrice gleich 0, und an dieser Stelle müssen Sie den tatsächlichen Preis ersetzen, zu dem Sie die Order schließen, d.h. Ask im Falle einer SELL-Order und Bid für BUY.

 
alsu:

Nun, so funktioniert das nicht.

Bis die Order geschlossen wird, ist ihr OrderClosePrice gleich 0, und an dieser Stelle müssen Sie den tatsächlichen Preis angeben, zu dem Sie die Order schließen, d.h. Ask im Falle einer SELL-Order und Bid für BUY.


Nein,OrderClosePrice() für eine nicht geschlossene Order ist nicht gleich Null - prüfen.OrderCloseTime() - ja
 
Ich danke Ihnen!!! Ich werde es versuchen, ich habe es.