Author: Copyright 2014, MetaQuotes Software Corp.
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
iBroker
//+------------------------------------------------------------------+
//|                                                      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