Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
fantom
//+------------------------------------------------------------------+
//| fantom.mq4 |
//| Sergey |
//| mserega@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Sergey"
#property link "mserega@yandex.ru"
//+------------------------------------------------------------------+
//ñòàâèòü íà GBP/USD H1, íà÷àëüíûé êàïèòàë 1000 $
extern int StopLos = 80; //ñòîï ëîññ (ñòàâèòñÿ, åñëè ïàðàìåòð áîëüøå 9)
extern int TeikPro = 0; //òåéê ïðîôèò (ñòàâèòñÿ, åñëè ïàðàìåòð áîëüøå 9)
extern int ProfBy = 20; //ìèíèìàëüíàÿ ïðèáûëü ïðè ïåðåâîäå â áåçóáûòîê
extern int StopBy = 40; //òàêèì áóäåò ñòîï-ëîññ ïðè ïåðåâîäå â áåçóáûòîê
extern int Otkat = 2; //æäåì íåáîëüøîé îòêàò îò Open[0] äëÿ îòêðûòèÿ îðäåðà
extern int PerPiv = 12; //ïåðèîä äëÿ ðàñ÷åòà òî÷êè ðàçâîðîòà (ïèâîòà)
extern int ChasPv = 4; //÷àñ äëÿ ðàñ÷åòà òî÷êè ðàçâîðîòà (ïèâîòà)
extern int SiPer = 54; //ïåðèîä èíäèêàòîðà Silver trend
extern int SiProc = 32; //ïðîöåíò îòêëîíåíèÿ îò âåðõà è íèçà
extern int SiDal = 2; //ìàêñèìàëüíûé íîìåð áàðà (ïðè îòêðûòèè), íà êîòîðîì ñòðåëêà SilverTrend
extern int YzVeer = 82; //ìàêñèìàëüíî äîïóñòèìîå ðàññòîÿíèå ìåæäó ÌÀ äëÿ âååðà
extern int TenPrc = 23; //ìàêñèìàëüíî äîïóñòèìûé ïðîöåíò òåíåé äëÿ áàðà 1 (ïðè ïðîáîå)
extern int BigTen = 74; //ìèíèìàëüíûé ïðîöåíò äëèííîé òåíè ìîëîòà
extern int LitTen = 10; //ìàêñèìàëüíûé ïðîöåíò êîðîòêîé òåíè ìîëîòà
extern int MolRaz = 44; //ìèíèìàëüíûé ðàçìåð ìîëîòà â ïóíêòàõ
extern int MolBar = 12; //êàê äàâíî áûë ìîëîò (ìàêñèìàëüíûé íîìåð åãî áàðà)
extern int HrBeg = 2; //÷àñ íà÷àëà òîðãîâëè (ïî òåðìèíàëó)
extern int HrEnd = 17; //÷àñ îêîí÷àíèÿ òîðãîâëè (ïî òåðìèíàëó)
extern int KolSec = 4; //êîëè÷åñòâî ñåêóíä, ìåæäó èçìåðåíèÿìè ñêîðîñòè öåíû
extern int Punkts = 28; //êîëè÷åñòâî ïóíêòîâ, êîòîðûå öåíà ïðîõîäèò çà ýòî âðåìÿ
//ñêîëüçÿùèå ñðåäíèå íà áàðå1
double ma[4];
//ïîñëåäíèå òðè ôðàêòàëà âåðøèíêè
double fv[3];
//ïîñëåäíèå òðè ôðàêòàëà íèçèíêè
double fn[3];
//âåðõíÿÿ è íèæíÿÿ ÌÀ, óðîâåíü ôðàêòàëà, ëîêàëüíûå ìèíèìóì è ìàêñèìóì
double ver_ma, niz_ma, fr_lev, lok_min, lok_max;
//ëîòû îòêðûòûõ ïîçèöèé, äíåâíîé ïèâîò, òÿæåëàÿ ÌÀ
double lb, ls, piv, big_ma;
//öåíû äëÿ ðàçëè÷íûõ òèêîâ
double prc_min, prc_max, prc_cur;
//íîìåð ÌÀ â ìàññèâå, ñ÷åò÷èê öèêëà, íîìåð ôðàêòàëà â ìàññèâå, ïðîöåíò òåíåé
int vma, nma, b, fr_num, prc_tn;
//òðåíä ïî ÌÀ, âååð ÌÀ, ïðîáîé ôðàêòàëà, ìîëîò, áàð íà êîòîðîì ìîëîò
int ma_trend, veer, prob_fr, molot, mltbr;
//ïåðåìåííûå silver trend, òåêóùèé ÷àñ (ïî òåðìèíàëó)
int si_trend, si_bar, chas;
//ñèãíàëû óïðàâëåíèÿ îðäåðàìè
int zakr_buy, zakr_sel, otkr_buy, otkr_sel;
//âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì è ïðåäûäóùåì òèêå, âðåìÿ ðàçëè÷íûõ òèêîâ
datetime vrem_new, vrem_old, tim_min, tim_max, tim_cur;
//òèï ïîñëåäíåãî ñèãíàëà ê îòêðûòèþ, ñòðîêà ñ íàçâàíèåì òðåíäà
string sigstr, trstr;
//ïîäõîäÿùåå ëè âðåìÿ äëÿ ñäåëîê
bool vrem;
//================================================================
//ïðè âêëþ÷åíèè ñîâåòíèêà óñòàíàâëèâàåì íà÷àëüíûå çíà÷åíèÿ
int init()
{
if(Period() != PERIOD_H1)
{
MessageBox("Íóæíî âûáðàòü ãðàôèê H1 ");
}
prc_cur = Bid;
prc_min = prc_cur;
prc_max = prc_cur;
tim_cur = TimeCurrent();
tim_min = tim_cur;
tim_max = tim_cur;
return(0);
}
//================================================================
int deinit()
{
ObjectDelete("pvt");
ObjectDelete("slv_up");
ObjectDelete("slv_dn");
return(0);
}
//================================================================
//+--------------------------------------------------------------+
int start()
{
//ñìîòðèì âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì òèêå
vrem_new=Time[1];
//ðàñ÷åòû âûïîëíÿåì òîëüêî ïðè ïîÿâëåíèè íîâîãî áàðà
if(vrem_new!=vrem_old)
{
//îáíóëÿåì ñèãíàëû
zakr_buy=0; zakr_sel=0; otkr_buy=0; otkr_sel=0;
//ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå 1
ma[0] = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,1);
ma[1] = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,1);
ma[2] = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);
ma[3] = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,1);
big_ma= iMA(NULL,0,377,0,MODE_EMA,PRICE_CLOSE,1);
//ðàñ÷åò âåðõíåé ÌÀ
vma = ArrayMaximum(ma);
ver_ma = ma[vma];
//ðàñ÷åò íèæíåé ÌÀ
nma = ArrayMinimum(ma);
niz_ma = ma[nma];
//îïðåäåëåíèå òðåíäà ïî ÌÀ
ma_trend = 0;
veer = 0;
//áû÷èé òðåíä
if( (ma[3]<ma[2]) && (ma[2]<ma[1]) && (ma[2]<ma[0]) )
{
ma_trend = 1;
if( (ma[1] < ma[0]) && ((ma[3] + YzVeer*Point) > ma[0]) )
{
veer = 1;
}
}
//ìåäâåæèé òðåíä
if( (ma[3]>ma[2]) && (ma[2]>ma[1]) && (ma[2]>ma[0]) )
{
ma_trend =-1;
if( (ma[1] > ma[0]) && ((ma[3] - YzVeer*Point) < ma[0]) )
{
veer =-1;
}
}
//îïðåäåëåíèå óðîâíåé ïîñëåäíèõ òðåõ ôðàêòàëîâ âåðøèí è ëîêàëüíîãî ìàêñèìóìà
//ëîêàëüíûé ìàêñèìóì - ìàêñèìóì íà ó÷àñòêå îò áàðà 1 äî áëèæàéøåãî ôðàêòàëà - âåðøèíêè
fr_num = 0;
lok_max = High[1];
for(b = 1; b < Bars; b++)
{
if ( (fr_num < 1) && (High[b] > lok_max) )
{
lok_max = High[b];
}
fr_lev = iFractals(NULL,0,MODE_UPPER,b);
if( (fr_lev > 0) && (b > 2) )
{
fv[fr_num] = fr_lev;
fr_num = fr_num+1;
}
if(fr_num > 2)
{
break;
}
}
//îïðåäåëåíèå óðîâíåé ïîñëåäíèõ òðåõ ôðàêòàëîâ íèçèí è ëîêàëüíîãî ìèíèìóìà
//ëîêàëüíûé ìèíèìóì - ìèíèìóì íà ó÷àñòêå îò áàðà 1 äî áëèæàéøåãî ôðàêòàëà - íèçèíêè
fr_num = 0;
lok_min = Low[1];
for(b = 1; b < Bars; b++)
{
if ( (fr_num < 1) && (Low[b] < lok_min) )
{
lok_min = Low[b];
}
fr_lev = iFractals(NULL,0,MODE_LOWER,b);
if( (fr_lev > 0) && (b > 2) )
{
fn[fr_num] = fr_lev;
fr_num = fr_num+1;
}
if(fr_num > 2)
{
break;
}
}
//ñêîëüêî ôðàêòàëîâ ïðîáèòî áàðîì 1
prob_fr = 0;
if( (Open[1] < fv[0]) && (Close[1] > fv[0]) )
{
prob_fr++;
if( (Open[1] < fv[1]) && (Close[1] > fv[1]) ) {prob_fr++;}
if( (Open[1] < fv[2]) && (Close[1] > fv[2]) ) {prob_fr++;}
}
if( (Open[1] > fn[0]) && (Close[1] < fn[0]) )
{
prob_fr--;
if( (Open[1] > fn[1]) && (Close[1] < fn[1]) ) {prob_fr--;}
if( (Open[1] > fn[2]) && (Close[1] < fn[2]) ) {prob_fr--;}
}
//îïðåäåëåíèå íàïðàâëåíèÿ ïîñëåäíåé ñòðåëêè Silver trend è áàðà íà êîòîðîì îíà áûëà (íà H1)
opr_strel(si_trend, si_bar);
trstr = "";
if(si_trend > 0) {trstr = "BULL";}
if(si_trend < 0) {trstr = "BEAR";}
//ðàñ÷åò è ïðîðèñîâêà ïèâîòà (òî÷êè ðàçâîðîòà)
piv=opr_piv();
//ïðîâåðêà ïîäõîäÿùåãî âðåìåíè (true, false)
vrem=proverka_vremeni();
//ñêîëüêî ïðîöåíòîâ ñîñòàâëÿþò òåíè äëÿ áàðà 1
prc_tn = proc_teney();
//áëèæàéøèé áàð, ãäå åñòü ìîëîò
mltbr = 0;
for(b = 1; b < 20; b++)
{
if(opr_molot(b) != 0)
{
mltbr = b;
break;
}
}
//ïðîâåðêà, åñòü ìîëîò èëè íåò íà çàäàííîì áàðå
if(mltbr > 0)
{
molot = opr_molot(mltbr);
}
//ìîëîò ïî òðåíäó
//-------------------------------------------------------
if(mltbr <= MolBar)
{
if( (molot > 0) && (Low[mltbr] <= lok_min) )
{
if( (ma_trend > 0) && (si_trend > 0) )
{
zakr_sel = 2;
otkr_buy = 2;
sigstr = "ÌÎËÎÒ ÏÎ ÒÐÅÍÄÓ";
}
}
//-------------------------------------------------------
if( (molot < 0) && (High[mltbr] >= lok_max) )
{
if( (ma_trend < 0) && (si_trend < 0) )
{
zakr_buy = 2;
otkr_sel = 2;
sigstr = "ÌÎËÎÒ ÏÎ ÒÐÅÍÄÓ";
}
}
}
//-------------------------------------------------------
//ÎÑÍÎÂÍÎÉ ÑÈÃÍÀË Ê ÎÒÊÐÛÒÈÞ ( ñòðåëêà íà èíäèêàòîðå SilverTrend íà áàðå 1 èëè 2)
//-------------------------------------------------------
if(vrem == true)
{
if( (si_trend == 1) && (Close[1] > piv) )
{
zakr_sel = 2;
if(si_bar <= SiDal)
{
otkr_buy = 2;
sigstr = "ÑÒÐÅËÊÀ ÍÀ ÈÍÄÈÊÀÒÎÐÅ SILVER TREND";
}
}
//-------------------------------------------------------
if( (si_trend == -1) && (Close[1] < piv) )
{
zakr_buy = 2;
if(si_bar <= SiDal)
{
otkr_sel = 2;
sigstr = "ÑÒÐÅËÊÀ ÍÀ ÈÍÄÈÊÀÒÎÐÅ SILVER TREND";
}
}
}
//-------------------------------------------------------
//îäíà äëèííàÿ ñâå÷à ñ êîðîêòèìè òåíÿìè ïðîáèâàåò âñå 4 ÌÀ
//-------------------------------------------------------
if( (Open[1] < niz_ma) && (Close[1] > ver_ma) && (vrem == true) )
{
if( (prob_fr > 0) || (ma_trend > 0) || (Close[1] > piv) || (big_ma < niz_ma))
{
zakr_sel = 2;
if(prc_tn < TenPrc)
{
otkr_buy = 2;
sigstr = "ÏÐÎÁÎÉ 4Õ ÌÀ";
}
}
}
//-------------------------------------------------------
if( (Open[1] > ver_ma) && (Close[1] < niz_ma) && (vrem == true) )
{
if( (prob_fr < 0) || (ma_trend < 0) || (Close[1] < piv) || (big_ma > ver_ma))
{
zakr_buy = 2;
if(prc_tn < TenPrc)
{
otkr_sel = 2;
sigstr = "ÏÐÎÁÎÉ 4Õ ÌÀ";
}
}
}
//-------------------------------------------------------
//ïðîáîé äâóõ ÌÀ è ôðàêòàëà îäíîé ñâå÷åé ïî òðåíäó ïîñëå îòêàòà (íå îòëàæåíî)
//-------------------------------------------------------
if( (ma_trend > 0) && (fn[1] > lok_min) && (vrem == true) )
{
if( (Open[1]<ma[2]) && (Open[1]<ma[1]) && (Close[1]>ma[2]) && (Close[1]>ma[1]) )
{
if(prob_fr > 0)
{
zakr_sel = 2;
if( (prc_tn < TenPrc) && (Close[1] > piv) )
{
otkr_buy = 2;
sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÌÀ È ÔÐÀÊÒÀËÀ ÏÎ ÒÐÅÍÄÓ";
}
}
}
}
//-------------------------------------------------------
if( (ma_trend < 0) && (fv[1] < lok_max) && (vrem == true) )
{
if( (Open[1]>ma[2]) && (Open[1]>ma[1]) && (Close[1]<ma[2]) && (Close[1]<ma[1]) )
{
if(prob_fr < 0)
{
zakr_buy = 2;
if( (prc_tn < TenPrc) && (Close[1] < piv) )
{
otkr_sel = 2;
sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÌÀ È ÔÐÀÊÒÀËÀ ÏÎ ÒÐÅÍÄÓ";
}
}
}
}
//-------------------------------------------------------
//ïðîáîé äâóõ ôðàêòàëîâ ïðè óçêîì âååðå ÌÀ
//-------------------------------------------------------
if( (veer > 0) && (prob_fr > 1) && (vrem == true) )
{
zakr_sel = 2;
if(prc_tn < TenPrc)
{
otkr_buy = 2;
sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÔÐÀÊÒÀËÎÂ ÏÐÈ ÓÇÊÎÌ ÂÅÅÐÅ";
}
}
//-------------------------------------------------------
if( (veer < 0) && (prob_fr <-1) && (vrem == true) )
{
zakr_buy = 2;
if(prc_tn < TenPrc)
{
otkr_sel = 2;
sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÔÐÀÊÒÀËÎÂ ÏÐÈ ÓÇÊÎÌ ÂÅÅÐÅ";
}
}
//------------------------------------------------------
//òåêóùèé ÷àñ (ïî òåðìèíàëó)
chas = TimeHour(Time[0]);
//â ýòè ÷àñû ñäåëêè íå îòêðûâàåì
if( (chas == 14) || (chas == 6) )
{
otkr_buy = 0;
otkr_sel = 0;
}
//òåïåðü ýòî íå íîâûé áàð
vrem_old = vrem_new;
}
//ÇÀÊÐÛÒÈÅ ÏÎÇÈÖÈÈ, ÅÑËÈ ÖÅÍÀ ÄÅËÀÅÒ ÐÅÇÊÈÉ ÐÛÂÎÊ ÏÐÎÒÈÂ ÍÅÅ
//-------------------------------------------------------------
//ñ÷èòûâàåì âðåìÿ è öåíó äëÿ òåêóùåãî òèêà
tim_cur = TimeCurrent();
prc_cur = Bid;
//çàïîìèíàåì òèê ñ ìèíèìàëüíîé öåíîé
if(prc_cur <= prc_min)
{
prc_min = prc_cur;
tim_min = tim_cur;
}
//çàïîìèíàåì òèê ñ ìàêñèìàëüíîé öåíîé
if(prc_cur >= prc_max)
{
prc_max = prc_cur;
tim_max = tim_cur;
}
//ìèíèìóì áûë íåäàâíî
if( (tim_cur - tim_min) < KolSec)
{
//öåíà çàìåòíî äâèíóëàñü ââåðõ - çàêðûâàåì ñåë
if( prc_cur >(prc_min + Punkts*Point) )
{
zakr_sel = 2;
}
}
else
{
//ñáðîñ ìèíèìóìà
prc_min = prc_cur;
tim_min = tim_cur;
}
//ìàêñèìóì áûë íåäàâíî
if( (tim_cur - tim_max) < KolSec)
{
//öåíà çàìåòíî äâèíóëàñü âíèç - çàêðûâàåì áàé
if( prc_cur < (prc_max - Punkts*Point) )
{
zakr_buy = 2;
}
}
else
{
//ñáðîñ ìàêñèìóìà
prc_max = prc_cur;
tim_max = tim_cur;
}
//-------------------------------------------------------------
//çàêðûâàåì è ìîäèôèöèðóåì èìåþùèåñÿ îðäåðà
perebor_orderov();
//ïîäñ÷èòûâàåì îòêðûòûå ïîçèöèè
podschet_orderov(lb,ls);
//åñëè öåíà ñäåëàëà ñèëüíûé õîä, íå îòêðûâàåì ñäåëêè ïðîòèâ ýòîãî äâèæåíèÿ
if( (Bid>ver_ma) && (Bid>fv[2]) && (Bid>fv[1]) && (molot != -1) )
{
otkr_sel = 0;
}
if( (Bid<niz_ma) && (Bid<fn[2]) && (Bid<fn[1]) && (molot != 1) )
{
otkr_buy = 0;
}
//ïðîâåðÿåì, ÷òî ó íàñ ïîëó÷èëîñü
Comment("\nSI_TREND = ",trstr," SI_BAR = ",si_bar,
"\n\nZAKR_BUY = ",zakr_buy,
"\n\nZAKR_SEL = ",zakr_sel,
"\n\nPRC_TN = ",prc_tn,
"\n\nMOLOT = ",mltbr,
"\n\nPIVOT = ",piv);
//ñòàâèì íîâûé îðäåð åñëè íóæíî
ystanovka_ordera();
return(0);
}
//+--------------------------------------------------------------+
//================================================================
//ïîäñ÷åò ëîòîâ áàåâ è ñåëîâ íàøåé âàëþòû (ïåðåâåäåííûå â á/ó íå ñ÷èòàåì)
void podschet_orderov(double &ob,double &os)
{
int i=0, kol=0;
//â íà÷àëå îáíóëÿåì ëîòû
ob=0; os=0;
kol=OrdersTotal();
if(kol<1) {return;}
for(i=0; i<kol; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY )
{
if( (OrderStopLoss()==0) || (OrderStopLoss() < OrderOpenPrice()) )
{
ob=ob+OrderLots();
}
}
if(OrderType()==OP_SELL)
{
if( (OrderStopLoss()==0) || (OrderStopLoss() > OrderOpenPrice()) )
{
os=os+OrderLots();
}
}
}
}
}
return;
}
//================================================================
//îïðåäåëåíèå çàêðûòèÿ áàðà ââåðõó èëè âíèçó äèàïàçîíà Silver Trend
int silv_cl(int b)
{
int i;
double pik, dno, lev_up, lev_dn, otkl, cur;
//íàõîäèì âåðõ è íèç äèàïàçîíà
pik = High[b];
dno = Low[b];
for(i=b; i<(b+SiPer); i++)
{
cur = High[i];
if(cur > pik)
{
pik = cur;
}
cur = Low[i];
if(cur < dno)
{
dno = cur;
}
}
//îòêëîíåíèå âíóòðü äèàïàçîíà íà çàäàííûé ïðîöåíò
otkl=( (pik-dno)*SiProc )/100;
//êðèòè÷åñêèå óðîâíè
lev_up=NormalizeDouble((pik-otkl),Digits);
lev_dn=NormalizeDouble((dno+otkl),Digits);
//ïðîðèñîâêà òåêóùèõ êðèòè÷åñêèõ óðîâíåé
if(b == 1)
{
ObjectDelete("slv_up");
ObjectCreate("slv_up",OBJ_HLINE,0,Time[1],lev_up);
ObjectSet("slv_up",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("slv_up",OBJPROP_COLOR,Aqua);
ObjectDelete("slv_dn");
ObjectCreate("slv_dn",OBJ_HLINE,0,Time[1],lev_dn);
ObjectSet("slv_dn",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("slv_dn",OBJPROP_COLOR,Aqua);
}
//öåíà ðàñòåò è çàêðûëàñü âûøå óðîâíÿ
if( (Close[b] > Open[b]) && (Close[b] > lev_up) )
{
return( 1);
}
//öåíà ïàäàåò è çàêðûëàñü íèæå óðîâíÿ
if( (Close[b] < Open[b]) && (Close[b] < lev_dn) )
{
return(-1);
}
return(0);
}
//================================================================
//îïðåäåëåíèå íàïðàâëåíèÿ ñòðåëêè è áàðà íà êîòîðîì îíà áûëà
void opr_strel(int &s_trend, int &s_bar)
{
int i, bv, bn, cur_zakr;
//îáíóëÿåì îòâåòû
s_trend=0; s_bar=0; bv=0; bn=0;
//èùåì äâå òî÷êè ñëåâà îò áàðà 1 (òàì, ãäå öåíà çàêðûëàñü ââåðõó è âíèçó äèàïàçîíà)
for(i=1; i<Bars; i++)
{
cur_zakr=silv_cl(i);
if( (cur_zakr > 0) && (i > bv) )
{
bv=i;
}
if( (cur_zakr < 0) && (i > bn) )
{
bn=i;
}
//íàéäåíû îáå òî÷êè - ñòîï
if( (bv > 0) && (bn > 0) )
{
break;
}
}
//òðåíä ñíà÷àëà áûë âíèç, à ïîòîì ðàçâåðíóëñÿ ââåðõ
if(bn > bv)
{
s_trend = 1;
s_bar = bv;
}
//òðåíä ñíà÷àëà áûë ââåðõ, à ïîòîì ðàçâåðíóëñÿ âíèç
if(bv > bn)
{
s_trend = -1;
s_bar = bn;
}
return;
}
//================================================================
//ðàñ÷åò ïèâîòà (òî÷êè ðàçâîðîòà) äåëàåòñÿ â îïðåäåëåííûé ÷àñ
double opr_piv()
{
int br, sth;
double h, l, c, otv;
//íàõîäèì áàð, íà êîòîðîì áûë ñòàðòîâûé ÷àñ
for(br = 1; br<30; br++)
{
if( ChasPv == TimeHour(Time[br]) )
{
sth = br;
break;
}
}
//ðàñ÷åò ïèâîòà (ìàêñèìóì + ìèíèìóì + çàêðûòèå ïîäåëèòü íà 3)
c=Close[sth];
h=High[iHighest(NULL,0,MODE_HIGH,PerPiv,sth)];
l=Low[iLowest(NULL,0,MODE_LOW,PerPiv,sth)];
otv=(h+l+c)/3;
otv=NormalizeDouble(otv,Digits);
//ïðîðèñîâêà ïèâîòà
ObjectDelete("pvt");
ObjectCreate("pvt",OBJ_HLINE,0,Time[1],otv);
ObjectSet("pvt",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("pvt",OBJPROP_COLOR,Magenta);
return(otv);
}
//================================================================
//ðàññ÷åò äëèíû òåíåé â ïðîöåíòàõ äëÿ áàðà 1
int proc_teney()
{
double telo, obsh, teni, ptn;
obsh = (High[1] - Low[1])/Point;
telo = MathMax(Open[1], Close[1]) - MathMin(Open[1], Close[1]);
telo = telo/Point;
teni = obsh - telo;
//â ïðîöåíòàõ (ïðîâåðêà ÷òîáû íå áûëî äåëåíèÿ íà 0)
if(obsh > 0)
{
ptn = (teni*100)/obsh;
ptn = NormalizeDouble(ptn,0);
}
else
{
return(100);
}
return(ptn);
}
//================================================================
//ïðîâåðêà, åñòü ëè ìîëîò íà áàðå br
int opr_molot(int br)
{
double razm_br, ver_ten, niz_ten;
razm_br = High[br] - Low[br];
ver_ten = High[br] - MathMax(Open[br], Close[br]);
niz_ten = MathMin(Open[br], Close[br]) - Low[br];
if( razm_br > (MolRaz*Point) )
{
if( (100*niz_ten) > (BigTen*razm_br) )
{
if( (100*ver_ten) < (LitTen*razm_br) )
{
return(1);
}
}
if( (100*ver_ten) > (BigTen*razm_br) )
{
if( (100*niz_ten) < (LitTen*razm_br) )
{
return(-1);
}
}
}
return(0);
}
//================================================================
//ïîäõîäÿùåå âðåìÿ äëÿ ñäåëêè èëè íåò
bool proverka_vremeni()
{
int h=TimeHour(TimeCurrent());
if( (h >= HrBeg) && (h <= HrEnd) )
{
return (true);
}
return(false);
}
//================================================================
//Êîäû îøèáîê, âîçâðàùàåìûå òîðãîâûì ñåðâåðîì
void print_error(int error)
{
string error_string;
switch(error)
{
case 0: error_string="Òîðãîâàÿ îïåðàöèÿ ïðîøëà óñïåøíî."; break;
case 1: error_string="OrderModify ïûòàåòñÿ èçìåíèòü óæå óñòàíîâëåííûå çíà÷åíèÿ òàêèìè æå çíà÷åíèÿìè. Íóæíî èçìåíèòü îäíî èëè íåñêîëüêî çíà÷åíèé è ïîâòîðèòü ïîïûòêó."; break;
case 2: error_string="Îáùàÿ îøèáêà. Ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé äî âûÿñíåíèÿ îáñòîÿòåëüñòâ. Âîçìîæíî ïåðåçàãðóçèòü îïåðàöèîííóþ ñèñòåìó è êëèåíòñêèé òåðìèíàë."; break;
case 3: error_string="Â òîðãîâóþ ôóíêöèþ ïåðåäàíû íåïðàâèëüíûå ïàðàìåòðû.Íàïðèìåð, íåïðàâèëüíûé ñèìâîë, íåîïîçíàííàÿ òîðãîâàÿ îïåðàöèÿ. Íåîáõîäèìî èçìåíèòü ëîãèêó ïðîãðàììû"; break;
case 4: error_string="Òîðãîâûé ñåðâåð çàíÿò. Ìîæíî ïîâòîðèòü ïîïûòêó ÷åðåç äîñòàòî÷íî áîëüøîé ïðîìåæóòîê âðåìåíè (îò íåñêîëüêèõ ìèíóò)."; break;
case 5: error_string="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà. Íåîáõîäèìî óñòàíîâèòü ïîñëåäíþþ âåðñèþ êëèåíòñêîãî òåðìèíàëà."; break;
case 6: error_string="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì. Íåîáõîäèìî óáåäèòüñÿ, ÷òî ñâÿçü íå íàðóøåíà (íàïðèìåð, ïðè ïîìîùè ôóíêöèè IsConnected) è ïîâòîðèòü ïîïûòêó"; break;
case 8: error_string="Ñëèøêîì ÷àñòûå çàïðîñû. Íåîáõîäèìî óìåíüøèòü ÷àñòîòó çàïðîñîâ, èçìåíèòü ëîãèêó ïðîãðàììû."; break;
case 64: error_string="Ñ÷åò çàáëîêèðîâàí. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé."; break;
case 65: error_string="Íåïðàâèëüíûé íîìåð ñ÷åòà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé."; break;
case 128: error_string="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè. Íåîáõîäèìî óáåäèòüñÿ, ÷òî òîðãîâàÿ îïåðàöèÿ äåéñòâèòåëüíî íå ïðîøëà"; break;
case 129: error_string="Íåïðàâèëüíàÿ öåíà bid èëè ask, âîçìîæíî, íåíîðìàëèçîâàííàÿ öåíà. Íåîáõîäèìî îáíîâèòü äàííûå ôóíêöèåé RefreshRates è ïîâòîðèòü ïîïûòêó."; break;
case 130: error_string="Ñëèøêîì áëèçêèå ñòîïû èëè íåïðàâèëüíî ðàññ÷èòàííûå èëè íåíîðìàëèçîâàííûå öåíû â ñòîïàõ "; break;
case 131: error_string="Íåïðàâèëüíûé îáúåì, îøèáêà â ãðàíóëÿöèè îáúåìà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé è èçìåíèòü ëîãèêó ïðîãðàììû."; break;
case 132: error_string="Ðûíîê çàêðûò. Ìîæíî ïîâòîðèòü ïîïûòêó ÷åðåç äîñòàòî÷íî áîëüøîé ïðîìåæóòîê âðåìåíè (îò íåñêîëüêèõ ìèíóò)."; break;
case 133: error_string="Òîðãîâëÿ çàïðåùåíà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé."; break;
case 134: error_string="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè. Ïîâòîðÿòü ñäåëêó ñ òåìè æå ïàðàìåòðàìè íåëüçÿ."; break;
case 135: error_string="Öåíà èçìåíèëàñü. Ìîæíî áåç çàäåðæêè îáíîâèòü äàííûå ïðè ïîìîùè ôóíêöèè RefreshRates è ïîâòîðèòü ïîïûòêó"; break;
case 136: error_string="Íåò öåí. Áðîêåð ïî êàêîé-òî ïðè÷èíå (íàïðèìåð, â íà÷àëå ñåññèè öåí íåò, íåïîäòâåðæäåííûå öåíû, áûñòðûé ðûíîê) íå äàë öåí èëè îòêàçàë."; break;
case 138: error_string="Çàïðîøåííàÿ öåíà óñòàðåëà, ëèáî ïåðåïóòàíû bid è ask. Ìîæíî áåç çàäåðæêè îáíîâèòü äàííûå ïðè ïîìîùè ôóíêöèè RefreshRates è ïîâòîðèòü ïîïûòêó!"; break;
case 139: error_string="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé è èçìåíèòü ëîãèêó ïðîãðàììû"; break;
case 140: error_string="Ðàçðåøåíà òîëüêî ïîêóïêà. Ïîâòîðÿòü îïåðàöèþ SELL íåëüçÿ."; break;
case 141: error_string="Ñëèøêîì ìíîãî çàïðîñîâ. Íåîáõîäèìî óìåíüøèòü ÷àñòîòó çàïðîñîâ, èçìåíèòü ëîãèêó ïðîãðàììû."; break;
case 145: error_string="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó è çàáëîêèðîâàí èç-çà âîçìîæíîãî ñêîðîãî èñïîëíåíèÿ"; break;
case 146: error_string="Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïîâòîðèòü ïîïûòêó òîëüêî ïîñëå òîãî, êàê ôóíêöèÿ IsTradeContextBusy âåðíåò FALSE."; break;
case 147: error_string="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì. Îïåðàöèþ ìîæíî ïîâòîðèòü òîëüêî â òîì ñëó÷àå, åñëè îáíóëèòü ïàðàìåòð expiration"; break;
case 148: error_string="Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì"; break;
case 149: error_string="Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî. "; break;
case 150: error_string="Ïîïûòêà çàêðûòü ïîçèöèþ ïî èíñòðóìåíòó â ïðîòèâîðå÷èè ñ ïðàâèëîì FIFO. Ñíà÷àëà íåîáõîäèìî çàêðûòü áîëåå ðàííèå ñóùåñòâóþùèå ïîçèöèè "; break;
}
Print("ÎØÈÁÊÀ ÒÎÐÃÎÂÎÉ ÎÏÅÐÀÖÈÈ : "+error_string);
}
//================================================================
//äåéñòâèÿ ñ îðäåðîì OP_BUY
void obr_open_buy()
{
bool close, modify;
//çàêðûòèå âî èçáåæàíèå ïîòåðü
if(zakr_buy==2)
{
close = OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
if(close == false)
{
print_error(GetLastError());
}
return;
}
//ïåðåâîä ñòîï-ëîññà â áåçóáûòîê
if(StopBy>7)
{
if( (OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) )
{
if( (Bid-StopBy*Point) > (OrderOpenPrice()+ProfBy*Point) )
{
modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Bid-StopBy*Point),OrderTakeProfit(),0,Aqua);
if(modify == false)
{
print_error(GetLastError());
}
return;
}
}
}
return;
}
//================================================================
//äåéñòâèÿ ñ îðäåðîì OP_SELL
void obr_open_sell()
{
bool close, modify;
//çàêðûòèå âî èçáåæàíèå ïîòåðü
if(zakr_sel==2)
{
close = OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
if(close == false)
{
print_error(GetLastError());
}
return;
}
//ïåðåâîä â ñòîï-ëîññà áåçóáûòîê
if(StopBy>7)
{
if( (OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()) )
{
if( (Ask+StopBy*Point) < (OrderOpenPrice()-ProfBy*Point) )
{
modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Ask+StopBy*Point),OrderTakeProfit(),0,Aqua);
if(modify == false)
{
print_error(GetLastError());
}
return;
}
}
}
return;
}
//================================================================
//Çàêðûòèå è ìîäèôèêàöèÿ îðäåðîâ íàøåé âàëþòû
void perebor_orderov()
{
int type=0,kol=0,i=0;
kol=OrdersTotal();
if(kol<1) {return;}
for(i=0; i<kol; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
type=OrderType();
if(type==OP_BUY)
{
obr_open_buy();
continue;
}
if(type==OP_SELL)
{
obr_open_sell();
continue;
}
}
}
}
return;
}
//================================================================
//óñòàíîâêà íîâîãî îðäåðà
void ystanovka_ordera()
{
double sl, tp;
int ticket;
sl = 0; tp = 0; ticket = 0;
if( (zakr_buy==0) && (otkr_buy>0) && (lb<0.01) )
{
//æäåì, êîãäà öåíà íåìíîãî îïóñòèòñÿ
if( Bid < (Open[0]-Otkat*Point) )
{
if(StopLos>9)
{
sl = Bid - StopLos*Point;
}
if(TeikPro>9)
{
tp = Ask + TeikPro*Point;
}
ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,sl,tp,sigstr,0,0,Blue);
if(ticket < 0)
{
print_error(GetLastError());
}
}
}
//-------------------------------------------------------------
if( (zakr_sel==0) && (otkr_sel>0) && (ls<0.01) )
{
//æäåì, êîãäà öåíà íåìíîãî ïîäíèìåòñÿ
if( Bid > (Open[0]+Otkat*Point) )
{
if(StopLos>9)
{
sl = Ask + StopLos*Point;
}
if(TeikPro>9)
{
tp = Bid - TeikPro*Point;
}
ticket = OrderSend(Symbol(),OP_SELL,0.01,Bid,3,sl,tp,sigstr,0,0,Magenta);
if(ticket < 0)
{
print_error(GetLastError());
}
}
}
return;
}
//================================================================
//THE END :))
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
---