|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
EA öffnet jede Order zig mal
Abend.
Seit einiger Zeit ist in meinem EA irgendwie voll der Wurm drin. Egal, wie ich die Öffnungs-Bedingungen schreibe und anordne, er öffnet entweder gar nix oder jede Order zig mal. Komisch ist, dass ne ähnliche Form in nem anderen EA einwandfrei funktioniert. Allerdings werden da nur Stop-Orders raus geschickt. Code:
//============================================================================================================= // P R U E F E N O B O R D E R S G E O E F F N E T S I N D //============================================================================================================= for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS)){ if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_Market_MN&&OrderSymbol()==Symbol())bool Buy_Mark_inv=true; if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_Market_MN&&OrderSymbol()==Symbol())bool Sel_Mark_inv=true;}} //============================================================================================================= // O P E N O R D E R S //============================================================================================================= if( SPR_AL==true && RT==true && Fast_TF==Slow_TF && Buy_Mark_inv==false && Sel_Mark_inv==false){ if(Buy_Market==true){ if(CP_1>F_MA&&F_MA>S_MA)OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_Mark_SL,Buy_Mark_TP,Buy_Market_MN,0,MediumBlue);} if(Sell_Market==true){ if(CP_1<F_MA&&F_MA<S_MA)OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_Mark_SL,Sel_Mark_TP,Sell_Market_MN,0,SteelBlue); } } |
|
|||
Hallo,
setzt du Buy_Mark_inv eigentlich irgendwann auf False? So wie ich das sehe wird der einmal auf True gesetzt und dieser Zustand bleibt dann auch. ---Leopold--- |
|
|||
Hallo,
entschuldige, hab was übersehn. Buy_Mark_inv muss ja False sein. Was für meldungen bekommst du wenn du kompilierst? zur Hilfe:https://docs.mql4.com/basis/variables da sieht man wieder, dass dir das Grundlegendste Wissen fehlt. ---Leopold--- Geändert von Leopold (30.08.18 um 10:40 Uhr) |
|
|||
Da kommt immer nur, das Return Value für OrderSend, OrderModify und OrderClose gecheckt werden sollte. Die Meldungen kamen aber schon immer.
|
|
|||
Bekommst du keine Meldung, dass Buy_Mark_inv falsch deklariert ist?
Würde mich wundern. Auf jeden Fall muss du das anders deklarieren und nicht nach der if Bedingung. ---Leopold--- |
|
|||
Edit:Irgendwelche Fehlermeldungen kommen nicht. Nur diese 6 Warnungen, die es wie gesagt schon immer beim Kompilieren gibt.
Der ganze Öffnungs-Kram von nem anderen Stop-Order-EA. Bei dem funktioniert Alles. Oder zumindest OrderSend. Code:
for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS)){ if(OrderType()==OP_BUY&&OrderSymbol()==Symbol())bool Buy_Mark_inv=true; if(OrderType()==OP_BUYSTOP&&OrderMagicNumber()==Buy_Stop_MN&&OrderSymbol()==Symbol())bool Buy_Stop_inv=true; if(OrderType()==OP_SELL&&OrderSymbol()==Symbol())bool Sel_Mark_inv=true; if(OrderType()==OP_SELLSTOP&&OrderMagicNumber()==Sell_Stop_MN&&OrderSymbol()==Symbol())bool Sel_Stop_inv=true;}} //============================================================================================================= // O P E N ( O N L Y S T O P - ) O R D E R S //============================================================================================================= if(Time_Fast_TF==Time_Slow_TF&&SPR_AL==true&&RT==true){ //Wenn Buy_ / Stop_Order geöffnet werden darf, darf nichts ausser einer Stop_Order der anderen Richtung offen sein. if(Buy_Stop==true && Buy_Stop_inv==false && Buy_Mark_inv==false && Sel_Mark_inv==false)OrderSend(Symbol(),OP_BUYSTOP,Lots,Buy_Stop_OOP,Slippage,B_Stop_SL,B_Stop_TP,0,Buy_Stop_MN,0,MediumBlue); if(Sell_Stop==true && Sel_Stop_inv==false && Sel_Mark_inv==false && Buy_Mark_inv==false)OrderSend(Symbol(),OP_SELLSTOP,Lots,Sel_Stop_OOP,Slippage,S_Stop_SL,S_Stop_TP,0,Sell_Stop_MN,0,SteelBlue);} Code:
for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_Market_MN&&OrderSymbol()==Symbol()) bool Buy_inv=true; if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_Market_MN&&OrderSymbol()==Symbol()) bool Sel_inv=true; } } //============================================================================================================= // O P E N O R D E R S //============================================================================================================= if( Fast_iTime==Slow_iTime && RT==true && SPR_AL==true ) { if(Buy_Market==true && Buy_inv==false && Sel_inv==false && CP_1>Fast_MA && Fast_MA>Slow_MA)OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_Mark_SL,Buy_Mark_TP,Buy_Market_MN,0,MediumBlue); if(Sell_Market==true && Buy_inv==false && Sel_inv==false && CP_1<Fast_MA && Fast_MA<Slow_MA)OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_Mark_SL,Sel_Mark_TP,Sell_Market_MN,0,SteelBlue); } |
|
|||
Es funktioniert einfach nicht.
Ich wollte eigentlich 1. prüfen, ob Zeit und Spread passen. Und ob im H1 ne neue Kerze erschienen ist: Code:
if ( Fast_iTime==Slow_iTime && RT==true && SPR_AL==true ) Code:
for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if((OrderType()==OP_SELL||OrderType()==OP_BUY)&&(OrderMagicNumber()==Buy_Market_MN||OrderMagicNumber()==Sell_Market_MN)&&OrderSymbol()==Symbol())bool IsInv=true; } } Code:
if( CP_1>Fast_MA && Fast_MA>Slow_MA )OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_Mark_SL,Buy_Mark_TP,Buy_Market_MN,0,MediumBlue); if( CP_1<Fast_MA && Fast_MA<Slow_MA ){OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_Mark_SL,Sel_Mark_TP,Sell_Market_MN,0,SteelBlue); } Wie muss man das Ganze schreiben und sortieren, damit der schnallt, was er machen soll? An den beiden iTime Bar 0 liegts nicht. Er macht die selben Fehler auch ohne. |
|
|||
Müsste doch eigentlich funktionieren...
Code:
//============================================================================================================= // P R U E F E N O B O R D E R S G E O E F F N E T S I N D //============================================================================================================= if(Fast_iTime==Slow_iTime && RT==true && SPR_AL==true) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { //============================================================================================================= // O P E N O R D E R S //============================================================================================================= if(OrderType()!=OP_BUY && OrderMagicNumber()!=Buy_Market_MN && OrderSymbol()!=Symbol()) { if( CP_1>Fast_MA && Fast_MA>Slow_MA )OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_Mark_SL,Buy_Mark_TP,Buy_Market_MN,0,MediumBlue); } if(OrderType()!=OP_SELL && OrderMagicNumber()!=Sell_Market_MN && OrderSymbol()!=Symbol()) { if( CP_1<Fast_MA && Fast_MA<Slow_MA )OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_Mark_SL,Sel_Mark_TP,Sell_Market_MN,0,SteelBlue); } } } } |
|
|||
Ganz egal, wie ichs schreibe, er öffnet entweder zu viele Orders oder gar Keine. Kann das vielleicht an irgendwas Anderem im EA liegen? Hab schon Alles mögliche aus der OrderSend Funktion rausgenommen, bringt aber nix. Die selbe Form hat in anderen EAs früher immer funktioniert. Bloß in dem nicht.
Ich bin mit meinem mql wirklich am Ende. Mein 2-MA-EA war eigentlich immer profitabel im H1. Dann hab ich irgendwie vor einiger Zeit irgendwas umgeschrieben und wie gesagt öffnet er jede Order mehrmals. Hab wirklich keinen Plan warum. Code:
//So werden Orders geöffnet, aber jede mehrmals for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS)){ if((OrderType()==OP_BUY && OrderMagicNumber()==Magic_Number && OrderSymbol()==Symbol()) || (OrderType()==OP_SELL && OrderMagicNumber()==Magic_Number && OrderSymbol()==Symbol()))bool IsInv=true;} } //============================================================================================================= // O P E N O R D E R S //============================================================================================================= if(IsInv==false){ if( CP_1>Fast_MA && Fast_MA>Slow_MA )OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_SL,Buy_TP,Magic_Number,0,MediumBlue); if( CP_1<Fast_MA && Fast_MA<Slow_MA )OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_SL,Sel_TP,Magic_Number,0,SteelBlue); } |
Lesezeichen |
|
|