Miscellaneous
Implements a curve of type %1Uses files from the file systemIt reads information from a fileIt reads information from a file
0 Views
0 Downloads
0 Favorites
IND_Dejavu
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Magenta
#property indicator_color5 Magenta
#property indicator_width1 2
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1

extern bool StDev = FALSE;
extern bool HighLow = FALSE;

#define AMOUNT_DATA 5

double Buffer[], BufferHigh[], BufferLow[], BufferHigh2[], BufferLow2[];

void init()
{
  SetIndexBuffer(0, Buffer);
  SetIndexStyle(0, DRAW_LINE);

  SetIndexBuffer(1, BufferHigh);
  SetIndexStyle(1, DRAW_LINE);

  SetIndexBuffer(2, BufferLow);
  SetIndexStyle(2, DRAW_LINE);

  SetIndexBuffer(3, BufferHigh2);
  SetIndexStyle(3, DRAW_LINE);

  SetIndexBuffer(4, BufferLow2);
  SetIndexStyle(4, DRAW_LINE);

  return;
}

void start()
{
  int i, time, Pos, Shift = 0;
  double Data[], DataHigh[], DataLow[], DataHigh2[], DataLow2[];
  int Positions[];
  int handle = FileOpen(WindowHandle(Symbol(), Period()) + "i.dat", FILE_READ|FILE_BIN);
  int Size = FileSize(handle) / (LONG_VALUE + DOUBLE_VALUE * AMOUNT_DATA);

  ArrayResize(Data, Size);
  ArrayResize(DataHigh, Size);
  ArrayResize(DataLow, Size);
  ArrayResize(DataHigh2, Size);
  ArrayResize(DataLow2, Size);
  ArrayResize(Positions, Size);

  for (i = 0; i < Size; i++)
  {
    time = FileReadInteger(handle);

    if (time >= 0)
    {
      Pos = iBarShift(Symbol(), Period(), time);
    }
    else
    {
      Pos--;

      if (Pos < 0)
        Shift++;
    }

    Positions[i] = Pos;

    Data[i] = FileReadDouble(handle);
    DataHigh[i] = FileReadDouble(handle);
    DataLow[i] = FileReadDouble(handle);
    DataHigh2[i] = FileReadDouble(handle);
    DataLow2[i] = FileReadDouble(handle);
  }

  FileClose(handle);

  ArrayInitialize(Buffer, EMPTY_VALUE);
  ArrayInitialize(BufferHigh, EMPTY_VALUE);
  ArrayInitialize(BufferLow, EMPTY_VALUE);
  ArrayInitialize(BufferHigh2, EMPTY_VALUE);
  ArrayInitialize(BufferLow2, EMPTY_VALUE);

  for (i = 0; i < AMOUNT_DATA; i++)
    SetIndexShift(i, Shift);

  for (i = 0; i < Size; i++)
  {
    Pos = Positions[i] + Shift;
    Buffer[Pos] = Data[i];

    if (StDev)
    {
      BufferHigh[Pos] = DataHigh[i];
      BufferLow[Pos] = DataLow[i];
    }

    if (HighLow)
    {
      BufferHigh2[Pos] = DataHigh2[i];
      BufferLow2[Pos] = DataLow2[i];
    }
  }

  return;
}

Comments