|
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 |
|
|||
Hour habe ich dazu benutzt um einzustellen ob wir 1,2,3,4...Uhr haben. Die ordersend Funktion sollte gewährleisten, dass zu den vollen Stunden dann auch eine marktorder Long und Short zum jeweiligen opening generiert wird...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Mr Sandman bring me your dream :)
Erst mal vielen Dank für die Konzept Idee Ich bin derzeit folgender Maßen gekommen und habe da Problem, dass jetzt nur openbuyorders generiert werden, aber keine opensell...warum?
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=0; extern int BuyMagicNumber=1; extern int SellMagicNumber=2; 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=50; extern int TakeProfit=100; extern int MaxTradePerBarLong=1; extern int MaxTradePerBarShort=1; datetime Time0; int TradePerBarLong=1; int TradePerBarShort=1; int BarCountLong=-1; int BarCountShort=-1; //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); Time0=Time[0]; return(0); } //+------------------------------------------------------------------+ //| 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); //BuyOrder if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && openbuy == 0 &&(TradePerBarLong<=MaxTradePerBarLong)) //Signal Buy if (BarCountLong!=Bars){TradePerBarLong=0;BarCountLong=Bars;} { if (Time0!=Time[0]) { openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"Kompensation buy",BuyMagicNumber,0,Green); if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() ); Time0=Time[0]; if(TradePerBarLong>0)TradePerBarLong++; } } return(0); //SellOrder if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && opensell == 0 &&(TradePerBarShort<=MaxTradePerBarShort)) //Signal Buy if (BarCountShort!=Bars){TradePerBarShort=0;BarCountShort=Bars;} { if (Time0!=Time[0]) { opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"Kompensation sell",SellMagicNumber,0,Red); if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() ); Time0=Time[0]; if(TradePerBarShort>0)TradePerBarShort++; } } 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... |
|
||||
Hi,
liegt an dem ersten return(0); Muss weg, oder innerhalb der if Abfrage bei openbuy Gruss sandmann Den EA bitte nur auf einem demokonto nutzen oder zum backtesten. Du machst dich ansonsten unglücklich |
|
|||
Hallöchen Nochmals vielen Dank...daran habe ich gestern auch gedacht und das erste return in der openbuy Funktion weg genommen....aber ich muss sagen es wurden trotzdem nur die openbuys und nicht die opensells ausgeführt^^
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Hallo,
mit setzen der Buy Order machst du ein Time0 = Time[0]. Deshalb ist für die Sell Order eben nicht mehr Time0 != Time[0]. Gruß naranjoe |
|
|||
Zitat:
Oh mann ich habe sie sogar 4 mal drin ^^ dann müsste ich ja aus dem gesamten openbuy-Block den Befehl heraus nehmen oder?
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Sorry,
aber ich kann das nicht mehr mit ansehen wie diese doch relativ einfach Sache verkompliziert wird. Dein EA wird immer unübersichtlicher. Ich habe hier mal deinen Ansatz etwas kompakter verwirklicht: Code:
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 = 20; extern int TakeProfit = 20; int ActiveLongHour = 25; int ActiveShortHour = 25; int Slippage = 3; double Lot = 0.1; int MagicNumber = 12345; void init() { } void start() { if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && ActiveLongHour != Hour()){ int ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"Kompensation buy",MagicNumber,0,Green); if (ticket < 0) { Print("OrderSend OP_BUY failed, error: ", GetLastError()); } else { ActiveLongHour = Hour(); } } if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && ActiveShortHour!=Hour()){ ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"Kompensation sell",MagicNumber,0,Red); if (ticket < 0) { Print("OrderSend OP_SELL failed, error: ", GetLastError() ); } else { ActiveShortHour = Hour(); } } for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol()) { OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), Slippage); } } } } Musst nur noch deinen Code drumherum schreiben. Gruß naranjoe |
Lesezeichen |
Stichworte |
ea, expert-advisor, mql4, programmierung, programmierung metatrader |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|