Импульс - страница 32

 
Artyom Trishkin:
Вот мне подумалось: наверное твоё желание всё упростить, свести к МАшкам, да сколотить по-быстренькому, и приводит к поспешным выводам - "работать не будет". Я ж говорил - считаем сначала разницу меж соседними тиками. Массив заполняем разницами цен, а не ценами. Но мы смотрим вскользь в поисках МАшки. Исправляйся.

Родной, я давно уже заделал эту фишку. Я наставляю на путь истинный, чтобы у вас тут не получился никчемный индикатор.

Теперь о том, что ты получил в итоге:

- усреднение скорости.

Пусть не МА-шку ты получил по цене, но ты получил МА-шку по скорости.Что это меняет?

Если не знаешь в чем косяк усреднения, тогда внимательно смотри:

(5+1)/2=3 //падает

(1+5)/2=3 //растет

Ладно, думай сам, математик...

 
new-rena:

Родной, я давно уже заделал эту фишку. Я наставляю на путь истинный, чтобы у вас тут не получился никчемный индикатор.

Теперь о том, что ты получил в итоге:

- усреднение скорости.

Пусть не МА-шку ты получил по цене, но ты получил МА-шку по скорости.Что это меняет?

Если не знаешь в чем косяк усреднения, тогда внимательно смотри:

(5+1)/2=3 //падает

(1+5)/2=3 //растет

Ладно, думай сам, математик...

Насчёт родного - это ты загнул, дружище. Хамство не красит людей.

А теперь расскажи, что в твоих формулках к чему, наставник ...

ЗЫ. Я понимаю твою агрессию - тебе кто-то не дал свои расчёты, а сам ты не допёр, считая всё на свете МАшками, математик ... Только из-за этого не нужно на людей кидаться - глупо выглядишь.

 
Artyom Trishkin:

Насчёт родного - это ты загнул, дружище. Хамство не красит людей.

А теперь расскажи, что в твоих формулках к чему, наставник ...

ЗЫ. Я понимаю твою агрессию - тебе кто-то не дал свои расчёты, а сам ты не допёр, считая всё на свете МАшками, математик ... Только из-за этого не нужно на людей кидаться - глупо выглядишь.

Насчет хамства - это взаимно было. И то что кто -то чего то не дал, это никак не влияет на создание того, к чему здесь идут. Там где это я просил, я уже всё объяснил и тот человек ведет рекламную деятельность на всех форумах, не только здесь. Люди пишут, что он уже в доску достал.

Теперь к делу.

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

То есть за одинаковый интервал времени определяется количество тиков, и направление движения цены, на основании этого получается торговый сигнал. Что тут не понятного?

Главное - не усреднять.

Итак, по количеству тиков мы судим о волотильности, а по сумме их дельт за тот же самый период времени (как ты правильно написал выше, дельта - разница цены между соседними тиками) - судим о направлении движения цены, т.е. о тенденции. Причем дельта может быть как отрицательной, так и положительной. Мы складываем то что есть.

В принципе для расчета такого индикатора и работы, нам необходимо и достаточно всего лишь N-ное количество последних тиков. Писать тики в историю не совсем нужно, разве что для теста.

Существующие аналоги такого индикатора выполнены в виде спидометра.

 
new-rena:

Насчет хамства - это взаимно было. И то что кто -то чего то не дал, это никак не влияет на создание того, к чему здесь идут. Там где это я просил, я уже всё объяснил и тот человек ведет рекламную деятельность на всех форумах, не только здесь. Люди пишут, что он уже в доску достал.

Теперь к делу.

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

То есть за одинаковый интервал времени определяется количество тиков, и направление движения цены, на основании этого получается торговый сигнал. Что тут не понятного?

Главное - не усреднять.

Итак, по количеству тиков мы судим о волотильности, а по сумме их дельт за тот же самый период времени (как ты правильно написал выше, дельта - разница цены между соседними тиками) - судим о направлении движения цены, т.е. о тенденции. Причем дельта может быть как отрицательной, так и положительной. Мы складываем то что есть.

В принципе для расчета такого индикатора и работы, нам необходимо и достаточно всего лишь N-ное количество последних тиков. Писать тики в историю не совсем нужно, разве что для теста.

Существующие аналоги такого индикатора выполнены в виде спидометра.

