Indicators: Ind_VilkaFractals_v1.1.mq4 - page 3

 

Хороший индикатор! Хотелось бы еще, чтобы параметр количества баров для фрактала был настраиваемым, скажем, 3,5 или 7, а сами значки фракталов можно было бы скрывать. MTF вариант тоже был бы интересен на мой взгляд, тогда с цветом линий надо что-то сделать. Спасибо!

 

Ну и маленькое рацпредложение :

Добавить функцию :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование таймфрейма                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}

и в Alert включить

Alert(Symbol()," ",GetNameTF(),"......);


И еще желательно сделать алерт когда да цена закрывается выше/ниже вилки (этим сам еще не занимался).

А так вполне симпатичный и рабочий индикатор, благодарности автору.

 
BoraBo:
lekhach:

Пикает Alert пока все не отрисует.

Объекты за собой не подчищает.

А зачем людей дезинформируете? Пикает только 1 раз, когда фигура полностью расформируется. И сигнал этот легко выключить. А про мусор уже говорилось внизу. А если вам так важно, чтобы эти парочка объектов удалились сами при выходе, сделаю версию 1.2. А что ещё не устраивает? Пишите пока можно.


Может у меня чего не так, но получается :


Линии не удаляются не только при выходе, но и при переключении таймфрейма. Результат чего продемонстрирован ниже (11.08.2009 19:41 bor-ix).

Лично для себя я все поправил.

Извините если, что не так.




Эти алерты из истории (старые вилки), при загрузке индикатора только выводится, посмотрите на время сигналов. При реальном времени алерт выводится один раз при формировании фигуры, сама фигура тоже рисуется сразу и резко через 2 бара после последнего фрактала.


Хороший индикатор! Хотелось бы еще, чтобы параметр количества баров для фрактала был настраиваемым, скажем, 3,5 или 7, а сами значки фракталов можно было бы скрывать. MTF вариант тоже был бы интересен на мой взгляд, тогда с цветом линий надо что-то сделать. Спасибо!

Параметры фракталов - врядли, т.к. в индюке используется стандартный Fractals. Скрывающиеся значки сделаю. А про MTF тоже как-нибудь сами. У меня опыта с индюками мало. Я просто посмотрел видео и сделал индикатор точно по стратегии.


от узлов желательно давать пунктиры в длину на заданное число баров

и на каждой следующей паре линий чередовать цвет

Пунктир этот сложновато будет, легче вручную поставить такую линию.



И еще желательно сделать алерт когда да цена закрывается выше/ниже вилки (этим сам еще не занимался).

А так вполне симпатичный и рабочий индикатор, благодарности автору.

Спасибо! Символ и таймрейм в алерте не нужно, если только одну копию включить. Хотя все-таки не будет лишним. А вот про алерт при торговом сигнале думал, но передумал, слишком сложный код получится (для индикатора). Я лучше эту функцию в советнике сделаю.

 

Мои пять копеек

//+------------------------------------------------------------------+
//|                                       Ind_VilkaFractals_v1.3.mq4 |
//|                      Copyright © 2009, Alexey Sleptsov (lekhach) |
//|                                             lekhach18@rambler.ru |
//|                                     Corrected by api Version 1.3 |
//|                                              p231970@hotmail.com |
//+------------------------------------------------------------------+
// Индикатор работает по стратегии "Вилка Чувашова".
// Версия 1.3 (api):
// 1. Изменен порядок поиска вилок, поиск производится в последних BarsToSearch барах
// 2. Изменены значения по умолчаию для количества линий в связи с исправленным алгоритмом
// 3. Исправлена ошибка поиска вилок. Вилки теперь не пропускаются.
// 3а. Разрешены трех- и более зубцовые вилки.
// 4. В некоторых местах косметические исправления для поднятия производительности.
// 4а. В целом производительность индикатора упала из-за постоянного поиска на последних BarsToSearch барах
// Версия 1.2:
// 1. Добавлена функция удаления объектов при выгрузке индикатора.
// 2. Удалены лишние строки из кода.
// 3. Переделан Alert.
// 4. Добавлен FractalsTrue.
//--------------------------------------------------------------------
#property copyright "lekhach © 2009"
#property link      "lekhach18@rambler.ru"
//--------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//---- input parameters
extern int   BarsToSearch=500;   // Количество баров для анализа
extern int   Lines=4;           // Количество видимых/невидимых фрактальных линий (max 100)
extern bool  FractalsTrue=true;  // Вкл/выкл значков фракталов
extern bool  AlertTrue=true;     // Вкл/выкл сигнала
extern color LinesColorUp=Blue;  // Цвет верхних фрактальных линий
extern color LinesColorDown=Red; // Цвет нижних фрактальных линий
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//--- my variables
double BufPriceUp[100];
double BufDateUp[100];
double BufPriceDown[100];
double BufDateDown[100];
datetime LastSignal = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   if(Lines>100) Lines=100;
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,217);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,218);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Fractals");
   SetIndexLabel(0,"FractalsUp");
   SetIndexLabel(1,"FractalsDown");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
