Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
MA_TrendLine_01
//+------------------------------------------------------------------+
//| MA_TrendLine_01.mq4 |
//| Inkov Evgeni |
//| ew123@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Inkov Evgeni ew123@mail.ru"
#property link "8-918-600-11-33"
//=======================================================================
// ÒÎÐÃÎÂËß (ïî òðåíäîâîé ëèíèè) ÎÒËÎÆÅÍÍÛÌÈ ÎÐÄÅÐÀÌÈ
// òîðãîâëÿ íà ïðîáîé ÒË
//=======================================================================
#define Razm_Mas_Fract 500
//=======================================================================
extern double Lot_Osn = 0; // 0 - äëÿ ðàñ÷åòà ëîòà èñï. Risk
extern double Risk = 10; //ïðîöåíòû îò áàëàíñà äëÿ ðàñ÷åòà íà÷. ëîòà
extern bool Risk_from_Balance = false; //true - ñ÷èòàåì ðèñê îò áàëàíñà, false - îò ñâîá.ñðåäñòâ
// ìîæíî â ðó÷íóþ çàäàâàòü íàïðàâëåíèå îòêðûòèÿ îðäåðîâ:
extern bool Trend_UP = true; // áóäóò îòêðûâàòüñÿ òîëüêî Buy
extern bool Trend_DW = true; // áóäóò îòêðûâàòüñÿ òîëüêî Sell
extern int TP_prob = 100; // Òåéê-ïðîôèò
extern int Otstup_pr_prob = 7; // äëÿ ôîðìèðîâàíèÿ îòëîæåííîãî îðäåðà îòñòóï îò High ïåðâîãî áàðà
extern int Otstup_SL_prob = 10; // îòñòóï îò 1 áàðà äëÿ SL
extern bool On_Begin_Torg = true; // èñïîëüçîâàòü âðåìÿ äëÿ íà÷àëî òîðãîâëè
extern int Begin_Torg = 480; // âðåìÿ íà÷àëà òîðãîâëè (îòñòóï îò 00:00 â ìèíóòàõ)
extern bool On_End_Torg = false; // èñïîëüçîâàòü âðåìÿ äëÿ îêîí÷àíèÿ òîðãîâëè
extern int End_Torg = 30; // âðåìÿ çàêðûòèå âñåõ îðäåðîâ (îòñòóï îò êîíöà äíÿ â ìèíóòàõ)
extern bool comm = true; // âûâîäèòü êîììåíòàðèè
extern bool sound = true; // îçâó÷èâàòü îòêðûòèå îðäåðîâ
extern int TF_Torg = 15; // òàéì-ôðåéì òîðãîâëè
extern int MagicNumber = 335580;
extern int Slippage = 5;
//....................................................
extern int Fractal_Bars = 3; // ïåðåìåííàÿ äëÿ ôîðìèðîâàíèÿ ôðàêòàëîâ, ÷åì áîëüøå òåì ðåæå ôðàêòàëû
extern int Na4_Bar_Fract = 1; // íîìåð áàðà, ñ êîòîðîãî íà÷èíàåòñÿ ïîèñê ôðàêòàëà
extern bool Out_Grafic = true; // âûâîäèòü çèã-çàã íà ýêðàí
extern int IndNumb = 10; // ïðåôèêñ äëÿ ëèíèé çèã-çàãà
extern int kol_voln = 20; // êîë. âîëí âûâîäèìûõ íà ýêðàí
//+------------------------------------------------------------------+
extern bool Open_Del_Otl = true; // óäàëÿòü âñòðå÷íûé îòëîæåííûé ïðè îòêðûòèè ðûíî÷íîãî îðäåðà
extern bool On_Vstr_Otl = false; // îòêðûâàòü âñòðå÷íûå îòëîæåííûå îðäåðà
extern bool Trail_Stop = true; // èñïîëüçîâàòü òðåéëèíã-ñòîï ïî âîëíàì çèã-çàãà
extern int Volna_Trail_Stop = 1; // ïî êàêîé âîëíå äâèãàòü òðåéëèíã-ñòîï
//+------------------------------------------------------------------+
extern bool Out_MA = true; // âûâîäèòü MA
extern int Kol_Bar_MA = 100; // ñêîëüêî áàðîâ ÌÀ ïîêàçûâàòü
extern bool Out_Trend_Line = true; // âûâîäèòü Òðåíäîâóþ Ëèíèþ
extern string Name_Trend_Line = "TL_1";// èìÿ òðåíäîâîé ëèíèè
extern int Proc_obraz_zwezd = 10; // ïðîöåíò ìåæäó (Open-Close)/(High-Low) äëÿ ïðèíÿòèÿ áàðà â êà÷åñòâå "çâåçäû"
//+------------------------------------------------------------------+
extern double Min_Tangens_TL_prob = 0.27; // òàíãåíñ óãëà íàêëîíà ÒË, åñëè îí ìåíüøå ýòîãî çíà÷åíèÿ, òî íå òîðãóåì
extern double Min_Tangens_TL_clos = 0.13;
//+------------------------------------------------------------------+
extern int BackSteps = 4; // íîìåð áàðà âòîðîé êîîðä. äëÿ ôîðì. ÒË, ïåðâàÿ êîîðä. - ýòî ïåðâûé áàð ÌÀ
extern int MA_Period = 40; // ïàðàìåòðû ÌÀ: ïåðèîä
extern int MA_Shift = -8; // ñäâèã
extern int MA_Method = 0;
extern int MA_Applied_Price = 0;
//-------------------------------
//MA_Method: MODE_SMA 0 Ïðîñòîå ñêîëüçÿùåå ñðåäíåå
// MODE_EMA 1 Ýêñïîíåíöèàëüíîå ñêîëüçÿùåå ñðåäíåå
// MODE_SMMA 2 Ñãëàæåííîå ñêîëüçÿùåå ñðåäíåå
// MODE_LWMA 3 Ëèíåéíî-âçâåøåííîå ñêîëüçÿùåå ñðåäíåå
//-------------------------------
//MA_Applied_Price: PRICE_CLOSE 0 Öåíà çàêðûòèÿ
// PRICE_OPEN 1 Öåíà îòêðûòèÿ
// PRICE_HIGH 2 Ìàêñèìàëüíàÿ öåíà
// PRICE_LOW 3 Ìèíèìàëüíàÿ öåíà
// PRICE_MEDIAN 4 Ñðåäíÿÿ öåíà, (high+low)/2
// PRICE_TYPICAL 5 Òèïè÷íàÿ öåíà, (high+low+close)/3
// PRICE_WEIGHTED 6 Âçâåøåííàÿ öåíà çàêðûòèÿ, (high+low+close+close)/4
//=======================================================================
string otstup = " ";
int mas_ord[6];
int kol_ord;
double Lot;
int dig_lot;
int stop_level;
string com,com1;
double min_l, max_l;
double Tick_Value;
datetime na4_open_ord, end_open_ord, Time00,Tek_Time;
double urov_st_UP,urov_st_DW;
double koef,koef1;
int Nom_Bar_Torg = 1; // íîìåð áàðà äëÿ àíàëèçà íà÷àëà òîðãîâîè
//..........................................
double mas_extrem [Razm_Mas_Fract][2]; // 0 - öåíà ýêñòðåìóìà, 1 - íîìåð áàðà ýêñòðåìóìà
int kol_mas_extr; // êîëè÷. èñïîëüçóåìûõ ÿ÷ååê â mas_extrem
datetime tek_Bar_TF;
color Color_voln=Magenta;
string com_voln;
double pr_Trail_Stop;
double pr1_TL,pr2_TL;
int n1_TL,n2_TL;
//+------------------------------------------------------------------+
int init()
{
Tick_Value = MarketInfo(Symbol(),MODE_TICKVALUE);
min_l=MarketInfo(Symbol(),MODE_MINLOT);
max_l=MarketInfo(Symbol(),MODE_MAXLOT);
//.............................................
double n_lot=MarketInfo(Symbol(),MODE_LOTSTEP);
dig_lot=0;
while (n_lot<1)
{
dig_lot++;
n_lot *=10;
}
del_obj(IndNumb);
tek_Bar_TF=0;
//.............................................
if (IsTesting() && !IsVisualMode())
{
comm = false;
sound = false;
Out_Grafic = false;
Out_MA = false;
Out_Trend_Line = false;
}
if (IsTesting() || IsExpertEnabled()) start(); // åñëè ðåæèì Tåñòåðà èëè íàæàòà êíîïêà "Ñîâåòíèêè", òî Start
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
ObjectsDeleteAll();
Comment("");
return(0);
}
//+------------------------------------------------------------------+
int start()
{
//--------------------
// ïåðåñ÷èòûâàåì âîëíû òîëüêî ïðè ñìåíå áàðà íà TF_Torg
if (tek_Bar_TF==0 || tek_Bar_TF != iTime(Symbol(),TF_Torg,0))
{
Put_mas_fract_and_extr(TF_Torg, Color_voln,Color_voln,IndNumb,mas_extrem,kol_mas_extr);
Form_TL(BackSteps); // ñôîðìèðîâàòü TL
if (Out_MA)ind_MA(Kol_Bar_MA); // âûâåñòè MA íà ýêðàí
tek_Bar_TF = iTime(Symbol(),TF_Torg,0);
}
//--------------------
Tek_Time = TimeCurrent(); // òåêóùåå âðåìÿ
Time00 = StrToTime(TimeToStr(Tek_Time,TIME_DATE)); // âðåìÿ íà÷àëà ñåãîäíÿøíåãî äíÿ
na4_open_ord = Time00 + Begin_Torg*60; // âðåìÿ íà÷àëà îòêðûòèÿ îðäåðîâ
end_open_ord = Time00 + (1440 - End_Torg)*60; // âðåìÿ êîíöà òîðãîâëè
//--------------------
stop_level=MarketInfo(Symbol(),MODE_STOPLEVEL);
//--------------------
// îïðåäåëèòüñÿ ñ íà÷àëüíûì ëîòîì
if (Lot_Osn > 0)
Lot=Lot_Osn;
else
Lot=GetLot();
//--------------------
// îïðåäåëèòü, ñêîëüêî è êàêèå îðäåðà óñòàíîâëåíû
kol_ord = put_mas_ord();
//......................................
if (comm)Out_Comm(); // ñôîðìèðîâàòü êîììåíòàðèé
if (comm)Comment(com+com1+com_voln); // âûâåñòè êîììåíòàðèé íà ýêðàí
//*************************************************************
// òðåéëèíã-ñòîï ïî âîëíàì
if (Trail_Stop && mas_ord[OP_BUY] > 0)
{
pr_Trail_Stop=pr_TS_Buy(Volna_Trail_Stop);
if (pr_Trail_Stop>0) ust_TS_Buy(pr_Trail_Stop);
}
if (Trail_Stop && mas_ord[OP_SELL] > 0)
{
pr_Trail_Stop=pr_TS_Sell(Volna_Trail_Stop);
if (pr_Trail_Stop>0) ust_TS_Sell(pr_Trail_Stop);
}
//------------------------------------------------------------------
// åñëè îòêðûëñÿ ðûíî÷íûé, óäàëèòü îòëîæåííûé
if (Open_Del_Otl && mas_ord[OP_BUY] > 0 && mas_ord[OP_SELLSTOP] > 0)Del_otlog(OP_SELLSTOP);
if (Open_Del_Otl && mas_ord[OP_SELL] > 0 && mas_ord[OP_BUYSTOP] > 0)Del_otlog(OP_BUYSTOP);
//-----------------------------
// åñëè ïîÿâèëîñü óñëîâèå çàêðûòèÿ îðäåðà, çàêðûòü
if (mas_ord[OP_SELL] > 0)
if (Proboi_TL_H_Close(Nom_Bar_Torg)) close_ord(OP_SELL);
if (mas_ord[OP_BUY] > 0)
if (Proboi_TL_L_Close(Nom_Bar_Torg)) close_ord(OP_BUY);
//*************************************************************
// íà÷àëî òîðãîâëè: óñòàíîâèòü îòëîæåííûé îðäåð
kol_ord = put_mas_ord();
if ((!On_Begin_Torg || Tek_Time >= na4_open_ord) && (!On_End_Torg || Tek_Time < end_open_ord))
if (mas_ord[OP_BUY]==0 && mas_ord[OP_SELL] == 0)
{
if (Trend_UP && mas_ord[OP_BUYSTOP] == 0)
if (Proboi_TL_H_Open(Nom_Bar_Torg,urov_st_UP,urov_st_DW))
{
Otkr_BuyStop (urov_st_UP,urov_st_DW,Otstup_pr_prob, TP_prob, Otstup_SL_prob);
if (On_Vstr_Otl)
{
if (mas_ord[OP_SELLSTOP]>0)Del_otlog(OP_SELLSTOP);
Otkr_SellStop(urov_st_UP,urov_st_DW,Otstup_pr_prob, TP_prob, Otstup_SL_prob);
}
kol_ord=put_mas_ord ();
}
//---------------------------------------------
if (Trend_DW && mas_ord[OP_SELLSTOP] == 0)
if (Proboi_TL_L_Open(Nom_Bar_Torg,urov_st_UP,urov_st_DW))
{
Otkr_SellStop(urov_st_UP,urov_st_DW,Otstup_pr_prob, TP_prob, Otstup_SL_prob);
if (On_Vstr_Otl)
{
if (mas_ord[OP_BUYSTOP]>0)Del_otlog(OP_BUYSTOP);
Otkr_BuyStop (urov_st_UP,urov_st_DW,Otstup_pr_prob, TP_prob, Otstup_SL_prob);
}
kol_ord=put_mas_ord ();
}
}
//*************************************************************
return(0);
}
//======================================================================
bool Proboi_TL_H_Open(int n_bar, double& urov_UP,double& urov_DW)
{ // èùåì áû÷èé áàð, ðàñïîëîæåííûé âûøå òðåíäîâîé ëèíèè "Í"
int n1,n2;
double pr1,pr2;
urov_UP=0;
urov_DW=0;
// åñëè áàð ìåäâåæèé è áîëüøå "çâåçäû", òî âûõîä 0
double d1=iHigh(Symbol(),TF_Torg,n_bar)-iLow(Symbol(),TF_Torg,n_bar);
double d2=iOpen(Symbol(),TF_Torg,n_bar)-iClose(Symbol(),TF_Torg,n_bar);
if (d2>d1*Proc_obraz_zwezd/100.0)return(0);
// îïðåäåëèòü êîîðäèíàòû òðåíäîâîé ëèíèè (ÒË)
if (!opred_koord_TL(n1,n2,pr1,pr2))return(0);
// îïðåäåëèòü íàêëîí ÒË
koef=(pr1-pr2)/(n1-n2);
if (koef<=Min_Tangens_TL_prob*Point)return(0);
double pr_bar = pr2-koef*(n2-n_bar); // òî÷êà ïåðåñå÷åíèÿ ÒË è ëèíèåé áàðà
double pr_bar1 = pr2-koef*(n2-(n_bar+1)); // òî÷êà ïåðåñå÷åíèÿ ÒË è ëèíèåé ïðåä.áàðà
if (iLow (Symbol(),TF_Torg,n_bar) >= pr_bar && // áàð âûøå ÒË ?
iLow (Symbol(),TF_Torg,n_bar+1) <= pr_bar1) // ïðåä. áàð ïðîõîäèò ÷åðåç ÒË
{
urov_UP=iHigh(Symbol(),TF_Torg,n_bar);
urov_DW=iLow (Symbol(),TF_Torg,n_bar);
return(1);
}
return(0);
}
//----------------------------
bool Proboi_TL_L_Open(int n_bar, double& urov_UP,double& urov_DW)
{ // èùåì áàð, ðàñïîëîæåííûé íèæå òðåíäîâîé ëèíèè "L", òàê ÷òîáû
// ïðåäûäóùèé êàñàëñÿ ÒË
int n1,n2;
double pr1,pr2;
urov_UP=0;
urov_DW=0;
// îïðåäåëèòü êîîðäèíàòû òðåíäîâîé ëèíèè (ÒË)
if (!opred_koord_TL(n1,n2,pr1,pr2))return(0);
// îïðåäåëèòü íàêëîí ÒË
koef=(pr2-pr1)/(n1-n2);
if (koef<=Min_Tangens_TL_prob*Point)return(0);
double pr_bar = pr2+koef*(n2-n_bar); // òî÷êà ïåðåñå÷åíèÿ ÒË è ëèíèåé áàðà
double pr_bar1 = pr2+koef*(n2-(n_bar+1)); // òî÷êà ïåðåñå÷åíèÿ ÒË è ëèíèåé ïðåä.áàðà
if (iHigh(Symbol(),TF_Torg,n_bar) <= pr_bar && // òåêóùèé áàð íèæå ÒË
iHigh(Symbol(),TF_Torg,n_bar+1) >= pr_bar1) // ïðåä. áàð ïðîõîäèò ÷åðåç ÒË
{
urov_UP=iHigh(Symbol(),TF_Torg,n_bar);
urov_DW=iLow (Symbol(),TF_Torg,n_bar);
return(1);
}
return(0);
}
//----------------------------
bool Proboi_TL_H_Close(int n_bar)
{
// åñëè áàð ïîëíîñòüþ âûøå ëèíèè òðåíäà, âûäàòü "true"
int n1,n2;
double pr1,pr2;
// îïðåäåëèòü êîîðäèíàòû òðåíäîâîé ëèíèè (ÒË)
if (!opred_koord_TL(n1,n2,pr1,pr2))return(0);
// îïðåäåëèòü íàêëîí ÒË
koef=(pr1-pr2)/(n1-n2);
if (koef<=Min_Tangens_TL_clos*Point)return(0);
double pr_bar=pr2-koef*(n2-n_bar); // pr_bar - òî÷êà ïåðåñå÷åíèÿ ÒË è ëèíèåé áàðà
if (iLow(Symbol(),TF_Torg,n_bar)>pr_bar)return(1);
return(0);
}
//------------------------------------------------
bool Proboi_TL_L_Close(int n_bar)
{
// Åñëè áàð ïîëíîñòüþ íèæå ëèíèè òðåíäà, âûäàòü "true"
int n1,n2;
double pr1,pr2;
// îïðåäåëèòü êîîðäèíàòû òðåíäîâîé ëèíèè (ÒË)
if (!opred_koord_TL(n1,n2,pr1,pr2))return(0);
koef=(pr2-pr1)/(n1-n2); //koef - íàêëîí ÒË
if (koef<=Min_Tangens_TL_clos*Point)return(0);
double pr_bar=pr2+koef*(n2-n_bar); // pr_bar - òî÷êà ïåðåñå÷åíèÿ ÒË è ëèíèåé áàðà
if (iHigh(Symbol(),TF_Torg,n_bar)<pr_bar)return(1);
return(0);
}
//-----------------------------------------------
bool opred_koord_TL(int& n1, int& n2, double& pr1,double& pr2)
{ // îïðåäåëèòü êîîðäèíàòû òðåíäîâîé ëèíèè (ÒË)
pr1 =pr1_TL;
pr2 =pr2_TL;
n1=n1_TL;
n2=n2_TL;
return(1);
}
//----------------------------
double pr_TS_Buy(int n)
{
if (mas_extrem[n][0]<mas_extrem[n-1][0])return(mas_extrem[n][0]);
return(0);
}
//-----------------------------------------------
double pr_TS_Sell(int n)
{
if (mas_extrem[n][0]>mas_extrem[n-1][0])return(mas_extrem[n][0]);
return(0);
}
//-----------------------------------------------
bool ust_TS_Buy (double pr)
{
pr=NormalizeDouble(pr,Digits);
for(int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber() != MagicNumber) continue;
if (OrderType()==OP_BUY)
{
RefreshRates();
if (OrderStopLoss() < pr && pr<Bid && pr>=OrderOpenPrice())
OrderModify(OrderTicket(),OrderOpenPrice(),pr,OrderTakeProfit(),0);
}
}
return(0);
}
//-----------------------------------------------
bool ust_TS_Sell (double pr)
{
pr=NormalizeDouble(pr,Digits);
for(int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber() != MagicNumber) continue;
if (OrderType()==OP_SELL)
{
RefreshRates();
if ((OrderStopLoss()==0 || OrderStopLoss() > pr) && pr>Ask && pr<=OrderOpenPrice())
OrderModify(OrderTicket(),OrderOpenPrice(),pr,OrderTakeProfit(),0);
}
}
return(0);
}
//+------------------------------------------------------------------+
int put_mas_ord()
{ // ïîñ÷èòàòü êîë. îðäåðîâ
int n;
ArrayInitialize(mas_ord,0);
for(int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS)==true)
{
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != MagicNumber) continue;
mas_ord[OrderType()]++;
n++;
}
return(n);
}
//---------------------------------------------
double GetLot()
{
double free_magrin;
if (Risk_from_Balance)
free_magrin = AccountBalance();
else
free_magrin = AccountFreeMargin();
double lot = NormalizeDouble(free_magrin * Risk/100000.0,dig_lot);
return (lot);
}
//+------------------------------------------------------------------+
double Ogran_lot(double lot)
{
if (lot < min_l)lot = min_l;
if (lot > max_l)lot = max_l;
return(lot);
}
//+------------------------------------------------------------------+
bool Otkr_BuyStop(double urov_UP,double urov_DW,int Otstup_pr, int TP, int Otstup_SL)
{
double tek_pr,tek_sl,tek_tp;
int err;
tek_pr = urov_UP + Otstup_pr*Point;
RefreshRates();
if (Bid>=tek_pr-stop_level*Point)return(0);
tek_tp = tek_pr + TP*Point;
tek_sl = urov_DW - Otstup_SL*Point;
err=ust_ord(OP_BUYSTOP, Lot, tek_pr, tek_sl, tek_tp, "~R1~");
if (err<0)com=com+" OP_BUYSTOP="+GetLastError()+" pr="+DoubleToStr(tek_pr,Digits)+" sl="+DoubleToStr(tek_sl,Digits)+" tp="+DoubleToStr(tek_tp,Digits)+"\n";
return(err>0);
}
//------------------------------------------------------------------------
bool Otkr_SellStop(double urov_UP,double urov_DW,int Otstup_pr, int TP, int Otstup_SL)
{
double tek_pr,tek_sl,tek_tp;
int err;
tek_pr = urov_DW - Otstup_pr*Point;
RefreshRates();
if (Ask<=tek_pr+stop_level*Point)return(0);
tek_tp = tek_pr - TP*Point;
tek_sl = urov_UP + Otstup_SL*Point;
err=ust_ord(OP_SELLSTOP, Lot, tek_pr, tek_sl, tek_tp, "~R1~");
if (err<0)com=com+" OP_SELLSTOP="+GetLastError()+" pr="+DoubleToStr(tek_pr,Digits)+" sl="+DoubleToStr(tek_sl,Digits)+" tp="+DoubleToStr(tek_tp,Digits)+"\n";
return(err>0);
}
//------------------------------------------------------------------------
int ust_ord (int tip, double lot, double pr, double sl, double tp, string com11)
{
int err;
double tek_lot;
double ust_lot=lot;
while (ust_lot>0)
{
tek_lot=Ogran_lot(ust_lot);
err=OrderSend(Symbol(), tip, tek_lot, pr, Slippage, sl, tp, com11, MagicNumber, 0);
if (err<0)break;
ust_lot-=tek_lot;
}
return (err);
}
//------------------------------------------------------------------------
bool Del_otlog(int tip)
{ // Óäàëåíèå âñåõ îòëîæåííûõ îðäåðîâ (tip=-1) èëè çàäàííîãî òèïà
bool usl=true;
while (usl)
{
usl=false;
for(int i = 0; i < OrdersTotal(); i++) //ïåðåáèðàåì âñå îðäåðà
{
if (!OrderSelect(i, SELECT_BY_POS))continue;
if (OrderSymbol() != Symbol())continue;
if (OrderMagicNumber() != MagicNumber)continue;
if (OrderType()>1 && (tip==OrderType() || tip==-1))
{
OrderDelete(OrderTicket());
usl=true;
}
}
}
return(0);
}
//------------------------------------------------------------------------
bool close_ord(int tip)
{
bool usl=true;
while (usl)
{
usl=false;
for(int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderType()==OP_BUY && (tip==OP_BUY || tip==-1))
{
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage);
usl=true;
}
if (OrderType()==OP_SELL && (tip==OP_SELL || tip==-1))
{
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage);
usl=true;
}
}
}
return(0);
}
//---------------------------------------------
void Out_Comm()
{
com1 = otstup+"Òåêóùåå âðåìÿ: " + TimeToStr(Tek_Time,TIME_SECONDS)+" ";
if (kol_ord==0)
if (On_Begin_Torg && Tek_Time < na4_open_ord)
com1 = com1+"Íà÷àëî òîðãîâëè ñåãîäíÿ";
else
com1 = com1 + "Æäåì óñëîâèÿ äëÿ îòêðûòèÿ îðäåðà";
else
com1 = com1+"Èäåò òîðãîâëÿ";
if (On_Begin_Torg)com1 = com1 + " ñ " + StringSubstr(TimeToStr(na4_open_ord,TIME_SECONDS),0,5);
if (On_End_Torg)com1 = com1 + " äî " + StringSubstr(TimeToStr(end_open_ord,TIME_SECONDS),0,5);
com1 = com1 + "\n";
//............................
com1=com1+otstup+"Íà÷àëüíûé ëîò = "+DoubleToStr(Lot,dig_lot)+" Ðèñê = "+ DoubleToStr(Risk,2)+" %";
if (Risk_from_Balance)
com1=com1+" îò áàëàíñà\n";
else
com1=com1+" îò ñâîá.ñðåäñòâ\n";
//............................
com1=com1+otstup+"Stop_Level = "+stop_level+" Òàíãåíñ ÒË = "+koef1+"\n";
}
//==========================================================================
bool Put_mas_fract_and_extr(int TF,color col_UP,color col_DW,int nom_ind, double& mas_extremum[][], int& kol_mas_extr1)
{
int i;
double long1 [Razm_Mas_Fract];
double short1[Razm_Mas_Fract];
int na4_bar,kol_bar;
ArrayInitialize(long1,0);
ArrayInitialize(short1,0);
//----
if (Fractal_Bars<=0)Fractal_Bars=1;
int HighBar = -1;
int LowBar = -1;
//Èùåì ôðàêòàëû
int kol_bars=MathMin(Razm_Mas_Fract,iBars(Symbol(),TF)-1);
int tek_kol_voln;
for(i=Na4_Bar_Fract;i<=kol_bars;i++) // ïðîñìàòðèâàåì ñ òåê.âðåìåíè íàçàä
{
//Èùåì íèæíèé ôðàêòàë: èíäåêñ ìèí.çíà÷. îò i-Fractal_Bars íàçàä êîë.=Fractal_Bars*2+1, ò.å. i +- Fractal_Bars
na4_bar=i-Fractal_Bars;
if (na4_bar<0)
{
kol_bar=Fractal_Bars*2+1+na4_bar;
na4_bar=0;
}
else
kol_bar=Fractal_Bars*2+1;
if (i==iLowest(Symbol(),TF,MODE_LOW,kol_bar,na4_bar))
{
switch(HighLow(LowBar,HighBar))
{
case -1:
{
if (NormalizeDouble(iLow(Symbol(),TF,i),Digits)<NormalizeDouble(iLow(Symbol(),TF,LowBar),Digits))
{
long1[i]=iLow(Symbol(),TF,i);
long1[LowBar]=0;
LowBar=i;
// tek_kol_voln++;
}
break;
}
case 1: // íîâûé íèç
{
if (NormalizeDouble(iLow(Symbol(),TF,i),Digits)<NormalizeDouble(iHigh(Symbol(),TF,HighBar),Digits))
{
long1[i]=iLow(Symbol(),TF,i);
LowBar=i;
tek_kol_voln++;
}
break;
}
case 0: // ïåðâûé ìèí.
{
long1[i]=iLow(Symbol(),TF,i);
LowBar=i;
tek_kol_voln++;
break;
}
}
}
//Èùåì âåðõíèé ôðàêòàë
na4_bar=i-Fractal_Bars;
if (na4_bar<0)
{
kol_bar=Fractal_Bars*2+1+na4_bar;
na4_bar=0;
}
else
kol_bar=Fractal_Bars*2+1;
if (i==iHighest(Symbol(),TF,MODE_HIGH,kol_bar,na4_bar) && long1[i]==0)
{
switch(HighLow(LowBar,HighBar))
{
case 1: // íîâûé âåðõ
{
if (NormalizeDouble(iHigh(Symbol(),TF,i),Digits)>NormalizeDouble(iHigh(Symbol(),TF,HighBar),Digits))
{
short1[i]=iHigh(Symbol(),TF,i);
short1[HighBar]=0;
HighBar=i;
// tek_kol_voln++;
}
break;
}
case -1:
{
if (NormalizeDouble(iHigh(Symbol(),TF,i),Digits)>NormalizeDouble(iLow(Symbol(),TF,LowBar),Digits))
{
short1[i]=iHigh(Symbol(),TF,i);
HighBar=i;
tek_kol_voln++;
}
break;
}
case 0: // ïåðâûé ìàêñ.
{
short1[i]=iHigh(Symbol(),TF,i);
HighBar=i;
tek_kol_voln++;
break;
}
}
}
if (tek_kol_voln>kol_voln)break;
}
kol_bars=i;
if (Out_Grafic) //Ðèñóåì ëîìàíóþ
if (Period()<=TF)
{
del_obj(nom_ind);
int LastExtremumBar = -1;
for(i=kol_bars;i>=Na4_Bar_Fract;i--)
{
if (long1[i]!=0 || short1[i]!=0)
{
if (LastExtremumBar!=-1)
{
if (long1[i]!=0)
{
int Nom_Bar1= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,LastExtremumBar));
int Nom_Bar12= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,LastExtremumBar-1));
if (LastExtremumBar==0)Nom_Bar12=0;
int j1=Nom_Bar1;
if (Nom_Bar1<=MathMin(kol_bars,Bars-1))
{
for (j1=Nom_Bar1;j1>=Nom_Bar12;j1--)if (short1[LastExtremumBar]==High[j1])break;
if (j1<Nom_Bar12)j1=Nom_Bar1;
}
int Nom_Bar2= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,i));
Nom_Bar12= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,i-1));
if (i==0)Nom_Bar12=0;
int j2=Nom_Bar2;
if (Nom_Bar2<=MathMin(kol_bars,Bars-1))
{
for (j2=Nom_Bar2;j2>=Nom_Bar12;j2--)if (long1[i]==Low[j2])break;
if (j2<Nom_Bar12)j2=Nom_Bar2;
}
ObjectCreate(StringConcatenate("Trend_",nom_ind,"_",i),OBJ_TREND,0,
Time[j1],short1[LastExtremumBar],Time[j2],long1[i]);
ObjectSet(StringConcatenate("Trend_",nom_ind,"_",i),OBJPROP_COLOR,col_DW);
}
if (short1[i]!=0)
{
Nom_Bar1= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,LastExtremumBar));
Nom_Bar12= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,LastExtremumBar-1));
if (LastExtremumBar==0)Nom_Bar12=0;
j1=Nom_Bar1;
if (Nom_Bar1<=MathMin(kol_bars,Bars-1))
{
for (j1=Nom_Bar1;j1>=Nom_Bar12;j1--)if (long1[LastExtremumBar]==Low[j1])break;
if (j1<Nom_Bar12)j1=Nom_Bar1;
}
Nom_Bar2= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,i));
Nom_Bar12= iBarShift(Symbol(),Period(),iTime(Symbol(),TF,i-1));
if (i==0)Nom_Bar12=0;
j2=Nom_Bar2;
if (Nom_Bar2<=MathMin(kol_bars,Bars-1))
{
for (j2=Nom_Bar2;j2>=Nom_Bar12;j2--)if (short1[i]==High[j2])break;
if (j2<Nom_Bar12)j2=Nom_Bar2;
}
ObjectCreate(StringConcatenate("Trend_",nom_ind,"_",i),OBJ_TREND,0,
Time[j1],long1[LastExtremumBar],Time[j2],short1[i]);
ObjectSet(StringConcatenate("Trend_",nom_ind,"_",i),OBJPROP_COLOR,col_UP);
}
ObjectSet(StringConcatenate("Trend_",nom_ind,"_",i),OBJPROP_RAY,0);
ObjectSet(StringConcatenate("Trend_",nom_ind,"_",i),OBJPROP_WIDTH,2);
}
LastExtremumBar=i;
}
}
}
for(i=0;i<=Razm_Mas_Fract;i++) if (short1[i]!=0) long1[i]=short1[i];
ArrayInitialize(mas_extremum,0);
kol_mas_extr1=0;
for(i=0;i<=Razm_Mas_Fract;i++)
if (long1[i]!=0)
{
mas_extremum[kol_mas_extr1][0]=NormalizeDouble(long1[i],Digits);
mas_extremum[kol_mas_extr1][1]=NormalizeDouble(i,0);
kol_mas_extr1++;
}
return(0);
}
//+------------------------------------------------------------------+
int HighLow(int L, int H)
{
// íà÷àëî ãðàôèêà
if (L == -1 && H >= 0) return(1); // íèçà åù¸ íå áûëî, à âåðõ óæå áûë, ýòî íîâûé âåðõ
if (L >= 0 && H == -1) return(-1); // âåðõà åù¸ íå áûëî, à íèç óæå áûë, ýòî íîâûé íèç
// ïðîäîëæåíèå ãðàôèêà
if (L >= 0 && H >= 0)
{
if (L < H) return(1); // íàéäåí âåðõ èëè íèç
if (L > H) return(-1); // íàéäåí âåðõ èëè íèç
}
return(0); // (L==-1 è H==-1) ïåðâûé ìàõ. èëè ìèí. - íà÷àëî ãðàôèêà
}
//------------------------------------------------------------------------
void del_obj(int nom)
{
for(int i=Razm_Mas_Fract;i>=0;i--)
if (ObjectFind(StringConcatenate("Trend_",nom,"_",i))!=-1)
ObjectDelete(StringConcatenate("Trend_",nom,"_",i));
}
//------------------------------------------------------------------------
string Form_TL(int Step)
{
n1_TL=-MA_Shift;
n2_TL=Step-MA_Shift;
pr1_TL=iMA(Symbol(),TF_Torg,MA_Period,MA_Shift,MA_Method,MA_Applied_Price,n1_TL);
pr2_TL=iMA(Symbol(),TF_Torg,MA_Period,MA_Shift,MA_Method,MA_Applied_Price,n2_TL);
koef1=(pr1_TL-pr2_TL)/(n2_TL-n1_TL)/Point;
if (Period()>TF_Torg)
{
ObjectDelete(Name_Trend_Line);
return(0);
}
if (Out_Trend_Line)
{
if (ObjectFind(Name_Trend_Line)<0)ObjectCreate(Name_Trend_Line,OBJ_TREND,0,0,0,0,0);
ObjectSet(Name_Trend_Line,OBJPROP_TIME1,iTime(Symbol(),TF_Torg,n2_TL));
ObjectSet(Name_Trend_Line,OBJPROP_TIME2,iTime(Symbol(),TF_Torg,n1_TL));
ObjectSet(Name_Trend_Line,OBJPROP_PRICE1,pr2_TL);
ObjectSet(Name_Trend_Line,OBJPROP_PRICE2,pr1_TL);
ObjectSet(Name_Trend_Line,OBJPROP_COLOR,Blue);
ObjectSet(Name_Trend_Line,OBJPROP_WIDTH,1);
}
return(0);
}
//+------------------------------------------------------------------+
void ind_MA(int end_bar)
{
string Name, Prefix_MA="MA_";
for (int indexBar = 0; indexBar < Bars; indexBar++)
{
Name = Prefix_MA + DoubleToStr(indexBar, 0);
ObjectDelete(Name);
}
if (Period()>TF_Torg)return;
int n;
double pr1,pr2;
color ColorMA=Green;
pr1=iMA(Symbol(),TF_Torg,MA_Period,MA_Shift,MA_Method,MA_Applied_Price,-MA_Shift);
for (indexBar = 1; indexBar < MathMin(end_bar,Bars); indexBar++)
{
n=indexBar-MA_Shift;
pr2=iMA(Symbol(),TF_Torg,MA_Period,MA_Shift,MA_Method,MA_Applied_Price,n);
Name = Prefix_MA + DoubleToStr(indexBar, 0);
if (ObjectFind(Name) == -1)
{
ObjectCreate(Name, OBJ_TREND, 0, 0, 0, 0, 0);
ObjectSet(Name, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(Name, OBJPROP_WIDTH, 2);
ObjectSet(Name, OBJPROP_RAY, false);
}
ObjectSet(Name, OBJPROP_TIME1, iTime(Symbol(),TF_Torg,indexBar-MA_Shift));
ObjectSet(Name, OBJPROP_PRICE1, pr2);
ObjectSet(Name, OBJPROP_TIME2, iTime(Symbol(),TF_Torg,indexBar-MA_Shift - 1));
ObjectSet(Name, OBJPROP_PRICE2, pr1);
ObjectSet(Name, OBJPROP_COLOR, ColorMA);
pr1=pr2;
}
}
//=============================================================
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
---