у кого есть "интересные индикаторы" (что-то новое)? - страница 3

 
Bakhytzhan Abzalbekov:

ТСу для начала нужно было предложить чтото свое, а потом уже просить поделиться.

Ну и чтобы не быть голословным. Мне кажется интересной идея адаптации некоторых существующих индикаторов под ренко графики.

Просто в обсуждениях опубликованных мной в CodBase cоветников наши зарубежные коллеги задавали вопросы по работе этих роботов на Ренко графиках,

что заставило меня задуматься и глубже копнуть в этом направлении.

Ренко графики фатально нерабочие!

Пробовал их по-всякому и спереди, и с сзади - безрезультатно.

Иногда точно получается сигнал(на Д1), а иногда опаздывает на "полгода"! 

 
лучшие умы бились над этой задачей, но так ничего нового и не придумали :)
 

Как говорится: "Новое - это хорошо забытое старое". Но бывает и действительно новое. Смотря для чего оно надо.

Для кого-то оно надо, а кому-то и не зачем. Кому-то нравится и очень необходимо, другому не нравится, т.к. не знает что с этим делать...

Ну, допустим, у меня есть что-то новое... И что дальше? Подарить...? А смысл всего этого поста? Поиск лоха с новым индикатором?

 
Дмитрий:

Как говорится: "Новое - это хорошо забытое старое". Но бывает и действительно новое. Смотря для чего оно надо.

Для кого-то оно надо, а кому-то и не зачем. Кому-то нравится и очень необходимо, другому не нравится, т.к. не знает что с этим делать...

Ну, допустим, у меня есть что-то новое... И что дальше? Подарить...? А смысл всего этого поста? Поиск лоха с новым индикатором?

Ну наверное как только топикстартер вернётся из бани, он сразу Вам ответит поиск чего или кого. Хотя у него в профиле просто написано "Ищу новые алгоритмы для торговли"
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Реал-тайм индикатор из советника

Andrey Miguzov, 2015.05.15 02:17

Очень хлопотное занятие, пробовал... совсем простенький пример без проверок, шкалы цен и горизонтальной прокрутки:

#include <Canvas\Canvas.mqh>
CCanvas Chart;

int scale_width=8;       //расстояние в пикселях между точками
color clr_ask = clrRed;  //цвет ask
color clr_bid = clrBlue; //цвет bid

MqlTick tick_array[];
int x_p[];
int y_p[];

int widtn_chart=0;
int height_chart=0;
int tick_in_chart=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ChartSetInteger(0,CHART_SHOW_DATE_SCALE,false);
   ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,false);

   widtn_chart=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
   height_chart=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);

   Chart.CreateBitmapLabel("Chart",0,0,widtn_chart,height_chart,COLOR_FORMAT_ARGB_NORMALIZE);
   Chart.Erase(ColorToARGB(clrBlack));
   Chart.Update(true);

   tick_in_chart=widtn_chart/scale_width;
   ArrayResize(tick_array,tick_in_chart);
   ArraySetAsSeries(tick_array,true);

   ArrayResize(x_p,tick_in_chart);
   ArrayResize(y_p,tick_in_chart);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Chart.Destroy();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(widtn_chart!=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS) || 
      height_chart!=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS))
     {
      widtn_chart=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
      height_chart=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);

      Chart.CreateBitmapLabel("Chart",0,0,widtn_chart,height_chart,COLOR_FORMAT_ARGB_NORMALIZE);
      Chart.Erase(ColorToARGB(clrBlack));
      Chart.Update(true);

      tick_in_chart=widtn_chart/scale_width;
      ArrayResize(tick_array,tick_in_chart);
      ArraySetAsSeries(tick_array,true);

      ArrayResize(x_p,tick_in_chart);
      ArrayResize(y_p,tick_in_chart);
     }

   Chart.Erase(ColorToARGB(clrBlack));

   CopyTicks(_Symbol,tick_array,COPY_TICKS_INFO);

   double max = -1.0;
   double min = DBL_MAX;

   for(int i=0; i<tick_in_chart; i++)
     {
      if(tick_array[i].ask > max) max = tick_array[i].ask;
      if(tick_array[i].bid < min) min = tick_array[i].bid;
     }

   double delta=max-min;

//ask   
   for(int i=0; i<tick_in_chart; i++)
     {
      y_p[i]=int(height_chart-height_chart*(tick_array[i].ask-min)/delta);

      if(i==0)
         x_p[i]=widtn_chart-8*scale_width;
      else
         x_p[i]=x_p[i-1]-scale_width;

      Chart.FillCircle(x_p[i],y_p[i],3,ColorToARGB(clr_ask));
     }

   Chart.Polyline(x_p,y_p,ColorToARGB(clr_ask));

//bid
   for(int i=0; i<tick_in_chart; i++)
     {
      y_p[i]=int(height_chart-height_chart*(tick_array[i].bid-min)/delta);

      if(i==0)
         x_p[i]=widtn_chart-8*scale_width;
      else
         x_p[i]=x_p[i-1]-scale_width;

      Chart.FillCircle(x_p[i],y_p[i],3,ColorToARGB(clr_bid));
     }

   Chart.Polyline(x_p,y_p,ColorToARGB(clr_bid));

//выводим на экран
   Chart.Update(true);
  }
//+------------------------------------------------------------------+
//| Обработка событий
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_CHART_CHANGE)
     {
      OnTick();
     }
  }
//+------------------------------------------------------------------+

 В нем ещё и фон отключить надо - чтобы при изменении размера графика не глючило... Кому лень компилировать - то выглядит это так:

 


Как идея чего-то нового.