M-mason
Михаил

 
Уровень 16

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2081



РЕКОМЕНДУЮ




Лучшее от M-mason



Индикатор Наипростейший. Комментариев 9
2015-03-04 18:34:57Рейтинг 0

Коробок Комментариев 15
2021-11-07 22:13:07Рейтинг 0

индикатор Ku+Klux (декомпилированный)

Здравствуйте, уважаемые Трейдеры!
Есть индикатор Ku+Klux (декомпилированный). Проблема в следующем: Нужно определить по каким параметрам, формулам он определяет волатильность предыдущего дня (или дней) и исходя из этого строит уровни. Гораздо проще работать, когда понимешь, что делает тот или иной индикатор, а так же есть вероятность, что в новых билдах МТ4 он может не работать, а так будет возможность самостоятельно определить уровни. Заранее благодарен за Вашу бескорыстность.
Сам индикатор.

Ku Klux~.mq4 (40 Kb)
  • 0
  • Просмотров: 10277
  • 25 января 2015, 12:11
  • M-mason
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Получение значений из программы MetaTrader
25 января 2015
25 января 2015

Комментарии (26)

+
0
Например линия MTS1Line строится с помощью данного кода:


f0_14("MST1Line", Ai_12, NormalizeDouble(Gda_380[Ai_0], Gi_544), Ai_4, NormalizeDouble(Gda_380[Ai_0], Gi_544), 1, STYLE_DASH, ST1_Color);


Путем вызова функции:


void f0_14(string As_0, int A_datetime_8, double A_price_12, int A_datetime_20, double A_price_24, double A_width_32, double A_style_40, color A_color_48)


В которой: Gda_380[Ai_0] = f0_3(Gda_356[Ai_0], Ld_28, 11);
Где: Gda_356[Ai_0] = Gda_400[Ai_0];

А функция f0_3 возвращает одно значение типа double, принимая 3 значения, 2 из которых типа double а одно int.

double f0_3(double Ad_0, double Ad_8, int Ai_16)

:D 
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 25 января 2015, 16:53
+
0
Спасибо, наверно я не так объяснил. Я заметил, что расстояние до линии ВТ2 от цены открытия в три раза меньше предыдущей дневной свечи, в некоторых случаях это расстояние до ВТ2 на 33 % больше предыдущей дневной свечи. Как он определяет как в каждом конкретном случае расставить линии? (К примеру MACD на Н1 больше «0» или МА21 меньше МА100) Что Ku Klux использует для вычисления?
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 25 января 2015, 18:59
+
0
Не за что особо то. Я сейчас тоже пытаюсь это понять и из кода и по графику. Пока никак.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 25 января 2015, 19:04
+
0
Предлагаю написать советник, который будет вычислять волатильность за несколько предыдущих дней и выставлять ордера на расстоянии от цены в указанное время(аналог открытия сессий) Стопы и уровни будут оптимизироваться на истории. Таким образом вы будете с большой вероятностью знать какие уровни работают.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 26 января 2015, 09:45
+
0
Было бы замечатнльно!
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 26 января 2015, 14:37
+
0
Завтра начну делать.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 26 января 2015, 22:27
+
0
Все мы знаем и используем в торговле технический анализ. Этим же занимается большинство других игроков на рынке. Отсюда можно сделать вывод, что движение цены за предыдущий день оказывает влияние на день сегодняшний — как следствие изменивших данных по теханализу. А значит мы можем вычислить оптимальные точки входа и выхода из рынка, на основе волатильности вчерашнего дня и направления тренда. В этом нам поможет точный Forex индикатор Ku Klux.



Характеристики индикатора Ku Klux

Платформа: Metatrader 4
Валютные пары: EURUSD, GBPUSD, AUDUSD USDCHF, EURJPY
Таймфрейм: от M5 до H4
Время торговли: Европейская, Американская и Азиатская сессии
Рекомендуемые ДЦ: Альпари, Roboforex

Установка

Индикатор устанавливается по стандартной инструкции, никаких дополнительных манипуляций не требуется. Таймфрейм ниже D1, при старших ТФ, уровни, показывающие точки входа и выхода, отображаться не будут.

Описание настроек

