|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Zitat:
also ich habe das Problem mit dem einpflegen der Rücksetzung erst mal dadurch behoben, dass ich den SL gänzlich entfernt habe. Learning by Doing scheint wirklich das bete zu sein, aber es ist langwierig und ich muss ehrlich gestehen, dass ich als absoluter newbie gar keinen plan davon habe wie weit das ganze noch gehen kann...derzeit hole ich mir die Grundgerüste von diversenen Seiten aus denen ich zumindest annähernd verstehen kann worum es in dem EA geht und ob ich das gleiche Ziel verfolge...also vom Inhalt...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
vorerst Finaler EA...mit Mäßigem Durchschnitt :(
Code:
//+------------------------------------------------------------------+ //| Der Stundentrader.mq4 | //| Der Marc | //| Es gibt gar keine Internetseite | //+------------------------------------------------------------------+ #property copyright "Der Marc" #property link "Es gibt gar keine Internetseite" //Wichtige Variablen extern double Minlot=0.01; extern int Digits2Round=2; extern int PercentOfFreeDepo=1; extern int Slippage=5; extern int MagicNumber =1; extern int TradeHour3=3; extern int TradeHour4=4; extern int TradeHour7=7; extern int TradeHour10=10; extern int TradeHour17=17; extern int TradeHour18=18; extern int TradeHour20=20; extern int TradeHour12=12; extern int TradeHour23=23; extern int StopLoss=300; extern int TakeProfit=500; //Globale Variablen int BuyTicket; int SellTicket; double UsePoint; int UseSlippage; int openbuy = 0; int opensell = 0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { UsePoint = PipPoint(Symbol()); UseSlippage = GetSlippage(Symbol(), Slippage); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round); double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round); double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round); //===================== Lets determine lot size and risk =================================== if ( Lot<Minlot ) { Lot=Minlot; } Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot); for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderOpenTime()+3600) < TimeCurrent()) { if (OrderType() == OP_BUY || OP_SELL) { bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red); openbuy = 0; opensell = 0; } if (OrderType() == OP_SELL || OP_BUY) { Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red); opensell = 0; openbuy = 0; } } } } //BuyOrder if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy { openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,0,0,"time trader buy order ",MagicNumber,0,Blue); if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() ); } //SellOrder if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell { opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"time trader sell order ",MagicNumber,0,Green); if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() ); } //---- return(0); } //+------------------------------------------------------------------+ //Pip Point Function double PipPoint (string Currency) { int CalcDigits = MarketInfo(Currency, MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01; else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001; return (CalcPoint); } //Get Slippage Function int GetSlippage(string Currency, int SlippagePips) { int CalcDigits = MarketInfo(Currency, MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips; else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10; return (CalcSlippage); } Jetzt aber folgendes noch zum Rücksetzen von openbuy und opensell auf = 0. Ich dachte ich kann das machen indem ich bei der eigentlichen Orderausführung den Wert auf 0 setze...also: Code:
//BuyOrder if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy { openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,0,0,"time trader buy order ",MagicNumber,0,Blue); if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() ); opensell = 0; openbuy = 0; } //SellOrder if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell { opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"time trader sell order ",MagicNumber,0,Green); if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() ); opensell = 0; openbuy = 0; }
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Also,
die openbuy/opensell variable enthält nach dem setzen der Order das Orderticket. openbuy=OrderSend(Symbol()... Wenn also openbuy/opensell nicht 0 ist, ist eine Order geöffnet und es soll keine weitere geöffnet werden. Das ist natürlich nur bedingt sinnvoll, da ja die Sache mit dem SL nicht berücksichtigt wird. Warum hast du denn die OrderClose Funktion geändert? Diese Änderung verursacht Fehlermeldungen!!! |
|
|||
Zitat:
Code:
//+------------------------------------------------------------------+ //| Der Stundentrader.mq4 | //| Der Marc | //| Es gibt gar keine Internetseite | //+------------------------------------------------------------------+ #property copyright "Der Marc" #property link "Es gibt gar keine Internetseite" //Wichtige Variablen extern double Minlot=0.01; extern int Digits2Round=2; extern int PercentOfFreeDepo=1; extern int Slippage=5; extern int MagicNumber=1; extern int TradeHour0=0; extern int TradeHour1=1; extern int TradeHour2=2; extern int TradeHour3=3; extern int TradeHour4=4; extern int TradeHour5=5; extern int TradeHour6=6; extern int TradeHour7=7; extern int TradeHour8=8; extern int TradeHour9=9; extern int TradeHour10=10; extern int TradeHour11=11; extern int TradeHour12=12; extern int TradeHour13=13; extern int TradeHour14=14; extern int TradeHour15=15; extern int TradeHour16=16; extern int TradeHour17=17; extern int TradeHour18=18; extern int TradeHour19=19; extern int TradeHour20=20; extern int TradeHour21=21; extern int TradeHour22=22; extern int TradeHour23=23; extern int StopLoss=300; extern int TakeProfit=500; //Globale Variablen int BuyTicket; int SellTicket; double UsePoint; int UseSlippage; int openbuy = 0; int opensell = 0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { UsePoint = PipPoint(Symbol()); UseSlippage = GetSlippage(Symbol(), Slippage); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round); double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round); double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round); //===================== Lets determine lot size and risk =================================== if ( Lot<Minlot ) { Lot=Minlot; } Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot); opensell = 0; openbuy =0; for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) //==> select also on magicnumber and symbol { if(OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() && OrderType() == OP_BUY){openbuy++;} if(OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() && OrderType() == OP_SELL){opensell++;} if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol()) { if (OrderType() == OP_BUY) { bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red); openbuy = openbuy-1; //openbuy--; } if (OrderType() == OP_SELL) { Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red); opensell = opensell-1; //opensell--; } } } } //BuyOrder if ((TradeHour3==Hour())||(TradeHour10==Hour())||(TradeHour15==Hour())||(TradeHour17==Hour())||(TradeHour21==Hour()) && openbuy == 0) //Signal Buy { openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"time trader buy order ",MagicNumber,0,Blue); if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() ); } //SellOrder if ((TradeHour0==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour16==Hour())||(TradeHour20==Hour())&& opensell == 0) //Signal Sell { opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"time trader sell order ",MagicNumber,0,Green); if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() ); } //---- return(0); } //+------------------------------------------------------------------+ //Pip Point Function double PipPoint (string Currency) { int CalcDigits = MarketInfo(Currency, MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01; else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001; return (CalcPoint); } //Get Slippage Function int GetSlippage(string Currency, int SlippagePips) { int CalcDigits = MarketInfo(Currency, MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips; else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10; return (CalcSlippage); }
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
Lesezeichen |
Stichworte |
close, mql4, order, order schliessen, programmierung, programmierung metatrader |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|