Navigation:Home > Content >

PivotSystemGB_edition3D_v2.1.mq4

Time: 2015-11-21 | Download file:PivotSystemGB_edition3D_v2.1.mq4

//+------------------------------------------------------------------+
//|                                      PivotSystemGB_edition3D.mq4 |
//|                                                           Kirill |
//|                                          StockProgrammer@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Michael Trofimov (a.k.a. Hunter_GB - hunter_gb@mail.ru) - the idea & technical task"  
#property copyright "Kirill - programmer" 
#property link      "StockProgrammer@mail.ru"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Lime
#property indicator_color2 LightBlue
#property indicator_color3 Yellow
#property indicator_color4 Blue
#property indicator_color5 Orange
#property indicator_color6 Indigo
#property indicator_color7 Red
#property indicator_color8 White



/*
Hunter_GB
3-дневный Пивот = (3-дневный максимум + 3-дневный минимум + Цена закрытия)/3

Второе число = (3-дневный максимум + 3-дневный минимум)/2

Дифференциал Пивота (условное число для высчитывания мин. и макс)= Дневной Пивот - Второе число.

Максимум 3-дневного Пивота = Дневной Пивот + Дифференциал Пивота.

Минимум 3-дневного Пивота = Дневной Пивот - Дифференциал Пивота.

-----------------

Поэтому есть предложение. Взять рабочий индикатор "PivotSystem(W+Pdin) - H_GB" из поста #36" и на его основе сделать 3-х дневный Пивот с S1,2 и R1,2 (PLdot=24)
*/




//---- input parameters
extern int PLDOTPeriod = 24;

//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
double PivotPLDOT[];

int fontsize=10;

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here

   ObjectDelete("3DayPivot");
   ObjectDelete("Sup1");
   ObjectDelete("Res1");
   ObjectDelete("Sup2");
   ObjectDelete("Res2");
   ObjectDelete("Sup3");
   ObjectDelete("Res3");   

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;


//---- indicator line
   SetIndexStyle(0,DRAW_LINE,0,3);
   SetIndexStyle(1,DRAW_LINE,0,1);
   SetIndexStyle(2,DRAW_LINE,0,1);
   SetIndexStyle(3,DRAW_LINE,0,1);
   SetIndexStyle(4,DRAW_LINE,0,1);
   SetIndexStyle(5,DRAW_LINE,0,1);
   SetIndexStyle(6,DRAW_LINE,0,1);
   SetIndexBuffer(0,PBuffer);
   SetIndexBuffer(1,S1Buffer);
   SetIndexBuffer(2,R1Buffer);
   SetIndexBuffer(3,S2Buffer);
   SetIndexBuffer(4,R2Buffer);
   SetIndexBuffer(5,S3Buffer);
   SetIndexBuffer(6,R3Buffer);
   

   SetIndexStyle(7,DRAW_ARROW,0,0);
   SetIndexArrow(7,161);
   SetIndexBuffer(7,PivotPLDOT);
   SetIndexEmptyValue(7,0.0);   


//---- name for DataWindow and indicator subwindow label
   short_name="WPP";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);

//----
   SetIndexDrawBegin(0,1);
//----
 

//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted();

   int limit, i, j;
   
   
   
//---- indicator calculation
   if (counted_bars==0)
   {

      ObjectCreate("3DayPivot", OBJ_TEXT, 0, 0,0);
      ObjectSetText("3DayPivot", "             3DayPivot",fontsize,"Arial",Red);
      ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Sup1", "        3DS 1",fontsize,"Arial",Red);
      ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Res1", "        3DR 1",fontsize,"Arial",Red);
      ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Sup2", "        3DS 2",fontsize,"Arial",Red);
      ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Res2", "        3DR 2",fontsize,"Arial",Red);
      ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Sup3", "        3DS 3",fontsize,"Arial",Red);
      ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Res3", "        3DR 3",fontsize,"Arial",Red);
   }
   
   if(counted_bars<0) return(-1);
      
   limit=(Bars-counted_bars)-1;


   for (i=limit; i>=0;i--)
   { 
      double _3dmax =0.0, _3dmin =2*(Ask+1000*Point), _3dclose=0.0;  //такое значение для _3dmin - страховка - просто нужно заведомо большое значение
      
      PivotPLDOT[i-1]=iMA(NULL,0,PLDOTPeriod,0,MODE_EMA, PRICE_TYPICAL,i);
   
   
   
      int lastday = TimeDayOfYear(Time[i]);
      int flag = 0; 
   
      for(j=i; j _3dmax) _3dmax = High[j];
                    if(Low[j]  < _3dmin) _3dmin = Low[j];
                    break;
         }  
         if(flag==4) break;
      }
      
      double P = (_3dmax + _3dmin + _3dclose)/3;
      
      PBuffer[i] = P;
      S1Buffer[i]=(2*P)-_3dmax;
      R1Buffer[i]=(2*P)-_3dmin;
      S2Buffer[i]=P-(_3dmax - _3dmin);
      R2Buffer[i]=P+(_3dmax - _3dmin);
      S3Buffer[i]=(2*P)-((2* _3dmax)-_3dmin);
      R3Buffer[i]=(2*P)+(_3dmax-(2*_3dmin));
      
      ObjectMove("3DayPivot", 0, Time[i],P);
      ObjectMove("Sup1", 0, Time[i],S1Buffer[i]);
      ObjectMove("Res1", 0, Time[i],R1Buffer[i]);
      ObjectMove("Sup2", 0, Time[i],S2Buffer[i]);
      ObjectMove("Res2", 0, Time[i],R2Buffer[i]);
      ObjectMove("Sup3", 0, Time[i],S3Buffer[i]);
      ObjectMove("Res3", 0, Time[i],R3Buffer[i]);

    
   }

//----
   return(0);
}

Recommend