Диапазон оптимизации

 

Привет всем!

Хочу задать вопрос по поводу диапазона данных использующегося для оптимизации советников. Т.е. на каких таймфреймах какие диапазоны выбирать. Например для H1 достаточно оптимизировать советник на данных за месяц, три, год? Хотелось бы увидеть эти значения для разных таймфреймов и хотя бы краткие обоснования выбора. Заранее спасибо

 
Это вопрос, который поднимается довольно часто. Вообще оптимизация по своей сути спорное явление - имеет как своих противников, так и приверженцев. Дело сугубо индивидуальное, и во многом обусловлено как особенностями торговой системы, так и поведением рынка. К тому же зависит от сути оптимизируемых параметров.
 
ITeXPert >>:


Хочу задать вопрос по поводу диапазона данных использующегося для оптимизации советников. Т.е. на каких таймфреймах какие диапазоны выбирать. Например для H1 достаточно оптимизировать советник на данных за месяц, три, год? Хотелось бы увидеть эти значения для разных таймфреймов и хотя бы краткие обоснования выбора.

Великолепная книга о тестировании и оптимизации
 

Четких критериев не существует, у каждого на этот счет свое мнение. Попробую высказать свое.

Оптимизация на всем историческом промежутке является чистым самообманом. Поэтому промежуток оптимизации должен быть как минимум в два раза меньше периода тестирования. Но чем меньшая часть периода тестирования используется для оптимизации, тем лучше. После выбора параметров на участке оптимизации проводите тест на полном промежутке, который вы выбрали в качестве периода тестирования. Полученным результатам можно начинать "верить", если выборка составляет не менее 100 сделок. Но и этого многим не хватает. Понятно, что бОльшее количество сделок дает более точные представления о системе. Я, например, "начинаю верить" при выборке не менее 200 сделок. 1000 сделок - оптимальный вариант, но нет предела совершеству...

 

Очень хорошо этот вопрос разобран у Ежёва и Шумского. Вот, что можно сказать, обобщив ими сделанное:

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

Ошибка аппроксимации

Поскольку число принимаемых ТС решений, как правило много меньше числа настраиваемых в ней параметров, то в этом случае средняя ошибка аппроксимации выразится через общее число подгоночных параметров w следующим образом: Eapprox= d/w, где d - число входных параметров, которые анализирует ТС. В подавляющем числе случаев выполняется d=w (все подгоночные параметры сосредоточены на входе ТС).

Главная проблема обучающихся алгоритмов, известна как проблема переобучения или подгонки под историю. Суть этой проблемы лучше всего объяснить на конкретном примере. Пусть обучающие примеры порождаются некоторой функцией, которую нам и хотелось бы воспроизвести. В теории обучения такую функцию называют учителем. При конечном числе обучающих примеров всегда возможно построить Тестовый проход с нулевой ошибкой обучения, т.е. ошибкой, определенной на множестве обучающих примеров. Для этого нужно взять ТС с числом подгоночных параметров большим, чем число примеров. Действительно, чтобы воспроизвести каждый пример у нас имеется Р уравнений для W неизвестных. И если число неизвестных меньше числа уравнений, такая система является недоопределенной и допускает бесконечно много решений. В этом-то и состоит основная проблема: у нас не хватает информации, чтобы выбрать единственное правильное решение - функцию-учителя. В итоге выбранная случайным образом функция дает плохие предсказания на новых примерах, отсутствовавших в обучающей выборке, хотя последнюю Тестер воспроизвел на истории без ошибок. Вместо того, чтобы обобщить известные примеры, он запомнил их. Этот эффект и называется переобучением.

Ошибка, связанная со сложностью модели.

Описание модели сводится, в основном, к передаче значений ее подстроечных параметров. При заданной точности такое описание потребует порядка W бит. Следовательно удельную ошибку на один пример, связанную со сложностью модели, можно оценить следующим образом: Ecomplex=W/P. Она, как мы видим, монотонно спадает с ростом числа примеров (длина истории на обучении).

Действительно, для однозначного определения подгоночных параметров по Р заданным примерам необходимо, чтобы система Р уравнений была переопределена, т.е. число параметров W было больше числа уравнений. Чем больше степень переопределенности, тем меньше результат обучения зависит от конкретного выбора подмножества обучающих примеров. Определенная выше составляющая ошибки обобщения, как раз и связана с вариациями решения, обусловленными конечностью числа примеров.

