//+------------------------------------------------------------------+ //| ba.mq5 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ #include #include #include #include #include #include #include #include //--- CChartObjectRectangle Rect; CChartObjectFibo Fibo; CTrade trade; CSymbolInfo m_symbol; CMoneyFixedRisk money; CPositionInfo position; //--- input datetime start_date = D'2018.11.15 20:46:00'; input datetime end_date = D'2018.11.15 20:50:00'; input double start_price = 1.13160; input double end_price = 1.13240; input ENUM_TIMEFRAMES trade_bar=PERIOD_H1; input ENUM_TIMEFRAMES period=PERIOD_D1; input int days = 2; input double Money_FixRisk_Percent=0.5; input double fibo_level=0.236; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { EventSetTimer(1); m_symbol.Name(Symbol()); m_symbol.Refresh(); /* if(!RefreshRates()) { Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()), ", Ask=",DoubleToString(m_symbol.Ask(),Digits())); return(INIT_FAILED); } */ //--- tuning for 3 or 5 digits int digits_adjust=1; /* if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; ExtStopLoss=InpStopLoss*m_symbol.Point()*digits_adjust; */ //--- if(!money.Init(GetPointer(m_symbol),Period(),m_symbol.Point()*digits_adjust)) return(INIT_FAILED); money.Percent(Money_FixRisk_Percent); // 10% risk //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- string com; Rect.Create(0,"Rectangle 1",0,start_date,start_price,end_date,end_price); Rect.Color(clrYellow); Rect.Fill(true); double lastday_top,lastday_bot; int high=iHighest(NULL,period,MODE_HIGH,days,0); int low=iLowest(NULL,period,MODE_LOW,days,0); // iLowest( //iHighest( // lastday_top=iHigh(NULL,PERIOD_H4,high); // lastday_bot=iLow(NULL,PERIOD_H4,low); lastday_top=iHigh(NULL,period,high); lastday_bot=iLow(NULL,period,low); // PrintFormat("Ошибка вызова iHighest(). Код ошибки=%d",GetLastError()); // StringToTime( Fibo.Create(0,"fib",0,iTime(NULL,period,days-1),lastday_bot,TimeCurrent(),lastday_top); Fibo.SetPoint(0,iTime(NULL,period,days),lastday_bot); // Fibo.SetPoint(2,TimeCurrent(),lastday_top); com+=" "; com+=Fibo.LevelsCount(); // com+=" "+Fibo.GetDouble(OBJPROP_PRICE,Fibo.LevelValue(0)); double fibo_top,fibo_bottom, fibo236, fibo236top,fibo236bot; fibo_top=Fibo.GetDouble(OBJPROP_PRICE,1); fibo_bottom=Fibo.GetDouble(OBJPROP_PRICE,0); //0.236 fibo236=(fibo_top-fibo_bottom)*fibo_level; fibo236top=fibo_top-fibo236; fibo236bot=fibo_bottom+fibo236; fibo_bottom=fibo_bottom-Point()*20; fibo_top=fibo_top+m_symbol.SpreadFloat()*Point()+Point()*20; // Alert("l;"); // 100000 //com+=" "+Fibo.GetDouble(OBJPROP_PRICE,1); com+=" "+Fibo.LevelValue(2); com+=" "+fibo_top+" "+fibo_bottom+" "+fibo236+" "+fibo236top+" "+fibo236bot; ChartRedraw(); double last_bar; int order_buy_c=0,order_sell_c=0; long buy_id,sell_id; ulong ticket; //string type; uint total=PositionsTotal(); //Alert(total); //--- пройдем в цикле по всем ордерам for(uint i=0;i0) { //--- получим свойства ордера // type =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE))); //--- подготовим и выведем информацию об ордере // Alert(PositionGetInteger(POSITION_TYPE)); if(PositionGetInteger(POSITION_TYPE)==1){ order_sell_c++; sell_id=PositionGetInteger(POSITION_IDENTIFIER); } else{ order_buy_c++; buy_id=PositionGetInteger(POSITION_IDENTIFIER); } } } com+=":"+order_buy_c+"-"+order_sell_c+"-"+buy_id; last_bar=iOpen(NULL,trade_bar,1); //money.Percent(Money_FixRisk_Percent); com+="|"+money.CheckOpenShort(SymbolInfoDouble(NULL,SYMBOL_BID),fibo_top); /* if(money.ValidationSettings()) { // Alert("AA"); } */ // Alert(SymbolInfoDouble(NULL,SYMBOL_BID)); // Alert(fibo_top); //Alert(money.CheckOpenShort(SymbolInfoDouble(NULL,SYMBOL_BID),0)); Comment(SymbolsTotal(true),com); double lot2=0.01; string pos_com=trade_bar+" "+period+" "+fibo_level; if(last_bar>fibo236top && fibo236top>iOpen(NULL,trade_bar,0)&& order_sell_c==0){ lot2=money.CheckOpenShort(SymbolInfoDouble(NULL,SYMBOL_BID),fibo_top); if(lot2<0.01)lot2=0.01; trade.Sell(lot2,NULL,SymbolInfoDouble(NULL,SYMBOL_BID),fibo_top,fibo_bottom,pos_com); // trade.PositionClose(buy_id); if(buy_id>0){ position.SelectByTicket(buy_id); if(position.Profit()>0) trade.PositionClose(buy_id); } } if(last_bar0){ position.SelectByTicket(sell_id); if(position.Profit()>0) trade.PositionClose(sell_id); } //trade.PositionModify(trade.ResultDeal(),fibo_bottom); // trade.PositionClose(sell_id); } //if(PositionsTotal()==0)trade.Buy(1); } //+------------------------