//----
   for (int j=0; j<100; j++)
   {
      ObjectDelete("LineUp"+j);
      ObjectDelete("LineDown"+j);
   }
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int uplines=0;
   int downlines=0;
   int Up=0;
   int Down=0;
   bool l_n_exists;
   deinit();
//---- Основной цикл
   for (int i=0; i<BarsToSearch; i++)
   {
      if (FractalsTrue==true)
      {
         ExtMapBuffer1[i]=iFractals(NULL,0,MODE_UPPER,i);
         ExtMapBuffer2[i]=iFractals(NULL,0,MODE_LOWER,i);
      } 
//---- Блок Up-фракталов
      double f = iFractals(NULL,0,MODE_UPPER,i);
      if (f!=0)
      {
         Up++;
         BufPriceUp[Up]=f;
         BufDateUp[Up]=Time[i];
         if (Up>2 && uplines<Lines && BufPriceUp[Up]>BufPriceUp[Up-1] && BufPriceUp[Up-1]>BufPriceUp[Up-2])
         {
            ObjectCreate("LineUp"+Up,OBJ_TREND,0,BufDateUp[Up],BufPriceUp[Up],BufDateUp[Up-1],BufPriceUp[Up-1]);
            l_n_exists = ObjectCreate("LineUp"+(Up-1),OBJ_TREND,0,BufDateUp[Up-1],BufPriceUp[Up-1],BufDateUp[Up-2],BufPriceUp[Up-2]);
            if (ObjectGetValueByShift("LineUp"+Up,0)>ObjectGetValueByShift("LineUp"+(Up-1),0))
            {
               ObjectDelete("LineUp"+Up);
               if(l_n_exists) ObjectDelete("LineUp"+(Up-1));
            }
            else
            {
               uplines+=2;
               if (AlertTrue==true && uplines==2 && LastSignal<Time[i])
               {
                  LastSignal = Time[i];
                  Alert(Symbol(),Period()," Низходящая вилка! ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
               }
               ObjectSet("LineUp"+(Up-1),OBJPROP_COLOR,LinesColorUp);
               ObjectSet("LineUp"+(Up-1),OBJPROP_WIDTH,2);
               ObjectSet("LineUp"+(Up-1),OBJPROP_RAY,True);
               ObjectSet("LineUp"+Up,OBJPROP_COLOR,LinesColorUp);
               ObjectSet("LineUp"+Up,OBJPROP_WIDTH,2);
               ObjectSet("LineUp"+Up,OBJPROP_RAY,True);         
            }
         } 
      }
//---- Блок Down-фракталов
      f = iFractals(NULL,0,MODE_LOWER,i);
      if (f!=0)
      {
         Down++;
         BufPriceDown[Down]=f;
         BufDateDown[Down]=Time[i];
         if (Down>2 && downlines<Lines && BufPriceDown[Down]<BufPriceDown[Down-1] && BufPriceDown[Down-1]<BufPriceDown[Down-2])
         {
            ObjectCreate("LineDown"+Down,OBJ_TREND,0,BufDateDown[Down],BufPriceDown[Down],BufDateDown[Down-1],BufPriceDown[Down-1]);
            l_n_exists = ObjectCreate("LineDown"+(Down-1),OBJ_TREND,0,BufDateDown[Down-1],BufPriceDown[Down-1],BufDateDown[Down-2],BufPriceDown[Down-2]);
            if (ObjectGetValueByShift("LineDown"+Down,0)<ObjectGetValueByShift("LineDown"+(Down-1),0))
            {
               ObjectDelete("LineDown"+Down);
               if(l_n_exists) ObjectDelete("LineDown"+(Down-1));
            } 
            else
            {
               downlines+=2;
               if (AlertTrue==true && downlines==2 && LastSignal<Time[i])
               {
                  LastSignal = Time[i];
                  Alert(Symbol(),Period()," Восходящая вилка! ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
               }
               ObjectSet("LineDown"+(Down-1),OBJPROP_COLOR,LinesColorDown);
               ObjectSet("LineDown"+(Down-1),OBJPROP_WIDTH,2);
               ObjectSet("LineDown"+(Down-1),OBJPROP_RAY,True);
               ObjectSet("LineDown"+Down,OBJPROP_COLOR,LinesColorDown);
               ObjectSet("LineDown"+Down,OBJPROP_WIDTH,2);
               ObjectSet("LineDown"+Down,OBJPROP_RAY,True);
            }
         } 
      }
   }
//----
   return(0);
}
//+------------------------------------------------------------------+
 
api:

Незнаю. Сначала я тоже сделал считаемой со старого бара, но потом почему-то сделал наоборот и лень было опять переделать, всё-равно никакой существенной разницы. А вот почему удалили IndicatorCounted(), зачем при каждом тике пересчитывать последние 500 баров? Это по-моему глупо.

 
lekhach:
api:

Незнаю. Сначала я тоже сделал считаемой со старого бара, но потом почему-то сделал наоборот и лень было опять переделать, всё-равно никакой существенной разницы. А вот почему удалили IndicatorCounted(), зачем при каждом тике пересчитывать последние 500 баров? Это по-моему глупо.

Потому, что последний фрактал может исчезнуть. А так как ищем именно от последних к первым, то массивы фракталов перестают быть актуальными. А порядок поиска изменил потому, что так удобнее удалять лишние линии - просто не строить их.

 

Спасибо lekhach за программную реализацию вилки. Индикатор получился классный! lekhach, а есть ли возможность установить алерт звуковой при пробитии вилки? Если не затруднит, сделаешь? С уважением, Игорь

 
steel:

Спасибо lekhach за программную реализацию вилки. Индикатор получился классный! lekhach, а есть ли возможность установить алерт звуковой при пробитии вилки? Если не затруднит, сделаешь? С уважением, Игорь

Спасибо! Вот будет время, сделаю советник по этой стратегии. И эту функцию добавлю туда же.

 
BoraBo:
lekhach:

Пикает Alert пока все не отрисует.

Объекты за собой не подчищает.

А зачем людей дезинформируете? Пикает только 1 раз, когда фигура полностью расформируется. И сигнал этот легко выключить. А про мусор уже говорилось внизу. А если вам так важно, чтобы эти парочка объектов удалились сами при выходе, сделаю версию 1.2. А что ещё не устраивает? Пишите пока можно.


Может у меня чего не так, но получается :


Линии не удаляются не только при выходе, но и при переключении таймфрейма. Результат чего продемонстрирован ниже (11.08.2009 19:41 bor-ix).

Лично для себя я все поправил.

Извините если, что не так.




 
в каком времини?? он работает