Итак, мы оценили обе составляющих ошибки обобщения тестера стратегий: E=Eapprox+ Ecomplex=d/W+W/P>SQRT(d/P). Важно, что эти составляющие по-разному зависят от числа подгоночных параметров W, что предполагает возможность выбора оптимального размера, минимизирующего общую ошибку. Минимум ошибки (знак равенства) достигается при оптимальной длине исторических данных принимабщих участие в оптимизации стратегии: P=k*W^2/d=k*W, где к-константа примерно равная 4.

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

Если у нас в тестере оптимизируются 5 параметров (нарпимер, периоды машек), то оптимальная длина истории должна быть такой, что бы тестером было совершено на ней 4*5=20 трансакций. Для этого может потребоваться от 1 до ...200 дней истории, всё зависит от принятой стратегии. Уменьшение этого числа, приведёт к подгонке тестера под историю, а увеличение - к ухудшению качества аппроксимации и, как следствие, к ухудшению точности прогноза.

 
будьте проще,открою маленький секрет из каких соображений выбирать длину участка оптимизации,шо такое оптимизация ?????? да это подгонка,и ничего более,поэтому я подгонку провожу таким макаром,беру последний годой график на H1(если это основной таймфрейм для ТС),далее,на них выделяю 2 жирных участка- один из них баевый,другой-селловый,и на каждом из этих участков делаю галимую подгонку соотв. по баям и селлам - получаю 2 набора подгоночных значений,а в будущем включаю только тот набор,который отфильтрован каким-нибудь индюком на старшем таймфрейме,в данном примере фильтрую D1,скромно-150% годовых,но на краюшку хлеба хватит!  :-о) 

 
будьте проще,открою маленький секрет

Способов познания этого Мира множество.

Кто-то познаёт через Любовь. Кто-то через медитацию, и т.д. Я привёл способ оценки интересующей величины, через логику и математику. Так что ваш секрет и не секрет вовсе, а лишь ещё одна грань...

P.S. То, о чём я говорил выше, всего лишь один акт оптимизации параметров. Чтобы оценить работу оптимизированного советника, одной точки мало, нужно набирать статистику, а статистически значимый результат начинается с сотни прогонов на независимых данных с переоптимизацией на каждом проходе...

Так, что рецепт адекватной оптимизации в тестере простым не будет.

 

Всем спасибо большое, особенно Neutron за подробное описание. Недавно нашел на форумен очень интересную идею, сейчас занимаюсь воплощением ее в код. Параллельно тестировал ее на демо, результат очень даже неплохой, порядка 150% за 3 дня, но есть и свою ньюансы... Чтобы не создавать новую тему спрошу здесь:

При определении точки входа необходимо выяснить нет ли уже открытого ордера в этом же направлении на расстоянии n пунктов, следуюющий код не работает но не могу понять почему:

bool buy=true;

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderOpenPrice()<=Bid && Bid-OrderOpenPrice()<50*Point) buy=false;
}
if (buy) OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"MyAdvisor",0,0,Blue);

В итоге когда запускаю советник с количеством возможных открытых лотов 10 (например) он открывает их все из одной точки, а мне чтобы открыл один ордер, а следующий только если разница между текущей ценой и ценой имеющегося открытого ордера была более 50 пунктов

 

to Neutron

эти два вида ошибок относятся к любым ТС или только к нейросетям?

 
budimir Вы выбираете для определения параметров трендовые участки? Участки изменения направления и участки бокового тренда отбрасываете?
 
khorosh >>:
budimir Вы выбираете для определения параметров трендовые участки? Участки изменения направления и участки бокового тренда отбрасываете?

выбираю самые ж и р н ы е трендовые участки,причом на подгоночном участке получается всего 20-30 сделок,а то,шо выборка на подгоночном участке должна составлять не менее 100-1000 сделок для

матьематической достоверности -фсе это БРЕД,ну допустим вы взяли подгоночный участок, непосредственно примыкающий к будущему,выявили фазу рынка - тренд или это боковой тренд или это изменение направления и шо дальше ???                      да ничего!-рынок НЕ стационарен,и куда он рульнет на будущем участке=ХЗ!


to ITeXPert  > ну не хохмите с порядком 150% за 3 дня, когда  я писал о 150% то после этих % было слово

годовых,а таких участков длиною в 3 дня со 150% в моей ТС за год наберется не один десяток! :о)


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