SnakeForce~

SnakeForce~
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
SnakeForce~
/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red

extern int cPeriod = 24;
double g_ibuf_80[];
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
double g_ibuf_96[];
double gd_100;
double gd_108;
double gd_116;
double gd_124;

int init() {
   double ld_12;
   string ls_28;
   int li_0 = 3 * cPeriod;
   IndicatorBuffers(5);
   SetIndexBuffer(0, g_ibuf_80);
   SetIndexBuffer(1, g_ibuf_84);
   SetIndexBuffer(2, g_ibuf_88);
   SetIndexBuffer(3, g_ibuf_92);
   SetIndexBuffer(4, g_ibuf_96);
   SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 2);
   SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, 2);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexLabel(2, NULL);
   SetIndexLabel(3, NULL);
   SetIndexLabel(4, NULL);
   SetIndexDrawBegin(0, li_0);
   SetIndexDrawBegin(1, li_0);
   SetIndexDrawBegin(2, li_0);
   SetIndexDrawBegin(3, li_0);
   SetIndexDrawBegin(4, li_0);
   double ld_4 = 1.0 * cPeriod * Period();
   if (ld_4 < 60.0) {
      ls_28 = DoubleToStr(ld_4, 0);
      ls_28 = " M" + ls_28 + ", FORCE UP -DOWN ";
   } else {
      ld_4 /= 60.0;
      if (ld_4 >= 24.0) {
         ld_12 = MathAbs(MathRound(ld_4 / 24.0) - ld_4 / 24.0);
         if (ld_12 < 0.01) {
            ls_28 = DoubleToStr(ld_4 / 24.0, 0);
            ls_28 = " D" + ls_28 + ", FORCE UP -DOWN ";
         } else {
            ls_28 = DoubleToStr(ld_4 / 24.0, 1);
            ls_28 = " D" + ls_28 + ", FORCE UP -DOWN ";
         }
      } else {
         ld_12 = MathAbs(MathRound(ld_4) - ld_4);
         if (ld_12 < 0.01) {
            ls_28 = DoubleToStr(ld_4, 0);
            ls_28 = " H" + ls_28 + ", FORCE UP -DOWN ";
         } else {
            ls_28 = DoubleToStr(ld_4, 1);
            ls_28 = " H" + ls_28 + ", FORCE UP -DOWN ";
         }
      }
   }
   IndicatorShortName("SnakeInBorders" + ls_28);
   return (0);
}

void deinit() {
}

int start() {
   int li_4 = 0;
   if (Bars <= 50) return (0);
   if (cPeriod < 21) return (0);
   li_4 = IndicatorCounted();
   if (li_4 < 0) return (-1);
   if (li_4 > 0) li_4--;
   int li_0 = Bars - li_4 - 1;
   if (li_0 > Bars - cPeriod - 7) {
      li_0 = Bars - cPeriod - 7;
      g_ibuf_96[li_0 + cPeriod] = SnakeFirstCalc(li_0 + cPeriod);
      for (int li_8 = li_0 + cPeriod - 1; li_8 > li_0; li_8--) SnakeNextCalc(li_8);
   }
   Snake(li_0);
   return (0);
}

void Snake(int ai_0) {
   if (ai_0 < 6) ai_0 = 6;
   g_ibuf_96[ai_0] = SnakeFirstCalc(ai_0);
   Drawing(ai_0);
   for (ai_0--; ai_0 >= 5; ai_0--) {
      g_ibuf_96[ai_0] = SnakeNextCalc(ai_0);
      Drawing(ai_0);
   }
   while (ai_0 > 0) {
      g_ibuf_96[ai_0] = SnakeFirstCalc(ai_0);
      Drawing(ai_0);
      ai_0--;
   }
   if (ai_0 == 0) {
      g_ibuf_96[ai_0] = iMA(NULL, 0, 6, 0, MODE_LWMA, PRICE_CLOSE, 0);
      Drawing(ai_0);
   }
}

double SnakePrice(int ai_0) {
   return (Close[ai_0]);
}

double SnakeFirstCalc(int ai_0) {
   int l_count_4;
   int li_8;
   gd_100 = 0.0;
   if (ai_0 < 5) {
      gd_108 = 0.0;
      l_count_4 = 0;
      for (int li_12 = ai_0 + 5; li_12 >= ai_0; li_12--) {
         l_count_4++;
         gd_100 += l_count_4 * SnakePrice(li_12);
         gd_108 += l_count_4;
      }
      while (li_12 >= 0) {
         l_count_4--;
         gd_100 += l_count_4 * SnakePrice(li_12);
         gd_108 += l_count_4;
         li_12--;
      }
   } else {
      gd_116 = 0.0;
      gd_124 = 0.0;
      li_8 = ai_0 - 5;
      l_count_4 = ai_0 + 5;
      for (li_12 = 1; li_12 <= 5; li_12++) {
         gd_100 += li_12 * (SnakePrice(l_count_4) + SnakePrice(li_8));
         gd_116 += SnakePrice(l_count_4);
         gd_124 += SnakePrice(li_8);
         li_8++;
         l_count_4--;
      }
      gd_100 += 6.0 * SnakePrice(ai_0);
      gd_116 += SnakePrice(ai_0);
      gd_108 = 36;
   }
   return (gd_100 / gd_108);
}

double SnakeNextCalc(int ai_0) {
   gd_124 += SnakePrice(ai_0 - 5);
   gd_100 = gd_100 - gd_116 + gd_124;
   gd_116 = gd_116 - SnakePrice(ai_0 + 6) + SnakePrice(ai_0);
   gd_124 -= SnakePrice(ai_0);
   return (gd_100 / gd_108);
}

void Drawing(int ai_0) {
   double ld_4 = 5.0 * (g_ibuf_96[ai_0] - g_ibuf_96[ArrayMinimum(g_ibuf_96, cPeriod, ai_0)]) / 9.0;
   double ld_12 = 5.0 * (g_ibuf_96[ai_0] - (g_ibuf_96[ai_0 + 1]) + g_ibuf_96[ArrayMinimum(g_ibuf_96, cPeriod, ai_0 + 1)] - g_ibuf_96[ArrayMinimum(g_ibuf_96, cPeriod, ai_0)]) / 9.0;
   if (ld_12 > 0.0) {
      g_ibuf_80[ai_0] = ld_4;
      g_ibuf_88[ai_0] = 0;
   } else {
      g_ibuf_80[ai_0] = 0;
      g_ibuf_88[ai_0] = ld_4;
   }
   ld_4 = 5.0 * (g_ibuf_96[ai_0] - g_ibuf_96[ArrayMaximum(g_ibuf_96, cPeriod, ai_0)]) / 9.0;
   ld_12 = 5.0 * (g_ibuf_96[ai_0] - (g_ibuf_96[ai_0 + 1]) + g_ibuf_96[ArrayMaximum(g_ibuf_96, cPeriod, ai_0 + 1)] - g_ibuf_96[ArrayMaximum(g_ibuf_96, cPeriod, ai_0)]) / 9.0;
   if (ld_12 < 0.0) {
      g_ibuf_84[ai_0] = ld_4;
      g_ibuf_92[ai_0] = 0;
      return;
   }
   g_ibuf_84[ai_0] = 0;
   g_ibuf_92[ai_0] = ld_4;
}

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 ---