//+------------------------------------------------------------------+ //| isho.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ input ENUM_TIMEFRAMES frame=PERIOD_M1; input ENUM_TIMEFRAMES open_frame=PERIOD_H1; input ENUM_TIMEFRAMES order_open_frame=PERIOD_M1; input double lot=0.15; double red[],blue[],span_a[],span_b[],green[],Bands[],Bid, h_ask,h_bid,h_bid_top,last_open_price=0,high_open=0,high_open_id=0,low_open=100000,low_open_id=0; int pips=0; int handle,boli_h; extern string s_o_b="null"; input bool tr_stop=true; input double Money_FixRisk_Percent=0.5; input int trades=3; #include #include #include #include #include #include CTrade trade; CSymbolInfo m_symbol; CMoneyFixedRisk money; CPositionInfo position; CChartObjectFibo Fibo; int OnInit() { //--- EventSetTimer(1); handle=iIchimoku(NULL,frame,9,26,52); if(handle<0) { Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE); Print("Ошибка исполнения = ",GetLastError()); //--- принудительное завершение программы return(-1); } boli_h=iBands(NULL,frame,20,0,2,PRICE_CLOSE); if(boli_h<0) { Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE); Print("Ошибка исполнения = ",GetLastError()); //--- принудительное завершение программы return(-1); } m_symbol.Name(Symbol()); m_symbol.Refresh(); int digits_adjust=1; money.Init(GetPointer(m_symbol),Period(),m_symbol.Point()*digits_adjust); // return(INIT_FAILED); string pr=ObjectGetString(0,"my",OBJPROP_TEXT); double Money_FixRisk_Percent2=Money_FixRisk_Percent; if(StringToDouble(pr)>0) Money_FixRisk_Percent2=StringToDouble(pr); money.Percent(Money_FixRisk_Percent2); // h_bid=iLow(_Symbol,PERIOD_M1,iLowest(_Symbol,PERIOD_M1,MODE_LOW,10,1)); h_bid=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW); h_bid_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH); h_ask=iHigh(_Symbol,PERIOD_M1,iHighest(_Symbol,PERIOD_M1,MODE_HIGH,10,1))+SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*_Point; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTimer() { //--- // Номера буферов: 0 - TENKANSEN_LINE, 1 - KIJUNSEN_LINE, 2 - SENKOUSPANA_LINE, 3 - SENKOUSPANB_LINE, 4 - CHIKOUSPAN_LINE. if(CopyBuffer(handle,0,0,3,red)<=0) return; ArraySetAsSeries(red,true); if(CopyBuffer(handle,0,0,3,red)<=0) return; ArraySetAsSeries(red,true); if(CopyBuffer(handle,1,0,3,blue)<=0) return; ArraySetAsSeries(blue,true); if(CopyBuffer(handle,2,0,3,span_a)<=0) return; ArraySetAsSeries(span_a,true); if(CopyBuffer(handle,3,0,3,span_b)<=0) return; ArraySetAsSeries(span_b,true); if(CopyBuffer(handle,4,0,27,green)<=0) return; ArraySetAsSeries(green,true); double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); long buy_id,sell_id; ulong ticket; //string type; uint total=PositionsTotal(); int order_buy_c=0; int order_sell_c=0; double buylot=0,selllot=0,buy_oprice=0,sell_oprice=0,allprofit=0; int is_stop=0; //Alert(total); //--- 1 поиск сделок for(uint i=0; i0) { //--- получим свойства ордера // type =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE))); //--- подготовим и выведем информацию об ордере // Alert(PositionGetInteger(POSITION_TYPE)); if(PositionGetString(POSITION_SYMBOL)==_Symbol) { allprofit+=PositionGetDouble(POSITION_PROFIT); if(PositionGetInteger(POSITION_TYPE)==1) { order_sell_c++; // if(PositionGetDouble(POSITION_PRICE_OPEN)>sell_oprice)PositionGetDouble(POSITION_PRICE_OPEN) selllot=selllot+PositionGetDouble(POSITION_VOLUME); sell_id=PositionGetInteger(POSITION_IDENTIFIER); if(s_o_b=="buy" && PositionGetDouble(POSITION_PROFIT)>0.01) trade.PositionClose(sell_id); if(PositionGetString(POSITION_COMMENT)=="sell_bid_line")h_bid=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW); if(high_openPositionGetDouble(POSITION_PRICE_OPEN) || PositionGetDouble(POSITION_SL)==0 || tr_stop==true) { double stop; // double stop=blue[0]; // stop=get_b==oli(frame,0)+SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*_Point; // PositionGetInteger(STOP // if(profit_point(h_ask,Ask)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)) { stop=h_ask+2*_Point; is_stop=1; } else stop=Ask+(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)+2)*_Point; // if(PositionGetDouble(POSITION_PROFIT)>0 && h_ask>Ask && (PositionGetDouble(POSITION_PRICE_OPEN)-Ask)>0 && (PositionGetDouble(POSITION_PRICE_OPEN)-Ask)<10)h_ask=Ask; // stop=h_ask+100*_Point; if(sell_id!=high_open_id && stop>0 || (s_o_b=="low_fib" && order_sell_c==1)) { if(stop0.01) trade.PositionClose(buy_id); if(PositionGetString(POSITION_COMMENT)=="buy_bid_line")h_bid_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH); if(low_openSymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)) { stop=stop-2*_Point; //is_stop=1; } else */ stop=Bid-(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)+2)*_Point; if(stop>get_boli(frame,0)) stop=get_boli(frame,0); if(buy_id!=low_open_id) { if(stop>PositionGetDouble(POSITION_PRICE_OPEN) && stop>PositionGetDouble(POSITION_SL)) trade.PositionModify(buy_id,stop,PositionGetDouble(POSITION_TP)); } } } } } } if(last_open_price==0) last_open_price=high_open; double lot2; double day_open=iOpen(_Symbol,PERIOD_D1,0); //if(Bid>day_open)s_o_b="buy"; double bot_rect=ObjectGetDouble(0,"bot_rect",OBJPROP_PRICE,0); //if(Bid10*_Point) { Alert("rrr"); if(selllot==0) selllot=0.1; if(order_buy_c==0) trade.Buy(selllot,NULL,0,red[0],0,"buy_line_top"); } double n236=l_bot+(l_top-l_bot)*0.236; double t236=l_top-(l_top-l_bot)*0.236; if(Bidl_bot && s_o_b!="buy"){s_o_b="low_fib";last_top_rect();} if(Bid>t236 && Bid=my_line)s_o_b="buy"; if(iOpen(_Symbol,order_open_frame,1)my_line && iOpen(_Symbol,order_open_frame,0)>my_line && (Bid-iHigh(_Symbol,order_open_frame,1))>10*_Point){ if(selllot==0)selllot=0.1; if(order_buy_c<=trades && profit_point(Bid,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){ trade.Buy(lot,NULL,0,0,0,"buy_line_my(fib)"); last_open_price=Ask;} s_o_b="buy"; } my_line=t236; if(iOpen(_Symbol,order_open_frame,0)>my_line && Bid<=my_line)s_o_b="sell"; if(iOpen(_Symbol,order_open_frame,1)>my_line && iClose(_Symbol,order_open_frame,1)10*_Point){ if(selllot==0)selllot=0.1; if(order_sell_c<=trades && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){ trade.Sell(lot,NULL,0,0,0,"sell_line_my(fib)"); last_open_price=Ask;} s_o_b="sell"; } if(l_bot-Bid>10*_Point) { Alert("rrr"); if(buylot==0) buylot=0.1; if(order_sell_c==0) trade.Sell(buylot,NULL,0,red[0],0,"sell_line_bot"); } if(is_stop==1) { double new_ask=get_boli(frame,0)+SymbolInfoInteger(NULL,SYMBOL_SPREAD)*_Point; if(h_ask>new_ask) h_ask=new_ask; else h_ask=Ask; } if(h_askiLow(_Symbol,PERIOD_M15,iLowest(_Symbol,PERIOD_M15,MODE_LOW,10,1))) // h_bid=iLow(_Symbol,PERIOD_M15,iLowest(_Symbol,PERIOD_M15,MODE_LOW,10,1)); // ilo //if(h_bid>Bid) ObjectMove(0,"bid_line",0,0,h_bid); if(l_bot!=h_bid && Bid>h_bid)h_bid=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW); my_line=h_bid; if(iOpen(_Symbol,PERIOD_M1,1)>my_line && iClose(_Symbol,order_open_frame,1)10*_Point){ if(selllot==0)selllot=0.1; if(order_sell_c<=trades && order_buy_c>0 && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){ double tr_lot=buylot-selllot; if(my_linemy_line && iOpen(_Symbol,order_open_frame,0)>my_line && (Bid-iHigh(_Symbol,order_open_frame,1))>10*_Point){ if(selllot==0)selllot=0.1; if(order_buy_c<=trades && order_sell_c>0 && profit_point(Bid,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){ double tr_lot=selllot-buylot; if(my_line>n236){ double mstop=Bid-SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5*_Point; //mstop=0; trade.Buy(tr_lot,NULL,0,mstop,0,"buy_bid_line"); last_open_price=Bid;}} //s_o_b="sell"; } if(ilow>iLow(_Symbol,open_frame,0)) ilow=iLow(_Symbol,open_frame,0); if(iOpen(_Symbol,open_frame,1)>iClose(_Symbol,open_frame,1) && (iClose(_Symbol,open_frame,1)-ilow)>10*_Point && (Bid-iClose(_Symbol,open_frame,1))>_Point*MathAbs(profit_point(iClose(_Symbol,open_frame,1),iOpen(_Symbol,open_frame,1))/2) // && profit_point(top_rect,Bid)>500 ) { s_o_b="buy"; if(order_buy_c<=trades && MathAbs(profit_point(Bid,last_open_price))>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*3) { last_open_price=Ask; trade.Buy(lot,NULL,0,0,0,"bot_tr_change"); } ObjectMove(0,"bot_rect",0,iTime(_Symbol,open_frame,2),ilow); ObjectMove(0,"bot_rect",1,TimeCurrent(),iClose(_Symbol,open_frame,1)); } // зачем, if(Bidtop_rect_niz) s_o_b="in_top"; if(ihigh>top_rect && Bidtop_rect_niz) s_o_b="sell"; if(Bidtop_rect_niz) s_o_b="sell"; if(Bid>top_rect) s_o_b="buy"; if(Bidl_bot && s_o_b!="buy"){s_o_b="low_fib";last_top_rect();} if(Bid>t236 && Bidtop_rect && BidSymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5) { last_open_price=Ask; trade.Sell(lot,NULL,0,0,0,"top_tr_change"); } } if(ihigh10*_Point && (iClose(_Symbol,open_frame,1)-Bid)>_Point*MathAbs(profit_point(iClose(_Symbol,open_frame,1),iOpen(_Symbol,open_frame,1))/2)) { s_o_b="sell"; ObjectMove(0,"top_rect",0,iTime(_Symbol,open_frame,2),iClose(_Symbol,open_frame,1)); ObjectMove(0,"top_rect",1,TimeCurrent(),ihigh); } //} // blue[1]>=red[1] && if(blue[1]>=red[1] && red[0]>=blue[0] && red[0]>=red[1] && Bid>red[0] //&& check_trend(PERIOD_M1)=="buy" // && check_trend(PERIOD_M5)=="up_red" && s_o_b=="buy" // && green[26]>iClose(NULL,frame,26) && order_buy_c<=trades && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5) //trade.PositionClose(sell_id); { //if(Bid>span_a[0])lot2=lot*2; else lot2=lot; double s_stop=first_stop(span_b[0],"buy"); // lot2=money.CheckOpenLong(SymbolInfoDouble(NULL,SYMBOL_BID),s_stop); s_stop=0; // s_stop=get_boli(PERIOD_M1,2,0,"low"); if(profit_point(SymbolInfoDouble(_Symbol,SYMBOL_BID),s_stop)=red[0] && Bidred[0] //&& check_trend(PERIOD_M1)=="sell" // && check_trend(PERIOD_M5)=="down_red" && s_o_b=="sell" // && green[26]SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5) //trade.PositionClose(buy_id); { //if(Bidlow_p()) ObjectMove(0,"low",0,0,low_p()); nowpr=ObjectGetDouble(0,"top",OBJPROP_PRICE); */ //double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); /* double niz1,niz2,niz3; string s_niz2,s_niz3; niz1=red[0]; niz2=blue[0]; niz3=span_a[0]; if(Bidboli3) boli3=get_boli(PERIOD_H1,1); ObjectMove(0,"vverh1",0,0,bo); ObjectMove(0,"vverh2",0,0,boli2); ObjectMove(0,"vverh3",0,0,boli3); ObjectSetString(0,"vverh1",OBJPROP_TEXT,"по boli1"); ObjectSetString(0,"vverh2",OBJPROP_TEXT,"boli2"); ObjectSetString(0,"vverh3",OBJPROP_TEXT,"по bolih1"); */ /* if(profit_point(h_ask,Ask)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL) && Bidred[0] && order_sell_cSymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5 && s_o_b=="sell" ){ trade.Sell(lot,NULL,0,0,0,"main_h_ask"); last_open_price=Ask; } */ //ObjectMove(0,"my_line",0,0, h_ask=iHigh(_Symbol,PERIOD_M30,iHighest(_Symbol,PERIOD_M30,MODE_HIGH,10,1))); if(iOpen(_Symbol,PERIOD_D1,1)Bid) out=lbands[ArrayMinimum(lbands)]+stops_level*_Point; return out; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string check_trend(ENUM_TIMEFRAMES frame2, int shift=0) { string out="null"; int handle2; handle2=iIchimoku(NULL,frame2,9,26,52); if(handle2<0) { Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE); Print("Ошибка исполнения = ",GetLastError()); //--- принудительное завершение программы return(-1); } double blue2[],red2[]; CopyBuffer(handle2,1,0,3,blue2); ArraySetAsSeries(blue2,true); CopyBuffer(handle2,0,0,3,red2); ArraySetAsSeries(red2,true); double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); if(shift>0) Bid=iClose(_Symbol,frame2,shift); /* if(Bid>blue2[0])out="buy"; if(Bidred2[shift] //&& Bidblue2[shift] && Bid>blue2[shift]) out="buy"; if(red2[shift]red2[shift] && Bidspan_big) out="buy"; if(red2[shift]bar && bar-Bid>10*_Point) out="sell"; return out; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double get_boli(ENUM_TIMEFRAMES bframe,int buffer,int shift=0,string get="null") { // Номера буферов: 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND int boli_m=iBands(NULL,bframe,20,0,2,PRICE_CLOSE); if(boli_m<0) { Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE); Print("Ошибка исполнения = ",GetLastError()); //--- принудительное завершение программы return(-1); } double b_out[]; CopyBuffer(boli_m,buffer,0,20,b_out); ArraySetAsSeries(b_out,true); if(get=="low") shift=ArrayMinimum(b_out); if(get=="high") shift=ArrayMaximum(b_out); return b_out[shift]; } // line построить по макс string check_open_trend(ENUM_TIMEFRAMES mframe) { double boli=get_boli(mframe,0,0); return boli; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int profit_point(double fromid, double toid) { int out=(fromid-toid)/_Point; return out; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double max_p() { double arr[]; CopyHigh(NULL,PERIOD_M1,1,20,arr); double a=arr[ArrayMaximum(arr)]; double boli=get_boli(PERIOD_M1,1,0,"high"); if(boli>a) a=boli; return a; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double low_p() { double arr[]; CopyLow(NULL,PERIOD_M1,1,20,arr); double a=arr[ArrayMinimum(arr)]; return a; } //+------------------------------------------------------------------+