Это вот эта ссылка? https://www.mql5.com/ru/forum/61389/page30#comment_1776762

ЗЫ. Насчёт взаимного хамства - это ты зря. Я тебе первым не хамил.

Импульс
Импульс
  • www.mql5.com
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий. - Страница 30 - Категория: автоматические торговые системы
 
Artyom Trishkin:

Это вот эта ссылка? https://www.mql5.com/ru/forum/61389/page30#comment_1776762

ЗЫ. Насчёт взаимного хамства - это ты зря. Я тебе первым не хамил.

Да, но это на 4-рке писано. Как я понял мы делаем в 5-ой.
 
Karputov Vladimir:

Основа для записи тиков есть.


Формат имени файла:

В файле четыре колонки:


Остаются вопросы - как часто начинать новые файлы. Думаю каждый час нужно  начинать каждый файл. Так будет легче потом анализировать.

добавьте High,Low  (или сразу считайте изменение цены) - когда тик пропускается (по тех.причинам) они меняются.. то есть возможна ситуация когда когда внутри M1 Bid понизился, а High вырос

такое как раз бывает в моменты импульсов и когда терминал/комп над чем-то другим трудится :-)

 
Karputov Vladimir:

Была запись 600 тиков. Эта запись (по 100) была распределена по шести графикам. На графиках цена и скорость изменения тиков (EMA10). В общем есть повод изучить рисунки:







вы немного, то есть совсем не то смотрите..на графиках вы получили некую функцию ошибки дифференцирования. То есть сначала считали скорость как производную (dx/dt), потом её проинтегрировали (причём другим методом)  и сравниваете с оригиналом.

hint: любая MA - это де-факто интегральная функция

hint2: чтобы посмотреть в том-ли направлении двигаетесь - берите простую SMA и сдвигайте на пол-периода назад. Если на истории увидите что-то полезное, значит скорость и импульс считаете незря и можно копать глуюже

 
new-rena:
Да, но это на 4-рке писано. Как я понял мы делаем в 5-ой.

Да без разницы для какой платформы делать. Я там Романа спрашивал, и в личке ему коды писал, но так и не понял зачем он в init() задаёт размер массива в два миллиона, затем в start() изменяет размер массива в ноль, потом пытается его заполнять по индексу -1 (!!!), и лишь после этого увеличивает переменную SIZE на 1, которая и должна индексировать массив. Сравни, вот, что я предлагал:

//+------------------------------------------------------------------+
//|                                                   FillArrays.mq4 |
//|              Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|   Input variables                                                |
//+------------------------------------------------------------------+
input int NumberOfStorableTicks=20;       // Количество сохраняемых тиков
int numberOfStorableTicks; // Количество сохраняемых тиков
input int PeriodOfMA=5;                   // Период сглаживания
int periodOfMA; // Период сглаживания
input ENUM_MA_METHOD MaMethod=MODE_SMA;   // Метод усреднения МА

//+------------------------------------------------------------------+
//|   Global variables                                               |
//+------------------------------------------------------------------+
string symbol;    // Symbol()
int digits;       // Digits
//+------------------------------------------------------------------+
//|   Arrays                                                         |
//+------------------------------------------------------------------+
double      Mass_ticks[];
double      Mass_smoothed_values[];
//+------------------------------------------------------------------+
//|   Structures                                                     |
//+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   symbol=Symbol();
   digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   //---
   numberOfStorableTicks=(NumberOfStorableTicks<1)?1:NumberOfStorableTicks;
   periodOfMA=(PeriodOfMA<1)?1:PeriodOfMA;
   //---
   ArrayResize(Mass_ticks,numberOfStorableTicks);
   ArrayInitialize(Mass_ticks,0.0);
   ArrayResize(Mass_smoothed_values,numberOfStorableTicks);
   ArrayInitialize(Mass_smoothed_values,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(SymbolInfoTick(symbol,struct_tick)) {
      double tick_bid=struct_tick.bid;
      FillArrays(numberOfStorableTicks,tick_bid,Mass_ticks);
      }
   string txt="";
   for(int i=numberOfStorableTicks-1; i>=0; i--) {
      string itxt=IntegerToString(i);
      txt+="\nmass["+itxt+"]: "+DoubleToString(Mass_ticks[i],digits);
      }
   Comment(txt);
  }
