Author: www.forex-tsd.com
0 Views
0 Downloads
0 Favorites
Swing_line

//------------------------------------------------------------------
#property copyright "www.forex-tsd.com"
#property link      "www.forex-tsd.com"
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_label1  "Swing line"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrLimeGreen,clrPaleVioletRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//
//
//
//
//

double swli[];
double colorBuffer[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int OnInit()
{
   SetIndexBuffer(0,swli,INDICATOR_DATA); 
   SetIndexBuffer(1,colorBuffer,INDICATOR_COLOR_INDEX); 
   return(0);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//


double  work[][5];
#define hHi   0
#define hLo   1
#define lHi   2
#define lLo   3
#define trend 4


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{

   //
   //
   //
   //
   //

   if (ArrayRange(work,0)!=rates_total) ArrayResize(work,rates_total);
      for (int i=(int)MathMax(prev_calculated-1,0); i<rates_total; i++)
      {
         if (i==0)
         {
            work[i][hHi]   = high[i]; work[i][hLo] = low[i];
            work[i][lHi]   = high[i]; work[i][lLo] = low[i];
            work[i][trend] = -1;
            continue; 
         }
      
         //
         //
         //
         //
         //
      
         work[i][trend] = work[i-1][trend];
         work[i][hHi]   = work[i-1][hHi]; work[i][hLo] = work[i-1][hLo];
         work[i][lHi]   = work[i-1][lHi]; work[i][lLo] = work[i-1][lLo];

               if (work[i-1][trend] == 1)
               {
                  work[i][hHi] = MathMax(work[i-1][hHi],high[i]);
                  work[i][hLo] = MathMax(work[i-1][hLo],low[i]);
                     if (high[i]<work[i][hLo]) { work[i][trend] = -1; work[i][lHi] = high[i]; work[i][lLo] = low[i]; }
               }
               if (work[i-1][trend] == -1)
               {
                  work[i][lHi] = MathMin(work[i-1][lHi],high[i]);
                  work[i][lLo] = MathMin(work[i-1][lLo],low[i]);
                     if (low[i]>work[i][lHi]) { work[i][trend] =  1; work[i][hHi] = high[i]; work[i][hLo] = low[i]; }
               }

         if (work[i][trend]==1)      
               swli[i] = work[i][hLo];
         else  swli[i] = work[i][lHi];
               colorBuffer[i] = colorBuffer[i-1];
               if (work[i][trend]== 1) colorBuffer[i]= 0;
               if (work[i][trend]==-1) colorBuffer[i]= 1;
   }
   return(rates_total);
}
    

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