deenyy
deenyy

 
Уровень 16

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


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

Рейтинг 2087



РЕКОМЕНДУЮ



Скорость тренда

Уважаемые програмисты!
Хочу попросить у Вас помощи создать инструмент который, сможет быстро считать скорость тренда по формуле:
S=P/T
, где:
S-скорость
P-количество пунктов
T-количество баров

Вот так это я себе примерно представляю:


Принцип действия: Я наношу на график TrendLine (или GannLine), может сразу и несколько (до 10 шт.), а написанный с вашей помощью индикатор(или скрипт) видит это, подхватывает координаты линии, рассчитывает и около второй точки линии выводит значение.

Рассчитываю на вашу помощь т.к. хочу посчитать и систематизировать много исторических данных. Буду очень Вам благодарен!

P.S. Если можно, внести такую логику отображения значения:
если координата 2-ой точки линии выше Хая бара на котором она находится, то значение отображается выше линии

если ниже лоу — тогда значение отображается под линией


ну вот как-то так
  • +2
  • Просмотров: 3632
  • 22 июня 2016, 19:31
  • deenyy
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Проще всего по изломам зигзага посчитать.
avatar

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

  • 22 июня 2016, 20:17
+
+1
А почему тебе не подхватить линию, которую пользователь сам нанес на график?
По ObjectName(i) и ObjectType(...)
avatar

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

  • 22 июня 2016, 21:22
+
0
Пока сделал такой набросок. Доделывать позже буду.




//+------------------------------------------------------------------+
//|                                                        Speed.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutText(const string text,double price,datetime time)
  {
   ObjectsDeleteAll(0,OBJ_TEXT);
   const string name="Text"+TimeToStr(TimeCurrent());
//--- создадим объект "Текст"  
   ObjectCreate(0,name,OBJ_TEXT,0,time,price);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Yellow);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double p1=0,p2=0;
   datetime t1=0,t2=0;

   for(int i=ObjectsTotal();i>=0;i--)
     {
      if(ObjectType(ObjectName(i))==OBJ_TREND)
        {
         p1 = ObjectGet(ObjectName(i),OBJPROP_PRICE1);
         p2 = ObjectGet(ObjectName(i),OBJPROP_PRICE2);
         t1 = ObjectGet(ObjectName(i),OBJPROP_TIME1);
         t2 = ObjectGet(ObjectName(i),OBJPROP_TIME2);
         
         PutText((string)NormalizeDouble((p1-p2)/Point,1),p2,t2);
        }
     }

   Comment("\n P1: ",p1,
           "\n P2: ",p2);
  }
//+------------------------------------------------------------------+

avatar

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

  • 22 июня 2016, 20:52
+
0
Пока так :) 




//+------------------------------------------------------------------+
//|                                                        Speed.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutText(string text,double price,datetime time)
  {
   string name="Text"+(string)price;
//--- создадим объект "Текст"  
   ObjectCreate(0,name,OBJ_TEXT,0,time,price);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Yellow);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int n1=0,n2=0;
   double p1=0,p2=0,speed=0;
   datetime t1=0,t2=0;

   for(int i=ObjectsTotal();i>=0;i--)
     {
      if(ObjectType(ObjectName(i))==OBJ_TREND)
        {
         p1 = ObjectGet(ObjectName(i),OBJPROP_PRICE1);
         p2 = ObjectGet(ObjectName(i),OBJPROP_PRICE2);
         t1 = ObjectGet(ObjectName(i),OBJPROP_TIME1);
         t2 = ObjectGet(ObjectName(i),OBJPROP_TIME2);
         n1 = iBarShift(NULL,0,t1);
         n2 = iBarShift(NULL,0,t2);
         
         speed = NormalizeDouble((p1-p2)/(Point*(n1-n2)),1);
         PutText((string)speed,p2,t2);
        }
     }

   Comment("\n P1: ",p1,
           "\n P2: ",p2);
  }
//+------------------------------------------------------------------+

avatar

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

  • 22 июня 2016, 21:12
+
0
Выглядит шикарно, я уже доволен *good* 
avatar

  16  deenyy Автор Сообщений: 127 - deenyy

  • 22 июня 2016, 21:40
+
+1
Сделал в виде индикатора: www.opentraders.ru/downloads/1216/

avatar

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

  • 23 июня 2016, 09:36
+
0
Спасибо вам гигантское,*good*  прям как я и хотел, буду тестировать!
avatar

  16  deenyy Автор Сообщений: 127 - deenyy

  • 23 июня 2016, 11:23
+
0
avatar

  8  poruchik Сообщений: 139

  • 27 июня 2016, 09:28
+
0


Иногда после запятой много цифр
avatar

  8  poruchik Сообщений: 139

  • 27 июня 2016, 11:17
+
0
Если автор топика попросит поправить сделаю да вы и самостоятельно можете :) 
avatar

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

  • 27 июня 2016, 21:49
+
0
Спасибо за индикатор, получился полезным. Можно Вас попросить подправить его согласно замечаниям Poruchik, будет супер-полезный*good* 
avatar

  16  deenyy Автор Сообщений: 127 - deenyy

  • 28 июня 2016, 10:31
+
0
Иногда после запятой много цифр

Такое бывает иногда, причину не знаю, нормализация значений стоит.

100 п за 25 часов

Это у вас когда заглядываете в будущее, а индикатор этого не умеет. На сформировавшихся ценовых данных работает.

Посмотрю когда свободное время будет, пока новых заказов много.
avatar

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

  • 28 июня 2016, 12:27
+
0


надо гипотенузу считать (Бредли Коуэн) так завещал
+ пипсы и время добавить и по центру линии разместить итог
====
что то у меня не вышло, хотел для начала результат чуть выше поднять (когда 2 линии сходятся — накладка идет)

И спасибо за индикатор, классная штука
avatar

  8  poruchik Сообщений: 139

  • 27 июня 2016, 21:54
+
0


Без заглядывания в будущее — считает — норм
avatar

  8  poruchik Сообщений: 139

  • 28 июня 2016, 15:42
+
0
сегодня во вкладке эксперты заметил —
2016.07.03 07:07:48.232 Trend Speed EURUSD,H4: zero divide in 'TrendSpeed.mq4' (74,46)

speed=NormalizeDouble((p2-p1)/(Point*(n1-n2)),1);

последняя запятая (перед 1)
Редактирован: 3 июля 2016, 07:25
avatar

  8  poruchik Сообщений: 139

  • 3 июля 2016, 07:25
+
0
сегодня во вкладке эксперты заметил —
2016.07.03 07:07:48.232 Trend Speed EURUSD,H4: zero divide in 'TrendSpeed.mq4' (74,46)


Деление на ноль, сегодня торговли нет, выражение:

Point*(n1-n2))
ноль вернуло, сделайте проверку, если вас это смущает.
avatar

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

  • 3 июля 2016, 09:30
+
0
speed=NormalizeDouble((p2-p1)/(Point*(n1-n2+0.0000001)),1);

не понял твой совет

сделал (подсмотрел у кого то такой финт) — добавляем малое число, оно ни на что не влияет, зато 0 не будет
avatar

  8  poruchik Сообщений: 139

  • 3 июля 2016, 09:57
+
0
не понял твой совет


if(Point*(n1-n2)>0)...


сделал (подсмотрел у кого то такой финт) — добавляем малое число, оно ни на что не влияет, зато 0 не будет


Интересный вариант *good* 
avatar

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

  • 3 июля 2016, 10:22
+
0
точно, > 0
Это я в программировании так разбираюсь :) 
avatar

  8  poruchik Сообщений: 139

  • 3 июля 2016, 10:25

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