|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
@traderdoc: Das mach ich ja mit if( OrderStopLoss() != OrderOpenPrice())
trotzdem kommt die selbe Fehlermeldung. @Leopold total = OrdersTotal(); / Also sprich if OrderSelect() == true) {} und dann denn Code rein? @MA-EA TP 400 und SL 200 für den Anfang als Testzweck. |
|
|||
Zitat:
ja in die Klammern dann den Code. ---Leopold--- |
|
|||
Weiß es nicht genau, aber das Problem ist vielleicht, dass in dem Moment, in dem geöffnet weden soll, der SL zu klein ist.
|
|
|||
An welcher Stelle wird denn Buy und Sell deklariert und mit Werten beschrieben?
Und dann versuche bitte, den Code strukturell übersichtlich zu schreiben, v.a. die Einrückungen der { und } Klammern, damit man den Code besser lesen kann. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Er versucht anscheinend, den SL = Bid oder Ask zu machen. Bloß macht da wohl der MinStopLevel() nicht mit.
|
|
|||
Code:
int Buy = 0; int Sell = 0; Code:
{ //Buy Order Buy = OrderSend(Symbol(), OP_BUY, LotsOptimized(),Ask,0, LongSL, LongTP, "",MAGICNUM,0,Blue); if(Buy > 0) { if(OrderSelect(Buy, SELECT_BY_TICKET, MODE_TRADES)) Print("BUY Order Opened: ", OrderOpenPrice(), " SL:", LongSL, " TP: ", LongTP); } else Print("Error Opening BUY Order: ", GetLastError()); //Sell Order Sell = OrderSend(Symbol(), OP_SELL, LotsOptimized(),Bid,0, ShortSL, ShortTP, "",MAGICNUM,0,Red); if(Sell > 0) { if(OrderSelect(Sell, SELECT_BY_TICKET, MODE_TRADES)) Print("SELL Order Opened: ", OrderOpenPrice(), " SL:", ShortSL, " TP: ", ShortTP); } else Print("Error Opening SELL Order: ", GetLastError()); return; } @Leopold Leider Es mit ==true nicht geklappt selber fehler. @MA-EA Ich hab ja ein Abstand eingebaut also sollte es nicht am SL liegen. |
|
|||
Ok, mal davon abgesehen, dass hier bei
if(OrderSelect(Buy, SELECT_BY_TICKET, MODE_TRADES)) das MODE_TRADES nach SELECT_BY_TICKET nicht gesetzt wird, weil es keine Unterscheidung des zu selektierenden Trades zwischen Orderpool und Historiepool gibt, sollte der Code doch funktionieren. Tut er das? Es würde aber eine Buy und! eine SellOrder gleichzeitig geöffnet werden. Ist das so gewollt? traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Also würde auch reichen: if(OrderSelect(Buy, SELECT_BY_TICKET))?
Ja er soll gleichzeitig ein Buy und Sell Order setzen. Es funktioniert auch nur nach einiger zeit kommt im Strategietester Error 1 das wundert mich. |
|
|||
Also wenn da jetzt keine weiteren Restriktionen im Code bestehen, dann würde das Programm mit jedem Tick immer eine Buy- und eine SellOrder öffnen!
Ist das so richtig? Jede Order bekommt eine andere TicketNumber, wo soll der Fehler herkommen oder geht der Code noch weiter? traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Gut mit jedem Tick sollte kein Order Eröffnet werden nur wenn ein Signal da ist.
Hier ist der ganze Code: Code:
double LotsOptimized() { double lot = Lots; // Calculate Lot size as a fifth of available free equity. lot = NormalizeDouble((AccountFreeMargin()/5)/1000.0,1); if(lot<0.1) lot=0.1; //Ensure the minimal amount is 0.1 lots return(lot); } void OnTick() { //Alle Orders total = OrdersTotal(); //StopLoss und TakeProfit if(StopLoss > 0) { ShortSL = Bid+(StopLoss*Point); LongSL = Ask-(StopLoss*Point); } if(TakeProfit > 0) { ShortTP = Bid-(TakeProfit*Point); LongTP = Ask+(TakeProfit*Point); } // Short und Long Order if(total<1) { if(TimeStart==TimeHour(TimeCurrent())) { //Buy Order Buy = OrderSend(Symbol(), OP_BUY, LotsOptimized(),Ask,0, LongSL, LongTP, "",MAGICNUM,0,Blue); if(Buy > 0) { if(OrderSelect(Buy, SELECT_BY_TICKET, MODE_TRADES)) Print("BUY Order Opened: ", OrderOpenPrice(), " SL:", LongSL, " TP: ", LongTP); } else Print("Error Opening BUY Order: ", GetLastError()); //Sell Order Sell = OrderSend(Symbol(), OP_SELL, LotsOptimized(),Bid,0, ShortSL, ShortTP, "",MAGICNUM,0,Red); if(Sell > 0) { if(OrderSelect(Sell, SELECT_BY_TICKET, MODE_TRADES)) Print("SELL Order Opened: ", OrderOpenPrice(), " SL:", ShortSL, " TP: ", ShortTP); } else Print("Error Opening SELL Order: ", GetLastError()); return; } } //--- for(int cnt = 0; cnt < total; cnt++) { if((!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))==true) Print("Error-OrderSelect: "); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) { //---Buy if(OrderType() == OP_BUY) { //--- //if(OrderSelect(Sell,SELECT_BY_POS,MODE_HISTORY)) if(total==1) { if(OrderOpenPrice()< Ask - PBuy*Point) { if(OrderStopLoss() != OrderOpenPrice()) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green)) Print("ErrorBuy: ",GetLastError()); else Print("Check---Buy"); return; } } } } else //--- { //---Sell //if(OrderSelect(Buy,SELECT_BY_POS,MODE_HISTORY)) if(total==1) { if(OrderOpenPrice()< Bid + PSell*Point) { if( OrderStopLoss() != OrderOpenPrice()) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red)) Print("ErrorSell: ",GetLastError()); else Print("Check---Sell"); return; } } } } } } return; } |
Lesezeichen |
Stichworte |
nachziehen, null, stoploss |
|
|