Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
exp_ZZSemafor
//+------------------------------------------------------------------+
//| exp_ZZ_Semafor.mq4 |
//| Copyright © 2009, Serg73, TradeProgrammer |
//| http://tradeprogrammer.narod.ru/index.htm |
//| mailto:TradeProgrammer@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Serg73, TradeProgrammer"
#property link "www.http://tradeprogrammer.narod.ru/index.htm"
#property link "mailto:TradeProgrammer@yandex.ru"
#define IND "ZZ_i"
extern int TimeFrame = 0; // Ðàáî÷èé òàéìôðåéì. 0 - òàéìôðåéì ãðàôèêà èëè âûáðàííûé â òåñòåðå, èëè çíà÷åíèå òàéìôðåéìà: 1,5,15,30,60,240
extern string e0 = "=== Order ===";
extern double Lots = 0.1; // Êîëè÷åñòâî ëîòîâ
extern int LotsMethod = 3; // 1 - ïåðåìåííàÿ Lots, 2 - äîáàâëåíèå, 3 - óìíîæåíèå
extern double LotsAdd = 0.1; // Äîáàâêà ïðè LotsMethod=3
extern double LotsK = 2; // Êîýôôèöèåíò óìíîæåíèÿ ïðè LotsMethod=3
extern int Slippage = 3; // Äîïóñòèìîå ïðîñêàëüçûâàíèå
extern int StopLoss = 0; // Ñòîïëîññ
extern int TakeProfit = 0; // Òåéêïðîôèò
extern int Magic_N = 777; // Ìàãèê. åñëè íåñêîëüêî ýêñïåðòîâ ðàáîòàåò íà îäíîì ñèìâîëå ó íèõ äîëæåí áûòü ðàçíûé ìàãèê.
// ÂÍÈÌÀÍÈÅ!!! Åñëè âêëþ÷åíî ssUse, òî çàäåéòñâîâàí åùå îäèí ìàãèê íà 1 áîëüøå ÷åì Magic_N
extern string e1 = "=== Orders Management ===";
extern int MaxCount = -1; // Ììàêñèìàëüíî äîïóñòèìîå êîëè÷åñòâî îòêðûòûõ îðäåðîâ
extern int MaxBuyCount = -1; // Ìàêñèìàëüíî äîïóñòèìîå êîëè÷åñòâî îòêðûòûõ îðäåðîâ áàé, -1 - íå îãðàíè÷åíî
extern int MaxSellCount = -1; // Ìàêñèìàëüíî äîïóñòèìîå êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñåëë, -1 - íå îãðàíè÷åíî
extern bool CountSSOrders = false; // Ïîäñ÷èòûâàòü ïåðåâîðîòíûå îðäåðà
extern bool AddIfLevel = true; // Äîáàâëÿòü îðäåð åñëè îí îòêðûâàåòñÿ ïî ëó÷øå öåíå ÷åì ïðåäûäóùèé íà AddLevel ïóíêòîâ
extern int AddLevel = 55; // Ñì. AddIfLevel.
extern bool CloseOnRev = false; // Çàêðûâàòü îðäåðà ïåðåä îòêðûòèåì ïðîòèâîïîëîæíîãî îðäåðà
extern bool CloseOnRevSSOrders = false; // Çàêðûâàòü ïåðâîðòíûå îðäåðà.
extern bool CloseSignal = false; // Çàêðûâàòü ïî îòäåëüíîìó íàáîðó èíäèêàòîðîâ
extern bool CloseSignalSSOrders = false; // Çàêðûâàòü ïåðâîðòíûå îðäåðà ïî îòäåëüíîìó íàáîðó èíäèêàòîðîâ.
extern string e2 = "=== Trailing ===";
extern bool TrailingStop_Use = false; // Âêëþ÷åíèå ôóíêöèè òðåéëèíãà
extern bool TrailingStop_OnceOnBar = true; // Òðåéëèíã ñðàáàòûâàåò íå ÷àùå îäíîãî ðàçà íà áàð. Èñïîëüçîâíèå òàêîãî ðåæèìà ïîçâîëÿåò ïîëó÷èòü ñîîòâåòñâèå ðåàëó è òåñòèðîâàíèþ ïî öåíàì îòêðûòèÿ, ÷òî çíà÷èòåëüíî óñêîðÿåò îïòèìèçàöèþ
extern int TrailingStopStart = 35; // Ïðèáûëü îðäåðà ïðè êîòîðîé íà÷èíàåò ðàáîòàòü òðåéëèíã
extern int TrailingStop = 15; // Óðîâåíü òðåéëèíãà
extern string e3 = "=== BreakEven ===";
extern bool BreakEven_Use = false; // Âêëþ÷åíèå ôóíêöèè áåçóáûòêà
extern bool BreakEven_OnceOnBar = true; // Áåçóáûòîê ñðàáàòûâàåò ðàç íà áàð
extern int BreakEvenStart = 30; // Ïðèáûëü îðäåðà ïðè êîòîðîé ñòîïëîññ ïåðåíîñèòñÿ íà óðîâåíü BreakEvenLevel
extern int BreakEvenLevel = 30; // Óðîâåíü íà êîòîðûé óñòàíàâëèâàåòñÿ ñòîïëîññ îò öåíû ïðè êîòîðîé ïðèáûëü îðäåðà áûëà ðàâíà BreakEvenStart. Ñîõðàíÿåòñÿ BreakEvenStart-BreakEvenLevel ïóíêòîâ ïðèáûëè
extern string e4 = "=== Indicator (Open) ===";
extern bool ZZO_1_ON = true; // Âêëþ÷åíèå ïðîâåðêè çèãçàãà 1
extern bool ZZO_2_ON = false; // ---//---//---
extern bool ZZO_3_ON = false;
extern bool ZZO_4_ON = false;
extern bool ZZO_5_ON = false;
extern int ZZO_1_Period = 25;
extern int ZZO_1_Reverse = 0;
extern int ZZO_2_Period = 50;
extern int ZZO_2_Reverse = 0;
extern int ZZO_3_Period = 100;
extern int ZZO_3_Reverse = 0;
extern int ZZO_4_Period = 200;
extern int ZZO_4_Reverse = 0;
extern int ZZO_5_Period = 400;
extern int ZZO_5_Reverse = 0;
extern string e42 = "=== Confirming (Open) ===";
extern int Indicator = 1; // Ïîäòâåðæäàþùèé èíäèêàòîð: 0 - íå èñïîëüçóåòñÿ, 1-ñòîõàñòèê ãëàâíàÿ/ñèãíàëüíàÿ, 2-èøèìîêó, 3-ñòîõàòèê ãëàâíàÿ/óðîâåíü
extern string e421 = "---- Stochastic ----";
extern int StKPeriod = 5;
extern int StDPeriod = 3;
extern int StSPeriod = 3;
extern int StMethod = 0;
extern int StPrice = 0;
extern int StLevel = 80; // âåðõíèé óðîâåíü ñòîõàñòèêà, íèæíèé ðàññ÷èòûâàåòñÿ 100-StLevel
extern string e422 = "---- Ichimoku ----";
extern int TenkanPeriod = 9;
extern int KijunPeriod = 25;
extern int SenkouPeriod = 52;
extern string e5 = "=== Indicator (Close) ===";
extern bool ZZC_1_ON = true; // Âêëþ÷åíèå ïðîâåðêè çèãçàãà 1
extern bool ZZC_2_ON = false; // ---//---//---
extern bool ZZC_3_ON = false;
extern bool ZZC_4_ON = false;
extern bool ZZC_5_ON = false;
extern int ZZC_1_Period = 25;
extern int ZZC_1_Reverse = 0;
extern int ZZC_2_Period = 50;
extern int ZZC_2_Reverse = 0;
extern int ZZC_3_Period = 100;
extern int ZZC_3_Reverse = 0;
extern int ZZC_4_Period = 200;
extern int ZZC_4_Reverse = 0;
extern int ZZC_5_Period = 400;
extern int ZZC_5_Reverse = 0;
extern string e6 = "=== StopLoss StopOrder ===";
extern bool ssUse = false; // Óñòíîâêà ïðîòèâîïëîæíûõ îòëîæåííûõ ñòîïîðäåðîâ îðäåðîâ
extern int ssLevel = 50; // Óðîâåíü óñòàíîâêè îòëîæåííîãî îò öåíû îòêðûòèÿ ðûíî÷íîãî. Èñïîëüçóåòñÿ òîëüêî åñëè îðäåðó íå óñòàíîâëåí ñòîïëîññ, åñëè ñòîïëîññ óñòàíîâëåí òî îòëîæåíûé ñòàâèòñÿ íà óðîâåíü ñòîïëîññ.
int ssMagic_N;
extern int ssStopLoss = 50; // Ñòîïëîññ ýòèõ îðäåðîâ
extern int ssTakeProfit = 50; // Òåéêïðîôèò ýòèõ îðäåðîâ
extern bool ssModify = true; // Ïåðåìåùàòü îðäåðà çà ñòîïëîññ (åñëè òðåéëèíã âêëþ÷åí èëè áåçóáûòîê)
double gLots;
int LastBuyTime,LastSellTime;
double bv,sv;
int LastTime;
bool ZZOON;
bool ZZCON;
double gLastBuyPrice;
double gLastBuyLots;
double gLastSellPrice;
double gLastSellLots;
int Whait;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){
ssMagic_N=Magic_N+1;
ZZOON=(ZZO_1_ON || ZZO_2_ON || ZZO_3_ON || ZZO_4_ON || ZZO_5_ON);
ZZCON=(ZZC_1_ON || ZZC_2_ON || ZZC_3_ON || ZZC_4_ON || ZZC_5_ON);
LastTime=0;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start(){
if(LastTime==0){
LastTime=iTime(NULL,TimeFrame,0);
return(0);
}
static bool ft=false;
bool trouble=false;
if(!ft){
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY)LastBuyTime=MathMax(LastBuyTime,OrderOpenTime());
if(OrderType()==OP_SELL)LastSellTime=MathMax(LastSellTime,OrderOpenTime());
}
}
else{
return(0);
}
}
for(i=0;i<HistoryTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY)LastBuyTime=MathMax(LastBuyTime,OrderOpenTime());
if(OrderType()==OP_SELL)LastSellTime=MathMax(LastSellTime,OrderOpenTime());
}
}
else{
return(0);
}
}
if(LastBuyTime>LastSellTime)LastSellTime=0;
if(LastSellTime>LastBuyTime)LastBuyTime=0;
if(TimeFrame==0)TimeFrame=Period();
LastBuyTime=TimeFrame*60*MathFloor(LastBuyTime/(TimeFrame*60));
LastSellTime=TimeFrame*60*MathFloor(LastSellTime/(TimeFrame*60));
ft=true;
}
if(LastTime!=iTime(NULL,TimeFrame,0)){
bool ZZO_1_BUY=true;
bool ZZO_1_SELL=true;
if(ZZO_1_ON){
ZZO_1_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZO_1_Period,ZZO_1_Reverse,2,1));
ZZO_1_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZO_1_Period,ZZO_1_Reverse,1,1));
}
bool ZZO_2_BUY=true;
bool ZZO_2_SELL=true;
if(ZZO_2_ON){
ZZO_2_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZO_2_Period,ZZO_2_Reverse,2,1));
ZZO_2_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZO_2_Period,ZZO_2_Reverse,1,1));
}
bool ZZO_3_BUY=true;
bool ZZO_3_SELL=true;
if(ZZO_3_ON){
ZZO_3_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZO_3_Period,ZZO_3_Reverse,2,1));
ZZO_3_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZO_3_Period,ZZO_3_Reverse,1,1));
}
bool ZZO_4_BUY=true;
bool ZZO_4_SELL=true;
if(ZZO_4_ON){
ZZO_4_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZO_4_Period,ZZO_4_Reverse,2,1));
ZZO_4_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZO_4_Period,ZZO_4_Reverse,1,1));
}
bool ZZO_5_BUY=true;
bool ZZO_5_SELL=true;
if(ZZO_5_ON){
ZZO_5_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZO_5_Period,ZZO_5_Reverse,2,1));
ZZO_5_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZO_5_Period,ZZO_5_Reverse,1,1));
}
bool PreBuySignal=false;
bool PreSellSignal=false;
if(ZZO_1_BUY){
if(ZZO_2_BUY){
if(ZZO_3_BUY){
if(ZZO_4_BUY){
if(ZZO_5_BUY){
if(ZZOON){
PreBuySignal=true;
}
}
}
}
}
}
if(ZZO_1_SELL){
if(ZZO_2_SELL){
if(ZZO_3_SELL){
if(ZZO_4_SELL){
if(ZZO_5_SELL){
if(ZZOON){
PreSellSignal=true;
}
}
}
}
}
}
bool BuySignal=false;
bool SellSignal=false;
switch(Indicator){
case 0:
BuySignal=PreBuySignal;
SellSignal=PreSellSignal;
break;
case 1:
if(PreBuySignal){
Whait=1;
}
if(PreSellSignal){
Whait=-1;
}
double st_m_1=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_MAIN,1);
double st_s_1=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_SIGNAL,1);
double st_m_2=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_MAIN,2);
double st_s_2=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_SIGNAL,2);
double st_m_3=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_MAIN,3);
double st_s_3=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_SIGNAL,3);
switch(Whait){
case 1:
if(st_m_1>st_s_1){
if(st_m_2<=st_s_2){
BuySignal=true;
}
}
if(st_m_2>st_s_2){
if(st_m_3<=st_s_3){
Whait=0;
}
}
break;
case -1:
if(st_m_1<st_s_1){
if(st_m_2>=st_s_2){
SellSignal=true;
}
}
if(st_m_2<st_s_2){
if(st_m_3>=st_s_3){
Whait=0;
}
}
break;
}
break;
case 2:
if(PreBuySignal){
Whait=1;
}
if(PreSellSignal){
Whait=-1;
}
double Tenkan1=iIchimoku(NULL,0,TenkanPeriod,KijunPeriod,SenkouPeriod,MODE_TENKANSEN,1); // Red, fast
double Kijun1=iIchimoku(NULL,0,TenkanPeriod,KijunPeriod,SenkouPeriod,MODE_KIJUNSEN,1); // Blue, slow
double Tenkan2=iIchimoku(NULL,0,TenkanPeriod,KijunPeriod,SenkouPeriod,MODE_TENKANSEN,2); // Red, fast
double Kijun2=iIchimoku(NULL,0,TenkanPeriod,KijunPeriod,SenkouPeriod,MODE_KIJUNSEN,2); // Blue, slow
double Tenkan3=iIchimoku(NULL,0,TenkanPeriod,KijunPeriod,SenkouPeriod,MODE_TENKANSEN,3); // Red, fast
double Kijun3=iIchimoku(NULL,0,TenkanPeriod,KijunPeriod,SenkouPeriod,MODE_KIJUNSEN,3); // Blue, slow
switch(Whait){
case 1:
if(Tenkan1>Kijun1){
if(Tenkan2<=Kijun2){
BuySignal=true;
}
}
if(Tenkan2>Kijun2){
if(Tenkan3<=Kijun3){
Whait=0;
}
}
break;
case -1:
if(Tenkan1<Kijun1){
if(Tenkan2>=Kijun2){
SellSignal=true;
}
}
if(Tenkan2<Kijun2){
if(Tenkan3>=Kijun3){
Whait=0;
}
}
break;
}
break;
case 3:
if(PreBuySignal){
Whait=1;
}
if(PreSellSignal){
Whait=-1;
}
st_m_1=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_MAIN,1);
st_m_2=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_MAIN,2);
st_m_3=iStochastic(NULL,TimeFrame,StKPeriod,StDPeriod,StSPeriod,StMethod,StPrice,MODE_MAIN,3);
switch(Whait){
case 1:
if(st_m_1>100-StLevel){
if(st_m_2<=100-StLevel){
BuySignal=true;
}
}
if(st_m_2>100-StLevel){
if(st_m_3<=100-StLevel){
Whait=0;
}
}
break;
case -1:
if(st_m_1<StLevel){
if(st_m_2>=StLevel){
SellSignal=true;
}
}
if(st_m_2<StLevel){
if(st_m_3>=StLevel){
Whait=0;
}
}
break;
}
}
if(CloseSignal || CloseSignalSSOrders){
bool ZZC_1_BUY=true;
bool ZZC_1_SELL=true;
if(ZZC_1_ON){
ZZC_1_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZC_1_Period,ZZC_1_Reverse,2,1));
ZZC_1_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZC_1_Period,ZZC_1_Reverse,1,1));
}
bool ZZC_2_BUY=true;
bool ZZC_2_SELL=true;
if(ZZC_2_ON){
ZZC_2_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZC_2_Period,ZZC_2_Reverse,2,1));
ZZC_2_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZC_2_Period,ZZC_2_Reverse,1,1));
}
bool ZZC_3_BUY=true;
bool ZZC_3_SELL=true;
if(ZZC_3_ON){
ZZC_3_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZC_3_Period,ZZC_3_Reverse,2,1));
ZZC_3_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZC_3_Period,ZZC_3_Reverse,1,1));
}
bool ZZC_4_BUY=true;
bool ZZC_4_SELL=true;
if(ZZC_4_ON){
ZZC_4_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZC_4_Period,ZZC_4_Reverse,2,1));
ZZC_4_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZC_4_Period,ZZC_4_Reverse,1,1));
}
bool ZZC_5_BUY=true;
bool ZZC_5_SELL=true;
if(ZZC_5_ON){
ZZC_5_BUY=(0!=iCustom(NULL,TimeFrame,IND,ZZC_5_Period,ZZC_5_Reverse,2,1));
ZZC_5_SELL=(0!=iCustom(NULL,TimeFrame,IND,ZZC_5_Period,ZZC_5_Reverse,1,1));
}
bool ClBuySignal=false;
bool ClSellSignal=false;
if(ZZC_1_BUY){
if(ZZC_2_BUY){
if(ZZC_3_BUY){
if(ZZC_4_BUY){
if(ZZC_5_BUY){
if(ZZCON){
ClSellSignal=true;
}
}
}
}
}
}
if(ZZC_1_SELL){
if(ZZC_2_SELL){
if(ZZC_3_SELL){
if(ZZC_4_SELL){
if(ZZC_5_SELL){
if(ZZCON){
ClBuySignal=true;
}
}
}
}
}
}
//Print("sssssssssssssss "+CloseBuySignal+" "+CloseSellSignal);
if(ClBuySignal || ClSellSignal){
if(fOrderCloseMarket2(ClBuySignal,ClSellSignal)!=0){
trouble=true;
}
}
}
if(BuySignal || SellSignal){
if(CloseOnRev || CloseOnRevSSOrders){
if(fOrderCloseMarket(SellSignal,BuySignal)!=0){
trouble=true;
}
}
int BuyCount,SellCount;
int Total=fMarketOrdersTotal(BuyCount,SellCount);
if(Total!=-1){
if(Total<MaxCount || MaxCount==-1){
if(BuySignal && !SellSignal && !ClBuySignal){
if(BuyCount<MaxBuyCount || MaxBuyCount==-1){
if(LastBuyTime!=iTime(NULL,TimeFrame,0)){
bool CanOpen=true;
if(AddIfLevel){
CanOpen=False;
if(BuyCount==0){
CanOpen=true;
}
else{
if(ND(Ask)<=ND(gLastBuyPrice-Point*AddLevel)){
CanOpen=true;
}
}
}
if(CanOpen){
gLots=Lots;
if(BuyCount>0){
switch(LotsMethod){
case 2:
gLots=gLastBuyLots+LotsAdd;
break;
case 3:
gLots=gLastBuyLots*LotsK;
break;
}
gLots=fLotsNormalize(gLots);
}
if(fOrderOpenBuy()<1){
trouble=true;
}
}
}
}
}
if(SellSignal && !BuySignal && !ClSellSignal){
if(SellCount<MaxSellCount || MaxSellCount==-1){
if(LastSellTime!=iTime(NULL,TimeFrame,0)){
CanOpen=true;
if(AddIfLevel){
CanOpen=False;
if(SellCount==0){
CanOpen=true;
}
else{
if(ND(Bid)>=ND(gLastSellPrice+Point*AddLevel)){
CanOpen=true;
}
}
}
if(CanOpen){
gLots=Lots;
if(SellCount>0){
switch(LotsMethod){
case 2:
gLots=gLastSellLots+LotsAdd;
break;
case 3:
gLots=gLastSellLots*LotsK;
break;
}
gLots=fLotsNormalize(gLots);
}
if(fOrderOpenSell()<1){
trouble=true;
}
}
}
}
}
}
}
else{
trouble=true;
}
}
if(TrailingStop_OnceOnBar){
if(TrailingStop_Use){
if(fTrailingWithStart()!=0){
trouble=true;
}
}
}
if(BreakEven_OnceOnBar){
if(BreakEven_Use){
if(fBreakEvenToLevel()!=0){
trouble=true;
}
}
}
if(!trouble){
LastTime=iTime(NULL,TimeFrame,0);
}
}
if(!TrailingStop_OnceOnBar){
if(TrailingStop_Use){
if(fTrailingWithStart()!=0){
trouble=true;
}
}
}
if(!BreakEven_OnceOnBar){
if(BreakEven_Use){
if(fBreakEvenToLevel()!=0){
trouble=true;
}
}
}
if(ssUse){
fLinkedStopLossStopOrder();
}
if(ssModify){
fLinkedStopLossStopOrderModify();
}
return(0);
}
//+------------------------------------------------------------------+
void fLinkedStopLossStopOrder(){
int i,j;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==ssMagic_N){
if(OrderSymbol()==Symbol()){
if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP){
int tTicket=OrderTicket();
int tType=OrderType();
string tComment=OrderComment();
bool tMainExist=false;
for(j=0;j<OrdersTotal();j++){
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==Magic_N){
if(OrderSymbol()==Symbol()){
if(StringFind(tComment,"SS"+OrderTicket()+"SS",0)==0){
tMainExist=true;
break;
}
}
}
}
else{
tMainExist=true;
break;
}
}
if(!tMainExist){
if(!IsTradeContextBusy()){
if(!OrderDelete(tTicket)){
if(tType==OP_BUYSTOP)Print("Error delete BUYSTOP "+tTicket+" "+tTicket+". "+fMyErDesc(GetLastError()));
if(tType==OP_SELLSTOP)Print("Error delete SELLSTOP "+tTicket+" "+tTicket+". "+fMyErDesc(GetLastError()));
}
}
else{
if(tType==OP_BUYSTOP)Print("Need delete BUYSTOP "+tTicket+". "+tTicket+". Trade Context Busy");
if(tType==OP_SELLSTOP)Print("Need delete SELLSTOP "+tTicket+". "+tTicket+". Trade Context Busy");
}
}
}
}
}
}
}
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==Magic_N){
if(OrderSymbol()==Symbol()){
if(1==1){
bool tExist=false;
int tMainTicket=OrderTicket();
int tMainType=OrderType();
double tMainStopLoss=OrderStopLoss();
if(ND(tMainStopLoss)==0){
switch(OrderType()){
case OP_BUY:
tMainStopLoss=ND(OrderOpenPrice()-Point*ssLevel);
break;
case OP_SELL:
tMainStopLoss=ND(OrderOpenPrice()+Point*ssLevel);
break;
}
}
double tLots=OrderLots();
for(j=0;j<OrdersTotal();j++){
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==ssMagic_N){
if(OrderSymbol()==Symbol()){
if(StringFind(OrderComment(),"SS"+tMainTicket+"SS",0)==0){
tExist=true;
break;
}
}
}
}
else{
tExist=true;
break;
}
}
if(!tExist){
if(tMainType==OP_SELL){//BUYSTOP
double oppr=ND(tMainStopLoss);
double slts=ND(oppr-Point*ssStopLoss);
if(ssStopLoss==0)slts=0;
double tpts=ND(oppr+Point*ssTakeProfit);
if(ssTakeProfit==0)tpts=0;
double mol=ND(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr>=mol){
int tLotsErr=0;
if(AccountFreeMarginCheck(Symbol(),OP_BUY,tLots)<=0){
tLotsErr=1;
}
if(GetLastError()==134){
tLotsErr=2;
}
if(tLotsErr==0){
if(!IsTradeContextBusy()){
int rv=OrderSend(Symbol(),OP_BUYSTOP,tLots,oppr,0,slts,tpts,"SS"+tMainTicket+"SS",ssMagic_N,0,CLR_NONE);
if(rv<=0){
Print ("Error set stoploss BUYSTOP for SELL "+tMainTicket+". "+fMyErDesc(GetLastError()));
}
}
else{
int lt5=0;
if(TimeCurrent()>lt5+20){
lt5=TimeCurrent();
Print("Need set stoploss BUYSYOP for SELL "+tMainTicket+". Trade Context Busy");
}
}
}
else{
static int lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
if(tLotsErr==1){
Print("Need set stoploss BUYSYOP for SELL "+tMainTicket+". No money");
}
if(tLotsErr==2){
Print("Need set stoploss BUYSYOP for SELL "+tMainTicket+". Wrong lots size");
}
}
}
}
else{
static int lt1=0;
if(TimeCurrent()>lt1+20){
lt1=TimeCurrent();
Print("Need set stoploss BUYSYOP for SELL "+tMainTicket+". Wrong price level");
}
}
}
if(tMainType==OP_BUY){//SELLSTOP
oppr=ND(tMainStopLoss);
slts=ND(oppr+Point*ssStopLoss);
if(ssStopLoss==0)slts=0;
tpts=ND(oppr-Point*ssTakeProfit);
if(ssTakeProfit==0)tpts=0;
mol=ND(Bid-Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr<=mol){
tLotsErr=0;
if(AccountFreeMarginCheck(Symbol(),OP_SELL,tLots)<=0){
tLotsErr=1;
}
if(GetLastError()==134){
tLotsErr=2;
}
if(tLotsErr==0){
if(!IsTradeContextBusy()){
rv=OrderSend(Symbol(),OP_SELLSTOP,tLots,oppr,0,slts,tpts,"SS"+tMainTicket+"SS",ssMagic_N,0,CLR_NONE);
if(rv<=0){
Print ("Error set stoploss SELLSTOP for BUY "+tMainTicket+". "+fMyErDesc(GetLastError()));
}
}
else{
int lt6=0;
if(TimeCurrent()>lt6+20){
lt6=TimeCurrent();
Print("Need set stoploss SELLSTOP for BUY "+tMainTicket+". Trade Context Busy");
}
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+20){
lt4=TimeCurrent();
if(tLotsErr==1){
Print("Need set stoploss SELLSTOP for SELL "+tMainTicket+". No money");
}
if(tLotsErr==2){
Print("Need set stoploss SELLSTOP for SELL "+tMainTicket+". Wrong lots size");
}
}
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need set stoploss SELLSTOP for BUY "+tMainTicket+". Wrong price level");
}
}
}
}
}
}
}
}
}
}
void fLinkedStopLossStopOrderModify(){
int i,j;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==ssMagic_N){
if(OrderSymbol()==Symbol()){
if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP){
int tTicket=OrderTicket();
int tType=OrderType();
string tComment=OrderComment();
double tOpenPrice=OrderOpenPrice();
for(j=0;j<OrdersTotal();j++){
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==Magic_N){
if(OrderSymbol()==Symbol()){
if(StringFind(tComment,"SS"+OrderTicket()+"SS",0)==0){
double oppr=ND(OrderStopLoss());
if(oppr!=0){
if(oppr!=ND(tOpenPrice)){
if(tType==OP_BUYSTOP){
double mol=ND(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr>=mol){
if(!IsTradeContextBusy()){
double slts=ND(oppr-Point*ssStopLoss);
if(ssStopLoss==0)slts=0;
double tpts=ND(oppr+Point*ssTakeProfit);
if(ssTakeProfit==0)tpts=0;
if(!OrderModify(tTicket,oppr,slts,tpts,OrderExpiration(),CLR_NONE)){
Print ("Error modify BUYSTOPSTOP "+tTicket+" for SELL "+OrderTicket()+". "+fMyErDesc(GetLastError()));
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need modify BUYSTOP "+tTicket+". Trade Context Busy");
}
}
}
else{
static int lt1=0;
if(TimeCurrent()>lt1+20){
lt1=TimeCurrent();
Print("Need modify BUYSTOP "+tTicket+". Wrong price level");
}
}
}
if(tType==OP_SELLSTOP){
mol=ND(Bid-Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr<=mol){
if(!IsTradeContextBusy()){
slts=ND(oppr+Point*ssStopLoss);
if(ssStopLoss==0)slts=0;
tpts=ND(oppr-Point*ssTakeProfit);
if(ssTakeProfit==0)tpts=0;
if(!OrderModify(tTicket,oppr,slts,tpts,OrderExpiration(),CLR_NONE)){
Print ("Error modify SELLSTOP "+tTicket+" for BUY "+OrderTicket()+". "+fMyErDesc(GetLastError()));
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+20){
lt4=TimeCurrent();
Print("Need modify SELLSTOP "+tTicket+". Trade Context Busy");
}
}
}
else{
static int lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
Print("Need modify SELLSTOP "+tTicket+". Wrong price level");
}
}
}
break;
}
}
}
}
}
}
else{
break;
}
}
}
}
}
}
}
}
double fLotsNormalize(double aLots){
aLots-=MarketInfo(Symbol(),MODE_MINLOT);
aLots/=MarketInfo(Symbol(),MODE_LOTSTEP);
aLots=MathRound(aLots);
aLots*=MarketInfo(Symbol(),MODE_LOTSTEP);
aLots+=MarketInfo(Symbol(),MODE_MINLOT);
aLots=NormalizeDouble(aLots,2);
return(aLots);
}
int fTrailingWithStart(){
int RetErr=0;
double slts;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY){
RefreshRates();
if(ND(Bid-OrderOpenPrice())>=ND(Point*TrailingStopStart)){
slts=ND(Bid-Point*TrailingStop);
if(ND(OrderStopLoss())<slts){
if(!IsTradeContextBusy()){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
int tCheck=GetLastError();
Print("Error trailingstop BUY "+OrderTicket()+" "+fMyErDesc(tCheck));
RetErr=-1;
}
}
else{
RetErr=-2;
static int lt1=0;
if(lt1+15<TimeCurrent()){
lt1=TimeCurrent();
Print("Need trailingstop BUY "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
if(OrderType()==OP_SELL){
RefreshRates();
if(ND(OrderOpenPrice()-Ask)>=ND(Point*TrailingStopStart)){
slts=ND(Ask+Point*TrailingStop);
if(!IsTradeContextBusy()){
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
tCheck=GetLastError();
Print("Error trailingstop SELL "+OrderTicket()+" "+fMyErDesc(tCheck));
RetErr=-1;
}
}
}
else{
RetErr=-2;
static int lt2=0;
if(lt2+15<TimeCurrent()){
lt2=TimeCurrent();
Print("Need trailingstop SELL "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
}
}
return(RetErr);
}
int fBreakEvenToLevel(){
int RetErr=0;
double slts;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY){
RefreshRates();
if(ND(Bid-OrderOpenPrice())>=ND(Point*BreakEvenStart)){
slts=ND(OrderOpenPrice()+Point*(BreakEvenStart-BreakEvenLevel));
if(ND(OrderStopLoss())<slts){
if(!IsTradeContextBusy()){
if(ND(OrderStopLoss())<slts){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
int tCheck=GetLastError();
Print("Error breakeven BUY "+OrderTicket()+" "+fMyErDesc(tCheck));
RetErr=-1;
}
}
}
else{
RetErr=-2;
static int lt1=0;
if(lt1+15<TimeCurrent()){
lt1=TimeCurrent();
Print("Need breakeven BUY "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
if(OrderType()==OP_SELL){
RefreshRates();
if(ND(OrderOpenPrice()-Ask)>=ND(Point*BreakEvenStart)){
slts=ND(OrderOpenPrice()-Point*(BreakEvenStart-BreakEvenLevel));
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(!IsTradeContextBusy()){
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
tCheck=GetLastError();
Print("Error breakeven SELL "+OrderTicket()+" "+fMyErDesc(tCheck));
RetErr=-1;
}
}
}
else{
RetErr=-2;
static int lt2=0;
if(lt2+15<TimeCurrent()){
lt2=TimeCurrent();
Print("Need breakeven SELL "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
}
}
}
return(RetErr);
}
int fOrderCloseMarket(bool aCloseBuy=true,bool aCloseSell=true){
int tErr=0;
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if((OrderMagicNumber()==Magic_N && CloseOnRev) || (CloseOnRevSSOrders && OrderMagicNumber()==ssMagic_N)){
if(OrderType()==OP_BUY && aCloseBuy){
RefreshRates();
if(!IsTradeContextBusy()){
if(!OrderClose(OrderTicket(),OrderLots(),ND(Bid),Slippage,CLR_NONE)){
int tCheck=GetLastError();
Print("Error close BUY "+OrderTicket()+" "+fMyErDesc(tCheck));
tErr=-1;
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
if(OrderType()==OP_SELL && aCloseSell){
RefreshRates();
if(!IsTradeContextBusy()){
if(!OrderClose(OrderTicket(),OrderLots(),ND(Ask),Slippage,CLR_NONE)){
tCheck=GetLastError();
Print("Error close SELL "+OrderTicket()+" "+fMyErDesc(tCheck));
tErr=-1;
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
}
}
}
}
return(tErr);
}
int fOrderCloseMarket2(bool aCloseBuy=true,bool aCloseSell=true){
int tErr=0;
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if((OrderMagicNumber()==Magic_N && CloseSignal) || (CloseSignalSSOrders && OrderMagicNumber()==ssMagic_N)){
if(OrderType()==OP_BUY && aCloseBuy){
RefreshRates();
if(!IsTradeContextBusy()){
if(!OrderClose(OrderTicket(),OrderLots(),ND(Bid),Slippage,CLR_NONE)){
int tCheck=GetLastError();
Print("Error close BUY "+OrderTicket()+" "+fMyErDesc(tCheck));
tErr=-1;
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
if(OrderType()==OP_SELL && aCloseSell){
RefreshRates();
if(!IsTradeContextBusy()){
if(!OrderClose(OrderTicket(),OrderLots(),ND(Ask),Slippage,CLR_NONE)){
tCheck=GetLastError();
Print("Error close SELL "+OrderTicket()+" "+fMyErDesc(tCheck));
tErr=-1;
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
}
}
}
}
return(tErr);
}
double fGetLotsSimple(int aTradeType){
// fGetLotsSimple(OP_BUY);
// fGetLotsSimple(OP_SELL);
if(AccountFreeMarginCheck(Symbol(),aTradeType,gLots)<=0){
return(-1);
}
if(GetLastError()==134){
return(-2);
}
return(gLots);
}
double ND(double v){return(NormalizeDouble(v,Digits));}
int fMarketOrdersTotal(int & aBuyCount,int & aSellCount){
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==Magic_N || (CountSSOrders && OrderMagicNumber()==ssMagic_N)){
switch (OrderType()){
case OP_BUY:
aBuyCount++;
gLastBuyPrice=OrderOpenPrice();
gLastBuyLots=OrderLots();
break;
case OP_SELL:
aSellCount++;
gLastSellPrice=OrderOpenPrice();
gLastSellLots=OrderLots();
break;
}
}
}
}
else{
return(-1);
}
}
return(aBuyCount+aSellCount);
}
int fOrderOpenBuy(){
// fOrderOpenBuy();
RefreshRates();
double lts=fGetLotsSimple(OP_BUY);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=ND(Ask-Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(Ask+Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderSend(Symbol(),OP_BUY,lts,ND(Ask),Slippage,slts,tpts,NULL,Magic_N,0,CLR_NONE);
if(irv>0){
LastBuyTime=iTime(NULL,TimeFrame,0);
LastSellTime=0;
return(irv);
}
else{
int tCheck=GetLastError();
Print ("Error open BUY. "+fMyErDesc(tCheck));
return(-1);
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need open buy. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(lt3!=iTime(NULL,TimeFrame,0)){
lt3=iTime(NULL,TimeFrame,0);
if(lts==-1)Print("Need open buy. No money");
if(lts==-2)Print("Need open buy. Wrong lots size");
}
return(-3);
}
}
int fOrderOpenSell(){
// fOrderOpenSell();
RefreshRates();
double lts=fGetLotsSimple(OP_SELL);
if(lts>0){
if(!IsTradeContextBusy()){
double slts;
slts=ND(Bid+Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(Bid-Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderSend(Symbol(),OP_SELL,lts,ND(Bid),Slippage,slts,tpts,NULL,Magic_N,0,CLR_NONE);
if(irv>0){
LastSellTime=iTime(NULL,TimeFrame,0);
LastBuyTime=0;
return(irv);
}
else{
int tCheck=GetLastError();
Print ("Error open SELL. "+fMyErDesc(tCheck));
return(-1);
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need open sell. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(lt3!=iTime(NULL,TimeFrame,0)){
lt3=iTime(NULL,TimeFrame,0);
if(lts==-1)Print("Need open sell. No money");
if(lts==-2)Print("Need open sell. Wrong lots size");
}
return(-3);
}
}
string fMyErDesc(int aErrNum){
// fMyErDesc(GetLastError());
string pref="Err Num: "+aErrNum+" - ";
switch(aErrNum){
case 0: return(pref+"NO ERROR");
case 1: return(pref+"NO RESULT");
case 2: return(pref+"COMMON ERROR");
case 3: return(pref+"INVALID TRADE PARAMETERS");
case 4: return(pref+"SERVER BUSY");
case 5: return(pref+"OLD VERSION");
case 6: return(pref+"NO CONNECTION");
case 7: return(pref+"NOT ENOUGH RIGHTS");
case 8: return(pref+"TOO FREQUENT REQUESTS");
case 9: return(pref+"MALFUNCTIONAL TRADE");
case 64: return(pref+"ACCOUNT DISABLED");
case 65: return(pref+"INVALID ACCOUNT");
case 128: return(pref+"TRADE TIMEOUT");
case 129: return(pref+"INVALID PRICE");
case 130: return(pref+"INVALID STOPS");
case 131: return(pref+"INVALID TRADE VOLUME");
case 132: return(pref+"MARKET CLOSED");
case 133: return(pref+"TRADE DISABLED");
case 134: return(pref+"NOT ENOUGH MONEY");
case 135: return(pref+"PRICE CHANGED");
case 136: return(pref+"OFF QUOTES");
case 137: return(pref+"BROKER BUSY");
case 138: return(pref+"REQUOTE");
case 139: return(pref+"ORDER LOCKED");
case 140: return(pref+"LONG POSITIONS ONLY ALLOWED");
case 141: return(pref+"TOO MANY REQUESTS");
case 145: return(pref+"TRADE MODIFY DENIED");
case 146: return(pref+"TRADE CONTEXT BUSY");
case 147: return(pref+"TRADE EXPIRATION DENIED");
case 148: return(pref+"TRADE TOO MANY ORDERS");
//---- mql4 run time errors
case 4000: return(pref+"NO MQLERROR");
case 4001: return(pref+"WRONG FUNCTION POINTER");
case 4002: return(pref+"ARRAY INDEX OUT OF RANGE");
case 4003: return(pref+"NO MEMORY FOR FUNCTION CALL STACK");
case 4004: return(pref+"RECURSIVE STACK OVERFLOW");
case 4005: return(pref+"NOT ENOUGH STACK FOR PARAMETER");
case 4006: return(pref+"NO MEMORY FOR PARAMETER STRING");
case 4007: return(pref+"NO MEMORY FOR TEMP STRING");
case 4008: return(pref+"NOT INITIALIZED STRING");
case 4009: return(pref+"NOT INITIALIZED ARRAYSTRING");
case 4010: return(pref+"NO MEMORY FOR ARRAYSTRING");
case 4011: return(pref+"TOO LONG STRING");
case 4012: return(pref+"REMAINDER FROM ZERO DIVIDE");
case 4013: return(pref+"ZERO DIVIDE");
case 4014: return(pref+"UNKNOWN COMMAND");
case 4015: return(pref+"WRONG JUMP");
case 4016: return(pref+"NOT INITIALIZED ARRAY");
case 4017: return(pref+"DLL CALLS NOT ALLOWED");
case 4018: return(pref+"CANNOT LOAD LIBRARY");
case 4019: return(pref+"CANNOT CALL FUNCTION");
case 4020: return(pref+"EXTERNAL EXPERT CALLS NOT ALLOWED");
case 4021: return(pref+"NOT ENOUGH MEMORY FOR RETURNED STRING");
case 4022: return(pref+"SYSTEM BUSY");
case 4050: return(pref+"INVALID FUNCTION PARAMETERS COUNT");
case 4051: return(pref+"INVALID FUNCTION PARAMETER VALUE");
case 4052: return(pref+"STRING FUNCTION INTERNAL ERROR");
case 4053: return(pref+"SOME ARRAY ERROR");
case 4054: return(pref+"INCORRECT SERIES ARRAY USING");
case 4055: return(pref+"CUSTOM INDICATOR ERROR");
case 4056: return(pref+"INCOMPATIBLE ARRAYS");
case 4057: return(pref+"GLOBAL VARIABLES PROCESSING ERROR");
case 4058: return(pref+"GLOBAL VARIABLE NOT FOUND");
case 4059: return(pref+"FUNCTION NOT ALLOWED IN TESTING MODE");
case 4060: return(pref+"FUNCTION NOT CONFIRMED");
case 4061: return(pref+"SEND MAIL ERROR");
case 4062: return(pref+"STRING PARAMETER EXPECTED");
case 4063: return(pref+"INTEGER PARAMETER EXPECTED");
case 4064: return(pref+"DOUBLE PARAMETER EXPECTED");
case 4065: return(pref+"ARRAY AS PARAMETER EXPECTED");
case 4066: return(pref+"HISTORY WILL UPDATED");
case 4067: return(pref+"TRADE ERROR");
case 4099: return(pref+"END OF FILE");
case 4100: return(pref+"SOME FILE ERROR");
case 4101: return(pref+"WRONG FILE NAME");
case 4102: return(pref+"TOO MANY OPENED FILES");
case 4103: return(pref+"CANNOT OPEN FILE");
case 4104: return(pref+"INCOMPATIBLE ACCESS TO FILE");
case 4105: return(pref+"NO ORDER SELECTED");
case 4106: return(pref+"UNKNOWN SYMBOL");
case 4107: return(pref+"INVALID PRICE PARAM");
case 4108: return(pref+"INVALID TICKET");
case 4109: return(pref+"TRADE NOT ALLOWED");
case 4110: return(pref+"LONGS NOT ALLOWED");
case 4111: return(pref+"SHORTS NOT ALLOWED");
case 4200: return(pref+"OBJECT ALREADY EXISTS");
case 4201: return(pref+"UNKNOWN OBJECT PROPERTY");
case 4202: return(pref+"OBJECT DOES NOT EXIST");
case 4203: return(pref+"UNKNOWN OBJECT TYPE");
case 4204: return(pref+"NO OBJECT NAME");
case 4205: return(pref+"OBJECT COORDINATES ERROR");
case 4206: return(pref+"NO SPECIFIED SUBWINDOW");
case 4207: return(pref+"SOME OBJECT ERROR");
default: return(pref+"WRONG ERR NUM");
}
}
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
---