Artyom Trishkin: Вот мне подумалось: наверное твоё желание всё упростить, свести к МАшкам, да сколотить по-быстренькому, и приводит к поспешным выводам - "работать не будет". Я ж говорил - считаем сначала разницу меж соседними тиками. Массив заполняем разницами цен, а не ценами. Но мы смотрим вскользь в поисках МАшки. Исправляйся.
Родной, я давно уже заделал эту фишку. Я наставляю на путь истинный, чтобы у вас тут не получился никчемный индикатор.
Теперь о том, что ты получил в итоге:
- усреднение скорости.
Пусть не МА-шку ты получил по цене, но ты получил МА-шку по скорости.Что это меняет?
Если не знаешь в чем косяк усреднения, тогда внимательно смотри:
Родной, я давно уже заделал эту фишку. Я наставляю на путь истинный, чтобы у вас тут не получился никчемный индикатор.
Теперь о том, что ты получил в итоге:
- усреднение скорости.
Пусть не МА-шку ты получил по цене, но ты получил МА-шку по скорости.Что это меняет?
Если не знаешь в чем косяк усреднения, тогда внимательно смотри:
(5+1)/2=3 //падает
(1+5)/2=3 //растет
Ладно, думай сам, математик...
Насчёт родного - это ты загнул, дружище. Хамство не красит людей.
А теперь расскажи, что в твоих формулках к чему, наставник ...
ЗЫ. Я понимаю твою агрессию - тебе кто-то не дал свои расчёты, а сам ты не допёр, считая всё на свете МАшками, математик ... Только из-за этого не нужно на людей кидаться - глупо выглядишь.
Насчёт родного - это ты загнул, дружище. Хамство не красит людей.
А теперь расскажи, что в твоих формулках к чему, наставник ...
ЗЫ. Я понимаю твою агрессию - тебе кто-то не дал свои расчёты, а сам ты не допёр, считая всё на свете МАшками, математик ... Только из-за этого не нужно на людей кидаться - глупо выглядишь.
Насчет хамства - это взаимно было. И то что кто -то чего то не дал, это никак не влияет на создание того, к чему здесь идут. Там где это я просил, я уже всё объяснил и тот человек ведет рекламную деятельность на всех форумах, не только здесь. Люди пишут, что он уже в доску достал.
Теперь к делу.
Я вчера кинул сюда ссылку, так это уже есть практически основная часть индикатора, его изюминка, так скажем.
То есть за одинаковый интервал времени определяется количество тиков, и направление движения цены, на основании этого получается торговый сигнал. Что тут не понятного?
Главное - не усреднять.
Итак, по количеству тиков мы судим о волотильности, а по сумме их дельт за тот же самый период времени (как ты правильно написал выше, дельта - разница цены между соседними тиками) - судим о направлении движения цены, т.е. о тенденции. Причем дельта может быть как отрицательной, так и положительной. Мы складываем то что есть.
В принципе для расчета такого индикатора и работы, нам необходимо и достаточно всего лишь N-ное количество последних тиков. Писать тики в историю не совсем нужно, разве что для теста.
Насчет хамства - это взаимно было. И то что кто -то чего то не дал, это никак не влияет на создание того, к чему здесь идут. Там где это я просил, я уже всё объяснил и тот человек ведет рекламную деятельность на всех форумах, не только здесь. Люди пишут, что он уже в доску достал.
Теперь к делу.
Я вчера кинул сюда ссылку, так это уже есть практически основная часть индикатора, его изюминка, так скажем.
То есть за одинаковый интервал времени определяется количество тиков, и направление движения цены, на основании этого получается торговый сигнал. Что тут не понятного?
Главное - не усреднять.
Итак, по количеству тиков мы судим о волотильности, а по сумме их дельт за тот же самый период времени (как ты правильно написал выше, дельта - разница цены между соседними тиками) - судим о направлении движения цены, т.е. о тенденции. Причем дельта может быть как отрицательной, так и положительной. Мы складываем то что есть.
В принципе для расчета такого индикатора и работы, нам необходимо и достаточно всего лишь N-ное количество последних тиков. Писать тики в историю не совсем нужно, разве что для теста.
Существующие аналоги такого индикатора выполнены в виде спидометра.
Это вот эта ссылка? https://www.mql5.com/ru/forum/61389/page30#comment_1776762
ЗЫ. Насчёт взаимного хамства - это ты зря. Я тебе первым не хамил.
Остаются вопросы - как часто начинать новые файлы. Думаю каждый час нужно начинать каждый файл. Так будет легче потом анализировать.
добавьте High,Low (или сразу считайте изменение цены) - когда тик пропускается (по тех.причинам) они меняются.. то есть возможна ситуация когда когда внутри M1 Bid понизился, а High вырос
такое как раз бывает в моменты импульсов и когда терминал/комп над чем-то другим трудится :-)
Была запись 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 |//+------------------------------------------------------------------+inputint NumberOfStorableTicks=20; // Количество сохраняемых тиковint numberOfStorableTicks; // Количество сохраняемых тиковinputint PeriodOfMA=5; // Период сглаживанияint periodOfMA; // Период сглаживанияinputENUM_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 |//+------------------------------------------------------------------+intOnInit()
{
//---
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 |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---Comment("");
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---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() отказывается его сглаживать. Как ни вертел - всё задом-наперёд. Да она и не нужна для тех целей, которые тут ищут. Наверное...
Да, забыл. Вот что Роман предложил:
//---------------------externint MaxDrawTicks=100;
externint 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);
elsePrint("Ошибка. Массив не создан ",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);
}
x0, x1, x2 определяют текущее состояние (розовые), остальные - прошлое (салатовые). Данные в массиве постоянно смещаются, и на место нулевого тика встаёт вновь пришедший xn0. Поэтому теперь текущее состояние будет посчитано из x1, x0, xn0, а тик x2 из прошлого раза смещается к ячейкам, определяющим предыдущее состояние, внося небольшую поправку в то состояние. Если же считать всё скопом, то поправку внесут все три первых тика, что достаточно грубо как мне кажется.
В этом что-то есть. Вот скриншот тикового графика:
Обратите внимание на участок ограниченный большими стрелками.
И вот обработка условия, когда среднее приращение тиков (тик0, тик1, тик2) больше среднего приращения (тик3, тик4, тик5, тик6, тик7, тик8, тик9, тик10) и при этом приращение больше нуля:
Да без разницы для какой платформы делать. Я там Романа спрашивал, и в личке ему коды писал, но так и не понял зачем он в init() задаёт размер массива в два миллиона, затем в start() изменяет размер массива в ноль, потом пытается его заполнять по индексу -1 (!!!), и лишь после этого увеличивает переменную SIZE на 1, которая и должна индексировать массив. Сравни, вот, что я предлагал:
Впрочем, iMAOnArray() отказывается его сглаживать. Как ни вертел - всё задом-наперёд. Да она и не нужна для тех целей, которые тут ищут. Наверное...
Так, ладно. А где у тебя анализ интервала времени и зачем МА-шка появилась?
Щас вот тоже косячок нашел в своей фишке. За один и тот же интервал времени ведь приходит не одно и то же количество тиков. Мы не должны потерять такой показатель.
Возможно я ошибаюсь, т.к. 5-рку пока не очень давно юзаю.
Вот мне подумалось: наверное твоё желание всё упростить, свести к МАшкам, да сколотить по-быстренькому, и приводит к поспешным выводам - "работать не будет". Я ж говорил - считаем сначала разницу меж соседними тиками. Массив заполняем разницами цен, а не ценами. Но мы смотрим вскользь в поисках МАшки. Исправляйся.
Родной, я давно уже заделал эту фишку. Я наставляю на путь истинный, чтобы у вас тут не получился никчемный индикатор.
Теперь о том, что ты получил в итоге:
- усреднение скорости.
Пусть не МА-шку ты получил по цене, но ты получил МА-шку по скорости.Что это меняет?
Если не знаешь в чем косяк усреднения, тогда внимательно смотри:
(5+1)/2=3 //падает
(1+5)/2=3 //растет
Ладно, думай сам, математик...
Родной, я давно уже заделал эту фишку. Я наставляю на путь истинный, чтобы у вас тут не получился никчемный индикатор.
Теперь о том, что ты получил в итоге:
- усреднение скорости.
Пусть не МА-шку ты получил по цене, но ты получил МА-шку по скорости.Что это меняет?
Если не знаешь в чем косяк усреднения, тогда внимательно смотри:
(5+1)/2=3 //падает
(1+5)/2=3 //растет
Ладно, думай сам, математик...
Насчёт родного - это ты загнул, дружище. Хамство не красит людей.
А теперь расскажи, что в твоих формулках к чему, наставник ...
ЗЫ. Я понимаю твою агрессию - тебе кто-то не дал свои расчёты, а сам ты не допёр, считая всё на свете МАшками, математик ... Только из-за этого не нужно на людей кидаться - глупо выглядишь.
Насчёт родного - это ты загнул, дружище. Хамство не красит людей.
А теперь расскажи, что в твоих формулках к чему, наставник ...
ЗЫ. Я понимаю твою агрессию - тебе кто-то не дал свои расчёты, а сам ты не допёр, считая всё на свете МАшками, математик ... Только из-за этого не нужно на людей кидаться - глупо выглядишь.
Насчет хамства - это взаимно было. И то что кто -то чего то не дал, это никак не влияет на создание того, к чему здесь идут. Там где это я просил, я уже всё объяснил и тот человек ведет рекламную деятельность на всех форумах, не только здесь. Люди пишут, что он уже в доску достал.
Теперь к делу.
Я вчера кинул сюда ссылку, так это уже есть практически основная часть индикатора, его изюминка, так скажем.
То есть за одинаковый интервал времени определяется количество тиков, и направление движения цены, на основании этого получается торговый сигнал. Что тут не понятного?
Главное - не усреднять.
Итак, по количеству тиков мы судим о волотильности, а по сумме их дельт за тот же самый период времени (как ты правильно написал выше, дельта - разница цены между соседними тиками) - судим о направлении движения цены, т.е. о тенденции. Причем дельта может быть как отрицательной, так и положительной. Мы складываем то что есть.
В принципе для расчета такого индикатора и работы, нам необходимо и достаточно всего лишь N-ное количество последних тиков. Писать тики в историю не совсем нужно, разве что для теста.
Существующие аналоги такого индикатора выполнены в виде спидометра.
Насчет хамства - это взаимно было. И то что кто -то чего то не дал, это никак не влияет на создание того, к чему здесь идут. Там где это я просил, я уже всё объяснил и тот человек ведет рекламную деятельность на всех форумах, не только здесь. Люди пишут, что он уже в доску достал.
Теперь к делу.
Я вчера кинул сюда ссылку, так это уже есть практически основная часть индикатора, его изюминка, так скажем.
То есть за одинаковый интервал времени определяется количество тиков, и направление движения цены, на основании этого получается торговый сигнал. Что тут не понятного?
Главное - не усреднять.
Итак, по количеству тиков мы судим о волотильности, а по сумме их дельт за тот же самый период времени (как ты правильно написал выше, дельта - разница цены между соседними тиками) - судим о направлении движения цены, т.е. о тенденции. Причем дельта может быть как отрицательной, так и положительной. Мы складываем то что есть.
В принципе для расчета такого индикатора и работы, нам необходимо и достаточно всего лишь N-ное количество последних тиков. Писать тики в историю не совсем нужно, разве что для теста.
Существующие аналоги такого индикатора выполнены в виде спидометра.
Это вот эта ссылка? https://www.mql5.com/ru/forum/61389/page30#comment_1776762
ЗЫ. Насчёт взаимного хамства - это ты зря. Я тебе первым не хамил.
Это вот эта ссылка? https://www.mql5.com/ru/forum/61389/page30#comment_1776762
ЗЫ. Насчёт взаимного хамства - это ты зря. Я тебе первым не хамил.
Основа для записи тиков есть.
Формат имени файла:
В файле четыре колонки:
Остаются вопросы - как часто начинать новые файлы. Думаю каждый час нужно начинать каждый файл. Так будет легче потом анализировать.
добавьте High,Low (или сразу считайте изменение цены) - когда тик пропускается (по тех.причинам) они меняются.. то есть возможна ситуация когда когда внутри M1 Bid понизился, а High вырос
такое как раз бывает в моменты импульсов и когда терминал/комп над чем-то другим трудится :-)
Была запись 600 тиков. Эта запись (по 100) была распределена по шести графикам. На графиках цена и скорость изменения тиков (EMA10). В общем есть повод изучить рисунки:
вы немного, то есть совсем не то смотрите..на графиках вы получили некую функцию ошибки дифференцирования. То есть сначала считали скорость как производную (dx/dt), потом её проинтегрировали (причём другим методом) и сравниваете с оригиналом.
hint: любая MA - это де-факто интегральная функция
hint2: чтобы посмотреть в том-ли направлении двигаетесь - берите простую SMA и сдвигайте на пол-периода назад. Если на истории увидите что-то полезное, значит скорость и импульс считаете незря и можно копать глуюже
Да, но это на 4-рке писано. Как я понял мы делаем в 5-ой.
Да без разницы для какой платформы делать. Я там Романа спрашивал, и в личке ему коды писал, но так и не понял зачем он в init() задаёт размер массива в два миллиона, затем в start() изменяет размер массива в ноль, потом пытается его заполнять по индексу -1 (!!!), и лишь после этого увеличивает переменную SIZE на 1, которая и должна индексировать массив. Сравни, вот, что я предлагал:
Впрочем, iMAOnArray() отказывается его сглаживать. Как ни вертел - всё задом-наперёд. Да она и не нужна для тех целей, которые тут ищут. Наверное...
Да, забыл. Вот что Роман предложил:
Попробую табличкой:
x0, x1, x2 определяют текущее состояние (розовые), остальные - прошлое (салатовые). Данные в массиве постоянно смещаются, и на место нулевого тика встаёт вновь пришедший xn0. Поэтому теперь текущее состояние будет посчитано из x1, x0, xn0, а тик x2 из прошлого раза смещается к ячейкам, определяющим предыдущее состояние, внося небольшую поправку в то состояние. Если же считать всё скопом, то поправку внесут все три первых тика, что достаточно грубо как мне кажется.
В этом что-то есть. Вот скриншот тикового графика:
Обратите внимание на участок ограниченный большими стрелками.
И вот обработка условия, когда среднее приращение тиков (тик0, тик1, тик2) больше среднего приращения (тик3, тик4, тик5, тик6, тик7, тик8, тик9, тик10) и при этом приращение больше нуля:
Да без разницы для какой платформы делать. Я там Романа спрашивал, и в личке ему коды писал, но так и не понял зачем он в init() задаёт размер массива в два миллиона, затем в start() изменяет размер массива в ноль, потом пытается его заполнять по индексу -1 (!!!), и лишь после этого увеличивает переменную SIZE на 1, которая и должна индексировать массив. Сравни, вот, что я предлагал:
Впрочем, iMAOnArray() отказывается его сглаживать. Как ни вертел - всё задом-наперёд. Да она и не нужна для тех целей, которые тут ищут. Наверное...
Так, ладно. А где у тебя анализ интервала времени и зачем МА-шка появилась?
Щас вот тоже косячок нашел в своей фишке. За один и тот же интервал времени ведь приходит не одно и то же количество тиков. Мы не должны потерять такой показатель.
Возможно я ошибаюсь, т.к. 5-рку пока не очень давно юзаю.