CentreOfGravityV2_v1

Indicators Used
Standard Deviation indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
CentreOfGravityV2_v1
//+------------------------------------------------------------------+
//|                                         Center of Gravity V2.mq4 |
//| Original Code from NG3110@latchess.com                           |                                    
//| Linuxser 2007 for TSD    http://www.forex-tsd.com/               |
//| Brooky-Indicators.com mod 2011                                   |
//+------------------------------------------------------------------+
#property  copyright "ANG3110@latchess.com"
//---------ang_PR (Din)--------------------
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 RoyalBlue
#property indicator_color2 Red
#property indicator_color3 LimeGreen
#property indicator_color4 Red
#property indicator_color5 LimeGreen

#property indicator_color6 Silver
#property indicator_color7 Silver

#property indicator_style1 2
#property indicator_style2 0
#property indicator_style3 0
#property indicator_style4 0
#property indicator_style5 0
#property indicator_style6 0
#property indicator_style7 0
#property indicator_style8 0

//-----------------------------------

extern string OrigCode = "NG3110 AT latchess.com";
extern string Mod1Code = "Linuxser AT www.forex-tsd.com";
extern string Mod2Code = "Brooky AT Brooky-Indicators.com";
extern bool See_Prices = true;
extern int bars_back=192;
extern int m = 5;
extern int i = 0;
extern double kstd=0.618;
extern double kstd_internal=0.8;
extern int sName=1102;
//-----------------------
double fx[],sqh[],sql[],stdh[],stdl[],stdh2[],stdl2[];
double ai[10,10],b[10],x[10],sx[20];
double sum;
int    ip,p,n,f;
double qq,mm,tt;
int    ii,jj,kk,ll,nn;
double sq,std;

string p1name="",p2name="",p3name="",p4name="",p5name="",p6name="",p7name="",p8name="";

bool ready_flag=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Prepare_Object()
  {
   if(ready_flag==true) return;

   p=MathRound(bars_back);
   nn=m+1;
   ObjectCreate("pr"+sName,22,0,Time[p],fx[p]);
   ObjectSet("pr"+sName,14,159);

   ready_flag=true;
  }
//*******************************************
int init()
  {
   IndicatorShortName("Center of Gravity");
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,fx);
   SetIndexBuffer(1,sqh);
   SetIndexBuffer(2,sql);
   SetIndexBuffer(3,stdh);
   SetIndexBuffer(4,stdl);
   SetIndexBuffer(5,stdh2);
   SetIndexBuffer(6,stdl2);

   return(0);
  }
//----------------------------------------------------------
int deinit()
  {
   ObjectDelete("pr"+sName);
   ObjectDelete("p1n");
   ObjectDelete("p2n");
   ObjectDelete("p3n");
   ObjectDelete("p4n");
   ObjectDelete("p5n");
   ObjectDelete("p6n");
   ObjectDelete("p7n");
   ObjectDelete("p8n");
   return(0);
  }
