//+------------------------------------------------------------------+
//| iBroker.mq4 |
//| Ïî ìîòèâàì Ñàìîîáó÷àþùèéñÿ ÝÊÑÏÅÐÒ(lsv)|
//| Ñìèðíîâ Ô.Í. 15.03.15 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "Fedor10_10@mail.ru"
#property version "1.00"
#property description "iBroker"
#property strict
#property indicator_separate_window
//---- indicator settings
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_level1 0.0
//---- input parameters
input uchar Step =1; //øàã ïåðöåïòðîíà
input float Probab =90.0; //% âåðîÿòíîñòè âûèãðûøà
input float forg =5.0; //% çàáûâàíèÿ èñòîðèè
input uchar PeriodMA=1; //ñãëàæèâàíèå òèêîâ ïðè=1 ïîâòîðåíèå öåíû
input uchar Stop =1; //StopLoss è TakeProfit
char sl[2048,1000]; //â ñâÿçè ñ èñïîëüçîâàíèåì ìàòðèö ïðèìåíÿåì êîðîòêèå òèïû
uchar StopLev,Spread;
ushort tr,w,mn,post[2048],Perc;
short mb,ms,Prib[2048];
int i,Pr[12],cena[2048,1000],MAt[250];
float forgt,Prob,rost[2048],spad[2048],sum[2048];
double Maxb[],Maxs[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit(void)
{
//---- 2 indicator buffers mapping
SetIndexBuffer(0,Maxb);
SetIndexBuffer(1,Maxs);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
//--- indicator buffers mapping
StopLev=(uchar)MarketInfo(Symbol(),MODE_STOPLEVEL);//Ìèíèìàëüíî äîïóñòèìûé óðîâåíü ñòîï-ëîññà/òåéê-ïðîôèòà â ïóíêòàõ
Spread=(uchar)MarketInfo(Symbol(),MODE_SPREAD);//Ñïðåä
forgt=(float)(1.0-forg/100.0);//ïðèâåäåíèå ê áîëåå ïðîñòîìó âèäó
Prob=(float)(Probab/100.0);//ïðèâåäåíèå ê áîëåå ïðîñòîìó âèäó
//---
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//----
int limit=rates_total-prev_calculated;
for(i=0; i<limit; i++)
{
Maxb[i]=mb;//ðèñóåì âñå ïðîôèòíûå ñäåëêè BUY
Maxs[i]=ms;//ðèñóåì âñå ïðîôèòíûå ñäåëêè SELL
mb=0; ms=0;//îáíóëèì ðåçóëüòàò ïîñëå èñïîëüçîâàíèÿ
}
//---- main loop
int Price=(int)(/*çäåñü ìîæåò áûòü âàø èíäèêàòîð*/Close[0]/Point);//ðåçóëüòàò äîëæåí áûòü öåëûì ÷èñëîì
//+------------------------------------------------------------------+
//| ñãëàæèâàíèå òèêîâ |
//+------------------------------------------------------------------+
int MA;//ñãëàæèâàíèå òèêîâ íà âåëè÷èíó PeriodMA
for(tr=PeriodMA-1; tr>0; tr--)
{
MAt[tr]=MAt[tr-1];//ïåðåçàïèñûâàåì ÿ÷åéêè ñî ñäâèãîì îò ñòàðøåãî ê ïîñëåäíåìó
MA+=MAt[tr];//ñóììèðóåì öåíû
}
MAt[0]=Price;
MA+=MAt[0];
MA/=PeriodMA;//ïîëó÷àåì òèêîâóþ ÌÀ
//+------------------------------------------------------------------+
//| çàïèñü èñòîðèè èçìåíåíèÿ öåíû |
//+------------------------------------------------------------------+
if(MathAbs(MA-Pr[0])>=Step/*çäåñü ìîæåò áûòü âàø èíäèêàòîð*/)//ïðè ïðåâûøåíèè øàãà ïðîèçâåäåì ïåðåçàïèñü öåïî÷êè
{
Pr[3]=Pr[2]; Pr[2]=Pr[1]; Pr[1]=Pr[0];//ïåðåçàïèñûâàåì ÿ÷åéêè
Pr[0]=MA;//ïåðåçàïèñûâàåì öåíó ïåðâîé ÿ÷åéêè
}
//+------------------------------------------------------------------+
if(MathAbs(MA-Pr[4])>=Step+1/*çäåñü ìîæåò áûòü âàø èíäèêàòîð*/)//ïðè ïðåâûøåíèè øàãà ïðîèçâåäåì ïåðåçàïèñü öåïî÷êè
{
Pr[7]=Pr[6]; Pr[6]=Pr[5]; Pr[5]=Pr[4];//ïåðåçàïèñûâàåì ÿ÷åéêè
Pr[4]=MA;//ïåðåçàïèñûâàåì öåíó ïåðâîé ÿ÷åéêè
}
//+------------------------------------------------------------------+
if(MathAbs(MA-Pr[8])>=Step+2/*çäåñü ìîæåò áûòü âàø èíäèêàòîð*/)//ïðè ïðåâûøåíèè øàãà ïðîèçâåäåì ïåðåçàïèñü öåïî÷êè
{
Pr[11]=Pr[10]; Pr[10]=Pr[9]; Pr[9]=Pr[8];//ïåðåçàïèñûâàåì ÿ÷åéêè
Pr[8]=0;//ïåðåçàïèñûâàåì öåíó ïåðâîé ÿ÷åéêè
}
//+------------------------------------------------------------------+
//| ñîçäàíèå ïåðöåïòðîíà(âûáîð òðåéäåðà) |
//+------------------------------------------------------------------+
Perc=0; mn=1;
for(tr=7; tr>0; tr--)
{//ñðàâíèâàåñòñÿ èçìåíåíèå äâèæåíèÿ öåíû òðåõ ñêîðîñòåé, à òàê æå ðàçíèöà ìåæäó íèìè
if(Pr[tr-1]>Pr[tr]) Perc=Perc+mn;//(ïðåäûäóùåå ìåíüøå öåíà âûðîñëà)ïîëó÷àåòñÿ âèä ÕÕÕÕÕÕÕÕÕ 9 çíàêîâ
mn=mn*2;//çàïîìèíàåì ìíîæèòåëü çíàêîìåñòà 2048òðåéäåðîâ(2^MemPc-1)
}
//+------------------------------------------------------------------+
//| îòêðûòèå âèðòóàëüíîãî îðäåðà(îòêðûòèå îðäåðà òðåéäåðîì ïîä ¹Perc)|
//+------------------------------------------------------------------+
if(cena[Perc,post[Perc]]!=0) post[Perc]++;//åñëè ïîñëåäíÿÿ ÿ÷åéêà çàíÿòà(îòêðûò îðäåð)ïîäãîòîâèì ñëåäóþùþþ ÿ÷åéêó
//(ðàçðåøåíèå òðåéäåðó îòêðûòü åùå îðäåð ïðè îòêðûòîì ïðåäûäóùåì)
cena[Perc,post[Perc]]=Price;//çàïîìíèì öåíó (îòêðûâàåì âèðòóàëüíûé Îðäåð)(Òðåéäåð îòêðûâàåò îðäåð)
//+------------------------------------------------------------------+
//| çàêðûòèå âèðòóàëüíîãî Îðäåðà |
//+------------------------------------------------------------------+
for(tr=0; tr<mn; tr++)//ïåðåáèðàåì ìàòðèöû(òðåéäåðîâ)
{
for(w=0; w<=post[tr]; w++)//ïåðåáèðàåì ÿ÷åéêè
{
if(cena[tr,w]>0)//åñëè Îðäåð îòêðûò
{
//+------------------------------------------------------------------+
//| ïðîâåðêà âèðòóàëüíîãî Îðäåðà |
//+------------------------------------------------------------------+
if((Price-cena[tr,w])>Stop && sl[tr,w]==0)
sl[tr,w]++; //åñëè öåíà âûðîñëà äî ñòîïà è íå áûëà â ìèíóñå çàïèøåì â ôëàã ïëþñ
if((Price-cena[tr,w])>(Stop+Spread))//åñëè öåíà âûðîñëà äî öåëè
{
if(sl[tr,w]<0) {rost[tr]--; Prib[tr]--;}// è áûëà â ìèíóñå óìåíüøàåì ðîñò(òðåéäåðó ìèíóñ áàëë)
else {rost[tr]++; Prib[tr]++;};//óâåëè÷èâàåì ðîñò(òðåéäåðó ïëþñ áàëë)
rost[tr]*=forgt;//çàáûâàåì ðîñò
spad[tr]*=forgt;//çàáûâàåì ñïàä
sum[tr]=rost[tr]+spad[tr];//çàïîìíèì ñóììó
cena[tr,w]=0;//çàêðûâàåì âèðòóàëüíûé Îðäåð(òðåéäåð çàêðûâàåò îðäåð)
sl[tr,w]=0;//ñáðîñ ôëàãà
}
if((cena[tr,w]-Price)>Stop && sl[tr,w]==0)
sl[tr,w]--; //åñëè öåíà óïàëà äî ñòîïà è íå áûëà â ïëþñå çàïèøåì â ôëàã ìèíóñ
if((cena[tr,w]-Price)>(Stop+Spread))//åñëè öåíà óïàëà äî öåëè
{
if(sl[tr,w]>0) {spad[tr]--; Prib[tr]++;}// è áûëà â ïëþñå óìåíüøàåì ñïàä(òðåéäåðó ìèíóñ áàëë)
else {spad[tr]++; Prib[tr]--;}//óâåëè÷èâàåì ñïàä(òðåéäåðó ïëþñ áàëë)
spad[tr]*=forgt;//çàáûâàåì ñïàä
rost[tr]*=forgt;//çàáûâàåì ðîñò
sum[tr]=rost[tr]+spad[tr];//çàïîìíèì ñóììó
cena[tr,w]=0;//çàêðûâàåì âèðòóàëüíûé Îðäåð(òðåéäåð çàêðûâàåò îðäåð)
sl[tr,w]=0;//ñáðîñ ôëàãà
}
//+------------------------------------------------------------------+
//| ïîäñ÷åò áàëëîâ ïîëîæèòåëüíûõ ñäåëîê âñåõ òðåéäåðîâ áðîêåðà |
//+------------------------------------------------------------------+
if(rost[tr]>0 && spad[tr]>0)//ïðè ïîÿâëåíèè ðåçóëüòàòîâ
{
if(rost[tr]/sum[tr]>Prob&&Prib[tr]>0.0) {mb+=Prib[tr]; Prib[tr]=0;}//ñóììèðóåì áàëëû âñåõ òðåéäåðîâ ïî BUY
if(spad[tr]/sum[tr]>Prob&&Prib[tr]<0.0) {ms+=Prib[tr]; Prib[tr]=0;}//ñóììèðóåì áàëëû âñåõ òðåéäåðîâ ïî SELL
}
}
//+------------------------------------------------------------------+
//| Äåôðàãìåíòàöèÿ âòîðè÷íûõ âõîäîâ(òðåéäåðà) |
//+------------------------------------------------------------------+
if(post[tr]>0)//åñëè ïîñëåäíÿÿ ÿ÷åéêà íå ïåðâàÿ
{
if(cena[tr,w]==0)//åñëè Îðäåð îòêðûò
{
cena[tr,w]=cena[tr,w+1];
cena[tr,w+1]=0;//ïåðåìåñòèì öåíó ñ áîëüøåãî íîìåðà
sl[tr,w]=sl[tr,w+1];
sl[tr,w+1]=0;//ïåðåìåñòèì ôëàã ñòîïà ñ áîëüøåãî íîìåðà
}//åñëè Îðäåð ïîñëåäíåé ÿ÷åéêè çàêðûò - óìåíüøèì êîëè÷åñòâî ÿ÷ååê
if(cena[tr,post[tr]]==0) post[tr]--;
}
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Comments