Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Road_Map_expert_v04
//+------------------------------------------------------------------+
//| Road_Map_expert_v04.mq4 |
//| íà÷. 10/04/2016 |
//+------------------------------------------------------------------+
#property copyright "Inkov Evgeni"
#property link "ew123@mail.ru"
//+------------------------------------------------------------------+
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
#define Razm_Mas_Prizn 7
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES TF = PERIOD_M1;
input string s1_______________ = "------------------------------------";
input double Lots = 0;
input double Proc_Lot = 10;
input bool Risk_from_Balance = true;
input string s2_______________ = "------------------------------------";
input int TP = 1700;
input int SL = 204;
input string s3_______________ = "------------------------------------";
input int Minute_start_trade = 0;
input int Minute_end_trade = 1440;
input string s4_______________ = "------------------------------------";
input int Magic = 1234568;
input int Slippage = 50;
input string s5_______________ = "------------------------------------";
input bool Sound = true;
input bool Inf_RUS = true;
input bool Trade = true;
input string s6_______________ = "====================================";
input int Max_Bars = 300;
input color clr_Series_Up = clrBlue;
input color clr_Series_Dw = clrPurple;
input color clr_Tail_ZZ = clrGreen;
input color clr_Fibo = clrDarkOrange;
input color clr_Prob_UP = clrGreen;
input color clr_Prob_DW = clrRed;
input bool On_Nom_Series = true;
input bool On_Fibo = true;
//+------------------------------------------------------------------+
double lot;
double min_l, max_l;
int dig_lot;
int koef_dig;
bool out_obj;
string pref="RM_";
string com_err="";
int mas_ord[6];// 0-5 ïî òèïó - êîë.îðäåðîâ
int kol_ord, kol_otl, pred_kol_ord=0, pred_kol_otl=0;
int pred_spread,spread,max_spread;
string ss="";
bool pause;
double StopLevel, max_StopLevel;
string sdv=" ";
//......................
double pred_Bid,pred_Ask,tek_Bid,tek_Ask;
int st_;
bool no_connect;
datetime na4_open_ord, end_open_ord;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int Mas_Fract[]; // çíà÷.ôðàêòàëà: 1,2,3-ìàêñ, 0 - íåò ôðàêò, -1,-2,-3 - ìèí. (1-èñòèíûé ôðàêò., 2- äîï., 3-íà÷àëî)
int M_Bars;
int Sgat_ZZ_0[][Razm_Mas_Prizn];
// 0 - íîìåð áàðà,
// 1 - çíà÷.ôðàêò. êàê â Mas_Fract,
// 2 - (1 - èìï.âîëíà ââåðõ, -1 - èìï.âîëíà âíèç, 0 - êîðð.âîëíà)
// 3 - (1 - ñëîæ.êîðð.ââåðõ, -1 - ñëîæ.êîðð.âíèç, 0 - íåò ñëîæ.êîðð.), - ÷èñëî - êîë.âîëí êîððåêöèè
// 4 - (1 - ñåðèÿ âîëí ââåðõ, -1 - ñåðèÿ âîëí âíèç, 0) - ÷èñëî - êîë.âîëí â ñåðèè
// 5 - ïðîöåíò öåíîâîãî äèàïàçîíà òåê.âîëíû îò ïðåä. âîëíû *100
// 6 - ïðîöåíò âðåìåíîãî äèàïàçîíà òåê. âîëíû îò ïðåä. âîëíû *100
datetime time_end_urov;
bool prob_up,prob_dw;
double sl_Buy_prob,sl_Sell_prob;
double pr_BS_H=0,pr_SS_H=0;
datetime time_bar0;
//+------------------------------------------------------------------+
int OnInit()
{
M_Bars=0;
//.............................
time_end_urov=0;
//......................................
st_=55;
//......................................
if (UninitializeReason()!=REASON_CHARTCHANGE)
{
pred_spread=0;
max_spread=0;
max_StopLevel=0;
}
//.............................................
out_obj=!IsTesting() || IsVisualMode();
//.............................................
min_l=MarketInfo(Symbol(),MODE_MINLOT);
max_l=MarketInfo(Symbol(),MODE_MAXLOT);
//.............................................
koef_dig=1;
if (Digits==5 || Digits==3)koef_dig=10;
//.............................................
double n_lot=MarketInfo(Symbol(),MODE_LOTSTEP);
if (n_lot>0)
dig_lot=(int)NormalizeDouble(MathLog(1.0/n_lot)/MathLog(10.0),0);
else
dig_lot=2;
//.............................................
EventSetTimer(1);
//.............................................
OnTick();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
remove_objects(pref);
EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer()
{
if (IsConnected())
no_connect=false;
else
{
put_txt(pref+IntegerToString(st_), RusLat(Inf_RUS,"Íåò ñâÿçè !","No connection !"),200,100,clrRed, 10);
no_connect=true;
}
}
//--------------------------------
bool Stop_Expert()
{
if (!IsExpertEnabled())
{
put_txt(pref+IntegerToString(st_), RusLat(Inf_RUS,"Îòæàòà êíîïêà \"Àâòî-òîðãîâëÿ\" !","Button is pressed \"AutoTrading\" !"),200,100,clrRed, 10);
return(1);
}
if (!IsTradeAllowed())
{
put_txt(pref+IntegerToString(st_), RusLat(Inf_RUS,"Ñîâåòíèêó çàïðåùåíî òîðãîâàòü !","Expert prohibited from trading !"),200,100,clrRed, 10);
return(1);
}
return(0);
if (!IsConnected())
{
put_txt(pref+IntegerToString(st_), RusLat(Inf_RUS,"Íåò ñâÿçè !","No connection !"),200,100,clrRed, 10);
return(1);
}
return(0);
}
//---------------------------------
void OnTick()
{
if (Max_Bars>0)
M_Bars=MathMin(Max_Bars,iBars(_Symbol,0));
else
M_Bars=iBars(_Symbol,0);
ArrayResize(Mas_Fract,M_Bars);
ArrayResize(Sgat_ZZ_0,M_Bars);
if (Minute_start_trade>Minute_end_trade)return;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bool New_Bar=false;
if (time_bar0!=iTime(_Symbol,TF,0))
{
New_Bar=true;
time_bar0=iTime(_Symbol,TF,0);
}
if (Period()<=TF)Form_ZZ(TF, Sgat_ZZ_0, New_Bar);
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
na4_open_ord = iTime(Symbol(),PERIOD_D1,0) + Minute_start_trade*60;
end_open_ord = iTime(Symbol(),PERIOD_D1,0) + Minute_end_trade*60;
//.............................
pred_spread=spread;
spread=(int)MathRound((Ask-Bid)/Point);
//.............................
if (out_obj)
{
if (Stop_Expert())return;
if (no_connect)return;
StopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL);
if (StopLevel>max_StopLevel)max_StopLevel=StopLevel;
//.....................
if (spread>max_spread)max_spread=spread;
}
//.............................
if (Bid==0)
{
if (out_obj)Out_Comm();
return;
}
//........................................................
com_err=""; // îáíóëèòü ñòðîêó êîììåíòàðèÿ îøèáîê îòêðûòèÿ îðäåðîâ
//........................................................
put_mas_ord();
//........................................................
bool open_BS_H=false,open_SS_H=false;
if (out_obj)opred_napravl_start(open_BS_H,open_SS_H,pr_BS_H,pr_SS_H);
//........................................................
if (Trade)
{
pause=true;
if (TimeCurrent()>=na4_open_ord && TimeCurrent()<end_open_ord)
{
pause=false;
if (!out_obj)opred_napravl_start(open_BS_H,open_SS_H,pr_BS_H,pr_SS_H);
//....................................
if(open_BS_H)
if (mas_ord[OP_BUY]==0 && mas_ord[OP_SELL]==0)
{
opred_begin_lot();
Open_ord_Buy ();
}
//.......................................
if(open_SS_H)
if (mas_ord[OP_BUY]==0 && mas_ord[OP_SELL]==0)
{
opred_begin_lot();
Open_ord_Sell();
}
}
}
if (out_obj)
{
opred_begin_lot();
Out_Comm(); // âûâîä êîììåíòàðèÿ
if (com_err!="")Comment(com_err);
}
}
//+------------------------------------------------------------------+
void opred_napravl_start(bool& open_buy, bool& open_sell, double& sl_buy, double& sl_sell)
{
open_buy =false;
open_sell=false;
RefreshRates();
if (prob_up && ND(sl_buy)!=ND(sl_Buy_prob))
{
open_buy=true;
sl_buy=sl_Buy_prob;
}
//.....................................
if (prob_dw && ND(sl_sell)!=ND(sl_Sell_prob))
{
open_sell=true;
sl_sell=sl_Sell_prob;
}
}
//--------------------------
void opred_begin_lot()
{
if (Lots>0) // îïðåäåëèòü íà÷àëüíûé ëîò
lot=Ogran_min_lot(NDL(Lots));
else
lot=Ogran_min_lot(GetLot(Proc_Lot));
}
//------------------------------
double GetLot(double proc)
{
double free_magrin;
if (Risk_from_Balance)
free_magrin = AccountBalance();
else
free_magrin = AccountFreeMargin();
double lot1 = NDL(free_magrin * proc/100000.0);
return (lot1);
}
//---------------------------------------------------------------
double Ogran_min_lot(double lot1)
{
if (lot1 < min_l)lot1 = min_l;
return(lot1);
}
//---------------------------------------------------------------
double Ogran_max_lot(double lot1)
{
if (lot1 > max_l)lot1 = max_l;
return(lot1);
}
//---------------------------------------------------------------
void put_mas_ord()
{ // ïîñ÷èòàòü êîë. îðäåðîâ
ArrayInitialize(mas_ord,0);
kol_ord=0;
kol_otl=0;
bool M;
for(int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS)==true)
{
if (!Good_ord(i,MODE_TRADES))continue;
if (OrderStopLoss()==0)
if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
M=OrderModify(OrderTicket(),OrderOpenPrice(),ND(OrderOpenPrice()-SL*Point),OrderTakeProfit(),0);
else
M=OrderModify(OrderTicket(),OrderOpenPrice(),ND(OrderOpenPrice()+SL*Point),OrderTakeProfit(),0);
//...............................
if (OrderTakeProfit()==0)
if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
M=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ND(OrderOpenPrice()+TP*Point),0);
else
M=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ND(OrderOpenPrice()-TP*Point),0);
//...............................
if (OrderType()>1)
kol_otl++;
else
kol_ord++;
mas_ord[OrderType()]++;
}
//..........................................
if (out_obj && Sound)
if(kol_ord!=pred_kol_ord)
{
PlaySound("news.wav");
pred_kol_ord=kol_ord;
}
else
if(kol_otl!=pred_kol_otl)
{
if(kol_otl>pred_kol_otl)
PlaySound("expert.wav");
else
PlaySound("timeout.wav");
pred_kol_otl=kol_otl;
}
}
//-----------------------------------------------
bool Good_ord(int i, int mode)
{
if (!OrderSelect(i,SELECT_BY_POS,mode))return(0);
if (OrderSymbol()!=Symbol())return(0);
if (OrderMagicNumber()==Magic)return(1);
return(0);
}
//---------------------
double ND(double n)
{
return(NormalizeDouble(n,Digits));
}
//---------------------------------------------------------------
double NDL(double n)
{
return(NormalizeDouble(n,dig_lot));
}
//---------------------------------------------------------------
double ND2(double n)
{
return(NormalizeDouble(n,2));
}
//---------------------------------------------------------------
void Out_Comm()
{ // âûâîä êîììåíòàðèÿ
string s="",s1="";
int st=st_;
//..........................................................
if (Trade || IsTesting())
{
s1="Prof= "+DoubleToStr(AccountProfit(),2)+" => ";
if(AccountMargin()>0)
s1=s1+DoubleToStr(AccountEquity()/AccountMargin()*100.0,2)+" %";
else
s1=s1+"0.00 %";
}
else
s1="Trade close";
put_txt(pref+IntegerToString(st), (pause?"PAUSE... ":"")+s1,10,st,clrMagenta, 10); st-=15;
//..........................................................
put_txt(pref+IntegerToString(st), "TF= "+str_TF(TF)+" Lot = "+DoubleToStr(lot,dig_lot), 10,st,clrMagenta, 10); st-=15;
put_txt(pref+IntegerToString(st), "TP = "+IntegerToString(TP) +" SL = "+IntegerToString(SL),10,st,clrBlue, 10); st-=15;
put_txt(pref+IntegerToString(st), "Time Trade= "+TimeToString(na4_open_ord,TIME_MINUTES) +" - "+
TimeToString(end_open_ord,TIME_MINUTES),10,st,clrBlue, 10); st-=15;
}
//-------------------------------------------
void put_txt(string name, string vol, int X,int Y,color col1, int shr)
{
if (ObjectFind(name)<0)ObjectCreate(name, OBJ_LABEL, 0,0,0);
ObjectSet(name, OBJPROP_CORNER, 3);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
ObjectSetText(name, vol, shr, "Arial Black", col1);
}
//----------------------------------------------
string nom_str(double n, bool plus=false, bool plus0=false)
{
if (ND2(n)<0)return(" - "+DoubleToString(-n,2));
if (ND2(n)>0)
{
if (plus)return(" + "+DoubleToString(n,2));
return(DoubleToString(n,2));
}
if (plus0)return(" + 0.00");
return("0.00");
}
//------------------------------------------
void remove_objects(string PreName)
{
string Obj_Name,Head;
for(int k=ObjectsTotal()-1; k>=0; k--)
{
Obj_Name=ObjectName(k);
Head=StringSubstr(Obj_Name,0,StringLen(PreName));
if (Head==PreName)ObjectDelete(Obj_Name);
}
}
//----------------------------------------------
void Open_ord_Buy()
{ // îòêðûòü îðäåð Buy
RefreshRates();
double pr=Ask;
ust_order(Symbol(), OP_BUY, lot, ND(pr), Slippage, 0, 0, "", Magic);
put_mas_ord();
}
//-------------------------------------------
void Open_ord_Sell()
{ // îòêðûòü îðäåð Sell
RefreshRates();
double pr=Bid;
ust_order(Symbol(), OP_SELL, lot, ND(pr), Slippage, 0, 0, "", Magic);
put_mas_ord();
}
//-------------------------------------------
int ust_order(string sym,int Tip, double lot1, double pr, int slippage, double sl, double tp, string com2, int mag, int dt=0, color col=clrNONE)
{
double tek_lot;
double ust_lot=lot1;
int err=0;
while (ust_lot>0)
{
tek_lot=Ogran_max_lot(ust_lot);
err = OrderSend(sym, Tip, tek_lot, pr, slippage, sl, tp, com2, mag, dt, col);
if (err<0)break;
ust_lot-=tek_lot;
}
if (err<0)IsError(tip_str(Tip)+": pr="+DoubleToStr(pr,Digits)+" sl="+DoubleToStr(sl,Digits)+" tp="+DoubleToStr(tp,Digits));
return(err);
}
//-----------------------------------------------
string tip_str (int tip)
{
switch(tip)
{
case 0: return("Buy");
case 1: return("Sell");
case 2: return("BuyLimit");
case 3: return("SellLimit");
case 4: return("BuyStop");
case 5: return("SellStop");
}
return("?");
}
//-----------------------------------------------
int IsError(string Whose)
{
int ierr = GetLastError();
bool result = (ierr > 1);
if(result)com_err=com_err+Whose+ " error = "+ IntegerToString(ierr)+ "; desc = "+ error(ierr)+"\n";
return(ierr);
}
//-----------------------------------------------
string error(int eer)
{
string er;
switch(eer)
{
case 0: break;
case 1: er="Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"; break;
case 2: er="Îáùàÿ îøèáêà"; break;
case 3: er="Íåïðàâèëüíûå ïàðàìåòðû"; break;
case 4: er="Òîðãîâûé ñåðâåð çàíÿò"; break;
case 5: er="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break;
case 6: er="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break;
case 7: er="Íåäîñòàòî÷íî ïðàâ"; break;
case 8: er="Ñëèøêîì ÷àñòûå çàïðîñû"; break;
case 9: er="Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"; break;
case 64: er="Ñ÷åò çàáëîêèðîâàí"; break;
case 65: er="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break;
case 128: er="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"; break;
case 129: er="Íåïðàâèëüíàÿ öåíà"; break;
case 130: er="Íåïðàâèëüíûå ñòîïû"; break;
case 131: er="Íåïðàâèëüíûé îáúåì"; break;
case 132: er="Ðûíîê çàêðûò"; break;
case 133: er="Òîðãîâëÿ çàïðåùåíà"; break;
case 134: er="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break;
case 135: er="Öåíà èçìåíèëàñü"; break;
case 136: er="Íåò öåí"; break;
case 137: er="Áðîêåð çàíÿò"; break;
case 138: er="Íîâûå öåíû - Ðåêâîò"; break;
case 139: er="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break;
case 140: er="Ðàçðåøåíà òîëüêî ïîêóïêà"; break;
case 141: er="Ñëèøêîì ìíîãî çàïðîñîâ"; break;
case 145: er="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break;
case 146: er="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break;
case 147: er="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break;
case 148: er="Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà "; break;
//----
case 4000: er="Íåò îøèáêè"; break;
case 4001: er="Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè"; break;
case 4002: er="Èíäåêñ ìàññèâà - âíå äèàïàçîíà"; break;
case 4003: er="Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé"; break;
case 4004: er="Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà"; break;
case 4005: er="Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ"; break;
case 4006: er="Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà"; break;
case 4007: er="Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè"; break;
case 4008: er="Íåèíèöèàëèçèðîâàííàÿ ñòðîêà"; break;
case 4009: er="Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå"; break;
case 4010: er="Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà"; break;
case 4011: er="Ñëèøêîì äëèííàÿ ñòðîêà"; break;
case 4012: er="Îñòàòîê îò äåëåíèÿ íà íîëü"; break;
case 4013: er="Äåëåíèå íà íîëü"; break;
case 4014: er="Íåèçâåñòíàÿ êîìàíäà"; break;
case 4015: er="Íåïðàâèëüíûé ïåðåõîä"; break;
case 4016: er="Íåèíèöèàëèçèðîâàííûé ìàññèâ"; break;
case 4017: er="Âûçîâû DLL íå ðàçðåøåíû"; break;
case 4018: er="Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó"; break;
case 4019: er="Íåâîçìîæíî âûçâàòü ôóíêöèþ"; break;
case 4020: er="eÂûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû"; break;
case 4021: er="Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè"; break;
case 4022: er="Ñèñòåìà çàíÿòà"; break;
case 4050: er="Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè"; break;
case 4051: er="Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè"; break;
case 4052: er="Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè"; break;
case 4053: er="Îøèáêà ìàññèâà"; break;
case 4054: er="Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè"; break;
case 4055: er="Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà"; break;
case 4056: er="Ìàññèâû íåñîâìåñòèìû"; break;
case 4057: er="Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ"; break;
case 4058: er="Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà"; break;
case 4059: er="Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå"; break;
case 4060: er="Ôóíêöèÿ íå ïîäòâåðæäåíà"; break;
case 4061: er="Îøèáêà îòïðàâêè ïî÷òû"; break;
case 4062: er="Îæèäàåòñÿ ïàðàìåòð òèïà string"; break;
case 4063: er="Îæèäàåòñÿ ïàðàìåòð òèïà integer"; break;
case 4064: er="Îæèäàåòñÿ ïàðàìåòð òèïà double"; break;
case 4065: er=" êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ"; break;
case 4066: er="Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ"; break;
case 4067: er="Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè"; break;
case 4099: er="Êîíåö ôàéëà"; break;
case 4100: er="Îøèáêà ïðè ðàáîòå ñ ôàéëîì"; break;
case 4101: er="Íåïðàâèëüíîå èìÿ ôàéëà"; break;
case 4102: er="Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ"; break;
case 4103: er="Íåâîçìîæíî îòêðûòü ôàéë"; break;
case 4104: er="Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó"; break;
case 4105: er="Íè îäèí îðäåð íå âûáðàí"; break;
case 4106: er="Íåèçâåñòíûé ñèìâîë"; break;
case 4107: er="Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè"; break;
case 4108: er="Íåâåðíûé íîìåð òèêåòà"; break;
case 4109: er="Òîðãîâëÿ íå ðàçðåøåíà"; break;
case 4110: er="Äëèííûå ïîçèöèè íå ðàçðåøåíû"; break;
case 4111: er="Êîðîòêèå ïîçèöèè íå ðàçðåøåíû"; break;
case 4200: er="Îáúåêò óæå ñóùåñòâóåò"; break;
case 4201: er="Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà"; break;
case 4202: er="Îáúåêò íå ñóùåñòâóåò"; break;
case 4203: er="Íåèçâåñòíûé òèï îáúåêòà"; break;
case 4204: er="Íåò èìåíè îáúåêòà"; break;
case 4205: er="Îøèáêà êîîðäèíàò îáúåêòà"; break;
case 4206: er="Íå íàéäåíî óêàçàííîå ïîäîêíî"; break;
case 4207: er="Îøèáêà ïðè ðàáîòå ñ îáúåêòîì"; break;
default: er="Íåèçâåñòíàÿ îøèáêà";
}
return(er);
}
//==============================================================
string RusLat(bool inf_rus, string sR, string sL)
{
if (inf_rus)return(sR);
return(sL);
}
//-----------------------------------------------
void Close_ord(int tip=-1)
{
bool C,usl=true,CL=false;
while (usl)
{
usl=false;
for(int i=0; i<OrdersTotal(); i++)
{
if (!Good_ord(i,MODE_TRADES))continue;
if(OrderType()==OP_BUY && (tip==OP_BUY || tip==-1))
{
RefreshRates();
C=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage);
CL=true;
usl=true;
}
if (OrderType()==OP_SELL && (tip==OP_SELL || tip==-1))
{
RefreshRates();
C=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage);
CL=true;
usl=true;
}
}
}
if(CL)put_mas_ord();
}
//-----------------------------------------------
string str_TF(int n)
{
if (n==0)n=Period();
switch(n)
{
case PERIOD_M1: return ("M1");
case PERIOD_M5: return ("M5");
case PERIOD_M15: return ("M15");
case PERIOD_M30: return ("M30");
case PERIOD_H1: return ("H1");
case PERIOD_H4: return ("H4");
case PERIOD_D1: return ("D1");
case PERIOD_W1: return ("W1");
case PERIOD_MN1: return ("MN1");
}
return("TF?");
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void Form_ZZ(int TF1,int& mas_sgat[][], bool new_bar)
{
int n_sgat=0;
Find_Fractal(TF1,new_bar);
Dorab_Fract(TF1,mas_sgat, n_sgat,new_bar);
Opred_Impuls_Wave(TF1,mas_sgat, n_sgat);
Opred_Corr_wave(TF1,mas_sgat, n_sgat);
Opred_Series_Wave(TF1,mas_sgat, n_sgat);
if (out_obj)
{
Out_ZZ(TF1, mas_sgat, n_sgat);
if (On_Nom_Series)Out_Nom_Series(TF1, mas_sgat, n_sgat);
}
}
//-------------------------------------
void Opred_Series_Wave(int TF1, int& mas_sgat[][], int kol_sgat)
{ // íàéòè ñåðèè âîëí
int imp,impS=0,impS_beg=0,tek_series=0,kol_wave=0,b1,b0,b1S=0,b0S=0,b1S_beg=0,b0S_beg=0;
double H,L,HS=0,LS=0;
double HS_beg=0,LS_beg=0;
double HS_prob,LS_prob;
int n=0,m=0;
for (int i=kol_sgat-1;i>=1;i--)
{
prob_up=0;
prob_dw=0;
imp = mas_sgat[i][2]; // òåêóùàÿ èìïóëüñíàÿ/êîðð. âîëíà; 1 - èìï.âîëíà ââåðõ, -1 - èìï.âîëíà âíèç, 0 - êîðð.âîëíà
if (imp!=0) // íàéäåíà èìïóëüñíàÿ âîëíà
{
b0=mas_sgat[i][0];
b1=mas_sgat[i-1][0];
if (imp>0)
{
L=iLow (_Symbol,TF1,b0);
H=iHigh(_Symbol,TF1,b1);
}
else
{
L=iLow (_Symbol,TF1,b1);
H=iHigh(_Symbol,TF1,b0);
}
prob_up=impS<0 && ND(H)>ND(HS); // ïðîáîé ââåðõ
prob_dw=impS>0 && ND(L)<ND(LS); // ïðîáîé âíèç
if (prob_up)
{
HS_prob=HS;
if (out_obj)Out_TL(n,iTime(_Symbol,TF1,b0S), HS, iTime(_Symbol,TF1,b1)+2*TF1*60, HS, "prob_U", clr_Prob_UP, TF1, 1,2);
n++;
}
if (prob_dw)
{
LS_prob=LS;
if (out_obj)Out_TL(m,iTime(_Symbol,TF1,b0S), LS, iTime(_Symbol,TF1,b1)+2*TF1*60, LS, "prob_D", clr_Prob_DW, TF1, 1,2);
m++;
}
if (HS==0 || prob_up || prob_dw) // èëè âîëí åù¸ íå áûëî èëè ïðîáîé ââåðõ/âíèç
{
HS=H;
LS=L;
b0S=b0;
b1S=b1;
impS=imp;
HS_beg=H;
LS_beg=L;
sl_Sell_prob=H;
sl_Buy_prob =L;
b0S_beg=b0;
b1S_beg=b1;
impS_beg=imp;
tek_series=imp; // 1 èëè -1
kol_wave=0;
}
else
if ((impS>0 && ND(H)>ND(HS)) ||
(impS<0 && ND(L)<ND(LS)))// ïðåâûøåíèå ââåðõ èëè âíèç
{ // îáíîâëÿåì èñõîäíóþ âîëíó
HS=H;
LS=L;
b0S=b0;
b1S=b1;
}
}
kol_wave++;
mas_sgat[i][4]=tek_series*kol_wave;
}
if (out_obj)
{
Del_extra_obj(TF1,"prob_U",n+1);
Del_extra_obj(TF1,"prob_D",m+1);
if (On_Fibo)Out_Fibo(TF1,impS_beg,b0S_beg,b1S_beg,LS_beg,HS_beg);
if (Sound)
{
datetime t=iTime(_Symbol,TF1,b0S);
if (prob_up && t>time_end_urov)
{
time_end_urov=t;
PlaySound("alert.wav");
}
if (prob_dw && t>time_end_urov)
{
time_end_urov=t;
PlaySound("email.wav");
}
}
}
}
//-------------------------------------
void Out_Fibo(int TF1,int dir,int b0, int b1, double L,double H)
{
if (dir>0)
{
double p=L;
L=H;
H=p;
}
string name=pref+str_TF(TF1)+"_Fibo";
double d=MathCeil(0.1*((1.0*WindowBarsPerChart()-WindowFirstVisibleBar())/5.0+b1));
b0=b1-(int)d;
datetime t0;;
if (b0<0)
t0=iTime(_Symbol,TF1,0)-b0*TF1*60;
else
t0=iTime(_Symbol,TF1,b0);
if (ObjectFind(name))ObjectCreate(name,OBJ_FIBO,0,iTime(_Symbol,TF1,b1),L,t0,H);
ObjectSet(name,OBJPROP_TIME1,iTime(_Symbol,TF1,b1));
ObjectSet(name,OBJPROP_PRICE1,L);
ObjectSet(name,OBJPROP_TIME2,t0);
ObjectSet(name,OBJPROP_PRICE2,H);
ObjectSet(name,OBJPROP_COLOR,clr_Fibo);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,0,clr_Fibo);
ObjectSetInteger(0,name,OBJPROP_LEVELS,13);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,0,0);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,1,0.236);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,2,0.382);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,3,0.5);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,4,0.618);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,5,0.764);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,6,1.0);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,7,1.382);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,8,1.618);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,9,2.0);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,10,2.618);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,11,3.0);
ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,12,4.0);
ObjectSetString(0,name,OBJPROP_LEVELTEXT,0,"0.0");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,1,"23.6");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,2,"38.2");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,3,"50.0");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,4,"61.8");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,5,"76.4");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,6,"100.0");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,7,"138.2");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,8,"161.8");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,9,"200.0");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,10,"261.8");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,11,"300.0");
ObjectSetString(0,name,OBJPROP_LEVELTEXT,12,"400.0");
}
//------------------------------------
void Find_Fractal(int TF1, bool new_bar)
{
int up,dw;
int beg_bar;
if (new_bar)
{
beg_bar=M_Bars-4;
ArrayInitialize(Mas_Fract,0);
}
else
{
beg_bar=2;
for (int i=0;i<=beg_bar;i++)Mas_Fract[i]=0;
}
for (int i=beg_bar;i>=2;i--)
{
up=0;
dw=0;
double H_2=iHigh(_Symbol,TF1,i-2);
double H_1=iHigh(_Symbol,TF1,i-1);
double H0 =iHigh(_Symbol,TF1,i);
double H1 =iHigh(_Symbol,TF1,i+1);
double H2 =iHigh(_Symbol,TF1,i+2);
double H3 =iHigh(_Symbol,TF1,i+3);
if (((ND(H0)> ND(H1) && ND(H0)> ND(H2)) ||
(ND(H0)==ND(H1) && ND(H0)> ND(H2)) ||
(ND(H0)> ND(H1) && ND(H0)==ND(H2)) ||
(ND(H0)== ND(H1) && ND(H0)==ND(H2) && ND(H0)> ND(H3))) &&
ND(H0)> ND(H_1)&& ND(H0)> ND(H_2))
up=1;
//......................................
double L_2=iLow(_Symbol,TF1,i-2);
double L_1=iLow(_Symbol,TF1,i-1);
double L0 =iLow(_Symbol,TF1,i);
double L1 =iLow(_Symbol,TF1,i+1);
double L2 =iLow(_Symbol,TF1,i+2);
double L3 =iLow(_Symbol,TF1,i+3);
if (((ND(L0)< ND(L1) && ND(L0)< ND(L2)) ||
(ND(L0)==ND(L1) && ND(L0)< ND(L2)) ||
(ND(L0)< ND(L1) && ND(L0)==ND(L2)) ||
(ND(L0)== ND(L1) && ND(L0)==ND(L2) && ND(L0)< ND(L3))) &&
ND(L0)< ND(L_1)&& ND(L0)< ND(L_2))dw=1;
//......................................
if (up==1 && dw==0)
Mas_Fract[i]=1;
else
if (up==0 && dw==1)
Mas_Fract[i]=-1;
else
if (up==1 && dw==1)
{
double op0=iOpen (_Symbol,TF1,i);
double cl0=iClose(_Symbol,TF1,i);
if (ND(cl0)>=ND(op0))
Mas_Fract[i]=4;
else
Mas_Fract[i]=-4;
}
}
}
//------------------------------------
void Dorab_Fract(int TF1, int& mas_sgat[][], int& kol_sgat, bool new_bar)
{
obrab_begin_ZZ(TF1, Mas_Fract); // îáðàáîòàòü íà÷àëî çèã-çàãà
//..............................
int Sgat_ZZ[][2]; // 0 - íîì áàðà, 1 - çíà÷.
ArrayResize(Sgat_ZZ,2*M_Bars);
int n=0;
szhat_mas_ZZ (Mas_Fract,Sgat_ZZ,n); // ñæàòü ìàññèâ ZZ
Find_promezh_point (TF1, Mas_Fract, Sgat_ZZ, n); // íàéòè òî÷êè ìåæäó îäèíàêîâûìè âåðøèíàìè
szhat_mas_ZZ (Mas_Fract,Sgat_ZZ,n); // ñæàòü ìàññèâ ZZ
ubrat_iskagen_ZZ (TF1, Mas_Fract, Sgat_ZZ, n); // óáðàòü èñêàæåíèÿ ZZ
//..............................
ArrayInitialize(mas_sgat,0);
szhat_mas_ZZ (Mas_Fract,mas_sgat,kol_sgat); // ñæàòü ìàññèâ ZZ
}
//-------------------------------
void obrab_begin_ZZ(int TF1, int& mas_Fr[])
{
int k,i;
for (i=0;i<M_Bars;i++) // íàéòè íà÷àëî ìàñèâà ZZ (i)
if (mas_Fr[i]!=0)break;
//..............................
if (i>0) // íàéäåíî íà÷àëî ôðàêòàëîâ
// ñìîòðèì íà êàêîì áàðå ñòîèò íà÷àëüíûé ôðàêòàë (i).
// 1. Åñëè íà i-îì áàðå - âåðøèíà UP
// 1.1. Åñëè íà 0-ì áàðå High > UP, òî High[0]= 3
// 1.2. Åñëè íà 0-ì áàðå High <= UP, òî Low [0]=-3
// 2. (äëÿ DW - íàîáîðîò)
if (mas_Fr[i]>0) // â íà÷àëå ëèíåéêè ôðàêòàëîâ - ìàêñèìóì (UP)
{
if (iHigh(_Symbol,TF1,0)>iHigh(_Symbol,TF1,i)) // íà 0-ì áàðå High > UP
{
k=iHighest(_Symbol,TF1,MODE_HIGH,i-1,1);
if (iHigh(_Symbol,TF1,k)>iHigh(_Symbol,TF1,0))
{
mas_Fr[k]= 3; // ìèíèìóì ìåæäó âåðøèíàìè íàéäåòñÿ àâòîìàòîì
mas_Fr[0]=-3;
}
else
mas_Fr[0]=3; // ìèíèìóì ìåæäó âåðøèíàìè íàéäåòñÿ àâòîìàòîì
}
else
{
k=iLowest(_Symbol,TF1,MODE_LOW,i-1,1);
if (iLow(_Symbol,TF1,k)<iLow(_Symbol,TF1,0))
{
mas_Fr[k]=-3;
mas_Fr[0]= 3;
}
else
mas_Fr[0]=-3;
}
}
else
if (mas_Fr[i]<0) // â íà÷àëå ëèíåéêè ôðàêòàëîâ - ìèíèìóì
{
if (iLow(_Symbol,TF1,0)<iLow(_Symbol,TF1,i)) // ìèí. 0-îãî áàðà ìåíüøå ìèí. íà÷àëüíîãî ôðàêòàëà
{
k=iLowest(_Symbol,TF1,MODE_LOW,i-1,1);
if (iLow(_Symbol,TF1,k)<iLow(_Symbol,TF1,0)) // åñòü ëè ìåæäó 1-ì è i-1 áàðàìè ìèíèìóì ìåíüøèé ìèíèìóìà 0-îãî áàðà ?
{
mas_Fr[k]=-3; // ìàêñèìóì ìåæäó íèçèíàìè íàéäåòñÿ àâòîìàòîìàòè÷åñêè
mas_Fr[0]= 3; // íà 0-ì áàðå ìàêñ.
}
else // íà 0-ì áàðå ìèíèìóì
mas_Fr[0]=-3; // ìàêñèìóì ìåæäó íèçèíàìè íàéäåòñÿ àâòîìàòîì
}
else
{
k=iHighest(_Symbol,TF1,MODE_HIGH,i-1,1);
if (iHigh(_Symbol,TF1,k)>iHigh(_Symbol,TF1,0))
{
mas_Fr[k]= 3;
mas_Fr[0]=-3;
}
else
mas_Fr[0]=3;
}
}
}
//--------------------------------------
void Find_promezh_point(int TF1, int& mas_ish_ZZ[], int& mas_Szt[][], int kol_szt)
{ // íàéòè òî÷êè ìåæäó îäèíàêîâûìè âåðøèíàìè
int k,b0,b1,z0,z1;
for (int i=1;i<kol_szt;i++)
{
b0=mas_Szt[i-1][0];
b1=mas_Szt[i] [0];
z0=mas_Szt[i-1][1];
z1=mas_Szt[i] [1];
if (z0*z1>0) // íà âåðøèíàõ îäèíàêîâûå íàïðàâëåíèÿ
if (b1-b0-1>1)
if (z1>0)
{
k=Main_iLowest(TF1,b1-b0-1,b0+1);
mas_ish_ZZ[k]=-2;
}
else
{
k=Main_iHighest(TF1,b1-b0-1,b0+1);
mas_ish_ZZ[k]=2;
}
}
}
//-------------------------------------
void ubrat_iskagen_ZZ(int TF1, int& mas_ish_ZZ[], int& mas_Szt[][], int kol_szt)
{ // óáðàòü èñêàæåíèÿ ZZ: åñëè ìàêñèìóì íèæå ïðåä. ìèíèìóìà è íàîáîðîò
int i,b0,b1;
double p0,p1;
int f0,f1;
for (i=1;i<kol_szt;i++)
{
b1=mas_Szt[i] [0]; // òåê.
f1=mas_Szt[i] [1];
b0=mas_Szt[i-1][0]; // ñïðàâà
f0=mas_Szt[i-1][1];
p1=iLow (_Symbol,TF1,b1);
p0=iHigh(_Symbol,TF1,b0);
if (f1<0 && f0>0 && ND(p1)>=ND(p0))
{
mas_ish_ZZ[b0]=0;
mas_ish_ZZ[b1]=0;
continue;
}
p1=iHigh(_Symbol,TF1,b1);
p0=iLow (_Symbol,TF1,b0);
if (f1>0 && f0<0 && ND(p1)<=ND(p0))
{
mas_ish_ZZ[b0]=0;
mas_ish_ZZ[b1]=0;
}
}
}
//--------------------------
void szhat_mas_ZZ(int& masZZ_inp[], int& masZZ_out[][], int& kol_out)
{ // ñæàòü ìàññèâ ZZ
kol_out=0;
int n;
for (int i=0;i<M_Bars;i++)
{
n=masZZ_inp[i];
if (n!=0)
{
if (MathAbs(n)<4)
{
masZZ_out[kol_out][0]=i;
masZZ_out[kol_out][1]=n;
kol_out++;
}
else // äâîéíîé ôðàêòàë
if (n==4)
{
masZZ_out[kol_out][0]=i;
masZZ_out[kol_out][1]=1;
kol_out++;
masZZ_out[kol_out][0]=i;
masZZ_out[kol_out][1]=-1;
kol_out++;
}
else
{
masZZ_out[kol_out][0]=i;
masZZ_out[kol_out][1]=-1;
kol_out++;
masZZ_out[kol_out][0]=i;
masZZ_out[kol_out][1]=1;
kol_out++;
}
}
}
}
//---------------------------------
void Opred_Impuls_Wave(int TF1, int& mas_sgat[][], int kol_sgat)
{ // âûäåëèòü èìïóëüñíûå âîëíû
int z1,z0,z_1,b1,b0,b_1;
double p1,p_1;
for (int i=kol_sgat-2;i>=1;i--)
{
z1 =mas_sgat[i+1][1]; // ëåâûé ôðàêòàë
z0 =mas_sgat[i] [1]; // òåêóùèé ôðàêòàë
z_1=mas_sgat[i-1][1]; // ïðàâûé ôðàêòàë
b1 =mas_sgat[i+1][0];
b0 =mas_sgat[i] [0];
b_1=mas_sgat[i-1][0];
if (z0<0 && z_1>0) // ëèíèÿ ââåðõ
{
p1 =iHigh(_Symbol,TF1,b1);
p_1=iHigh(_Symbol,TF1,b_1);
if (ND(p_1)>ND(p1))mas_sgat[i][2]=1;
}
else
if (z0>0 && z_1<0) // ëèíèÿ âíèç
{
p1 =iLow(_Symbol,TF1,b1);
p_1=iLow(_Symbol,TF1,b_1);
if (ND(p_1)<ND(p1))mas_sgat[i][2]=-1;
}
}
}
//---------------------------
void Opred_Corr_wave(int TF1, int& mas_sgat[][], int kol_sgat)
{ // íàéòè ñëîæíûå êîððåêòèðóþùèå âîëíû
int z1,z0,b0,b1;
double p0,d0;
int i=kol_sgat-2;
int n_k;
while (i>=1)
{
z1 =mas_sgat[i+1][1]; // ëåâûé ôðàêòàë
z0 =mas_sgat[i] [1]; // òåêóùèé ôðàêòàë
b0 =mas_sgat[i][0]; // òåêóùèé áàð
p0 =iHigh(_Symbol,TF1,b0);
d0 =iLow (_Symbol,TF1,b0);
// êîðð. âîëíû âíèç
if (z1<0 && z0>0 && mas_sgat[i+1][2]>0 && mas_sgat[i][2]==0) // ïðåä.ëèíèÿ èìïóëüñ ââåðõ, òåê -êîðð.
{
mas_sgat[i][3]=-1; // îáîçíà÷èòü íà÷àëî ñëîæíîé êîðð. ëèíèèè
if (i>=2 && mas_sgat[i-1][2]==0) // ñëåä.-êîðð.
{
i--;
mas_sgat[i][3]=-2;
i--;
n_k=3;
while (i>0 && mas_sgat[i][2]==0)
{
mas_sgat[i][3]=-n_k;
i--;
n_k++;
if (i<1)break;
b1=mas_sgat[i-1][0];
if (ND(iHigh(_Symbol,TF1,b1))>ND(p0))break; // ïðåâûñèëè îñíîâíîé âåðõíèé ôðàêòàë
mas_sgat[i][3]=-n_k;
i--;
n_k++;
}
}
else
{
i--;
continue;
}
}
else // êîðð. âîëíû ââåðõ
if (z1>0 && z0<0 && mas_sgat[i+1][2]<0 && mas_sgat[i][2]==0) // ïðåä.ëèíèÿ èìïóëüñ âíèç, òåê -êîðð.
{
mas_sgat[i][3]=1; // îáîçíà÷èòü íà÷àëî ñëîæíîé êîðð. ëèíèèè
if (i>=2 && mas_sgat[i-1][2]==0) // ñëåä.-êîðð.
{
i--;
mas_sgat[i][3]=2;
i--;
n_k=3;
while (i>0 && mas_sgat[i][2]==0)
{
mas_sgat[i][3]=n_k;
i--;
n_k++;
if (i<1)break;
b1=mas_sgat[i-1][0];
if (ND(iLow(_Symbol,TF1,b1))<ND(d0))break; // ïðåâûñèëè îñíîâíîé íèæíèé ôðàêòàë
mas_sgat[i][3]=n_k;
i--;
n_k++;
}
}
else
{
i--;
continue;
}
}
else
i--;
}
}
//-------------------------------------
void Out_ZZ(int TF1,int& mas_sgat[][], int kol_sgat)
{ // Âûâåñòè ZZ
int z0,z1,b0,b1,m0=0,m1=0;
double L0,H0,L1,H1;
datetime t0,t1;
for (int i=1;i<kol_sgat;i++)
{
z1=mas_sgat[i][1]; // ëåâûé ôð.
b1=mas_sgat[i][0];
L1=iLow (_Symbol,TF1,b1);
H1=iHigh(_Symbol,TF1,b1);
t1=iTime(_Symbol,TF1,b1);
z0=mas_sgat[i-1][1]; // ïðàâûé ôð.
b0=mas_sgat[i-1][0];
L0=iLow (_Symbol,TF1,b0);
H0=iHigh(_Symbol,TF1,b0);
t0=iTime(_Symbol,TF1,b0);
//................................
if (z1>0 && z0<0) // ëèíèÿ âíèç
{
Out_TL(m0, t0, L0, t1, H1, "T_D", mas_sgat[i][4]>0?clr_Series_Up:clr_Series_Dw, TF1, mas_sgat[i][2]!=0,4);
m0++;
}
else
if (z1<0 && z0>0) // ëèíèÿ ââåðõ
{
Out_TL(m1, t0, H0, t1, L1, "T_U", mas_sgat[i][4]>0?clr_Series_Up:clr_Series_Dw, TF1, mas_sgat[i][2]!=0,4);
m1++;
}
}
Del_extra_obj(TF1,"T_U",m0);
Del_extra_obj(TF1,"T_D",m1);
}
//---------------------------------
void Del_extra_obj (int tf, string s, int n)
{
string name;
bool F;
do
{
name=pref+str_TF(tf)+"_"+s+(string)n;
F=ObjectFind(name)>=0;
if(F)ObjectDelete(name);
n++;
}
while (F);
}
//-------------------------------
int Main_iHighest(int tf, int n, int beg)
{
double pr,pr_max=0.0;
int n_max=beg;
for (int i=beg;i<beg+n;i++)
{
pr=iHigh(_Symbol,tf,i);
if (pr>pr_max)
{
pr_max=pr;
n_max=i;
}
}
return(n_max);
}
//-----------------------------
int Main_iLowest(int tf, int n, int beg)
{
double pr,pr_min=999999.0;
int n_min=beg;
for (int i=beg;i<beg+n;i++)
{
pr=iLow(_Symbol,tf,i);
if (pr<pr_min)
{
pr_min=pr;
n_min=i;
}
}
return(n_min);
}
//-----------------------------
void Out_Nom_Series(int TF1,int& mas_sgat[][], int kol_sgat)
{ // âûâåñòè ôðàêòàëû
int m=0,n=0,b,k;
color clr;
for (int i=0;i<kol_sgat-1;i++)
{
int z=mas_sgat[i][1];
b=mas_sgat[i][0];
k=mas_sgat[i+1][4];
if (k!=0)
{
if (b>=Bars)break;
if (b<=2 && i<=2)
clr=clr_Tail_ZZ;
else
if (mas_sgat[i+1][4]>0)
clr=clr_Series_Up;
else
clr=clr_Series_Dw;
if (z>0){Out_txt(n,iTime(_Symbol,TF1,b),iHigh(_Symbol,TF1,b),"N_U",clr,TF1,ANCHOR_LOWER, k);n++;}
if (z<0){Out_txt(m,iTime(_Symbol,TF1,b),iLow (_Symbol,TF1,b),"N_D",clr,TF1,ANCHOR_UPPER, k);m++;}
}
}
Del_extra_obj(TF1,"N_U",n);
Del_extra_obj(TF1,"N_D",m);
}
//------------------------------
void Out_TL(int i,datetime t1, double pr1, datetime t2, double pr2, string s, color col, int TF1, bool impuls, int width)
{
string name=pref+str_TF(TF1)+"_"+s+(string)i;
if (ObjectFind(name))ObjectCreate(name,OBJ_TREND,0,0,0,0,0);
ObjectSet(name,OBJPROP_TIME1,t1);
ObjectSet(name,OBJPROP_TIME2,t2);
ObjectSet(name,OBJPROP_PRICE1,pr1);
ObjectSet(name,OBJPROP_PRICE2,pr2);
ObjectSet(name,OBJPROP_COLOR,col);
ObjectSet(name,OBJPROP_RAY,0);
if (impuls)
{
ObjectSet(name,OBJPROP_WIDTH,width);
ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);
}
else
{
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);
}
}
//------------------------------------
void Out_Arrow(int i,datetime t, double pr,string s, color col, int cod,int TF1, int anchor)
{
string name=pref+str_TF(TF1)+"_"+s+(string)i;
if (ObjectFind(name))ObjectCreate(name,OBJ_ARROW,0,0,0);
ObjectSet(name,OBJPROP_TIME1,t);
ObjectSet(name,OBJPROP_PRICE1,pr);
ObjectSet(name,OBJPROP_COLOR,col);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSet(name,OBJPROP_ARROWCODE,cod);
ObjectSetInteger(0,name,OBJPROP_ANCHOR,anchor);
}
//------------------------------------
void Out_txt(int i,datetime t, double pr,string s, color col, int TF1, int anchor, int n)
{
string name=pref+str_TF(TF1)+"_"+s+(string)i;
if (ObjectFind(name))ObjectCreate(name,OBJ_TEXT,0,0,0);
ObjectSetText(name,IntegerToString(n),10,"Arial Black");
ObjectSet(name,OBJPROP_TIME1,t);
ObjectSet(name,OBJPROP_PRICE1,pr);
ObjectSet(name,OBJPROP_COLOR,col);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSetInteger(0,name,OBJPROP_ANCHOR,anchor);
}
//------------------------------------
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
---