//+------------------------------------------------------------------+
void FillArrays(int array_size, double price, double &mass_price[]) {
   //--- сместим данные в массиве влево
   for(int i=array_size-1; i>0; i--) {
      mass_price[i]=mass_price[i-1];
      }
   //--- запишем новый тик в массив
   mass_price[0]=price;
}
//+------------------------------------------------------------------+
void SmoothingDataArray(int array_size, int ma_period, int ma_shift, ENUM_MA_METHOD ma_method, double &mass_price[], double &mass_smoothing[]) {
   for(int i=array_size-1; i>=0; i--) {
      mass_smoothing[i]=iMAOnArray(mass_price,array_size,ma_period,ma_shift,ma_method,i);
      }
   }
//+------------------------------------------------------------------+

Впрочем, iMAOnArray() отказывается его сглаживать. Как ни вертел - всё задом-наперёд. Да она и не нужна для тех целей, которые тут ищут. Наверное...

Да, забыл. Вот что Роман предложил:

//---------------------
extern int MaxDrawTicks=100;
extern int Num_Aver_of_Ticks=5;  
double     xBuffer_Time []; // Массив значений   динамический
                            // В котором индекс - номер тика, значение - это бид 
int SIZE=0;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if(ArrayResize(xBuffer_Time,2000000)<0) {Alert(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
  // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   int S=ArraySize(xBuffer_Time);
   if (S>=0) Alert("Размер массива: ",S);
   else Print("Ошибка. Массив не создан ",S);        
   ArrayInitialize(xBuffer_Time, 0);
   return(0);
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize(xBuffer_Time,SIZE);
   xBuffer_Time[SIZE-1] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
  
   if ( SIZE >= 0 && ArraySize(xBuffer_Time) < 2147483647)
      {
      Alert (" Значение xBuffer_Time[SIZE-1] = ", DoubleToStr(xBuffer_Time[SIZE-1],Digits) );
      Alert (" Значение SIZE = ", DoubleToStr(SIZE,2) );  
      } 
    SIZE ++;   
 //---------------------------------------      
//------------
   return(0);
  }
 
Artyom Trishkin:

Попробую табличкой:

тик 10
тик 9 
тик 8 
тик 7 
тик 6
тик 5
тик 4
 тик 3 тик 2
 тик 1 тик 0 
Будущий тик
X10
X9
X8
X7
X6
X5
X4
X3
X2
 X1X0
XN0
 X9X8
 X7 X6X5
 X4X3
X2
X1
 X0XN0
XN1

x0, x1, x2 определяют текущее состояние (розовые), остальные - прошлое (салатовые). Данные в массиве постоянно смещаются, и на место нулевого тика встаёт вновь пришедший xn0. Поэтому теперь текущее состояние будет посчитано из x1, x0, xn0, а тик x2 из прошлого раза смещается к ячейкам, определяющим предыдущее состояние, внося небольшую поправку в то состояние. Если же считать всё скопом, то поправку внесут все три первых тика, что достаточно грубо как мне кажется.

В этом что-то есть. Вот скриншот тикового графика:

Скриншот тикового графика

Обратите внимание на участок ограниченный большими стрелками.

И вот обработка условия, когда среднее приращение тиков (тик0, тик1, тик2) больше среднего приращения (тик3, тик4, тик5, тик6, тик7, тик8, тик9, тик10) и при этом приращение больше нуля:

Обработка условия 

 
Artyom Trishkin:

Да без разницы для какой платформы делать. Я там Романа спрашивал, и в личке ему коды писал, но так и не понял зачем он в init() задаёт размер массива в два миллиона, затем в start() изменяет размер массива в ноль, потом пытается его заполнять по индексу -1 (!!!), и лишь после этого увеличивает переменную SIZE на 1, которая и должна индексировать массив. Сравни, вот, что я предлагал:

Впрочем, iMAOnArray() отказывается его сглаживать. Как ни вертел - всё задом-наперёд. Да она и не нужна для тех целей, которые тут ищут. Наверное...

Так, ладно. А где у тебя анализ интервала времени и зачем МА-шка появилась?

Щас вот тоже косячок нашел в своей фишке. За один и тот же интервал времени ведь приходит не одно и то же количество тиков. Мы не должны потерять такой показатель.

Возможно я ошибаюсь, т.к. 5-рку пока не очень давно юзаю.

Причина обращения: