if(prev_calculated==0)// first calculation
{
limit=rates_total-TOCHKA_VHODA;
//--- set empty value for first limit bars// Всего баров rates_total, i может принимать значения от rates_total - 1 до 0//Если rates_total=1000 , а TOCHKA_VHODA =200, и я хочу обнулить 200 первых значений // то эти значения будут от 999 до 800 включительно. Тоесть limit=rates_total-TOCHKA_VHODA -1 = 799 это следующая //расчетная точка. А если 800 желательно пересчитать?// Если было посчитано prev_calculated = 300 баров то это бары под номерами от 999 до 700 из 1000 баров //но 700 бар нам нужно персчитать снова тогда лимит достаточно limit=rates_total-prev_calculated;for(i=rates_total-1;i>=limit;i--)
{
a1_Buffer[i]=0.00001;
a2_Buffer[i]=0.00001;
a3_Buffer[i]=0.00001;
a4_Buffer[i]=0.00001;
a5_Buffer[i]=0.00001;
a6_Buffer[i]=0.00001;
}
}
else limit=rates_total-prev_calculated;
//--- main loopfor(i=limit;i>=0 && !IsStopped();i--)
{
//===========================================================================================
Znach = iMA(NULL,0,base*2,0,MODE_SMA,PRICE_OPEN,i);
Вроде на пальцах для себя все расписал, где ошибаюсь?
Цена в точке Е = 1.09795+339.72727272*0.00001 = 1.10134727272 нормализованное до 5 знаков 1.10135 что и требовалось.
А еще, рычаг Архимеда АС*Е - АЕ*С+ЕС*А=0, тогда Е=( АЕ*С-ЕС*А)/АС или ( 102*1,09869- 79*1,09795)/23 = 1,101232, возможно где то с числом интервалов просчитался. :)
filpan: А еще, рычаг Архимеда АС*Е - АЕ*С+ЕС*А=0, тогда Е=( АЕ*С-ЕС*А)/АС или ( 102*1,09869- 79*1,09795)/23 = 1,101232, возможно где то с числом интервалов просчитался. :)
ДА, еще раз спасибо. Уменьшил параметр база до 200 (параметр ТОЧКА должен был стать 425) индикатор заработал в тестере с использованием даты. А если на всей истории то все равно не работает. И показывает туже ошибку.
filpan: ДА, еще раз спасибо. Уменьшил параметр база до 200 (параметр ТОЧКА должен был стать 425) индикатор заработал в тестере с использованием даты. А если на всей истории то все равно не работает. И показывает туже ошибку.
Дело в том что тестер МТ4 имеет ограничение на глубину истории 1000 бар. Можно попробовать обойти так:
if(prev_calculated==0)// first calculation
{
limit=rates_total-TOCHKA_VHODA;
//--- set empty value for first limit bars// Всего баров rates_total, i может принимать значения от rates_total - 1 до 0//Если rates_total=1000 , а TOCHKA_VHODA =200, и я хочу обнулить 200 первых значений // то эти значения будут от 999 до 800 включительно. Тоесть limit=rates_total-TOCHKA_VHODA -1 = 799 это следующая //расчетная точка. А если 800 желательно пересчитать?// Если было посчитано prev_calculated = 300 баров то это бары под номерами от 999 до 700 из 1000 баров //но 700 бар нам нужно персчитать снова тогда лимит достаточно limit=rates_total-prev_calculated;//Print("Bars=",Bars," rates_total=",rates_total," TOCHKA=",TOCHKA_VHODA," limit=",limit);if(limit<0)return(0);for(i=rates_total-1;i>=limit;i--)
{
a1_Buffer[i]=0.00001;
a2_Buffer[i]=0.00001;
a3_Buffer[i]=0.00001;
a4_Buffer[i]=0.00001;
a5_Buffer[i]=0.00001;
a6_Buffer[i]=0.00001;
}
Просто начинайте тестирование немного раньше и дождитесь пока глубина истории увеличится естественным путем. У меня вроде работает.
Здравствуйте.
Подскажите что не так? Индикатор не работает в тестере и эксперт на нем тоже.
Выдает ошибку:
2016.10.20 20:10:38.734 2016.10.03 00:09 Testing pass stopped due to a critical error in the EA
2016.10.20 20:10:38.640 2016.10.03 00:08 PrizeMACD_s4_s2_p72 EURUSD,M1: array out of range in 'PrizeMACD_s4_s2_p72.mq4' (147,17)
2016.10.20 20:10:38.625 PrizeMACD_s4_s2_p72 inputs: base=500; Multiplikator=10; InpSignalSMA=9;
Которая указывает на i в а1_буффере
Вроде на пальцах для себя все расписал, где ошибаюсь?
Ну какой-же бред?
Имеем 2 прямоугольных треугольника. BC / AB = DE / AD = tg(A)
AB = 22 бара цена в точке С есть, в точке В есть. Их разница делённая на _Point есть количество пунктов или ВС. Отсюда DE = (BC/AB)*101 В ПУНКТАХ...
Цена в точке Е = Цена в точке А+DE*_Point
И всё...
Это позволяет получить искомое не прибегая к графическим элементам.
Расчёт с конкретными числами.
ВС = (1.09869-1.09795)/0.00001 = 74.
tg(A) = 74/22 = 3.363636363636
DE = 3.363636363636 * 101 = 339.72727272
Цена в точке Е = 1.09795+339.72727272*0.00001 = 1.10134727272 нормализованное до 5 знаков 1.10135 что и требовалось.
Расчёт с конкретными числами.
ВС = (1.09869-1.09795)/0.00001 = 74.
tg(A) = 74/22 = 3.363636363636
DE = 3.363636363636 * 101 = 339.72727272
Цена в точке Е = 1.09795+339.72727272*0.00001 = 1.10134727272 нормализованное до 5 знаков 1.10135 что и требовалось.
А еще, рычаг Архимеда АС*Е - АЕ*С+ЕС*А=0, тогда Е=( АЕ*С-ЕС*А)/АС или ( 102*1,09869- 79*1,09795)/23 = 1,101232, возможно где то с числом интервалов просчитался. :)
101 и 22 а у тебя 102 и 23
101 и 22 а у тебя 102 и 23
Здравствуйте.
Подскажите что не так? Индикатор не работает в тестере и эксперт на нем тоже.
Выдает ошибку:
2016.10.20 20:10:38.734 2016.10.03 00:09 Testing pass stopped due to a critical error in the EA
2016.10.20 20:10:38.640 2016.10.03 00:08 PrizeMACD_s4_s2_p72 EURUSD,M1: array out of range in 'PrizeMACD_s4_s2_p72.mq4' (147,17)
2016.10.20 20:10:38.625 PrizeMACD_s4_s2_p72 inputs: base=500; Multiplikator=10; InpSignalSMA=9;
Которая указывает на i в а1_буффере
Вроде на пальцах для себя все расписал, где ошибаюсь?
limit получается отрицательный:
limit получается отрицательный:
Спасибо, буду смотреть.
С чем это может быть связанно? С разрывами в истории? У меня на всех графиках больше 1000 баров.
limit получается отрицательный:
ДА, еще раз спасибо. Уменьшил параметр база до 200 (параметр ТОЧКА должен был стать 425) индикатор заработал в тестере с использованием даты. А если на всей истории то все равно не работает. И показывает туже ошибку.
Дело в том что тестер МТ4 имеет ограничение на глубину истории 1000 бар. Можно попробовать обойти так:
Просто начинайте тестирование немного раньше и дождитесь пока глубина истории увеличится естественным путем. У меня вроде работает.