Level_Width — позволяет изменять толщину уровней, изменять можно от 1 до 5. Чем больше значение, тем жирнее уровень.
Text_Font_Size — размер шрифтов. Задается от 8 до 16.
Level_Text_Shift — сдвиг уровней. Положительное значение смещает вправо, отрицательное влево. Заданное число соответствует расстоянию, равному количеству свечей на графике.
Extend Lines — пунктирная линия. Продляет уровни до открытия дня.
Show Daily Open — белый уровень. Показывает цену открытия сессии.
Number of Days — количесиво дней на истории, на которых отображены уровни. Максимальное значение — 22.
Daily Open Setting -настройка позволяет изменять рабочий день (сессию) индикатора, время начала формирования новых уровней. 1 — время брокера, 2 — открытие Австралии, 3 — Токио, 4 — полночь Нью-Йорка, 5 — открытие Европы, 6 — Лондона, 7 — Нью-Йорка.
Show_Trend — показывает направление тренда.
Show_Clock — позволяет включить часы в левом верхнем углу. Показывает время компьютера, брокера, Нью-Йорка и GMT.
Clock_Vertical_Position — изменяет положение часов по вертикали.
Corner display — позволяет выбрать в каком углу отображать название индикатора и направление тренда. По умолчанию 0 — левый верхний угол, 1 — правый верхний, 2 — левый нижний, 3 — правый нижний.
alpari limited mt4

Правила Входа и Выхода

Расставляются отложенные ордера. На покупку выставляется по уровню Buy, на продажу по уровню Sell.

Стоп-лосс для покупок ставим по уровню BSL, для продаж по уровню SSL.

Для длинных позиций первая цель для профита задается по уровню BT1, вторая цель по уровню BT2. При взятии первой цели, частично закрываем позицию, стоп переводим в безубыток. Для коротких позиций все аналогично, первая цель по ST1, вторя цель по ST2. Закрытие позиции по частям рассматривалось в уроке Секреты MT4.

Дополнения к индикатору

Ku Klux не является готовой стратегией. Как и любой другой индикатор, использовать его в чистом виде не рекомендуется. Требуется дополнительная фильтрация входов, для повышения ваших шансов на надежный результат.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 25 января 2015, 17:08
+
+2
Простейшая реализация советника.
www.opentraders.ru/downloads/571/

Вычисляется волатильность предыдущего дня и в указанное время выставляются стоповые ордера на расстоянии и со стопами рассчитанными на основе волатильности.




//+------------------------------------------------------------------+
//|                                                       KuKlux.mq4 |
//|                                            Copyright © 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs

extern double StopLoss   = 2;    // на сколько делим волатильность для определения стоплосса ордера
extern double TakeProfit = 2;    // на сколько делим волатильность для определения тейкпрофита ордера
extern double Delta      = 3;    // на сколько делим волатильность для определения расстояния от цены до ордера
extern int Expiration    = 14;   // время истечения ордера
extern int StartHour     = 9;    // время начала торговли
extern int Days          = 1;    // дни для расчета волатильности
extern double Lots       = 0.1;  // объем позиции
extern int MAGIC         = 333;  // магик

double price,h,l,vol,sl,tp;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder()
  {
   int    res,b,s;
   datetime expiration = TimeCurrent()+3600*Expiration;
   double bprice,sprice;
      
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)b++;
         if(OrderType()==OP_SELLSTOP)s++; 
        }
      }
    }
    
   //--- buy
   if(Hour()==StartHour && b<1)
    { 
     bprice=fND(Ask+(vol/Delta));
     sl=fND((vol/StopLoss));
     tp=fND((vol/TakeProfit));  
     res=OrderSend(Symbol(),OP_BUYSTOP,Lots,fND(bprice),3,fND(bprice-sl),fND(bprice+tp),"",MAGIC,expiration,Blue);
    }             
                    
   //--- sell 
   if(Hour()==StartHour && s<1)
    {
     sprice=fND(Bid-(vol/Delta));
     sl=fND((vol/StopLoss));
     tp=fND((vol/TakeProfit));       
     res=OrderSend(Symbol(),OP_SELLSTOP,Lots,fND(sprice),3,fND(sprice+sl),fND(sprice-tp),"",MAGIC,expiration,Red);
    }
    
  }