//**********************************************************************************************
int start()
  {
   if(ready_flag==false) Prepare_Object();

   int mi;
//-------------------------------------------------------------------------------------------
   ip= iBarShift(Symbol(),Period(),ObjectGet("pr"+sName,OBJPROP_TIME1));
   p = bars_back;
   sx[1]=p+1;
   SetIndexDrawBegin(0,Bars-p-1);
   SetIndexDrawBegin(1,Bars-p-1);
   SetIndexDrawBegin(2,Bars-p-1);
   SetIndexDrawBegin(3,Bars-p-1);
   SetIndexDrawBegin(4,Bars-p-1);
   SetIndexDrawBegin(5,Bars-p-1);
   SetIndexDrawBegin(6,Bars-p-1);
//----------------------sx-------------------------------------------------------------------
   for(mi=1; mi<=nn*2-2; mi++)
     {
      sum=0;
      for(n=i; n<=i+p; n++)
        {
         sum+=MathPow(n,mi);
        }
      sx[mi+1]=sum;
     }
//----------------------syx-----------
   for(mi=1; mi<=nn; mi++)
     {
      sum=0.00000;
      for(n=i; n<=i+p; n++)
        {
         if(mi==1)
            sum+=Close[n];
         else
            sum+=Close[n] *MathPow(n,mi-1);
        }
      b[mi]=sum;
     }
//===============Matrix=======================================================================================================
   for(jj=1; jj<=nn; jj++)
     {
      for(ii=1; ii<=nn; ii++)
        {
         kk=ii+jj-1;
         ai[ii,jj]=sx[kk];
        }
     }
//===============Gauss========================================================================================================
   for(kk=1; kk<=nn-1; kk++)
     {
      ll=0; mm=0;
      for(ii=kk; ii<=nn; ii++)
        {
         if(MathAbs(ai[ii,kk])>mm)
           {
            mm = MathAbs(ai[ii, kk]);
            ll = ii;
           }
        }
      if(ll==0)
         return(0);

      if(ll!=kk)
        {
         for(jj=1; jj<=nn; jj++)
           {
            tt=ai[kk,jj];
            ai[kk, jj] = ai[ll, jj];
            ai[ll, jj] = tt;
           }
         tt=b[kk]; b[kk]=b[ll]; b[ll]=tt;
        }
      for(ii=kk+1; ii<=nn; ii++)
        {
         qq=ai[ii,kk]/ai[kk,kk];
         for(jj=1; jj<=nn; jj++)
           {
            if(jj==kk)
               ai[ii,jj]=0;
            else
               ai[ii,jj]=ai[ii,jj]-qq*ai[kk,jj];
           }
         b[ii]=b[ii]-qq*b[kk];
        }
     }
   x[nn]=b[nn]/ai[nn,nn];
   for(ii=nn-1; ii>=1; ii--)
     {
      tt=0;
      for(jj=1; jj<=nn-ii; jj++)
        {
         tt=tt+ai[ii,ii+jj] *x[ii+jj];
         x[ii]=(1/ai[ii,ii]) *(b[ii]-tt);
        }
     }
//===========================================================================================================================
   for(n=i; n<=i+p; n++)
     {
      sum=0;
      for(kk=1; kk<=m; kk++)
        {
         sum+=x[kk+1] *MathPow(n,kk);
        }
      fx[n]=x[1]+sum;
     }
//-----------------------------------Std-----------------------------------------------------------------------------------
   sq=0.0;
   for(n=i; n<=i+p; n++)
     {
      sq+=MathPow(Close[n]-fx[n],2);
     }
   sq=MathSqrt(sq/(p+1))*kstd;
   std=iStdDev(NULL,0,p,MODE_SMA,0,PRICE_CLOSE,i)*kstd;
   for(n=i; n<=i+p; n++)
     {
      stdh[n] = fx[n] + std;
      stdl[n] = fx[n] - std;

      sqh[n] = fx[n] + sq;
      sql[n] = fx[n] - sq;


      stdh2[n] = fx[n] + (kstd_internal*std);
      stdl2[n] = fx[n] - (kstd_internal*std);

      if(See_Prices)
        {
         p1name="p1n";
         ObjectDelete(p1name);
         ObjectCreate(p1name,OBJ_ARROW,0,Time[0],stdh[0]);
         ObjectSet(p1name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p1name,OBJPROP_ARROWCODE,6);
         ObjectSet(p1name,OBJPROP_COLOR,Red);

         p2name="p2n";
         ObjectDelete(p2name);
         ObjectCreate(p2name,OBJ_ARROW,0,Time[0],sqh[0]);
         ObjectSet(p2name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p2name,OBJPROP_ARROWCODE,6);
         ObjectSet(p2name,OBJPROP_COLOR,Red);

         p3name="p3n";
         ObjectDelete(p3name);
         ObjectCreate(p3name,OBJ_ARROW,0,Time[0],stdh2[0]);
         ObjectSet(p3name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p3name,OBJPROP_ARROWCODE,6);
         ObjectSet(p3name,OBJPROP_COLOR,Silver);

         p4name="p4n";
         ObjectDelete(p4name);
         ObjectCreate(p4name,OBJ_ARROW,0,Time[0],fx[0]);
         ObjectSet(p4name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p4name,OBJPROP_ARROWCODE,6);
         ObjectSet(p4name,OBJPROP_COLOR,Blue);

         p5name="p5n";
         ObjectDelete(p5name);
         ObjectCreate(p5name,OBJ_ARROW,0,Time[0],stdl2[0]);
         ObjectSet(p5name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p5name,OBJPROP_ARROWCODE,6);
         ObjectSet(p5name,OBJPROP_COLOR,Silver);

         p6name="p6n";
         ObjectDelete(p6name);
         ObjectCreate(p6name,OBJ_ARROW,0,Time[0],sql[0]);
         ObjectSet(p6name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p6name,OBJPROP_ARROWCODE,6);
         ObjectSet(p6name,OBJPROP_COLOR,LimeGreen);


         p7name="p7n";
         ObjectDelete(p7name);
         ObjectCreate(p7name,OBJ_ARROW,0,Time[0],fx[0]);
         ObjectSet(p7name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p7name,OBJPROP_ARROWCODE,6);
         ObjectSet(p7name,OBJPROP_COLOR,LimeGreen);

         p8name="p8n";
         ObjectDelete(p8name);
         ObjectCreate(p8name,OBJ_ARROW,0,Time[0],stdl[0]);
         ObjectSet(p8name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(p8name,OBJPROP_ARROWCODE,6);
         ObjectSet(p8name,OBJPROP_COLOR,LimeGreen);
        }
     }
//-------------------------------------------------------------------------------
   ObjectMove("pr"+sName,0,Time[p],fx[p]);
//----------------------------------------------------------------------------------------------------------------------------
   return(0);
  }
//==========================================================================================================================   

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---