Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
cm-ManualTrade
//+------------------------------------------------------------------+
//| 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<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket=OrderTicket();
SL=OSL;TP=OTP;
tip = OrderType();
OL = OrderLots();
if (tip==OP_BUY)
{
b++;
LB+=OL;price_b+=(Bid-OOP)*OL+(OrderCommission()+OrderSwap())*Point;
ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
if (OSL==0 && Bid-NormalizeDouble(OOP - slb * Point,Digits)>=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<OOP && nlb!=0 && _NLb)
{
if (Bid-OOP >= 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<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket=OrderTicket();
SL=OSL;TP=OTP;
tip = OrderType();
OL = OrderLots();
if (tip==OP_BUY && _OtNb)
{
if (!_TPb) TP=0;
if (NormalizeDouble(NLb + tpb * Point,Digits)-Ask>=stoplevel && tpb!=0 && _TPb)
{
TP = NormalizeDouble(NLb + tpb * Point,Digits);
}
if (OSL<OOP && nlb!=0 && _NLb)
{
if (Bid-NLb >= 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);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---