//+------------------------------------------------------------------+ //| Copyright 2016, cmillion@narod.ru | //| http://cmillion.ru | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, cmillion@narod.ru" #property link "http://cmillion.ru" #property version "2.00" #property strict //#property description "Советник для ручной торговли" //#property description "Помогает открывать и сопровождать сделки" int slb = 100,//StopLoss Buy tpb = 100,//TakeProfit Buy tsb = 33,//TrailingStop Buy nlb = 20,//NoLoss Buy sls = 100,//StopLoss Sell tps = 100,//TakeProfit Sell tss = 33,//TrailingStop Sell nls = 20;//NoLoss Sell input int TrailingStep = 1, TrailingStart = 1; double Lot = 0.01; input int slippage = 2; input bool confirmation = true; bool TradeNoLossBuy = true; bool TradeNoLossSell = true; //магик (если -1 то все магики) extern int Magic = -1; string ID; int i; bool TRADE; double delta; string AC,Font = "Times New Roman"; bool _OtNb,_OtNs,_NLb,_NLs,_SLb,_SLs,_TPb,_TPs,_TSb,_TSs; //+------------------------------------------------------------------+ int OnInit() { AC=" "+AccountCurrency(); ID=StringConcatenate(WindowExpertName(),Symbol()); string txt; txt = StringConcatenate("slb",ID); if (GlobalVariableCheck(txt)) slb = (int)GlobalVariableGet(txt); txt = StringConcatenate("tpb",ID); if (GlobalVariableCheck(txt)) tpb = (int)GlobalVariableGet(txt); txt = StringConcatenate("tsb",ID); if (GlobalVariableCheck(txt)) tsb = (int)GlobalVariableGet(txt); txt = StringConcatenate("nlb",ID); if (GlobalVariableCheck(txt)) nlb = (int)GlobalVariableGet(txt); txt = StringConcatenate("sls",ID); if (GlobalVariableCheck(txt)) sls = (int)GlobalVariableGet(txt); txt = StringConcatenate("tps",ID); if (GlobalVariableCheck(txt)) tps = (int)GlobalVariableGet(txt); txt = StringConcatenate("tss",ID); if (GlobalVariableCheck(txt)) tss = (int)GlobalVariableGet(txt); txt = StringConcatenate("nls",ID); if (GlobalVariableCheck(txt)) nls = (int)GlobalVariableGet(txt); txt=StringConcatenate("Lot",ID); if (GlobalVariableCheck(txt)) Lot = GlobalVariableGet(txt); txt = StringConcatenate("kn nb",ID); if (GlobalVariableCheck(txt)) _OtNb = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn ns",ID); if (GlobalVariableCheck(txt)) _OtNs = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn slb",ID); if (GlobalVariableCheck(txt)) _SLb = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn tpb",ID); if (GlobalVariableCheck(txt)) _TPb = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn tsb",ID); if (GlobalVariableCheck(txt)) _TSb = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn nlb",ID); if (GlobalVariableCheck(txt)) _NLb = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn sls",ID); if (GlobalVariableCheck(txt)) _SLs = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn tps",ID); if (GlobalVariableCheck(txt)) _TPs = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn tss",ID); if (GlobalVariableCheck(txt)) _TSs = (bool)GlobalVariableGet(txt); txt = StringConcatenate("kn nls",ID); if (GlobalVariableCheck(txt)) _NLs = (bool)GlobalVariableGet(txt); int X=0; ButtonCreate(0,StringConcatenate("cls" ,ID),0,X,40,100,40,"Close",Font,10,clrBlack,clrLightGray,false);X+=100; ButtonCreate(0,StringConcatenate("tss" ,ID),0,X,40,75,40,StringConcatenate("TS ",tss),Font,10,clrBlack,clrLightGray,_TSs);X+=75; ButtonCreate(0,StringConcatenate("tss+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("tss-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("Ns" ,ID),0,X,40,20,40,"N",Font,10,clrBlack,clrGreen,_OtNb);X+=20; ButtonCreate(0,StringConcatenate("nls" ,ID),0,X,40,75,40,StringConcatenate("NL ",nls),Font,10,clrBlack,clrLightGray,_NLs);X+=75; ButtonCreate(0,StringConcatenate("nls+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("nls-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("tps" ,ID),0,X,40,75,40,StringConcatenate("TP ",tps),Font,10,clrBlack,clrLightGray,_TPs);X+=75; ButtonCreate(0,StringConcatenate("tps+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("tps-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("sls" ,ID),0,X,40,75,40,StringConcatenate("SL ",sls),Font,10,clrBlack,clrLightGray,_SLs);X+=75; ButtonCreate(0,StringConcatenate("sls+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("sls-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("sell",ID),0,X,20,75,20,"SELL",Font,10,clrBlack,clrRed,false);X+=75; ButtonCreate(0,StringConcatenate("buy" ,ID),0,X,20,75,20,"BUY",Font,10,clrBlack,clrBlue,false);X+=75; ButtonCreate(0,StringConcatenate("slb" ,ID),0,X,40,75,40,StringConcatenate("SL ",slb),Font,10,clrBlack,clrLightGray,_SLb);X+=75; ButtonCreate(0,StringConcatenate("slb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("slb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("tpb" ,ID),0,X,40,75,40,StringConcatenate("TP ",tpb),Font,10,clrBlack,clrLightGray,_TPb);X+=75; ButtonCreate(0,StringConcatenate("tpb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("tpb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("nlb" ,ID),0,X,40,75,40,StringConcatenate("NL ",nlb),Font,10,clrBlack,clrLightGray,_NLb);X+=75; ButtonCreate(0,StringConcatenate("nlb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("nlb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("Nb" ,ID),0,X,40,20,40,"N",Font,10,clrBlack,clrGreen,_OtNs);X+=20; ButtonCreate(0,StringConcatenate("tsb" ,ID),0,X,40,75,40,StringConcatenate("TS ",tsb),Font,10,clrBlack,clrLightGray,_TSb);X+=75; ButtonCreate(0,StringConcatenate("tsb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false); ButtonCreate(0,StringConcatenate("tsb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20; ButtonCreate(0,StringConcatenate("clb" ,ID),0,X,40,100,40,"Close",Font,10,clrBlack,clrLightGray,false); EditCreate(0,StringConcatenate("Lot",ID),0,500,40,150,20,DoubleToString(Lot,2),"Arial",10,ALIGN_CENTER,false); delta=MarketInfo(Symbol(),MODE_MINLOT); EventSetTimer(1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(i=ObjectsTotal()-1; i>=0; i--) { string Name=ObjectName(i); if (StringFind(Name,ID)!=-1) ObjectDelete(Name); } EventKillTimer(); } //-------------------------------------------------------------------- void OnTick() {OnTimer();} void OnTimer() { int p; p=kn_UP_DN("tss", tss); if (p!=tss) {tss=p; ObjectSetString(0,StringConcatenate("tss",ID),OBJPROP_TEXT,StringConcatenate("TS ",tss));GlobalVariableSet(StringConcatenate("tss",ID),tss);} p=kn_UP_DN("nls", nls); if (p!=nls) {nls=p; ObjectSetString(0,StringConcatenate("nls",ID),OBJPROP_TEXT,StringConcatenate("NL ",nls));GlobalVariableSet(StringConcatenate("nls",ID),nls);} p=kn_UP_DN("tps", tps); if (p!=tps) {tps=p; ObjectSetString(0,StringConcatenate("tps",ID),OBJPROP_TEXT,StringConcatenate("TP ",tps));GlobalVariableSet(StringConcatenate("tps",ID),tps);} p=kn_UP_DN("sls", sls); if (p!=sls) {sls=p; ObjectSetString(0,StringConcatenate("sls",ID),OBJPROP_TEXT,StringConcatenate("SL ",sls));GlobalVariableSet(StringConcatenate("sls",ID),sls);} p=kn_UP_DN("tsb", tsb); if (p!=tsb) {tsb=p; ObjectSetString(0,StringConcatenate("tsb",ID),OBJPROP_TEXT,StringConcatenate("TS ",tsb));GlobalVariableSet(StringConcatenate("tsb",ID),tsb);} p=kn_UP_DN("nlb", nlb); if (p!=nlb) {nlb=p; ObjectSetString(0,StringConcatenate("nlb",ID),OBJPROP_TEXT,StringConcatenate("NL ",nlb));GlobalVariableSet(StringConcatenate("nlb",ID),nlb);} p=kn_UP_DN("tpb", tpb); if (p!=tpb) {tpb=p; ObjectSetString(0,StringConcatenate("tpb",ID),OBJPROP_TEXT,StringConcatenate("TP ",tpb));GlobalVariableSet(StringConcatenate("tpb",ID),tpb);} p=kn_UP_DN("slb", slb); if (p!=slb) {slb=p; ObjectSetString(0,StringConcatenate("slb",ID),OBJPROP_TEXT,StringConcatenate("SL ",slb));GlobalVariableSet(StringConcatenate("slb",ID),slb);} if (Lot!=StringToDouble(ObjectGetString(0,StringConcatenate("Lot",ID),OBJPROP_TEXT))) {Lot=StringToDouble(ObjectGetString(0,StringConcatenate("Lot",ID),OBJPROP_TEXT));GlobalVariableSet(StringConcatenate("Lot",ID),Lot);} _OtNb=ObjectGetInteger(0,StringConcatenate("Nb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn Nb",ID),_OtNb); _OtNs=ObjectGetInteger(0,StringConcatenate("Ns" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn Ns",ID),_OtNs); _NLb=ObjectGetInteger(0,StringConcatenate("nlb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn nlb",ID),_NLb); _NLs=ObjectGetInteger(0,StringConcatenate("nls" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn nls",ID),_NLs); _SLb=ObjectGetInteger(0,StringConcatenate("slb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn slb",ID),_SLb); _SLs=ObjectGetInteger(0,StringConcatenate("sls" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn sls",ID),_SLs); _TPb=ObjectGetInteger(0,StringConcatenate("tpb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tpb",ID),_TPb); _TPs=ObjectGetInteger(0,StringConcatenate("tps" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tps",ID),_TPs); _TSb=ObjectGetInteger(0,StringConcatenate("tsb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tsb",ID),_TSb); _TSs=ObjectGetInteger(0,StringConcatenate("tss" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tss",ID),_TSs); TRADE=MarketInfo(Symbol(),MODE_TRADEALLOWED)!=0 && IsTradeAllowed() && !IsTradeContextBusy(); if (TRADE) { if (ObjectGetInteger(0,StringConcatenate("buy" ,ID),OBJPROP_STATE)) { if (SendOrder(OP_BUY,Lot,NormalizeDouble(Ask,Digits))) { Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Open buy ",DoubleToStr(Lot,2)); } ObjectSetInteger(0,StringConcatenate("buy" ,ID),OBJPROP_STATE,false); } if (ObjectGetInteger(0,StringConcatenate("sell" ,ID),OBJPROP_STATE)) { if (SendOrder(OP_SELL,Lot,NormalizeDouble(Bid,Digits))) { Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Open Sell ",DoubleToStr(Lot,2)); } ObjectSetInteger(0,StringConcatenate("sell" ,ID),OBJPROP_STATE,false); } if (ObjectGetInteger(0,StringConcatenate("clb" ,ID),OBJPROP_STATE)) { Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Close Buy"); close(OP_BUY);ObjectSetInteger(0,StringConcatenate("clb" ,ID),OBJPROP_STATE,false); } if (ObjectGetInteger(0,StringConcatenate("cls" ,ID),OBJPROP_STATE)) { Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Close Sell"); close(OP_SELL);ObjectSetInteger(0,StringConcatenate("cls" ,ID),OBJPROP_STATE,false); } } double price_b=0,price_s=0; double StLo,OSL,OTP,OOP,SL,TP; int Ticket,b=0,s=0,tip; double OL,LB=0,LS=0,ProfitB=0,ProfitS=0; double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL); double stoplevel=STOPLEVEL*Point; for (i=0; i=stoplevel && slb!=0 && _SLb) { SL = NormalizeDouble(OOP - slb * Point,Digits); } if (!_SLb && !_NLb && !_TSb) SL=0; if (!_TPb) TP=0; if (!_OtNb) { if (OTP==0 && NormalizeDouble(OOP + tpb * Point,Digits)-Ask>=stoplevel && tpb!=0 && _TPb) { TP = NormalizeDouble(OOP + tpb * Point,Digits); } if (OSL= nlb*Point && Bid-OOP >= stoplevel) SL = OOP+Point; } if (tsb!=0 && _TSb) { StLo = NormalizeDouble(Bid - tsb*Point,Digits); if (StLo >= OOP+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo; } } if (TRADE && (SL != OSL || TP != OTP)) { Comment("Modify ",Ticket," Buy, SL ",OSL,"->",SL,", TP ",OTP,"->",TP); if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError()); } } if (tip==OP_SELL) { s++; LS+=OL;price_s+=(OOP-Ask)*OL+(OrderCommission()+OrderSwap())*Point; ProfitS+=OrderProfit()+OrderCommission()+OrderSwap(); if (OSL==0 && NormalizeDouble(OOP + sls * Point,Digits)-Ask>=stoplevel && sls!=0 &&_SLs) { SL = NormalizeDouble(OOP + sls * Point,Digits); } if (!_SLs && !_NLs && !_TSs) SL=0; if (!_TPs) TP=0; if (!_OtNs) { if (OTP==0 && Bid-NormalizeDouble(OOP - tps * Point,Digits)>=stoplevel && tps!=0 && _TPs) { TP = NormalizeDouble(OOP - tps * Point,Digits); } if ((OSL>OOP || OSL==0) && nls!=0 && _NLs) { if (OOP-Ask >= nls*Point && (OOP < OSL || OSL==0) && OOP-Ask >= stoplevel) SL = OOP-Point; } if (tss!=0 && _TSs) { StLo = NormalizeDouble(Ask + tss*Point,Digits); if (StLo <= OOP-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo; } } if (TRADE && (SL != OSL || TP != OTP)) { Comment("Modify ",Ticket," Sell, SL ",OSL,"->",SL,", TP ",OTP,"->",TP); if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError()); } } } } } LabelCreate(0,StringConcatenate("profitB" ,ID),0,1145,0,CORNER_LEFT_LOWER,StringConcatenate(DoubleToStr(ProfitB,2),AC),"Arial",8,clrBlack,0,ANCHOR_RIGHT_LOWER); LabelCreate(0,StringConcatenate("profitS" ,ID),0,5,0,CORNER_LEFT_LOWER,StringConcatenate(DoubleToStr(ProfitS,2),AC),"Arial",8,clrBlack,0,ANCHOR_LEFT_LOWER); //--- if (_OtNb || _OtNs) { double NL=0,NLb=0,NLs=0; if(LB>0) NLb=Bid-price_b/LB; ARROW("NoLoss_NLb", NLb, 6, clrBlue); if(LS>0) NLs=Ask+price_s/LS; ARROW("NoLoss_NLs", NLs, 6, clrRed); if(LB-LS>0) NL=Bid-(price_b+price_s)/(LB-LS); if(LB-LS<0) NL=Ask-(price_b+price_s)/(LB-LS); ARROW("NoLoss_NL", NL, 6, clrYellow); //--- for (i=0; i=stoplevel && tpb!=0 && _TPb) { TP = NormalizeDouble(NLb + tpb * Point,Digits); } if (OSL= nlb*Point && Bid-NLb >= stoplevel) SL = NLb+Point; } if (tsb!=0 && _TSb) { StLo = NormalizeDouble(Bid - tsb*Point,Digits); if (StLo >= NLb+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo; } if (TRADE && (SL != OSL || TP != OTP)) { Comment("Modify ",Ticket," NL Buy SL ",OSL,"->",SL,", TP ",OTP,"->",TP); if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError()); } } if (tip==OP_SELL && _OtNs) { if (!_TPs) TP=0; if (Bid-NormalizeDouble(NLs - tps * Point,Digits)>=stoplevel && tps!=0 && _TPs) { TP = NormalizeDouble(NLs - tps * Point,Digits); } if ((OSL>NLs || OSL==0) && nls!=0 && _NLs) { if (NLs-Ask >= nls*Point && (NLs < OSL || OSL==0) && NLs-Ask >= stoplevel) SL = NLs-Point; } if (tss!=0 && _TSs) { StLo = NormalizeDouble(Ask + tss*Point,Digits); if (StLo <= NLs-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo; } if (TRADE && (SL != OSL || TP != OTP)) { Comment("Modify ",Ticket," NL Sell SL ",OSL,"->",SL,", TP ",OTP,"->",TP); if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError()); } } } } } } else { ObjectDelete("NoLoss_NLb"); ObjectDelete("NoLoss_NLs"); ObjectDelete("NoLoss_NL"); } return; } //-------------------------------------------------------------------- int kn_UP_DN(string kn, int p) { string name=StringConcatenate(kn,"+",ID); if (ObjectGetInteger(0,name,OBJPROP_STATE)) { p++; ObjectSetInteger(0,name,OBJPROP_STATE,false); } name=StringConcatenate(kn,"-",ID); if (ObjectGetInteger(0,name,OBJPROP_STATE)) { p--; ObjectSetInteger(0,name,OBJPROP_STATE,false); } return(p); } //-------------------------------------------------------------------- bool ButtonCreate(const long chart_ID=0, const string name="Button", const int sub_window=0, const long x=0, const long y=0, const int width=50, const int height=18, const string text="Button", const string font="Arial", const int font_size=10, const color clr=clrBlack, const color clrfon=clrLightGray, const bool state=false) { if (ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_LOWER); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE); } ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); return(true); } //-------------------------------------------------------------------- bool RectLabelCreate(const long chart_ID=0, const string name="RectLabel", const int sub_window=0, const long x=0, const long y=0, const int width=50, const int height=18, const color back_clr=clrNONE, const color clr=clrNONE, const ENUM_LINE_STYLE style=STYLE_SOLID, const int line_width=1, const bool back=false, const bool selection=false, const bool hidden=true, const long z_order=0) { ResetLastError(); if (ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); } ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); return(true); } //-------------------------------------------------------------------- bool LabelCreate(const long chart_ID=0, const string name="Label", const int sub_window=0, const long x=0, const long y=0, const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, const string text="Label", const string font="Arial", const int font_size=10, const color clr=clrNONE, const double angle=0.0, const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, const bool back=false, const bool selection=false, const bool hidden=true, const long z_order=0) { ResetLastError(); if (ObjectFind(chart_ID,name)==-1) { if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0)) { return(false); } ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); } ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); return(true); } //-------------------------------------------------------------------- bool SendOrder(int tip, double lot, double p) { if (confirmation) { string txt; if (tip==OP_BUY) txt=StringConcatenate("Open BUY ",DoubleToStr(lot,2)," lot, price ",DoubleToStr(p,Digits)," ?"); if (tip==OP_SELL) txt=StringConcatenate("Open SELL ",DoubleToStr(lot,2)," lot, price ",DoubleToStr(p,Digits)," ?"); int ret=MessageBox(txt,"", MB_YESNO); if (ret==IDNO) return(1); } int nn; while(true) { RefreshRates(); if (OrderSend(Symbol(),tip,lot,p,slippage,0,0,NULL,Magic,0,clrNONE)==-1) { Print("Order Send Error ",GetLastError()," Lot ",lot); Sleep(1000); } else return(1); nn++; if (nn>10) return(0); } return(0); } //-------------------------------------------------------------------- bool close(int tip) { if (confirmation) { string txt="Close all "; if (tip==OP_BUY) txt=StringConcatenate(txt,"BUY ?"); if (tip==OP_SELL) txt=StringConcatenate(txt,"SELL ?"); int ret=MessageBox(txt,"", MB_YESNO); if (ret==IDNO) return(1); } bool error=true; int j,err,nn,OT; while(!IsStopped()) { for (j = OrdersTotal()-1; j >= 0; j--) { if (OrderSelect(j, SELECT_BY_POS)) { if (OrderSymbol() == Symbol() && (Magic==-1 || Magic==OrderMagicNumber())) { OT = OrderType(); if (tip!=OT) continue; if (OT==OP_BUY) { error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,Blue); } if (OT==OP_SELL) { error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,Red); } if (!error) { err = GetLastError(); if (err<2) continue; if (err==129) { RefreshRates(); continue; } if (err==146) { if (IsTradeContextBusy()) Sleep(2000); continue; } Print("Error ",err," close order N ",OrderTicket()," ",TimeToStr(TimeCurrent(),TIME_SECONDS)); } } } } int n=0; for (j = 0; j < OrdersTotal(); j++) { if (OrderSelect(j, SELECT_BY_POS)) { if (OrderSymbol() == Symbol() && (Magic==-1 || Magic==OrderMagicNumber())) { OT = OrderType(); if (tip!=OT) continue; if (OT==OP_BUY || OT==OP_SELL) n++; } } } if (n==0) break; nn++; if (nn>10) { return(0); } Sleep(1000); RefreshRates(); } return(1); } //-------------------------------------------------------------------- void ARROW(string Name, double Price, int ARROWCODE, color c) { ObjectDelete(Name); ObjectCreate(Name,OBJ_ARROW,0,Time[0],Price,0,0,0,0); ObjectSetInteger(0,Name,OBJPROP_ARROWCODE,ARROWCODE); ObjectSetInteger(0,Name,OBJPROP_COLOR, c); ObjectSetInteger(0,Name,OBJPROP_WIDTH, 1); } //-------------------------------------------------------------------- bool EditCreate(const long chart_ID=0, const string name="Edit", const int sub_window=0, const int x=0, const int y=0, const int width=50, const int height=18, const string text="Text", const string font="Arial", const int font_size=10, const ENUM_ALIGN_MODE align=ALIGN_CENTER, const bool read_only=true, const ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER, const color clr=clrBlack, const color back_clr=clrWhite, const color border_clr=clrNONE, const bool back=false, const bool selection=false, const bool hidden=true, const long z_order=0) { ResetLastError(); if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) { return(false); } ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); return(true); } //+------------------------------------------------------------------+