#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 SteelBlue
#property indicator_color2 Crimson
#property indicator_width1 4
#property indicator_width2 4

extern int period = 5;
int MA_Method = MODE_LWMA;
int App_Price = PRICE_OPEN;
double BufferUp[];
double BufferDown[];
double SqrtBuffer[];

int init() {
   IndicatorBuffers(3);
   SetIndexBuffer(0, BufferUp);
   SetIndexBuffer(1, BufferDown);
   SetIndexBuffer(2, SqrtBuffer);
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   IndicatorShortName("Trend Lord Open");
   return (0);
}

int deinit() {
   return (0);
}
int start() {
   double wmaArray[];
   double wmaArrayIF[];
   int counted_bars = IndicatorCounted();
   if (counted_bars < 0) return (-1);
   int i = 0;
   int SqrtPeriod = MathSqrt(period);
   int limit = Bars - counted_bars + period + 1;
   if (limit > Bars) limit = Bars;
   ArrayResize(wmaArray, limit);
   ArraySetAsSeries(wmaArray, TRUE);
   ArrayResize(wmaArrayIF, limit);
   ArraySetAsSeries(wmaArrayIF, TRUE);
   for (i = 0; i < limit; i++)    
       wmaArray[i] = iMA(NULL, 0, period, 0, MA_Method, App_Price, i);
   for (i = 0; i < limit - period; i++) 
       SqrtBuffer[i] =  iMAOnArray(wmaArray, 0, SqrtPeriod, 0, MA_Method, i);
   for (i = limit - period; i >= 0; i--) {
      wmaArrayIF[i] = wmaArrayIF[i + 1]; // ???
      if (SqrtBuffer[i] > SqrtBuffer[i + 1]) wmaArrayIF[i] = 1;
      if (SqrtBuffer[i] < SqrtBuffer[i + 1]) wmaArrayIF[i] = -1;
      if (wmaArrayIF[i] > 0.0) {
         BufferUp[i] = SqrtBuffer[i];
//         if (wmaArrayIF[i + 1] < 0.0) BufferUp[i + 1] = SqrtBuffer[i + 1];
         BufferDown[i] = EMPTY_VALUE;
      } else {
         if (wmaArrayIF[i] < 0.0) {
            BufferDown[i] = SqrtBuffer[i];
//            if (wmaArrayIF[i + 1] > 0.0) BufferDown[i + 1] = SqrtBuffer[i + 1];
            BufferUp[i] = EMPTY_VALUE;
         }
      }
   }
   return (0);
}