Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Lock&&PipsingXR_2009_V3_Mod2
//-----------------------------------------------------------------------------+
//| Lock&&PipsingXR_2009.mq4 |
#include <stdlib.mqh>
//-----------------------------------------------------------------------------+
extern string a = "Part One = Skalper";
extern int XmaPeriod = 10;
extern int XmaPorog = 11;
extern int FlatPeriod = 3;
extern int FlatPorog = 35;
extern int Stoploss = 0;
extern int Takeprofit = 0;
extern double Risk = 1;
extern int TimeFrame = 0;
extern int ProfitLevel = 2;
extern bool OnBar = true;
extern int WlMinute = 0;
extern string b = "Part Two = Locker";
extern bool FullAuto = true;
extern int LockMode = 1;
extern int TotalOrders = 50;
extern bool CloseLock = false;
extern bool Martingale = true;
extern double SafetyLevel = 0;
extern bool RealSl_Tp = true;
extern string c = "Part Three Time and Date ";
extern bool TradeOfTime = false;
extern string d = "Hour start of trading";
extern int StartTrade = 19;
extern string e = "Hour end of trading";
extern int EndTrade = 5;
extern string f = "Date end of trading";
extern string EndTradeData = "Enterting Date of End trading in eeee.mm.dd";
extern string h = "Language: if true=engleesh,if false=russia";
extern bool EnglLang = false;
extern bool SetInfotoDispl = true;
extern int TextSize = 12;
extern string m = "Text position to displ";
extern int TextPos = 2;
extern string n = "text color to displ";
extern color TextColor = White;
extern bool UseSound = false;
extern bool TestInfo = true;
extern int MagicFirstOrder = 4642;
extern int Magik = 6559;
//-----------------------------------------------------------------------------+
double lot;int gCountLotBuy,gCountLotSell;
//----Variables for KimIV funcions --------------------------------------------+
bool print=true;
string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color clOpenBuy = Blue; // Öâåò çíà÷êà îòêðûòèÿ Buy
color clOpenSell = Red; // Öâåò çíà÷êà îòêðûòèÿ Sell
bool MarketWatch=false;
bool gbDisabled = False; // Áëîêèðîâêà
int Slippage=3;
int NumberOfTry=3;
int spread;
double point;
double StartDepo;
string gInf1rus,gInf1engl;
string gInfBalansRus,ginfMargineRus,gInfProfitRus,gInfCurrProfitRus,gInfMaxOrdRus,gInfOpenOrdRus,gInfRiscRus;
string gInfBalansEngl,ginfMargineEngl,gInfProfitEngl,gInfCurrProfitEngl,gInfMaxOrdEngl,gInfOpenOrdEngl,gInfRiscEngl;
color gColor1=LimeGreen;
int OpenOrdermax;
string gTimeRus,gTimeEngl;
bool SetArrow=true;
bool Nastroika=true;
static int Tpp=10,Sll=10;int Tf;int stoploss,takeprofit;static int PrewTime=0;int Trade=0;
double asd1,asd2,asd3;bool arrow;int mno=1;string LM2;double gPorog,gRes1,gRes2,gRes3;
//-----------------------------------------------------------------------------+
void init(){
StartDepo=AccountBalance();
OpenOrdermax=TotalOrders;
spread=MarketInfo(Symbol(),MODE_SPREAD);
if(EndTradeData=="Enterting Date of End trading in eeee.mm.dd"){EndTradeData="";}
if (TimeFrame==0) Tf=Period();
if (TimeFrame==1) Tf=30;
if (TimeFrame==2) Tf=60;
if (TimeFrame==3) Tf=240;
if (TimeFrame==4) Tf=1440;
if (TimeFrame>=5 && TimeFrame<15 ) Tf=5;
if (TimeFrame>=15 && TimeFrame<30 ) Tf=15;
if (TimeFrame>=30 && TimeFrame<60 ) Tf=30;
if (TimeFrame>=60 && TimeFrame<240 ) Tf=60;
if (TimeFrame>=240&& TimeFrame<1440) Tf=240;
if (TimeFrame>=1440)Tf=1440;
//----------------------------------------------------------------------------+
if(SetInfotoDispl)if(TextPos==0)TestInfo=false;
if(Stoploss==0)stoploss=Sll;else stoploss=Stoploss;
if(Takeprofit==0)takeprofit=Tpp;else takeprofit=Takeprofit;
if(Digits==3||Digits==5){mno=10;point=Point*10;}else{mno=1;point=Point;}
//F_T_treshold=F_T_treshold*mno;
Slippage=Slippage*mno;
Stoploss=Stoploss*mno;
Takeprofit=Takeprofit*mno;
//-----------------------------------------------------------------------------+
Average(ProfitLevel);
FirstTrade();
//-----------------------------------------------------------------------------+
return;}
//-----------------------------------------------------------------------------+
void deinit(){ObjectsDeleteAll(0,OBJ_LABEL);return;}
//-----------------------------------------------------------------------------+
void start(){
//HideTestIndicators(true);
//ñèñòåìà áåçîïàñíîñòè è îãðàíè÷åíèÿ ïî ñ÷åòó
// if(!IsDemo()&&!IsOptimization()&&!IsTesting()){
// if(AccountNumber()!=86564 ){
// Comment("Bad Account!!!");
// Sleep(500);
// Comment(" ");
// return(0);
// }
// }
//-----------------------------------------------------------------------------+
//if(CountOpOrd("",-1,0)>0)SetArrow(StringConcatenate(gCountLotBuy,"= NullDotBuy "),4,1,0,NullDotBuy(),Blue);
//if(CountOpOrd("",-1,1)>0)SetArrow(StringConcatenate(gCountLotSell,"= NullDotSell "),4,1,0,NullDotSell(),Red);
Average(ProfitLevel);
if(RealSl_Tp){Modify();}
static int max,Trade=0,prewbar;
if(OnBar){if(prewbar==iTime(Symbol(),Tf,0)){return;}}
prewbar= iTime(Symbol(),Tf,0);
if(CloseLock){
CloseBy();
DelBigestLoss();
}
Info();
WL(WlMinute);
if(FullAuto&&OutOfPrise()){if(NevBar()){FirstTrade();}}
//if(FullAuto&&!CloseLock){if(AccountBalance()+GrossProfit()<AccountBalance()*0.75){CloseLock=true;}else{CloseLock=false;}}
if(Stoploss==0){Average(ProfitLevel);stoploss=Sll/NullCount(0);}else{stoploss=Stoploss/NullCount(0);}
if(Takeprofit==0){Average(ProfitLevel);takeprofit=Tpp/NullCount(0);}else{takeprofit=Takeprofit/NullCount(0);}
if(LockMode==0)LM2=" FullAuto";
if(LockMode==1)LM2=" FlatMode";
if(LockMode==2)LM2=" TrandMode";
if(LockMode==3)LM2=" ContrTrand";
string Comm=StringConcatenate("Sl=",stoploss," Tp=",takeprofit," X",PriseChanelWide()," ",LM2," ",gRes1," ",gRes2," ",gRes3);
if(SetInfotoDispl){
if(!EnglLang){
SetInfoRus(TextSize,TextPos,TextColor);
}else{
SetInfoEngl(TextSize,TextPos,TextColor);
}
}
if(max<OrdersTotal())max=OrdersTotal();
lot=CalcLotsAuto();
if(SafetyLevel>0){
if(GrossProfit()<0){
if((MathAbs(GrossProfit())/AccountBalance())>(SafetyLevel/100)){
CloseBy();
DelBigestLoss();
if(SetArrow)SetArrow("MK",76,5,0,Close[0],Red);
del(LossTicket());
}
}
}
if(CountOpOrd("0")>0){if(GrossProfit()>=(takeprofit*FirstOrderLots()*MarketInfo(Symbol(),MODE_LOTSIZE)/10000)/CountOpOrd("0")/mno){CloseAll();}}
//if(CountOpOrd("0")>1)if(GrossProfit()>=0)CloseAll();
OpenOrdermax=TotalOrders;
if(OpenOrdermax>AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto())){
OpenOrdermax=(AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()));}
//if(RealSl_Tp){if(CountOpOrd("0")>0){SetOrder();return;}}
//=============================================================================+
if(LockMode==1){// Ìîäåëü ïîâåäåíèÿ - ôëåò +
//-----------------------------------------------------------------------------+
if(CloseLock){
CloseBy();
DelBigestLoss();
}
if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){
if(Martingale)lot=MartinLot();
if(OutOfPrise()){
if(PriseDist(stoploss*PriseChanelWide())){if(NearOrdDistanse(stoploss*PriseChanelWide())>0){OpenPosition("",0,martin(),0,0,Magik,Comm);}}
if(PriseDist(stoploss*PriseChanelWide())){if(NearOrdDistanse(stoploss*PriseChanelWide())<0){OpenPosition("",1,martin(),0,0,Magik,Comm);}}
}else{
if(PriseDist(stoploss/3))if(MidleOrders(stoploss/3)==0){OpenPosition("",0,lot,0,0,Magik,Comm);}
if(PriseDist(stoploss/3))if(MidleOrders(stoploss/3)==1){OpenPosition("",1,lot,0,0,Magik,Comm);}
}
}
//-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+
if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){
if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",0,FirstOrderLots(),0,0,Magik,Comm);
if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",1,FirstOrderLots(),0,0,Magik,Comm);
}
//-----------------------------------------------------------------------------+
}
//=============================================================================+
if(LockMode==2){// Ìîäåëü ïîâåäåíèÿ - òðåíä +
//-----------------------------------------------------------------------------+
if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){
if(CloseLock){
CloseBy();
DelBigestLoss();
}
if(NevBar())if(SetArrow)SetArrow("NullProfitDot",4,1,0,NullDot(),White);
if(Martingale)lot=MartinLot();
if(OutOfPrise()){
if(OutOfPrise()){if(NearOrdDistanse(stoploss/PriseChanelWide())<0){if(PriseDist(stoploss/PriseChanelWide())){OpenPosition("",0,martin(),0,0,Magik,Comm);}}}
if(OutOfPrise()){if(NearOrdDistanse(stoploss/PriseChanelWide())>0){if(PriseDist(stoploss/PriseChanelWide())){OpenPosition("",1,martin(),0,0,Magik,Comm);}}}
}else{
//if(PriseDist(stoploss/PriseChanelWide()/2))if(MidleOrders(stoploss/PriseChanelWide()/2)==0){OpenPosition("",0,lot,0,0,Magik,Comm);}
//if(PriseDist(stoploss/PriseChanelWide()/2))if(MidleOrders(stoploss/PriseChanelWide()/2)==1){OpenPosition("",1,lot,0,0,Magik,Comm);}
}
}
//-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+
if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){
if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",0,FirstOrderLots(),0,0,Magik,Comm);
if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",1,FirstOrderLots(),0,0,Magik,Comm);
}
//-----------------------------------------------------------------------------+
}
//=============================================================================+
if(LockMode==3){// Ìîäåëü ïîâåäåíèÿ - Êîíòð òðåíä +
//-----------------------------------------------------------------------------+
if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){
if(CloseLock){
CloseBy();
DelBigestLoss();
}
if(NevBar())if(SetArrow)SetArrow("NullProfitDot",4,1,0,NullDot(),White);
if(Martingale)lot=MartinLot();
if(OutOfPrise()){
if(OutOfPrise()){if(NearOrdDistanse(stoploss*PriseChanelWide())>0){if(PriseDist(stoploss*PriseChanelWide())){OpenPosition("",0,martin(),0,0,Magik,Comm);}}}
if(OutOfPrise()){if(NearOrdDistanse(stoploss*PriseChanelWide())<0){if(PriseDist(stoploss*PriseChanelWide())){OpenPosition("",1,martin(),0,0,Magik,Comm);}}}
}else{
if(PriseDist(stoploss/PriseChanelWide()/4))if(MidleOrders(stoploss/PriseChanelWide()/4)==0){OpenPosition("",0,lot,0,0,Magik,Comm);}
if(PriseDist(stoploss/PriseChanelWide()/4))if(MidleOrders(stoploss/PriseChanelWide()/4)==1){OpenPosition("",1,lot,0,0,Magik,Comm);}
}
}
//-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+
if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){
if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",0,FirstOrderLots(),0,0,Magik,Comm);
if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",1,FirstOrderLots(),0,0,Magik,Comm);
}
//-----------------------------------------------------------------------------+
}
//=============================================================================+
//-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+
//=============================================================================+
if(TradeTime()){
if(EndTradeForDateTime())return;
if(CountOpOrd("0",MagicFirstOrder)<1){
if(Sar()<0){
OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);
return;
}
if(Sar()>0){
OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);
return;
}
}
}
//=============================================================================+
if(TestInfo){Testinfo();}
//-----------------------------------------------------------------------------+
if(OnBar)PrewTime=iTime(NULL,Tf,0);
//-----------------------------------------------------------------------------+
return;}//Êîíåö ôóíêöèè Ñòàðò
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$+
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì êîëè÷åñòâî ïåðåõîäîâ ÷åðåç íîëü |
//+------------------------------------------------------------------+
int NullCount(double por = 5){static int co=0; static bool neg,pos;
if(CountOpOrd("",-1,-1)<1){pos=false;co=0;}
if(CountOpOrd("",-1,-1)!=1){return(1);}
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderProfit()>0){
if(MathAbs(OrderOpenPrice()-OrderClosePrice())>=por*Point*mno){
pos=true;
}
}
if(OrderProfit()<0){
if(MathAbs(OrderOpenPrice()-OrderClosePrice())>=por*Point*mno){
if(pos){
co++;
pos=false;
}
}
}
}
}
}
return(co+1);
}
//-----------------------------------------------------------------------------+
// ßâíàÿ ìîäèôèêàöèÿ îðäåðîâ |
//-----------------------------------------------------------------------------+
void Modify(){double tp;int i;static double prewbuytp,prewselltp,prewbuysl,prewsellsl;
double stop=MarketInfo(Symbol(),MODE_STOPLEVEL)*point;
double newbuytp=NormalizeDouble(NullDotBuy()+takeprofit*point,Digits);
double newselltp=NormalizeDouble(NullDotSell()-takeprofit*point,Digits);
double newbuysl=NormalizeDouble(NullDotBuy()-stoploss*point*2,Digits);
double newsellsl=NormalizeDouble(NullDotSell()+stoploss*point*2,Digits);
//if(CountOpOrd("0")<1){return;}
if(CountOpOrd("0",-1,0)>0&&CountOpOrd("0",-1,1)>0){
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()<2){
if(OrderStopLoss()!=0){OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,White);}
if(OrderTakeProfit()!=0){OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,White);}
}
}
}
}
return;
}
if((CountOpOrd("0",-1,0)>0&&CountOpOrd("0",-1,1)<1)||
(CountOpOrd("0",-1,1)>0&&CountOpOrd("0",-1,0)<1)){
if(CountOpOrd("0",-1,1)<1){
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()==0){
if(NormalizeDouble(OrderTakeProfit(),Digits)!=newbuytp){
if(MathAbs(newbuytp-Bid)>stop){
if(newbuytp!=prewbuytp){
if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newbuytp,0,Red)){
prewbuytp=newbuytp;
}
}
}
}
if(NormalizeDouble(OrderStopLoss(),Digits)!=newbuysl){
if(MathAbs(Ask-newbuysl)>stop){
if(newbuysl!=prewbuysl){
if(OrderModify(OrderTicket(),OrderOpenPrice(),newbuysl,OrderTakeProfit(),0,Red)){
prewbuysl=newbuysl;
}
}
}
}
}
}
}
}
}
if(CountOpOrd("0",-1,0)<1){
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()==1){
if(NormalizeDouble(OrderTakeProfit(),Digits)!=newselltp){
if(MathAbs(newselltp-Ask)>stop){
if(newselltp!=prewselltp){
if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newselltp,0,Red)){
prewselltp=newselltp;
}
}
}
}
if(NormalizeDouble(OrderStopLoss(),Digits)!=newsellsl){
if(MathAbs(newsellsl-Bid)>stop){
if(newsellsl!=prewsellsl){
if(OrderModify(OrderTicket(),OrderOpenPrice(),newsellsl,OrderTakeProfit(),0,Red)){
prewsellsl=newsellsl;
}
}
}
}
}
}
}
}
}
}
return;
}
//-----------------------------------------------------------------------------+
// Óñòàíîâêà îòëîæåííèêà â ðåæèìå ðåàëüíîãî ÑË |
//-----------------------------------------------------------------------------+
void SetOrder(){int i;double prise;
if(CountOpOrd("0",-1,0)==CountOpOrd("0",-1,1)){if(GrossProfit()>=0){CloseAll();}}
//if(stoploss<MarketInfo(Symbol(),MODE_STOPLEVEL)){return;}
if(CountOpOrd("0")==1){
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()>3){OrderDelete(OrderTicket());}
if(OrderType()==0){
prise=NormalizeDouble(OrderOpenPrice()-stoploss*Point,Digits);
OrderSend(Symbol(),5,lot,prise,Slippage*mno,0,0,"",Magik,0,Red);
Print("SET");
return;
}
if(OrderType()==1){
prise=NormalizeDouble(OrderOpenPrice()+stoploss*Point,Digits);
OrderSend(Symbol(),4,lot,prise,Slippage*mno,0,0,"",Magik,0,Blue);
Print("SET");
return;
}
}
}
}
}
return;
}
//-----------------------------------------------------------------------------+
// Óñëîâèÿ äëÿ óñòàíîâêè ïåðâè÷íîãî îðäåðà |
//-----------------------------------------------------------------------------+
void FirstTrade(){int period=(stoploss+takeprofit)/2;double Ma;static int napr=0;
//------------------------------------------------+
if(OnBar)if(PrewTime==iTime(NULL,Tf,0)) return(0);
if(OnBar)PrewTime=iTime(NULL,Tf,0);
//------------------------------------------------+
gRes1=NormalizeDouble(iCustom(Symbol(),Tf,"Xma",XmaPeriod,XmaPorog,1,1,0,1),Digits/mno);
gRes2=NormalizeDouble(iCustom(Symbol(),Tf,"Xma",XmaPeriod,XmaPorog,1,1,0,2),Digits/mno);
gRes3=NormalizeDouble(iCustom(Symbol(),Tf,"Xma",XmaPeriod,XmaPorog,1,1,0,3),Digits/mno);
//-----------------------------------------+
// Îïðåäåëèòåëüìîäåëè ïîâåäåíèÿ |
//-----------------------------------------+
if(FullAuto){
//if(CountOpOrd("0")>1){if(LockMode==2){return;}}
if(gRes1!=gRes2&&gRes2!=gRes3){LockMode=2;}
if(gRes1==gRes2&&gRes2==gRes3){LockMode=1;}
}
return;
}
//+----------------------------------------------------------------------------+
// Âõîä ïî Ñàð |
//-----------------------------------------------------------------------------+
int Sar(double sar1=0.02,double sar2=0.2){
double ma1,ma2,res1,res2,res3;
ma1=iMA(Symbol(),0,FlatPeriod,0,3,0,1)/Point;
ma2=iMA(Symbol(),0,FlatPeriod,2,3,0,1)/Point;
res1=NormalizeDouble(iCustom(Symbol(),Tf,"Xma",XmaPeriod,XmaPorog,1,1,0,1),Digits/mno);
res2=NormalizeDouble(iCustom(Symbol(),Tf,"Xma",XmaPeriod,XmaPorog,1,1,0,2),Digits/mno);
res3=NormalizeDouble(iCustom(Symbol(),Tf,"Xma",XmaPeriod,XmaPorog,1,1,0,3),Digits/mno);
if(res1==res2&&res2==res3){
if(MathAbs(ma1-ma2)>=FlatPorog*mno){
if(ma1-ma2>=FlatPorog*mno){return( 1);}
if(ma2-ma1>=FlatPorog*mno){return(-1);}
}else{
if(ma1-ma2>=mno){return( 1);}
if(ma2-ma1>=mno){return(-1);}
}
}else{
if((res1>res2&&res2>res3)||
(res1>res2&&res2<res3)){return( 1);}
if((res1<res2&&res2<res3)||
(res1<res2&&res2>res3)){return(-1);}
}
return(0);
}
//+----------------------------------------------------------------------------+
// Âîçâðàùàåò òèêåò ñàìîãî ëîñåâîãî îðäåðà |
//-----------------------------------------------------------------------------+
int LossTicket(){int loss=0,ticket;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(OrderProfit()<loss){
loss=OrderProfit();
ticket=OrderTicket();
}
}
}
}
}
return(ticket);
}
//+----------------------------------------------------------------------------+
// Ðàñ÷åò ëîòà ïåðåä óñòàíîâêîé ëîêèðóþùåãî îðäåðà |
//-----------------------------------------------------------------------------+
static double gMinPrise,gMaxPrise;
double martin(){double nextprise,nextlotkoff=1,nextlot;bool ApDn;int lotDigits;
if(!Martingale)return(CalcLotsAuto());
if(!OutOfPrise())return(MartinLot());
if(LockMode>1)return(MartinLot());
PriseChanelWide();
nextlot = CalcLotsAuto();
if(MarketInfo(Symbol(),MODE_LOTSTEP)>0.01){lotDigits=1;}else{lotDigits=2;}
if(Bid>gMaxPrise){nextprise=Bid-(((Bid-gMinPrise)/100)*23);ApDn=true;}
if(Bid<gMinPrise){nextprise=Bid+(((gMaxPrise-Bid)/100)*23);ApDn=false;}
for(int i=1;i<100;i++){
if(ApDn){
nextlot = NormalizeDouble(CalcLotsAuto()*nextlotkoff, lotDigits);
if(NullDotCh(Bid,nextlot)<nextprise){nextlotkoff=nextlotkoff+(10*i/100);}else{break;}
}else{
nextlot = NormalizeDouble(CalcLotsAuto()*nextlotkoff, lotDigits);
if(NullDotCh(Bid,nextlot)>nextprise){nextlotkoff=nextlotkoff+(10*i/100);}else{break;}
}
}
if(NullDotCh(Bid,nextlot)==gMinPrise||NullDotCh(Bid,nextlot)==gMaxPrise){return(MartinLot());}
if(nextprise==0){return(MartinLot());}
return(nextlot);
}
//+----------------------------------------------------------------------------+
// Ðàñ÷åò òî÷êè íóëü ïðîôèòà ïåðåä óñòàíîâêîé âûáðàííîãî îðäåðà |
//-----------------------------------------------------------------------------+
double NullDotCh(double _prise,double _lot){double prise=0;int count=0,countlot=0;
if(OrdersTotal()<1){return(Bid);}
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
countlot=(OrderLots()/MinLot);
count=count+countlot;
prise=prise+(OrderOpenPrice()*countlot);
}
}
}
//--------------------------
countlot=(_lot/MinLot);
count=count+countlot;
prise=prise+_prise*countlot;
//--------------------------
prise=prise/count;
return(prise);
}
//+----------------------------------------------------------------------------+
// Äåòåêòîð Ëîòà ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà |
//-----------------------------------------------------------------------------+
double MartinLot(){int i,fTime,time=TimeCurrent()+100;double fPrise,prise,fLot;
if(CountOpOrd("0")<2)return(CalcLotsAuto());
//--íàõîäèì äàííûå ïåðâè÷íîãî îðäåðà
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder){
fLot=OrderLots();
fPrise=OrderOpenPrice();
}
if(OrderMagicNumber()==Magik){
if(OrderOpenTime()<time){
time=OrderOpenTime();
prise=OrderOpenPrice();
}
}
}
}
}
double ch=MathAbs(fPrise-prise)/Point/mno;// øèðèíà ïåðâè÷íîãî êàíàëà
double minprise=100000,maxprise=0;
for(int n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();}
if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();}
}
}
}
}
double CH=MathAbs(maxprise-minprise)/Point/mno;// øèðèíà ïåðâè÷íîãî êàíàëà
double res=(CH/ch);
int Chprise;
if(OutOfPrise()){
if(MathAbs(Bid-minprise)>MathAbs(Bid-maxprise)){Chprise=MathAbs(Bid-minprise)/Point/mno;}
if(MathAbs(Bid-minprise)<MathAbs(Bid-maxprise)){Chprise=MathAbs(Bid-maxprise)/Point/mno;}
res=(Chprise/ch);
}
int lotDigits;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>0.01){lotDigits=1;}else{lotDigits=2;}
return(NormalizeDouble(CalcLotsAuto()*res,lotDigits));
}
//+----------------------------------------------------------------------------+
// Âîçâðíàùàåò ëîò ïîñëåäíåãî ïåðâè÷íîãî îðäåðà |
//-----------------------------------------------------------------------------+
double FirstOrderLots(){double lot;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder){
lot=OrderLots();
}
}
}
}
if(lot==0)lot=CalcLotsAuto();
return(lot);
}
//+----------------------------------------------------------------------------+
// Òåñòîâàÿ èíôîðìàöèÿ |
//-----------------------------------------------------------------------------+
void Testinfo(){
static double maxdrdn,maxprofit;
static int maxord;
int totalord,openord;
if(GrossProfit()<maxdrdn){maxdrdn=GrossProfit();}
if(GrossProfit()>maxprofit){maxprofit=GrossProfit();}
if(OrdersTotal()>maxord){maxord=OrdersTotal();}
string LM="";
string Fa;
if(FullAuto){Fa="TRUE";}else{Fa="FALSE";}
if(LockMode==1)LM="FlatMode";
if(LockMode==2)LM="TrandMode";
if(LockMode==3)LM="ContrTrand";
string Stl;
string Ob;
if(OnBar){Ob="TRUE";}else{Ob="FALSE";}
if(CloseLock){Stl="TRUE";}else{ Stl="FALSE";}
Comment(Secondnull("EXPERT SETTING",18), Secondnull("EXPERT DATA",33)," \n",
Secondnull("XmaPeriod ="),leadnull(XmaPeriod), Secondnull("Balanse =",29),leadnull(AccountBalance()),"\n",
Secondnull("XmaPorog ="),leadnull(XmaPorog), Secondnull("Equty =",29),leadnull(AccountBalance()+GrossProfit()),"\n",
Secondnull("FullAuto =",14),Secondnull(Fa,7), Secondnull("CurrDrdn =",29),leadnull(GrossProfit(-1)),"\n",
Secondnull("TakeProfit =",14),leadnull(takeprofit/mno), Secondnull("MaxDrdn =",28),leadnull(maxdrdn),"\n",
Secondnull("StopLos ="),leadnull(stoploss/mno), Secondnull("CurrProfit =",29),leadnull(GrossProfit(1)),"\n",
Secondnull("Risc =",17),leadnull(Risk), Secondnull("MaxProfit =",29),leadnull(maxprofit),"\n",
Secondnull("TimeFrame =",12),leadnull(Tf), Secondnull("OpenOrders =",26),leadnull(OrdersTotal(),6),"\n",
Secondnull("TotalOrders =",14),leadnull(OpenOrdermax), Secondnull("MaxOpenOrd =",23),leadnull(maxord,6),"\n",
Secondnull("OnBar ="),Secondnull(Ob,7), Secondnull("TotalOrders =",25),leadnull(OrdersTotal()+OrdersHistoryTotal(),6),"\n",
Secondnull("LockMode =",13),Secondnull(LM,10), Secondnull("PriseChanelWide =X",20),leadnull(PriseChanelWide(),4),"\n",
Secondnull("CloseLock =",14),Secondnull(Stl,7), Secondnull("RelProfit =",28),leadnull(histcount(),5),"\n",
Secondnull("FlatPorog =",14),Secondnull(FlatPorog,7),Secondnull("Porog =",32),leadnull(gPorog,5)
);
return;
}
//-----------------------------------------------------------------------------+
// Äîáàâëÿåò ëèäèðóþùèå ïðîáåëû |
//-----------------------------------------------------------------------------+
string leadnull(double set,int razr=8){int prom;string res,probel,input;
input=DoubleToStr(set,1);
prom=StringLen(input);
if(prom<razr){
for(int i=0;i<=razr-prom;i++){
probel=StringConcatenate(probel," ");
}
}
return(StringConcatenate(probel,input));
}
//-----------------------------------------------------------------------------+
// Äîáàâëÿåò ïîñëåäóþùèå ïðîáåëû |
//-----------------------------------------------------------------------------+
string Secondnull(string input,int razr=15){int prom;string res,probel;
prom=StringLen(input);
if(prom<razr){
for(int i=0;i<=razr-prom;i++){
probel=StringConcatenate(probel," ");
}
}
return(StringConcatenate(probel,input));
}
//-----------------------------------------------------------------------------+
double histcount(){double count=0,counttotal=0;
for(int i=0;i<OrdersHistoryTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol()==Symbol()){
counttotal++;
if(OrderMagicNumber()==MagicFirstOrder){
count++;
counttotal--;
}
}
}
}
if(count==0){count=1;}
if(counttotal==0){counttotal=1;}
double res=count/counttotal;
return(res);
}
//-----------------------------------------------------------------------------+
// Îïðåäåëÿåò Ñë è Òð ñîîòâåòñòâåííî ðàçìåðàì öåëè |
//-----------------------------------------------------------------------------+
void Average(int targ=0){int i, Av=5, mn, tf;static double sll, tpp;
if(targ<=0){mn=48;tf=30;}
if(targ==1){mn=24;tf=60;}
if(targ==2){mn=6;tf=240;}
if(targ>=3){mn=5;tf=1440;}
for(i=1;i<Av;i++){
sll=sll+(MathAbs(iHigh(Symbol(),tf,i*mn )-iLow(Symbol(),tf,i*mn))/Point/mno);
tpp=tpp+(MathAbs(iOpen(Symbol(),tf,i*mn )-iClose(Symbol(),tf,i*mn))/Point/mno/2);
}
sll=sll/Av;
tpp=tpp/Av;
//if(LockMode==2){sll=sll*0.62;}
Sll=sll;
Tpp=tpp;
return;
}
//-----------------------------------------------------------------------------+
// Áåçóáûòîê |
//-----------------------------------------------------------------------------+
void WL(int min=0){
if(min==0)return;
if(CountOpOrd()!=1)return;
double stop=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder){
if(TimeCurrent()-OrderOpenTime()>min*60){
if(OrderProfit()>0){
if(OrderStopLoss()!=OrderOpenPrice()){
if(MathAbs(OrderOpenPrice()-Bid)/Point>stop){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,White);
//return;
}
}
}
if(TimeCurrent()-OrderOpenTime()>min*120)if(OrderProfit()==0){del(OrderTicket());}
}
}
}
}
}
return;
}
//-----------------------------------------------------------------------------+
// Âûâîäèò èíôîðìàöèþ íà ýêðàí íà ðóññêîì |
//-----------------------------------------------------------------------------+
void SetInfoRus(int size=9,int pos=0,color col=Green){
int pos0=0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9;
int sz=size/2;
pos1=pos0+sz+size;
pos2=pos1+sz+size;
pos3=pos2+sz+size;
pos4=pos3+sz+size;
pos5=pos4+sz+size;
pos6=pos5+sz+size;
pos7=pos6+sz+size;
pos8=pos7+sz+size;
pos9=pos8+sz+size;
SetLabel("LabRu0","Lock&&ScalpingXR_v_2009_Rus \xA9", Yellow, 5,pos0 , pos, size);
SetLabel("LabRu1",gInfBalansRus, col, 5,pos1 , pos, size);
SetLabel("LabRu2",ginfMargineRus, col, 5, pos2, pos, size);
SetLabel("LabRu3",gInfProfitRus, col, 5, pos3, pos, size);
SetLabel("LabRu4",gInfCurrProfitRus, col, 5, pos4, pos, size);
SetLabel("LabRu5",gInfMaxOrdRus, col, 5, pos5, pos, size);
SetLabel("LabRu6",gInfOpenOrdRus, col, 5, pos6, pos, size);
SetLabel("LabRu7",gInfRiscRus, col, 5, pos7, pos, size);
SetLabel("LabRu8",gInf1rus, gColor1, 5, pos8, pos, size);
SetLabel("LabRu9",gTimeRus, gColor1, 5, pos9, pos, size);
return;
}
//-----------------------------------------------------------------------------+
// Âûâîäèò èíôîðìàöèþ íà ýêðàí íà àíãëèéñêîì |
//-----------------------------------------------------------------------------+
void SetInfoEngl(int size=9,int pos=0,color col=Green){
int pos0=0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9;
int sz=size/2;
pos1=pos0+sz+size;
pos2=pos1+sz+size;
pos3=pos2+sz+size;
pos4=pos3+sz+size;
pos5=pos4+sz+size;
pos6=pos5+sz+size;
pos7=pos6+sz+size;
pos8=pos7+sz+size;
pos9=pos8+sz+size;
SetLabel("LabRu0","Lock&&ScalpingXR_v_2009_Rus \xA9", Yellow, 5,pos0 , pos, size);
SetLabel("LabRu1",gInfBalansEngl, col, 5,pos1 , pos, size);
SetLabel("LabRu2",ginfMargineEngl, col, 5, pos2, pos, size);
SetLabel("LabRu3",gInfProfitEngl, col, 5, pos3, pos, size);
SetLabel("LabRu4",gInfCurrProfitEngl, col, 5, pos4, pos, size);
SetLabel("LabRu5",gInfMaxOrdEngl, col, 5, pos5, pos, size);
SetLabel("LabRu6",gInfOpenOrdEngl, col, 5, pos6, pos, size);
SetLabel("LabRu7",gInfRiscEngl, col, 5, pos7, pos, size);
SetLabel("LabRu8",gInf1engl, gColor1, 5, pos8, pos, size);
SetLabel("LabRu9",gTimeEngl, gColor1, 5, pos9, pos, size);
return;
}
//-----------------------------------------------------------------------------+
// Âûâîäèò èíôîðìàöèþ íà ýêðàí |
//-----------------------------------------------------------------------------+
void Info(){
gInfBalansRus="Âñåãî ñðåäñòâ ="+(DoubleToStr(AccountBalance()+GrossProfit(),1));
ginfMargineRus="Ñâîáîäíûõ ñðåäñâ ="+(DoubleToStr(AccountFreeMargin(),1));
gInfProfitRus="Òåêóùàÿ ïðèáûëü ="+(DoubleToStr(GrossProfit(),1));
gInfCurrProfitRus="Ïðèáûëü ñ íà÷àëà òîðãîâëè ="+(DoubleToStr(AccountBalance()-StartDepo,1));
gInfMaxOrdRus="Ìàêñèìàëüíî îðäåðîâ ="+DoubleToStr(OpenOrdermax,0)+" Øò";
gInfOpenOrdRus="Îòêðûòûõ îðäåðîâ ="+CountOpOrd("0")+"Øò.";
gInfRiscRus="Ðèñê ="+DoubleToStr(Risk,1)+" %";
//-----------------------------------------------------------------------------+
gInfBalansEngl="Account balanse ="+(DoubleToStr(AccountBalance()+GrossProfit(),1));
ginfMargineEngl="Account free margine ="+(DoubleToStr(AccountFreeMargin(),1));
gInfProfitEngl="current profit ="+(DoubleToStr(GrossProfit(),1));
gInfCurrProfitEngl="profit from the start of trading ="+(DoubleToStr(AccountBalance()-StartDepo,1));
gInfMaxOrdEngl="Orders for open maximum ="+DoubleToStr(OpenOrdermax,0)+" Ps";
gInfOpenOrdEngl="Count open orders ="+CountOpOrd("0")+"Ps.";
gInfRiscEngl="Risk = "+DoubleToStr(Risk,1)+" %";
}
//-----------------------------------------------------------------------------+
// Îïðåäåëÿåò äàòó êîíöà òîðãîâëè |
//-----------------------------------------------------------------------------+
bool EndTradeForDateTime(){
if(EndTradeData==""){
gInf1rus="Äàòà êîíöà òîðãîâëè íå îïðåäåëåíà ";
gInf1engl="Date of the end of trading is not defined ";
gColor1=LimeGreen;
return(false);
}
int EndData=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
int DataEnd=StrToTime(EndTradeData);
if(EndData>=DataEnd){
gInf1rus="Òîðãîâëÿ îñòàíîâëåííà "+EndTradeData;
gInf1engl="Trading stopped "+EndTradeData;
gColor1=Red;
return(true);
}
gInf1rus="Òîðãîâëÿ áóäåò îñòàíîâëåííà "+EndTradeData;
gInf1engl="Trading will be stopped "+EndTradeData;
gColor1=LimeGreen;
return(false);
}
//-----------------------------------------------------------------------------+
// Òî÷êà ðàâíîâåñèÿ |
//-----------------------------------------------------------------------------+
double NullDotBuy(){double prise=0;int count=0,countlot=0;
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()==0){
countlot=(OrderLots()/MinLot);
count=count+countlot;
prise=prise+(OrderOpenPrice()*countlot);
//LotBuy=LotBuy+OrderLots();
//profitbuy=profitbuy+OrderProfit();
}
}
}
}
gCountLotBuy=count;
if(count==0){count=1;}
prise=prise/count;
return(prise);
}
//-----------------------------------------------------------------------------+
// Òî÷êà ðàâíîâåñèÿ |
//-----------------------------------------------------------------------------+
double NullDotSell(){double prise=0;int count=0,countlot=0;
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()==1){
countlot=(OrderLots()/MinLot);
count=count+countlot;
prise=prise+(OrderOpenPrice()*countlot);
//LotSell=LotSell+OrderLots();
//profitsell=profitsell+OrderProfit();
}
}
}
}
gCountLotSell=count;
if(count==0){count=1;}
prise=prise/count;
return(prise);
}
//-----------------------------------------------------------------------------+
// Òî÷êà ðàâíîâåñèÿ |
//-----------------------------------------------------------------------------+
double NullDot(){double prise=0;int count=0,countlot=0;
if(OrdersTotal()<1){return(Bid);}
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
countlot=(OrderLots()/MinLot);
count=count+countlot;
prise=prise+(OrderOpenPrice()*countlot);
}
}
}
prise=prise/count;
return(prise);
}
//+------------------------------------------------------------------+
//| Óñòàíîâêà ñòðåëîê |
//+------------------------------------------------------------------+
void SetArrow(string nm,int kod,int razm,int bar,double prs,color col){
//if(!DriveArrow)return;
string Name=StringConcatenate(nm,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS));
ObjectCreate(Name,OBJ_ARROW,0,0,0,0,0,0,0);
ObjectSet(Name,OBJPROP_ARROWCODE,kod);
ObjectSet(Name,OBJPROP_STYLE,DRAW_ARROW);
ObjectSet(Name,OBJPROP_TIME1,Time[bar]);
ObjectSet(Name,OBJPROP_PRICE1,prs);
ObjectSet(Name,OBJPROP_WIDTH,razm);
ObjectSet(Name,OBJPROP_COLOR,col);
return;}
//-----------------------------------------------------------------------------+
// Ôóíêöèÿ êîíòðîëÿ âðåìåíè òîðãîâëè |
//-----------------------------------------------------------------------------+
bool TradeTime(){
int StartTradeHour=StartTrade;
int EndTradeHour=EndTrade;
if(!TradeOfTime){
if(DayOfWeek()==6||DayOfWeek()==0){
gTimeEngl="Start trade in 01:00 am";
gTimeRus="Íà÷àëî òîðãîâëè â ïîíåäåëüíèê â 01:00";
return(false);}
return(true);}
if(DayOfWeek()==6||DayOfWeek()==0){
gTimeEngl="Start trade in 01:00 am";
gTimeRus="Íà÷àëî òîðãîâëè â ïîíåäåëüíèê â 01:00";
return(false);}
if(StartTradeHour<EndTradeHour){
if(TimeHour(TimeCurrent())>=StartTradeHour&&TimeHour(TimeCurrent())<EndTradeHour
||(CountOpOrd("0")>0)){
gTimeEngl=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
gTimeRus=StringConcatenate("Äî êîíöà òîðãîâîé ñåññèè :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," ÷àñîâ");
return(true);}}
if(StartTradeHour>EndTradeHour){
if(TimeHour(TimeCurrent())>=StartTradeHour||TimeHour(TimeCurrent())<EndTradeHour
||(CountOpOrd("0")>0)){
gTimeEngl=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
gTimeRus=StringConcatenate("Äî êîíöà òîðãîâîé ñåññèè :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," ÷àñîâ");
return(true);}}
gTimeEngl=StringConcatenate("resting to : ",StartTradeHour,": 00");
gTimeRus=StringConcatenate("îòäûõàåì äî : ",StartTradeHour,": 00");
return(false);
}
//+----------------------------------------------------------------------------+
// Äàò÷èê Øèðèíû êîðèäîðà óñòàíîâëåííûõ îðäåðîâ +
//-----------------------------------------------------------------------------+
int PriseChanelWide(){double minprise=100000,maxprise=0;double first=Close[0],second=Close[0];int time=TimeCurrent();
if(CountOpOrd("")<2){return(1);}
for(int n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();}
if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();}
}
}
}
}
gMinPrise=minprise;
gMaxPrise=maxprise;
for(n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder){first=OrderOpenPrice();}
if(OrderMagicNumber()==Magik){
if(OrderOpenTime()<time){
time=OrderOpenTime();
second=OrderOpenPrice();
}
}
}
}
}
int ch=MathRound(MathAbs(first-second)/Point/mno);
int x=MathRound(((maxprise-minprise)/Point/mno)/ch);
//Print(first," ",second," CH= ",ch," max=",(maxprise-minprise)/Point," X=",x);
if(x<1)x=1;
return(x);
}
//+----------------------------------------------------------------------------+
// Ôóíêöèÿ âîçâðàùàåò ñðåäíþþ öåíó ìåæäó áëèçæàéøèìè îðäåðàìè +
//-----------------------------------------------------------------------------+
int MidleOrders(int OrdDist=10){
if(OrdersTotal()<2){return(-1);}
double dist1=100000,dist2=1000000;int typ1,typ2,magik1,magik2;
for(int n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderOpenPrice()-Bid>0){
if(OrderOpenPrice()-Bid<dist1){
dist1=OrderOpenPrice()-Bid;
typ1=OrderType();
magik1=OrderMagicNumber();
}
}
}
}
}
for(n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(Bid-OrderOpenPrice()>0){
if(Bid-OrderOpenPrice()<dist2){
dist2=Bid-OrderOpenPrice();
typ2=OrderType();
magik2=OrderMagicNumber();
}
}
}
}
}
dist1=NormalizeDouble(dist1/Point,Digits);
dist2=NormalizeDouble(dist2/Point,Digits);
if(MathAbs(dist1+dist2)<OrdDist)return(-1);
if(typ1==typ2){
if(MathAbs(dist1-dist2)<3){
if(magik1==MagicFirstOrder&&magik2==MagicFirstOrder)return(-1);
if(typ1==0){return(0);}
if(typ1==1){return(1);}
}
}else{
if(LockMode==1){
//if(typ1==0){return(0);}
//if(typ1==1){return(1);}
}
}
return(-1);
}
//+----------------------------------------------------------------------------+
// Ïîäñ÷èòûâàåò Îáùóþ íå ðåàëèçîâàííóþ ïðèáûëü íà äàííîì èíñòðóìåíòå +
//-----------------------------------------------------------------------------+
double GrossProfit(int prls=0){double grpr=0;
if(OrdersTotal()<1){return(-1);}
for(int n=OrdersTotal()+1;n>=0;n--){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(IsOrder("",MagicFirstOrder)||IsOrder("",Magik)){
if(prls==0)grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission();
if(prls>0)if(OrderProfit()>0)grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission();
if(prls<0)if(OrderProfit()<0)grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
return(grpr);
}
//+----------------------------------------------------------------------------+
// Çàäàåò äèñòàíöèþ äëÿ ëîêà +
//-----------------------------------------------------------------------------+
int NearOrdDistanse(int dist =20){double prise=1000000;int mindist=10;
//if(dist<mindist){dist=mindist;}
if(CountOpOrd("0")<2){return(0);}
for(int n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(MathAbs(Bid-OrderOpenPrice())<prise){prise=OrderOpenPrice();}
}
}
}
}
if(MathAbs(Bid-prise)>dist*Point/mno){
if(Bid-prise>0){return(-1);}
if(Bid-prise<0){return(1);}
}
return(0);
}
//+----------------------------------------------------------------------------+
// Çàïðåùàåò óñòàíîâêó äâàæäû íà îäíó öåíó +
//-----------------------------------------------------------------------------+
bool PriseDist(int dist=20,int older=2){double prise;int time;
//if(CountOpOrd("0")<2){return(false);}
for(int n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(OrderOpenTime()>time){
time=OrderOpenTime();
prise=OrderOpenPrice();
}
}
}
}
}
if(MathAbs(Bid-prise)<dist*Point/mno){return(false);}
if(time>iTime(Symbol(),Tf,older)){return(false);}
return(true);}
//+----------------------------------------------------------------------------+
// Äàò÷èê ïîëîæåíèÿ öåíû âíå êîðèäîðà óñòàíîâëåííûõ îðäåðîâ +
//-----------------------------------------------------------------------------+
bool OutOfPrise(){double minprise=100000,maxprise=0;
if(OrdersTotal()<2){return(true);}
for(int n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();}
if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();}
}
}
}
}
if(Bid>minprise&&Bid<maxprise){return(false);}
return(true);
}
//+----------------------------------------------------------------------------+
// Äåòåêòîð äîñòèæåíèÿ óðîâíÿ âèðò ñòîïà äëÿ ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà |
//-----------------------------------------------------------------------------+
int IfOrdstoploss(){
if(OrderType()==0){if(OrderOpenPrice()-Bid>=stoploss*Point/mno){return(-1);}}
if(OrderType()==1){if(Ask-OrderOpenPrice()>=stoploss*Point/mno){return(1);}}
return(0);
}
//-----------------------------------------------------------------------------+
//| Ïîäñ÷èòûâàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñîãëàñíî óñëîâèÿì |
//-----------------------------------------------------------------------------+
int CountOpOrd(string Sy="",int Magik=-1,int Typ=-1){int count=0;
if(Sy=="0"||Sy==""){Sy=Symbol();}
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Sy){
if(Magik==(-1)||OrderMagicNumber()==Magik){
if(Typ==(-1)||OrderType()==Typ){
if(OrderCloseTime()==0){
count++;
}
}
}
}
}
}
return(count);
}
//-----------------------------------------------------------------------------+
//| ïðîâåðÿåò ðûíî÷íûé îðäåð íà ïðèíàäëåæíîñòü ñîãëàñíî óñëîâèÿì |
//-----------------------------------------------------------------------------+
bool IsOrder(string Sy="",int Magik=-1,int Typ=-1){
if(Sy=="0"||Sy==""){Sy=Symbol();}
if(OrderSymbol()==Sy){
if(Magik==(-1)||OrderMagicNumber()==Magik){
if(Typ==(-1)||OrderType()==Typ){
if(OrderCloseTime()==0){
return(true);
}
}
}
}
return(false);
}
//-----------------------------------------------------------------------------+
//| Ðàñ÷åò ëîòà ñîîòâ ðèñêó è áàëàíñó |
//-----------------------------------------------------------------------------+
double CalcLotsAuto(){double LotOpt,LotNeOpt,Zalog;
if(IsTesting()||IsOptimization()){if(TestInfo){return(0.1);}}
RefreshRates();
//double bs=AccountBalance()+GrPorfit();
double Set=GlobalVariableGet("multi")-GlobalVariableGet("disable");
double Sredstwa =GlobalVariableGet("sredstva");
double lott=MarketInfo(Symbol(),MODE_MARGINREQUIRED)/1000;
double Marga=AccountFreeMargin();
double Balans=AccountBalance();
double LotMin=MarketInfo(Symbol(),MODE_MINLOT);
double LotMax=MarketInfo(Symbol(),MODE_MAXLOT);
double StepLot=MarketInfo(Symbol(),MODE_LOTSTEP);
double StopLv=AccountStopoutLevel();
int PrsMinLot=1000*LotMin;
if(Sredstwa==0){Sredstwa=Balans;GlobalVariableSet("sredstva",Balans);}
if(GlobalVariableGet("multi")>1){Risk=GlobalVariableGet("Risc");}
if(Risk<0)Risk=0;
if(Risk>100)Risk=100;
if(StepLot==0.01){int step=2;}else{step=1;}
if(Set<1){Set=1;}
//---------------------------
Zalog=(Balans*(Risk/100))/Set;
LotOpt=NormalizeDouble((Zalog/1000),step);
if(LotOpt>LotMax)LotOpt=LotMax;
if(LotOpt<LotMin)LotOpt=LotMin;
return(LotOpt);
}
//+----------------------------------------------------------------------------+
// îäèíî÷íîå Âñòðå÷íîå çàêðûòèå +
//-----------------------------------------------------------------------------+
void CloseBy(){
if(CountOpOrd("0")<3)return;
if(OutOfPrise())return;
double dist1=100000,dist2=100000;
double minprise=1000000,maxprise=0;
double profit1,profit2,prise1,prise2;
int n,ticket1,ticket2,typ1,typ2;
//-----Íàõîäèì áëèçæàéøèå ê öåíå 2 îðäåðà--------------------------------------+
for(n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(IsOrder("",MagicFirstOrder)||IsOrder("",Magik)){
if(OrderOpenPrice()-Bid>0&&OrderOpenPrice()-Bid<dist1){
dist1=OrderOpenPrice()-Bid;
ticket1=OrderTicket();
typ1=OrderType();
profit1=OrderProfit();
prise1=OrderOpenPrice();
}
if(Bid-OrderOpenPrice()>0&&Bid-OrderOpenPrice()<dist2){
dist2=Bid-OrderOpenPrice();
ticket2=OrderTicket();
typ2=OrderType();
profit2=OrderProfit();
prise2=OrderOpenPrice();
}
}
}
}
//-----Íàõîäèì êðàéíèå öåíû----------------------------------------------------+
for(n=0;n<OrdersTotal();n++){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){
if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();}
if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();}
}
}
}
}
prise1 =NormalizeDouble(prise1,Digits);
prise2 =NormalizeDouble(prise2,Digits);
minprise =NormalizeDouble(minprise,Digits);
maxprise =NormalizeDouble(maxprise,Digits);
profit1 =NormalizeDouble(profit1,2);
profit2 =NormalizeDouble(profit2,2);
if(typ1==typ2){
SetArrow("prise1",4,1,0,prise1,Blue);
SetArrow("prise2",4,1,0,prise2,White);
SetArrow("minprise",4,1,0,minprise,Red);
SetArrow("maxprise",4,1,0,maxprise,Red);
//Print(profit1," ",profit2," ",MathAbs(profit1+profit2));
if(MathAbs(profit1+profit2)<=2){
if(prise1==maxprise||prise2==minprise){
//del(ticket1);
//del(ticket2);
}
//OrderCloseBy(ticket1,ticket2,White);
}
}
return;
}
//+----------------------------------------------------------------------------+
// Óäàëåíèå ñàìîãî áîëüøîãî ëîñÿ íà ëåòó +
//-----------------------------------------------------------------------------+
void DelBigestLoss(){
if(OrdersTotal()<2)return;
double lossprofit;
int lossticket;
double profit[50][2],loss[50][2],prom[50][2];
double pr;int countprofit=0,countloss=0;
for(int n=OrdersTotal()+1;n>=0;n--){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
if(IsOrder("",MagicFirstOrder)||IsOrder("",Magik)){
if(OrderProfit()<0){
loss[countloss][0]=OrderProfit();
loss[countloss][1]=OrderTicket();
countloss++;
}
if(OrderProfit()>0){
profit[countprofit][0]=OrderProfit();
profit[countprofit][1]=OrderTicket();
countprofit++;
}
}
}
}
countprofit=countprofit-1;
countloss=countloss-1;
if(countprofit<1)return;
if(countloss<1)return;
//--Ñîðòèðîâêà ìàññèâà ïðîôèòíûõ îðäåðîâ â ïîðÿäêå âîçðàñòàíèÿ
ArrayResize(profit,countprofit);
ArrayResize(prom,countprofit);
for(n=0;n<countloss;n++){
prom[n][0]=0;
prom[n][1]=0;
}
for(n=0;n<countprofit;n++){
int index=ArrayMaximum(profit);
prom[n][0]=profit[index][0];
prom[n][1]=profit[index][1];
profit[index][0]=0;
profit[index][1]=0;
}
for(n=0;n<countloss;n++){
profit[n][0]=0;
profit[n][1]=0;
}
for(n=0;n<countprofit;n++){
profit[n][0]=prom[n][0];
profit[n][1]=prom[n][1];
}
//--Ñîðòèðîâêà ëîñåâûõ îðäåðîâ â ïîðÿäêå óáûâàíèÿ
index=0;
ArrayResize(prom,countloss);
ArrayResize(loss,countloss);
for(n=0;n<countloss;n++){
prom[n][0]=0;
prom[n][1]=0;
}
for(n=0;n<countloss;n++){
index=ArrayMinimum(loss);
prom[n][0]=loss[index][0];
prom[n][1]=loss[index][1];
loss[index][0]=0;
loss[index][1]=0;
}
for(n=0;n<countloss;n++){
loss[n][0]=0;
loss[n][1]=0;
}
for(n=0;n<countloss;n++){
loss[n][0]=prom[n][0];
loss[n][1]=prom[n][1];
}
//-----Íàõîæäåíèå ïîäõîäÿùåé êîìáèíàöèè----------------------------------------+
int count;double prpr;bool close=false;
for(int x=0;x<countloss/2;x++){
if(loss[x][0]<0){
lossprofit=loss[x][0];
lossticket=loss[x][1];
}
for(n=0;n<countprofit;n++){
prpr=prpr+profit[n][0];
count++;
if(NormalizeDouble(prpr,2)+NormalizeDouble(lossprofit,2)>=0
&&NormalizeDouble(prpr,2)+NormalizeDouble(lossprofit,2)<1.5)close=true;break;
}
}
if(close){
del(lossticket);
for(n=0;n<count;n++){int tick=profit[n][1];del(tick);}
return;
}
return;
}
//-----------------------------------------------------------------------------+
// Ôóíêöèÿ êîíòðîëÿ íîâîãî áàðà |
//-----------------------------------------------------------------------------+
bool NevBar(){
static int PrevTime=0;
if (PrevTime==iTime(NULL,Tf,0)) return(false);
PrevTime=iTime(NULL,Tf,0);
return(true);}
//+----------------------------------------------------------------------------+
// Çàêðûâàåò âñå îðäåðà íà äàííîì èíñòðóìåíòå +
//-----------------------------------------------------------------------------+
void CloseAll(){
//Print(GrossProfit());
while(OrdersTotal()>0){
for(int n=OrdersTotal()+1;n>=0;n--){
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){
del(OrderTicket());
}
}
}
return;
}
//-----------------------------------------------------------------------------+
//Óäàëÿåò ðûíî÷íûé îðäåð ñ óêàçàííûì åé òèêåòîì |
//+----------------------------------------------------------------------------+
void del(int ticket){int err;
for(int i=0;i<1;i++){
GetLastError();//îáíóëÿåì îøèêó
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
string symbol = OrderSymbol();
int dig=MarketInfo(symbol,MODE_DIGITS);
if(OrderType()==OP_BUY){RefreshRates();
double prise = NormalizeDouble(MarketInfo(symbol,MODE_BID),dig);
if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}}
if(OrderType()==OP_SELL){RefreshRates();
prise = NormalizeDouble(MarketInfo(symbol,MODE_ASK),dig);
if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}}
if(err == 0){PlaySound("expert.wav");break;}
if(err != 0){PlaySound("timeout.wav");Print("Error for Close Funtion =",err);}
while(!IsTradeAllowed()){Sleep(5000);}// åñëè ðûíîê çàíÿò òî ïîäîæäåì 5 ñåê
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
}
}
//-----------------------------------------------------------------------------+
//___________________ÊÈÌÓ_______ÐÅÑÏÅÊÒ________È_____ÓÂÀÆÓÕÀ___________________|
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 12.10.2007 |
//| Îïèñàíèå : Óñòàíîâêà òåêñòîâîé ìåòêè, îáúåêò OBJ_LABEL. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| nm - íàèìåíîâàíèå îáúåêòà |
//| tx - òåêñò |
//| cl - öâåò ìåòêè |
//| xd - êîîðäèíàòà X â ïèêñåëàõ |
//| yd - êîîðäèíàòà Y â ïèêñåëàõ |
//| cr - íîìåð óãëà ïðèâÿçêè (0 - ëåâûé âåðõíèé, |
//| 1 - ïðàâûé âåðõíèé, |
//| 2 - ëåâûé íèæíèé, |
//| 3 - ïðàâûé íèæíèé ) |
//| fs - ðàçìåð øðèôòà (9 - ïî óìîë÷àíèþ ) |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| m - òåêñò ñîîáùåíèÿ |
//+----------------------------------------------------------------------------+
void Message(string m) {
//Comment(m);
if (StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| pp - öåíà óñòàíîâêè îðäåðà |
//| sl - öåíîâîé óðîâåíü ñòîïà |
//| tp - öåíîâîé óðîâåíü òåéêà |
//| ex - äàòà èñòå÷åíèÿ |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=White;
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if(pp==op&&sl==os&&tp==ot){return;}
if ((sl==os&&(os!=0||sl!=0))&& (tp==ot&&(ot!=0||tp!=0))) {return;}
for (it=1; it<=NumberOfTry; it++) {
//if ((!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
er=GetLastError();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(print){Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);}
Sleep(1000*10);
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 06.03.2008 |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ îòêðûòèÿ) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 10.04.2008 |
//| Îïèñàíèå : Îòêðûâàåò ïîçèöèþ ïî ðûíî÷íîé öåíå. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ |
//| ll - ëîò |
//| sl - óðîâåíü ñòîï |
//| tp - óðîâåíü òåéê |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double Sl=0, double Tp=0, int mn=0,string com="") {
color clOpen;
datetime ot;
double pp, pa, pb, tp ,sl;
int dg, err, it, ticket=0;
string lsComm="";
if (sy=="" || sy=="0") sy=Symbol();
int stoplevel=MarketInfo(sy,MODE_STOPLEVEL);
int spread=MarketInfo(sy,MODE_SPREAD);
if(Tp!=0&&Tp<stoplevel+spread){Tp=stoplevel;}
if (op<1){
if (Sl>0) {sl=MarketInfo(Symbol(),MODE_ASK)-Sl*Point; }else {sl=0;}
if (Tp>0) {tp=MarketInfo(Symbol(),MODE_ASK)+Tp*Point; }else{ tp=0;}
}else{
if (Sl>0) {sl=MarketInfo(Symbol(),MODE_BID)+Sl*Point; }else{ sl=0;}
if (Tp>0) {tp=MarketInfo(Symbol(),MODE_BID)-Tp*Point;} else {tp=0;}}
if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
for (it=1; it<=NumberOfTry; it++) {
if (IsStopped()) {
Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;}
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
dg=MarketInfo(sy, MODE_DIGITS);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if (op==OP_BUY) pp=pa; else pp=pb;
pp=NormalizeDouble(pp, dg);
ot=TimeCurrent();
if (MarketWatch)
ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, com, mn, 0, clOpen);
else
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, com, mn, 0, clOpen);
if (ticket>0) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if(err==148){OpenOrdermax=OrdersTotal()-1;return;}
if(err==134){OpenOrdermax=OrdersTotal()-1;return;}
if (pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
// Âûâîä ñîîáùåíèÿ îá îøèáêå
if(print){
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);}
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if (err==2 || err==64 || err==65 || err==133) {
gbDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if (err==4 || err==131 || err==132) {
Sleep(1000*300); break;
}
if (err==128 || err==142 || err==143) {
Sleep(1000*66.666);
if (ExistPositions(sy, op, mn, ot)) {
if (UseSound) PlaySound(NameFileSound); break;
}
}
if (err==140 || err==148 || err==4110 || err==4111) break;
if (err==141) Sleep(1000*100);
if (err==145) Sleep(1000*17);
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
if (err!=135) Sleep(1000*7.7);
}
}
if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
}
}
//+----------------------------------------------------------------------------+
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
---