//+------------------------------------------------------------------+
double Vol()
  {
   double Vol,H,L; 
   for(int i=1;i>=Days;i++) 
    {
     H=iHigh(Symbol(),PERIOD_D1,Days);
     L=iLow(Symbol(),PERIOD_D1,Days);
     vol=(H-L)/Days;
    }
   return(Vol); 
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1; i>=0; i--) 
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {    
          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
          if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
          if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
         }
       }
    }
   }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   h=iHigh(Symbol(),PERIOD_D1,Days);
   l=iLow(Symbol(),PERIOD_D1,Days);
   vol=h-l;
   
   if(CountTrades()<1)PutOrder();
   if(CountTrades()>0)DelOrder();  
//---
   Comment("\n  Vol ",vol,
           "\n  High ",h,
           "\n  Low ",l,
           "\n  SL ",sl,
           "\n  TP ",tp);  
    
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 27 января 2015, 11:05
+
0
Премного благодарен за Ваши труды!*good*  Сейчас посмотрим на что он способен.
Редактирован: 27 января 2015, 15:44
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 27 января 2015, 15:22
+
+1
Замечательный советник! Десять плюсов за скорость и качество!*victory* 
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 27 января 2015, 15:53
+
0
Я нигде в коде не увидела обращения к функциям Vol() и NewBar() *think* 
Редактирован: 28 января 2015, 16:28
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 28 января 2015, 16:25
+
0
я сначала на несколько дней хотел расчитывать волатильность. а потом человека и так результат устроил за один день предыдущий. тем более вол не отлажена до конца еще.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 28 января 2015, 22:43
+
0
В смысле не отлажена? Как хочешь переделать?
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 29 января 2015, 00:42
+
0
не работает проще говоря :)  если кому то интересно можно доделать и за указанное количество дней считать
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 29 января 2015, 00:45
+
0
То, что в советнике было реализовано, меня устроило. А при попытке немного его (советник) переделать я понял принцип построения линий BT2 и ST2 в идикаторе Ku Klux. Собственно для чего и создавалась эта тема. Поэтому еще раз спасибо.:) 
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 29 января 2015, 16:38
+
0
Здравствуйте, если вы поняли принцип построения линий BT2 и ST2 в идикаторе Ku Klux, будьте добры напишите мне на почту принцип 150883@list.ru Заранее очень благодарен.
avatar

  0  esk Сообщений: 1

  • 25 апреля 2016, 06:29
+
+1
Идея мне показалась интересной. Вот только прибыль не получилась *think* 


avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 28 января 2015, 16:11
+
0
Попробуй такие настройки:

extern double StopLoss = 3;
extern double TakeProfit = 3;
extern double Delta = 3;
extern int Expiration = 120;
extern int StartHour = 0;
extern int Days = 1;

и погоняй по месяцам.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 28 января 2015, 18:27
+
0
Жду пока ответа на свой вопрос про то, что две функции не задействованы в коде, а они присутствуют. Функция Vol() как раз, по идее, и рассчитывает волатильность.
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 28 января 2015, 18:30
+
0
Ну к сожалению вопрос не ко мне. *???*  Советника писал не я.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 28 января 2015, 18:44
+
0
это понятно, не от вас и жду ;) 
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 28 января 2015, 18:58
+
0
vol в данном случае это (High-Low) предыдущей дневной свечи(ей)
vol=(H-L)/Days;
Редактирован: 28 января 2015, 19:06
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 28 января 2015, 19:05
+
0
В том-то и дело, что нет.
vol сейчас берется из функции OnTick():
h=iHigh(Symbol(),PERIOD_D1,Days);
l=iLow(Symbol(),PERIOD_D1,Days);
vol=h-l;

А функция Vol() с кодом:
double Vol,H,L; 
   for(int i=1;i>=Days;i++) 
    {
     H=iHigh(Symbol(),PERIOD_D1,Days);
     L=iLow(Symbol(),PERIOD_D1,Days);
     vol=(H-L)/Days;
    }
   return(Vol);

вообще не участвует в процессе
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 28 января 2015, 19:15
+
0
я когда по фунту оптил, там нормально было.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 28 января 2015, 22:45
+
0
Здравствуйте. Подскажите как сделать что б колличество дней в индикаторе отображалось больше чем 22? Например 100 или 150? Спасибо.
avatar

  1  berlian Сообщений: 55

  • 4 апреля 2015, 11:14
+
0
никак *think* , или найти автора этого индикатора и уговорить его переделать.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 4 апреля 2015, 16:14

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари