Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Lock&&PipsingXR_2009_isx
//-----------------------------------------------------------------------------+
//| Lock&&PipsingXR_2009.mq4 |
//| Copyright © 2009, XrustSolution. |
//| http://www.xrust.ucoz.net |
//-----------------------------------------------------------------------------+
#property copyright "#Copyright © 2008, XrustSolution.#"
#property link "#http://www.xrust.ucoz.net#"
#include <stdlib.mqh>
//-----------------------------------------------------------------------------+
extern string a="Part One = Skalper";
extern int IndSet1=3;
extern int IndSet2=1;
extern int F_T_treshold=8;
extern int Stoploss=0;
extern int Takeprofit=0;
extern double Risk =1;
extern int TimeFrame=0;
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 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;
//----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 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=false;
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;}else{mno=1;}
//F_T_treshold=F_T_treshold*mno;
Slippage=Slippage*mno;
Stoploss=Stoploss*mno;
Takeprofit=Takeprofit*mno;
//-----------------------------------------------------------------------------+
Average();
FirstTrade();
//-----------------------------------------------------------------------------+
return;}
//-----------------------------------------------------------------------------+
void deinit(){ObjectsDeleteAll(0,OBJ_LABEL);return;}
//-----------------------------------------------------------------------------+
void start(){static int max;Trade=0;
Info();
WL(WlMinute);
if(FullAuto){if(AccountBalance()+GrossProfit()<AccountBalance()*0.75){CloseLock=true;}else{CloseLock=false;}}
if(Stoploss==0){Average();stoploss=Sll;}else{stoploss=Stoploss;}
if(Takeprofit==0){Average();takeprofit=Tpp;}else{takeprofit=Takeprofit;}
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(CountOpOrd("0")>0)if(GrossProfit()>=(takeprofit*FirstOrderLots()*MarketInfo(Symbol(),MODE_LOTSIZE)/10000)/CountOpOrd("0")/mno)CloseAll();
//if(CountOpOrd("0")>1)if(GrossProfit()>=0)CloseAll();
if(CountOpOrd("0")<1){OpenOrdermax=TotalOrders;}
if(OpenOrdermax>AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto())){
OpenOrdermax=(AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()));}
//=============================================================================+
if(LockMode==1){// Ìîäåëü ïîâåäåíèÿ - ôëåò +
//-----------------------------------------------------------------------------+
if(CloseLock){
CloseBy();
DelBigestLoss();
}
if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){
if(Martingale)lot=CalcLotsAuto()*PriseChanelWide();
if(OutOfPrise()){
if(PriseDist(stoploss*PriseChanelWide()))if(NearOrdDistanse(stoploss*PriseChanelWide())>0)OpenPosition("",0,lot,0,0,Magik);
if(PriseDist(stoploss*PriseChanelWide()))if(NearOrdDistanse(stoploss*PriseChanelWide())<0)OpenPosition("",1,lot,0,0,Magik);
}else{
if(PriseDist(stoploss/3))if(MidleOrders(stoploss/3)==0){OpenPosition("",0,lot,0,0,Magik);}
if(PriseDist(stoploss/3))if(MidleOrders(stoploss/3)==1){OpenPosition("",1,lot,0,0,Magik);}
}
}
//-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+
if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){
if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",0,OrdLot(),0,0,Magik,Comm);
if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",1,OrdLot(),0,0,Magik,Comm);
}
//-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+
if(TradeTime()){
if(EndTradeForDateTime())return;
if(CountOpOrd("",MagicFirstOrder,-1)<1){
FirstTrade();
if(Trade<0){OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);return;}
if(Trade>0){OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);return;}
}
}
//-----------------------------------------------------------------------------+
}
//=============================================================================+
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=CalcLotsAuto()*PriseChanelWide();
if(OutOfPrise()){
if(OutOfPrise())if(NearOrdDistanse(stoploss/PriseChanelWide())<0)if(PriseDist(stoploss/PriseChanelWide()))OpenPosition("",0,lot,0,0,Magik);
if(OutOfPrise())if(NearOrdDistanse(stoploss/PriseChanelWide())>0)if(PriseDist(stoploss/PriseChanelWide()))OpenPosition("",1,lot,0,0,Magik);
}else{
if(PriseDist(stoploss/PriseChanelWide()/2))if(MidleOrders(stoploss/PriseChanelWide()/2)==0){OpenPosition("",0,lot,0,0,Magik);}
if(PriseDist(stoploss/PriseChanelWide()/2))if(MidleOrders(stoploss/PriseChanelWide()/2)==1){OpenPosition("",1,lot,0,0,Magik);}
}
}
//-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+
if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){
if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",0,OrdLot(),0,0,Magik,Comm);
if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",1,OrdLot(),0,0,Magik,Comm);
}
//-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+
if(TradeTime()){
if(EndTradeForDateTime())return;
if(CountOpOrd("0",MagicFirstOrder)<1){
FirstTrade();
if(Trade<0){OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);return;}
if(Trade>0){OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);return;}
}
}
//-----------------------------------------------------------------------------+
}
//=============================================================================+
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=CalcLotsAuto()*PriseChanelWide();
if(OutOfPrise()){
if(OutOfPrise())if(NearOrdDistanse(stoploss*PriseChanelWide())>0)if(PriseDist(stoploss*PriseChanelWide()))OpenPosition("",0,lot,0,0,Magik);
if(OutOfPrise())if(NearOrdDistanse(stoploss*PriseChanelWide())<0)if(PriseDist(stoploss*PriseChanelWide()))OpenPosition("",1,lot,0,0,Magik);
}else{
if(PriseDist(stoploss/PriseChanelWide()/4))if(MidleOrders(stoploss/PriseChanelWide()/4)==0){OpenPosition("",0,lot,0,0,Magik);}
if(PriseDist(stoploss/PriseChanelWide()/4))if(MidleOrders(stoploss/PriseChanelWide()/4)==1){OpenPosition("",1,lot,0,0,Magik);}
}
}
//-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+
if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){
if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",0,OrdLot(),0,0,Magik,Comm);
if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",1,OrdLot(),0,0,Magik,Comm);
}
//-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+
if(TradeTime()){
if(EndTradeForDateTime())return;
if(CountOpOrd("0",MagicFirstOrder)<1){
FirstTrade();
if(Trade<0){OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);return;}
if(Trade>0){OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);return;}
}
}
//-----------------------------------------------------------------------------+
}
//=============================================================================+
if(TestInfo){
Testinfo();
if(IsTesting()){
SetArrow("Ama1_",4,1,0,AMA(IndSet1,30,9,25,150,Tf,1),White);
SetArrow("Ama2_",4,1,0,AMA(IndSet1+IndSet2,30,9,25,150,Tf,1),Red);
}
}
//-----------------------------------------------------------------------------+
if(OnBar)PrewTime=iTime(NULL,Tf,0);
//-----------------------------------------------------------------------------+
return;}
//+----------------------------------------------------------------------------+
// Âîçâðíàùàåò ëîò àîñëåäíåãî ïåðâè÷íîãî îðäåðà |
//-----------------------------------------------------------------------------+
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("IndSet 1 ="),leadnull(IndSet1), Secondnull("Balanse =",29),leadnull(AccountBalance()),"\n",
Secondnull("IndSet 2 ="),leadnull(IndSet2), 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("StopLoss ="),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("FTtreshold =",14),Secondnull(F_T_treshold,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(){
Sll=(MathAbs(iHigh(Symbol(),60,1 )-iLow(Symbol(),60,1) )/Point
+MathAbs(iHigh(Symbol(),60,24)-iLow(Symbol(),60,24))/Point
+MathAbs(iHigh(Symbol(),60,48)-iLow(Symbol(),60,48))/Point
+MathAbs(iHigh(Symbol(),60,72)-iLow(Symbol(),60,72))/Point
+MathAbs(iHigh(Symbol(),60,96)-iLow(Symbol(),60,96))/Point)/5;
if(LockMode==2){Sll=Sll/2;}
Tpp=(MathAbs(iOpen(Symbol(),60,1 )-iClose(Symbol(),60,1) )/Point
+MathAbs(iOpen(Symbol(),60,24)-iClose(Symbol(),60,24))/Point
+MathAbs(iOpen(Symbol(),60,48)-iClose(Symbol(),60,48))/Point
+MathAbs(iOpen(Symbol(),60,72)-iClose(Symbol(),60,72))/Point
+MathAbs(iOpen(Symbol(),60,96)-iClose(Symbol(),60,96))/Point)/5/2;
//if(LockMode==1){Tpp=Tpp*2;}
return;
}
//-----------------------------------------------------------------------------+
// Áåçóáûòîê |
//-----------------------------------------------------------------------------+
void WL(int min=0){
if(min==0)return;
if(OrdersTotal()<1)return;
if(OrdersTotal()>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;
}
}
}
}
}
}
}
}
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);
//------------------------------------------------+
Trade=0;
int x,p;
double Ama1[3],Ama2[3];int res[3];
for(x=1;x<=3;x++){
Ama1[x-1]=AMA(IndSet1,30,9,25,150,Tf,x);//iCustom(Symbol(),Tf,"AMA STL",zxc,30,9,25,300,0,x);//
Ama2[x-1]=AMA(IndSet1+IndSet2,30,9,25,150,Tf,x);//iCustom(Symbol(),Tf,"AMA STL",zxc+zxc2,30,9,25,300,0,x);//
}
res[0]=((Ama1[0]-Ama2[0])/Point)/mno;
res[1]=((Ama1[1]-Ama2[1])/Point)/mno;
res[2]=((Ama1[2]-Ama2[2])/Point)/mno;
gPorog=res[0]-res[1];
gRes1=res[0];
gRes2=res[1];
gRes3=res[2];
//-----------------------------------------+
// Îïðåäåëèòåëüìîäåëè ïîâåäåíèÿ |
//-----------------------------------------+
if(FullAuto){
if(Ama1[0]==Ama1[1]&&Ama1[1]==Ama1[2]){
if(res[0]==res[1]&&res[1]==res[2]){LockMode=1;}
}else{
if((res[0]!=res[1]&&res[1]!=res[2])||
(res[0]!=res[1]&&res[1]==res[2])||
(res[0]==res[1]&&res[1]!=res[2])){LockMode=3;}
if(res[0]==res[1]&&res[1]==res[2]){LockMode=2;}
}
}
//-----------------------------------------+
// Ìîäåëü Êîíòð Òðåíä |
//-----------------------------------------+
if(LockMode==3){
if(Ama1[0]>Ama1[1]&&Ama1[1]>Ama1[2]){
if(res[0]>0&&res[1]>0&&res[2]>0){
if(res[0]>=res[1]&&res[1]>=res[2]){
if(iLow(Symbol(),Tf,1)>Ama1[0]){
Trade=1;
return;
}
}
}
}
if(Ama1[0]<Ama1[1]&&Ama1[1]<Ama1[2]){
if(res[0]<0&&res[1]<0&&res[2]<0){
if(res[0]<=res[1]&&res[1]<=res[2]){
if(iHigh(Symbol(),Tf,1)<Ama1[0]){
Trade=-1;
return;
}
}
}
}
Trade=0;
return;
}
//-----------------------------------------+
// Ìîäåëü Òðåíä |
//-----------------------------------------+
if(LockMode==2){
if(Ama1[0]>Ama1[1]&&Ama1[1]>Ama1[2]){
if(res[0]>0&&res[1]>0&&res[2]>0){
if(res[0]>=res[1]&&res[1]>=res[2]){
if(iLow(Symbol(),Tf,1)>Ama1[0]){
Trade=1;
return;
}
}
}
}
if(Ama1[0]<Ama1[1]&&Ama1[1]<Ama1[2]){
if(res[0]<0&&res[1]<0&&res[2]<0){
if(res[0]<=res[1]&&res[1]<=res[2]){
if(iHigh(Symbol(),Tf,1)<Ama1[0]){
Trade=(-1);
return;
}
}
}
}
Trade=0;
return;
}
//-----------------------------------------+
// Ìîäåëü Ôëåò |
//-----------------------------------------+
if(LockMode==1){
if(Ama1[0]==Ama1[1]&&Ama1[1]==Ama1[2]){
if(res[0]==res[1]&&res[1]==res[2]){
if(res[0]>=0&&res[1]>=0&&res[2]>=0){
if(res[0]<=F_T_treshold){
if((iClose(Symbol(),Tf,1)<Ama2[0])&&
(iClose(Symbol(),Tf,1)>Ama1[0])){
Trade=1;
return;
}
}
}
}
if(res[0]==res[1]&&res[1]==res[2]){
if(res[0]<=0&&res[1]<=0&&res[2]<=0){
if(res[0]>=(-1*F_T_treshold)){
if((iClose(Symbol(),Tf,1)>Ama1[0])&&
(iClose(Symbol(),Tf,1)<Ama2[0])){
Trade=(-1);
return;
}
}
}
}
}
}
Trade=0;
return;
}
//-----------------------------------------------------------------------------------------------------------+
double AMA(int FastMA = 2,int SlowMA = 30,int Range = 9,int filter = 25,int NBars = 300,int Tf = 0,int Chift=1){
double fAMA[];
double mAMA[];
int cb, i;
double k1, k2, Noise, ER, SSC, AMA, sdAMA, dAMA;
//-----------------------------------------------------
ArrayResize(fAMA,NBars+1);
ArrayResize(mAMA,NBars+1);
ArrayInitialize(fAMA,0);
ArrayInitialize(mAMA,0);
ArrayIsSeries(fAMA);
ArrayIsSeries(mAMA);
k1 = 2.0 / (SlowMA + 1);
k2 = 2.0 / (FastMA + 1) - k1;
AMA = iClose(Symbol(),Tf,NBars-Range);
mAMA[NBars-Range] = iClose(Symbol(),Tf,NBars-Range+1);
//-----------------------------------------------------
for(cb = NBars; cb >= 0; cb--){
Noise = 0;
for(i=cb;i<=cb+Range-1;i++){Noise=Noise+MathAbs(iClose(Symbol(),Tf,i)-iClose(Symbol(),Tf,i+1));}
if(Noise!=0){ER = MathAbs(iClose(Symbol(),Tf,cb) - iClose(Symbol(),Tf,cb+Range)) / Noise;}else{ER = 0;}
SSC=(ER*k2 + k1);
AMA=AMA+NormalizeDouble(SSC*SSC*(iClose(Symbol(),Tf,cb) - AMA), 4);
mAMA[cb] = AMA;
if(filter < 1){
fAMA[cb] = mAMA[cb];
if(cb==Chift)return(fAMA[cb]);
}else{
for(i=cb;i<=cb+SlowMA-1;i++){sdAMA = sdAMA + MathAbs(mAMA[i] - mAMA[i+1]);}
dAMA=mAMA[cb]-mAMA[cb+1];
if(dAMA>=0){
if(dAMA < NormalizeDouble(filter*sdAMA / (100*SlowMA), 4) &&
iHigh(Symbol(),Tf,cb) <= iHigh(Symbol(),Tf,iHighest(NULL, 0, MODE_HIGH, 4, cb)) + 10*Point){
fAMA[cb] = fAMA[cb+1];
if(cb==Chift)return(fAMA[cb]);
}else{
fAMA[cb] = mAMA[cb];
if(cb==Chift)return(fAMA[cb]);
}//if(dAMA < Normaliz
}else{
if(MathAbs(dAMA) < NormalizeDouble(filter*sdAMA / (100*SlowMA), 4) &&
iLow(Symbol(),Tf,cb) > iLow(Symbol(),Tf,iLowest(NULL, 0, MODE_LOW, 4, cb)) - 10*Point){
fAMA[cb] = fAMA[cb+1];
if(cb==Chift)return(fAMA[cb]);
}else{
fAMA[cb] = mAMA[cb];
if(cb==Chift)return(fAMA[cb]);
}
}
sdAMA=0.0;
}//for(i=cb;i<=cb+Range-1;i++)
}//for(cb = NBars; cb >= 0; cb--){
return(fAMA[Chift]);
}
//-----------------------------------------------------------------------------+
// Âûâîäèò èíôîðìàöèþ íà ýêðàí íà ðóññêîì |
//-----------------------------------------------------------------------------+
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 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;
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();}
}
}
}
}
int x=MathRound(((maxprise-minprise)/Point)/stoploss);
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;
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){
if(Bid-prise>0){return(-1);}
if(Bid-prise<0){return(1);}
}
return(0);
}
//+----------------------------------------------------------------------------+
// Çàïðåùàåò óñòàíîâêó äâàæäû íà îäíó öåíó +
//-----------------------------------------------------------------------------+
bool PriseDist(int dist=20,int older=10){double prise=100000;
//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(MathAbs(Bid-OrderOpenPrice())<dist*Point){
if(OrderOpenTime()>iTime(Symbol(),Tf,older)*OrdersTotal()){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);
}
//+----------------------------------------------------------------------------+
// Äåòåêòîð Ëîòà ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà |
//-----------------------------------------------------------------------------+
double OrdLot(){return(OrderLots());}
//+----------------------------------------------------------------------------+
// Äåòåêòîð äîñòèæåíèÿ óðîâíÿ âèðò ñòîïà äëÿ ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà |
//-----------------------------------------------------------------------------+
int IfOrdstoploss(){
if(OrderType()==0){if(OrderOpenPrice()-Bid>=stoploss*Point){return(-1);}}
if(OrderType()==1){if(Ask-OrderOpenPrice()>=stoploss*Point){return(1);}}
return(0);
}
//-----------------------------------------------------------------------------+
//| Ïîäñ÷èòûâàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñîãëàñíî óñëîâèÿì |
//-----------------------------------------------------------------------------+
int CountOpOrd(string Sy="",int Magik=-1,int Typ=-1){int count=0;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(IsOrder(Sy,Magik,Typ))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){
if(profit1-profit2==0){
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==Time[0]) return(false);
PrevTime=Time[0];
return(true);}
//+----------------------------------------------------------------------------+
// Çàêðûâàåò âñå îðäåðà íà äàííîì èíñòðóìåíòå +
//-----------------------------------------------------------------------------+
void CloseAll(){
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();
if(OrderType()==OP_BUY){RefreshRates();
double prise = MarketInfo(symbol,MODE_BID);
if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}}
if(OrderType()==OP_SELL){RefreshRates();
prise = MarketInfo(symbol,MODE_ASK);
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
---