Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 134

 

  Возникла проблема при работе эксперта в тестере. Тестирую на минутках. Стохастик для старших ТФ вычисляю сам по минутным данным. 

История минут закачана с 2001г. В закладке настроек <Графики>  выставлено максимальное количество баров и в истории и отображаемых.

Вся история на графике пролистывается.

   Проблема в том, что, как выяснилось с помощью отладочной печати, с какой бы даты я не запускал тестер, максимальное количество баров

в переменной Bars на первом баре теста (на старте) всегда 1001 или 1002. С каждым следующим баром значение Bars увеличивается на 1.

Поэтому на старте старшие  ТФ не посчитать.

  Одно решение есть. Дописать запрет торговли до того, как Bars достигнет нужного значения. 

   Можно ли решить эту проблему по другому? Увеличивается ли как-либо это стартовое значение Bars в тестере???

 
Igor733:

  Возникла проблема при работе эксперта в тестере. Тестирую на минутках. Стохастик для старших ТФ вычисляю сам по минутным данным. 

История минут закачана с 2001г. В закладке настроек <Графики>  выставлено максимальное количество баров и в истории и отображаемых.

Вся история на графике пролистывается.

   Проблема в том, что, как выяснилось с помощью отладочной печати, с какой бы даты я не запускал тестер, максимальное количество баров

в переменной Bars на первом баре теста (на старте) всегда 1001 или 1002. С каждым следующим баром значение Bars увеличивается на 1.

Поэтому на старте старшие  ТФ не посчитать.

  Одно решение есть. Дописать запрет торговли до того, как Bars достигнет нужного значения. 

   Можно ли решить эту проблему по другому? Увеличивается ли как-либо это стартовое значение Bars в тестере???

Нет, не увеличивается. Используйте своё решение.
 
В чем может быть дело. При написании советника приходится его много раз тестировать для отслеживания изменений. Спустя какое то рандомное число тестов тестер стратегий перестает воспринимать изменения совершенные в коде. Иногда доходит до абсурда. Можно просто взять и удалить кусок кода, а сова будет работать в тестере по алгоритму написанному ранее. То же происходит и парсингом вычислений в CSV, после определенного кол-ва тестов в CSV начинает парситься, какая то рандомная дурь.

P.S. кнопочку компилировать нажимал.
 

Очень нужно разобраться с алгоритмом расчета smoothed moving average. По нескольким причинам обращение к функции iMA не подходит.

Как я понял информацию с https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma

Первый элемент рассчитывается как сумма цен закрытия деленная на период.

Следующие рассчитываются по формуле SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N.

Возьмем период равный 5 и цены закрытия EUR/USD H1 за период с 24.02.2017 19:00 до 24.02.2017 23.00 (GMT+2) т.е. последние 5 свечей

Цены закрытия - 1,05681; 1,05702; 1,05639; 1,05612; 1,05592.

Соответственно 1 элемент - 1,056452; 2 элемент - 1,056852 3 элемент - 1,05676 4 элемент - 1,056632 5 элемент - 1,056489

А на графике SMMA 5, close  равно 1.05706 т.е. отличие уже в 3-м знаке

 Что я считаю не правильно?

И как считать правильно, чтобы получить 1,05706 ?

 
zsu1970:

Очень нужно разобраться с алгоритмом расчета smoothed moving average. По нескольким причинам обращение к функции iMA не подходит.

Как я понял информацию с https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma

Первый элемент рассчитывается как сумма цен закрытия деленная на период.

Следующие рассчитываются по формуле SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N.

Возьмем период равный 5 и цены закрытия EUR/USD H1 за период с 24.02.2017 19:00 до 24.02.2017 23.00 (GMT+2) т.е. последние 5 свечей

Цены закрытия - 1,05681; 1,05702; 1,05639; 1,05612; 1,05592.

Соответственно 1 элемент - 1,056452; 2 элемент - 1,056852 3 элемент - 1,05676 4 элемент - 1,056632 5 элемент - 1,056489

А на графике SMMA 5, close  равно 1.05706 т.е. отличие уже в 3-м знаке

 Что я считаю не правильно?

И как считать правильно, чтобы получить 1,05706 ?

Посмотрите в сам индикатор, так будет понятнее.
 
Aleksey Maryaskin:
Господа разрабы! Всем доброго времени суток. Интересует вопрос по созданию шаблона эксперта(скрипта) при его создании. Такое можно где-то редактировать и как это делается?
Прямую ссылку тут, наверное, не пропустят... Спросите у гугла "В этой ветке я буду выкладывать курс MQL4" (без кавычек), а там поиском слово "шаблон" (кажется, на 2-й странице).
 
Vitaly Muzichenko:
Посмотрите в сам индикатор, так будет понятнее.
  Посмотрел Все то же самое что и в ссылке которую приводил.

double SMMA(int period)
{
 
// наполняем массив ценами закрытия
  int k=period;
  for(int i=1; i<=period; i++)
  {
   H1_Close[i]=Close[k];
//   Print("H1_Close [",i,"] ",H1_Close[i]," Close [",k,"] ",Close[k]);
   k--;
  }
// расчитываем первый элемент как среднее цен закрытия
  double Summ=0;
  for (int i=1; i<=period;i++)
   Summ=Summ+H1_Close[i];           //SUM1 = SUM(CLOSE, N)
  double TmpSMMA=Summ/period;   //SMMA1 = SUM1/N
// расчитываем i-й элемент как SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N
  for(int i=2;i<=period;i++)
   TmpSMMA=(TmpSMMA*(period-1)+H1_Close[i])/period;
}
  А результать все равно сильно отличается от данных индикатора в терминале. ПОЧЕМУ ?
 
zsu1970:

Очень нужно разобраться с алгоритмом расчета smoothed moving average. По нескольким причинам обращение к функции iMA не подходит.

Как я понял информацию с https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma

Первый элемент рассчитывается как сумма цен закрытия деленная на период.

Следующие рассчитываются по формуле SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N.

Возьмем период равный 5 и цены закрытия EUR/USD H1 за период с 24.02.2017 19:00 до 24.02.2017 23.00 (GMT+2) т.е. последние 5 свечей

Цены закрытия - 1,05681; 1,05702; 1,05639; 1,05612; 1,05592.

Соответственно 1 элемент - 1,056452; 2 элемент - 1,056852 3 элемент - 1,05676 4 элемент - 1,056632 5 элемент - 1,056489

А на графике SMMA 5, close  равно 1.05706 т.е. отличие уже в 3-м знаке

 Что я считаю не правильно?

И как считать правильно, чтобы получить 1,05706 ?

Так в инклюднике есть алгоритм расчёта.

 
Alexey Viktorov:
Так в инклюднике есть алгоритм расчёта.

    Так я вроде так как в расчетах все делаю а результат не получается. 4-й день сижу не могу разобраться.
    Я в ответе Vitaly Muzichenko писал код функции который у меня получился но в чем ошибка разобраться не могу
 
 
zsu1970:
    Так я вроде так как в расчетах все делаю а результат не получается. 4-й день сижу не могу разобраться.
    Я в ответе Vitaly Muzichenko писал код функции который у меня получился но в чем ошибка разобраться не могу
 
Вы подставляете сразу цены, или их получаете и потом подставляете в расчёт?