Примеры: Статистический анализ рыночных движений и их прогнозов - страница 3

 
Avelox:

http://ruforum.forexpeoples.com/index.php?s=f3a21a8e902b46250912e7246ec5967d&showtopic=14530&view=findpost&p=295391

Если к ней добавить статистику, то результат может оказаться впечатляющим. Статистика хороша, когда обрабатывает некую базовую теорию.

Статья называется "Формула рыночной волны". С уважением и добрыми пожеланиями!

Спасибо, почитаем.
 
  • Спасибо Алексею за проделанную работу.
    Вот несколько предложений и замечаний по коду OptimMA.mq4.

Предложения по увеличению быстродействия.

  • В ф-ции CreatTPSLData() строка 45, 46 добавить break; для выхода из цикла после нахождения первого TP/SL. Т.к. дальнейшие сравнения уже не нужны.

if (Low[k]<=LossPrice) { find = true; FileWriteInteger(hFile, -k); break;}//если нашли бар СЛ
else if (High[k]>=ProfitPrice) { find=true; FileWriteInteger(hFile, k); break;}//если нашли бар ТП

  • В ф-ции CreatDataArray() строка 123 и 126 также добавить break; . Если веера уже не совпадают, зачем их сравнивать дальше?

while (_ma<MaxK && find && k<MaxI) // проходим по вееру и классифицируем его
{
if (Sign(Ma.Sub[_ma][j])!=Sign(Ma.Sub[_ma][i])) {find=false; break;}// если не совпало направление каждой МА
else
if (MathAbs(Ma.Sub[_ma][j])>=MathAbs(Ma.Sub[_ma][i])*1.4 || MathAbs(Ma.Sub[_ma][j])<=MathAbs(Ma.Sub[_ma][i])*0.714)
{find=false; break;}// или если расстояния между ними не попадают в диапазон
_ma++;
}


Замечания о возможных ошибках.

  • Зачем определение ф-ции IsProfitFan() ? Она же нигде не используется.

Ф-ция CreatDataArray()

