Ichh würde gern ein System programmieren, welches maximal alle 5 Minuten eine Order absetzt. Dieser Schutz muss eingebaut werden, da das System ansonsten 5-10 Trades hintereinander öffnet, da ja bei jedem Tick eine Order wieder aufgemacht wird, sobald das Signal der Indikatoren da ist.
Leider gelingt es mir nicht. Zwar habe ich durch die Zeitabfrage nun geschafft das 99% weniger Positionen eröffnet werden, jedoch trotzdem pro Minute bis zu 10 Trades, ich weiß nicht genau was da gerade passiert. Könnt ihr mir vielleicht helfen?
Ich erkläre kurz wie ich es mir dachte. Zuerst der ganze Code
Dieser Block soll schauen ob eine Position offen ist, wenn ja soll geprüft werden ob diese schon 5 Minuten her ist. Wenn nicht: Variable Timeblock auf 1 setzen.
Wie gesagt, leider hält das System sich nicht an die 5 Minuten. Was mache ich falsch? Vielleicht hat jemand auch eine Idee, wie ich es besser lösen kann? Sollte das System funktionieren, werde ich es frei zum Download anbieten. Demnächst kommt ein besseres Moneymanagement, damit die Gewinne maximiert werden.
Ichh würde gern ein System programmieren, welches maximal alle 5 Minuten eine Order absetzt. Dieser Schutz muss eingebaut werden, da das System ansonsten 5-10 Trades hintereinander öffnet, da ja bei jedem Tick eine Order wieder aufgemacht wird, sobald das Signal der Indikatoren da ist.
Leider gelingt es mir nicht. Zwar habe ich durch die Zeitabfrage nun geschafft das 99% weniger Positionen eröffnet werden, jedoch trotzdem pro Minute bis zu 10 Trades, ich weiß nicht genau was da gerade passiert. Könnt ihr mir vielleicht helfen?
Ich erkläre kurz wie ich es mir dachte. Zuerst der ganze Code
#property copyright "Blabla" #property link "http://www.google.de" //---- input parameters extern double TakeProfit=50.0; extern double StopLoss=10.0; extern double Lots=0.5; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double bup = iBands(Symbol(),0,20,2,0,PRICE_OPEN,MODE_UPPER,0); double bdn = iBands(Symbol(),0,20,2,0,PRICE_OPEN,MODE_LOWER,0); double stoca = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0); int ticket; int timeblock = 0; if(OrdersTotal() > 0){ if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)){ datetime timecheck = TimeCurrent() - OrderOpenTime(); if(timecheck < 300){ timeblock = 1; } } } // //Oberer Rand -> Verkaufen // if(Close[0]>bup+(4*Point) && stoca>90){ //Nur alle 5 Minuten if(timeblock == 0){ //Order absenden ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"FOREX Fighter",12345,0,Red); //Auf Fehler prüfen if(ticket>0){ if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){ Print("Short Position eröffnet: ",OrderOpenPrice(), " ", timeblock, timecheck); } } } } // //Unterer Rand -> Kaufen // else if(Close[0]<bdn-(4*Point) && stoca<10){ //Nur alle 5 Minuten if(timeblock == 0){ //Order absenden ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"FOREX Fighter",12345,0,Green); //Auf Fehler prüfen if(ticket>0){ if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){ Print("Long Position eröffnet: ",OrderOpenPrice()); } } } } //---- } //+------------------------------------------------------------------+Dieser Block soll schauen ob eine Position offen ist, wenn ja soll geprüft werden ob diese schon 5 Minuten her ist. Wenn nicht: Variable Timeblock auf 1 setzen.
if(OrdersTotal() > 0){ if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)){ datetime timecheck = TimeCurrent() - OrderOpenTime(); if(timecheck < 300){ timeblock = 1; } } }Und dann soll vor der Order-Öffnung geprüft werden ob die Variable auf 1 steht. Wenn ja, dann nicht eröffnen:
if(Close[0]>bup+(4*Point) && stoca>90){ //Nur alle 5 Minuten if(timeblock == 0){ //Order absenden ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"FOREX Fighter",12345,0,Red); //Auf Fehler prüfen if(ticket>0){ if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){ Print("Short Position eröffnet: ",OrderOpenPrice(), " ", timeblock, timecheck); } } } }Wie gesagt, leider hält das System sich nicht an die 5 Minuten. Was mache ich falsch? Vielleicht hat jemand auch eine Idee, wie ich es besser lösen kann? Sollte das System funktionieren, werde ich es frei zum Download anbieten. Demnächst kommt ein besseres Moneymanagement, damit die Gewinne maximiert werden.