JVNG_Magnet_Indicator

Author: Copyright � 2007 Matthias Truxa
JVNG_Magnet_Indicator
0 Views
0 Downloads
0 Favorites
JVNG_Magnet_Indicator
//+------------------------------------------------------------------+
//|                                  JVNG Magnet Index Indicator.mq4 |
//|                                  Copyright © 2007 Matthias Truxa |
//|                                              usmail4matt@gmx.net |
//+------------------------------------------------------------------+

#include "..\include\stdlib.mqh"
#property copyright "Copyright © 2007 Matthias Truxa"
#property link      "mailto:usmail4matt@gmx.net"

#property indicator_chart_window

double hi, lo; 
int zones[]; 

int init()
{
   Analyze(); 

   IndicatorShortName("Jvng Magnet");
   return (0);
}

int start()
{
      
   return (0);
}

void Analyze()
{
   ObjectsDeleteAll(0, OBJ_HLINE); 
   ObjectCreate("wait", OBJ_LABEL, 0, 0, 0); 
   ObjectSet("wait", OBJPROP_XDISTANCE, 10);
   ObjectSet("wait", OBJPROP_YDISTANCE, 100);
   ObjectSetText("wait", "Calculating Resistance and Support Levels from past data...", 10, "Arial", Yellow); 
   ObjectCreate("status", OBJ_LABEL, 0, 0, 0); 
   ObjectSet("status", OBJPROP_XDISTANCE, 10);
   ObjectSet("status", OBJPROP_YDISTANCE, 120);
   ObjectSetText("status", "Initializing...", 8, "Arial", Yellow); 
   
   ObjectSetText("status", "Locating all-time High and Low from " + Bars + "...", 8); 
   double h, l; 
   hi = -1; lo = -1; 
   for (int i=1; i<Bars; i++)
   {
      h = High[i]; 
      l = Low[i]; 
      if ((h > hi) || (hi < 0))
         hi = h; 
      if ((lo > l) || (lo < 0))
         lo = l; 
   }
   hi = NormalizeDouble(hi, Digits-1) + Point*10; 
   lo = NormalizeDouble(lo, Digits-1) - Point*10; 
   ObjectCreate("R_High", OBJ_HLINE, 0, 0, hi); 
   ObjectSet("R_High", OBJPROP_COLOR, Red); 
   ObjectSet("R_High", OBJPROP_WIDTH, 10); 
   ObjectCreate("R_Low", OBJ_HLINE, 0, 0, lo); 
   ObjectSet("R_Low", OBJPROP_COLOR, Red); 
   ObjectSet("R_Low", OBJPROP_WIDTH, 10); 
   
   ObjectSetText("status", "Zone Setup...", 8); 
   ArrayResize(zones, MathRound(hi - lo) * MathPow(10, Digits-1) + 16); 
   ArrayInitialize(zones, 0); 
   ObjectSetText("status", "Zone Setup - counting spikes within " + Bars + " Bars...", 8); 
   for (i=1; i<Bars-1; i++)
   {
      if ( ((Open[i] < Close[i]) && (Open[i+1] > Close[i+1])) && ((MathAbs(Close[i] - Open[i+1]) < 10) || (MathAbs(High[i] - High[i+1]) < 10)) )  // if up-spike
         zones[Translate(Close[i])]++; 
      else if ( ((Open[i] > Close[i]) && (Open[i+1] < Close[i+1])) && ((MathAbs(Open[i+1] - Close[i]) < 10) || (MathAbs(Low[i] - Low[i+1]) < 10)) )  // if down-spike
         zones[Translate(Open[i])]++; 
   }

   ObjectSetText("status", "Zone Setup - finding Max and Min number of hits...", 8); 
   int hhi = -1, hlo = -1; 
   for (i=0; i<ArraySize(zones); i++)
   {
      if ((zones[i] > hhi) || (hhi < 0))
         hhi = zones[i]; 
      if ( ((hlo > zones[i]) || (hlo < 0)) && (zones[i] != 0) )
         hlo = zones[i]; 
   }

   ObjectSetText("status", "Zone Setup - creating resistance and support line objects...", 8); 
   double price; 
   for (i=0; i<ArraySize(zones); i++)
   {
      if (zones[i] == 0)
         continue; 
      price = Revert(i); 
      ObjectCreate("RS_" + i, OBJ_HLINE, 0, 0, price); 
      ObjectSet("RS_" + i, OBJPROP_COLOR, RGB(50 + 200.0 / (hhi-hlo) * zones[i], 0, 0)); 
      ObjectSet("RS_" + i, OBJPROP_STYLE, STYLE_SOLID); 
      ObjectSet("RS_" + i, OBJPROP_WIDTH, 3); 
      ObjectSet("RS_" + i, OBJPROP_BACK, true); 
      ObjectSetText("RS_" + i, DoubleToStr(zones[i], 0) + "x Resistance/Support Line", 8); 
   }
   
   ObjectDelete("status"); 
   ObjectDelete("wait"); 
}

int Translate(double price)
{
   return ( MathRound((price - lo) * MathPow(10, Digits-1)) ); 
}

double Revert(int index)
{
   return (index / MathPow(10, Digits-1) + lo + Point*5); 
}

Comments