строка 96: op=(Open[i]+Close[i])/2.0;
Почему используются цены Open и Close, а не High и Low? Ведь для расчета MA мы используем High и Low.
  • строка 98: Ma.Sub[0][i]=op-Ma[1];
    Может надо использовать Ma[0](с периодом 2) вместо Ma[1](с периодом 5), т.к. мы берем разницу между соседними MA.
  • При подсчете Sum, ExpValue, nTP для всех идентичных вееров, мы не учитываем сам образец, а почему собственно?
  • При подсчете суммы TP и SL баров принадлежащих идентичным веерам есть логическая ошибка! Вполне возможно, что на нескольких подряд барах находятся точки входа для данного веера. Но если мы входим в первой точке, то остальные должны пропустить, пока не сработает TP/SL. И только после этого можем открываться снова. Этот момент пропущен.
  • строка 118: for (j=i+1; j<MaxI; j++)
    Кажется должно быть j=1 тогда мы полностью составим картину для всех вееров на всех 125000 барах. Т.е. берем веер на каждом баре и сравниваем его со всеми подряд веерами на всех барах. А так мы сравниваем статистику на разных кол-вах баров.
    Здесь же возникает вопрос как выбрать/извлечь веер-образец для дальнейшего использования, т.к. мы все же выбираем группу идентичных вееров?
  •  

    Спасибо за все ваши корректировки. Очень приятно, что вы разобрались с кодом.

    Большую часть из правок я нашел сам. А вот что касается вашего последнего замечания

    строка 118: for (j=i+1; j<MaxI; j++)
    Кажется должно быть j=1 тогда мы полностью составим картину для всех вееров на всех 125000 барах. Т.е. берем веер на каждом баре и сравниваем его со всеми подряд веерами на всех барах. А так мы сравниваем статистику на разных кол-вах баров.

    здесь уже обсуждалось. Мы не должны заглядывать в будущее. Поэтому мой цикл правильный.

     
    sergeev:

    Спасибо за все ваши корректировки. Очень приятно, что вы разобрались с кодом.

    Большую часть из правок я нашел сам. А вот что касается вашего последнего замечания

    строка 118: for (j=i+1; j<MaxI; j++)
    Кажется должно быть j=1 тогда мы полностью составим картину для всех вееров на всех 125000 барах. Т.е. берем веер на каждом баре и сравниваем его со всеми подряд веерами на всех барах. А так мы сравниваем статистику на разных кол-вах баров.

    здесь уже обсуждалось. Мы не должны заглядывать в будущее. Поэтому мой цикл правильный.

    • А мы и не заглядываем в будущее. Мы просто проводим статистическое исследование на 125 000 барах. А при j=i+1 получится что для бара под номером 0 мы проводим 125 000 сравнений, а для бара под номером 120 000 только 5 000 сравнений. Причем и тот и другой могут входить в один веер. И что тогда получится, что для одного и того же веера разная статистика на 125 000 барах?
    • Было бы интересно увидеть насколько исправления влияют на отчеты.
    • Кстати для того чтобы увидеть статистику на разных промежутках времени можно для начала работы скрипта задавать время отсчета и от него уже отсчитывать определенное кол-во баров.
     
    MrX писал(а):
    • А мы и не заглядываем в будущее. Мы просто проводим статистическое исследование на 125 000 барах. А при j=i+1 получится что для бара под номером 0 мы проводим 125 000 сравнений, а для бара под номером 120 000 только 5 000 сравнений. Причем и тот и другой могут входить в один веер. И что тогда получится, что для одного и того же веера разная статистика на 125 000 барах?

    Все с точностью до наоборот. Если вы например находителсь сейчас на баре номер 0, то ведь не знаете значения веера бара номер -1 или -2. Это ведь back to the future. А ограничением выборки от i+1 мы таким образом не смотрим на бары i, i-1, i-2 ...

    Убедил?

     

    Я понимаю где в таймсерии находится прошлое и будущее :-) Я говорю о том что статистическое исследование проведено неверно.

    Если мы проводим его на 125 000 барах, то мы должны взять веер принадлежащий каждому бару и сравнить его с остальными 124 999 веерами.

    И потом выбрать наиболее удачный шаблон веера. В варианте когда j=i+1 мы каждый следующий веер сравниваем с меньшим кол-вом вееров. Получается что для некоторых вееров мы проводим сравнение с 10, 11 ... 2000 и т.д. веерами. Мне кажется это не корректным.

     

    я, наверное, опоздал к беседе. И я не профессионал. Мне просто хотелось понять, возможно с помощью вашей статьи или прикрепленных данных определить, например, время, когда та или иная валюта вообще становится более активна. Не важно, в каком направлении. Просто активна. Если да, то напишите, пожалуйста, как это сделать. Или может есть какой-то другой способ. Мне это, к сожалению, нужно, и я не могу решить этот вопрос. Мне надо определить статистически время ативности валюты, не направление и точку входа, а время входа.

    с уважением, Азер.

     

    Хорошая статья. Особенно подход необычен.

    Что интересно, функция IsProfitFan, зачем там вставлена? Раз стоит значит что-то делала.

     

    Спасибо за статью, хоть и давно это было.

    обнаружил неточность в коде !IndoExp.mq4

    // 3. Блок сравнения массивов М1 и М2. Вывод результатов в комментарии
    //**********************************************************************************
    ....
    if (M2[i]==1.0 && BuyTP[i-1]==1.0) nBuy++;//число совпавших профитных баров и сигналов на покупку
    if (M2[i]==-1.0 && SellTP[i-1]==-1.0) nSell++;//число совпавших профитных баров и сигналов на продажу
    if (M2[i]!=0.0 && (BuySL[i-1]==1.0 || SellSL[i-1]==-1.0)) N++;//число полученных убыточных баров 

    последняя строка сработает если M2[i]==1.0 и SellSL[i-1]==-1.0 (и наоборот)

    т.е. сигнал на покупку и убыток от продажи, а зачем продавать если сигнал на покупку? )))

    надо расписать это условие

    if (  (M2[i]>0 && BuySL[i-1]==1.0) || (M2[i]<0 && SellSL[i-1]==-1.0) ) N++;//число полученных убыточных баров 

     

    Жаль, что так никто и не создал ветку на форуме. А ведь обсудить есть что.

    Интересный факт, если строку 96 заменить на: op=(High[i]+Low[i])/2.0;

    а строку 98 заменить на: Ma.Sub[0][i]=op-Ma[0];

    то результат получается намного скромнее.

    Может для лучшего результата вообще стоит исключить из сравнения абсолютные значения малопериодных МА. Начать, например, с разницы МА5 и МА8?