ELabunskyVolaPresser

ELabunskyVolaPresser
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
ELabunskyVolaPresser
#property copyright "Eugene Labunsky / http://www.trendmedium.com/tmt4/"
#property link      "http://www.trendmedium.com/tmt4/"

#property indicator_chart_window

extern int MainFilterSpeed = 8;
extern int MainFilterSlow = 16;

extern int SmallFilterSpeed = 3;
extern int SmallFilterSlow = 12;

double MainFiltersMultipleFactor = 1.0;
double SmallFiltersMultipleFactor = 1.0;


extern bool SmallArrow = true;

int SlowFilterOffset = 0;

double emaBuffer[999];
double emaRes[999];

double getAbsEMACO(int period, int shift)
{

  if (iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, shift + period + 1) == 0)
    return (0);
  else
  {

    int i = 0;
    for (i = 0; i < period; i++)
    {
      emaBuffer[period - 1-i] = MathAbs(iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, shift + i) - iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, shift + i));
    }

    double pr = 2.0 / (period + 1);

    emaRes[0] = emaBuffer[0];
    for (i = 1; i < period; i++)
    {
      emaRes[i] = emaBuffer[i] *pr + emaRes[i - 1]*(1-pr);
    }

    return (emaRes[period - 1]);

  }

}

double getEMACO(int period, int shift)
{

  if (iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, shift + period + 1) == 0)
    return (0);
  else
  {

    int i = 0;
    for (i = 0; i < period; i++)
    {
      emaBuffer[period - 1-i] = (iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, shift + i) - iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, shift + i));
    }

    double pr = 2.0 / (period + 1);

    emaRes[0] = emaBuffer[0];
    for (i = 1; i < period; i++)
    {
      emaRes[i] = emaBuffer[i] *pr + emaRes[i - 1]*(1-pr);
    }

    return (emaRes[period - 1]);

  }

}


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{


  string short_name = "ELabunskyVolaPresser";
  IndicatorShortName(short_name);
  SetIndexLabel(0, short_name);

  ObjectsDeleteAll();


}

int start()
{

  int countedBars = IndicatorCounted();
  if (countedBars < 0)
  {
    countedBars = 0;
    ObjectsDeleteAll();
  }
  else
    countedBars--;

  int limit = Bars - countedBars;

  double ShiftY = MathAbs(High[Bars - 1] - Low[WindowFirstVisibleBar()]);

  for (int i = 0; i < limit; i++)
  {

    int signal = 0;

    string objName = "ELA_" + Symbol() + "-" + Period() + "-" + Time[i];


    if (ObjectFind(objName) >= 0)
      ObjectDelete(objName);

    int currOffSet = i;

    if (getAbsEMACO(MainFilterSpeed, currOffSet) > getAbsEMACO(MainFilterSlow, currOffSet + SlowFilterOffset))
    {

      double _smallFilterSpeed = getEMACO(SmallFilterSpeed, currOffSet);      
      double _SmallFilterSlow = getAbsEMACO(SmallFilterSlow, currOffSet);

      if (_smallFilterSpeed > _SmallFilterSlow *SmallFiltersMultipleFactor)
        signal = 1;
      else
        if (_smallFilterSpeed <  - _SmallFilterSlow * SmallFiltersMultipleFactor)
          signal =  - 1;
    }

    if (signal == 1)
    {


      if (!SmallArrow)
      {
        ObjectCreate(objName, OBJ_ARROW, 0, Time[i], Low[i]);
        //ObjectSet(objName,OBJPROP_ARROWCODE,SYMBOL_ARROWDOWN);
        ObjectSet(objName, OBJPROP_ARROWCODE, 233);
        ObjectSet(objName, OBJPROP_WIDTH, 1);
        ObjectSet(objName, OBJPROP_COLOR, Green);
      }
      else
      {

        ObjectCreate(objName, OBJ_ARROW, 0, Time[i], Low[i]);
        ObjectSet(objName, OBJPROP_ARROWCODE, 1);
        ObjectSet(objName, OBJPROP_WIDTH, 1);
        ObjectSet(objName, OBJPROP_COLOR, Green);
      }



    }

    if (signal ==  - 1)
    {


      if (!SmallArrow)
      {
        ObjectCreate(objName, OBJ_ARROW, 0, Time[i], High[i] + ShiftY / 100);
        //ObjectSet(objName,OBJPROP_ARROWCODE,SYMBOL_ARROWDOWN);
        ObjectSet(objName, OBJPROP_ARROWCODE, 234);
        ObjectSet(objName, OBJPROP_WIDTH, 1);
        ObjectSet(objName, OBJPROP_COLOR, Red);
      }
      else
      {

        ObjectCreate(objName, OBJ_ARROW, 0, Time[i], High[i]);
        ObjectSet(objName, OBJPROP_ARROWCODE, 2);
        ObjectSet(objName, OBJPROP_WIDTH, 1);
        ObjectSet(objName, OBJPROP_COLOR, Red);
      }

    }


  }

  return (0);

}

int deinit()
{
  ObjectsDeleteAll();
  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 ---