Рассмотрим вот такой инструмент:

Видно, что за несколько месяцев акция очень существенно выросла. Значит, это волатильная и достаточно трендовая вещь. Поэтому логично ее торговать при помощи трендовой системы. Нетрудно построить простейшую трендовуху. По классике будем входить на пересечении скользящих средних, а выходить по трейлинг-стопу--вариации люстры Чака Лебо. Путем небольшой оптимизации легко получить следующую систему:
//////////////////////////////////////////////////////////////////////
if MarketPosition=0 and average(close,3)>average(close,30) then buy next bar 1 share at open;
if MarketPosition=1 then sell next bar 1 share at Highest(high,barssinceentry)*0.92 stop;
////////////////////////////////////////////////////////////////////////////////
Эквити и параметры:
Это типичные для трендовух параметры--меньше половины прибыльных сделок (42.2%), но большое (3.15) отношение средней прибыльной к средней убыточной. Как обычно, система отдает понемногу во флэте, но отлично берет трендовые движения. Теперь можно сделать следующее:
1) Отшлифовать входы--возможно, простая средняя не вполне улавливает особенности инструмента, может быть, нужна экспоненциальная средняя.
2) Отработать выходы. Например, попробовать в качестве выхода параболик, так как видно, что акция иногда резко ускоряется, а параболик хорошо заточен под получение максимально возможной прибыли в этом случае.
В общем, надо поработать.
Все, на этом прикол заканчивается. Теперь внимание, правильный ответ. Этот инструмент--искусственный. Он получен при помощи генератора случайных чисел следующим кодом:
////////////////////////////////////////////////////
var: s(10),x(0);
x=2*Random(1)-1;
if s[1]-s[2]<-0.9 then x=x+0.8;
if s[1]-s[2]>0.9 then x=x-0.8;
s=s[1]+x;
print(File(«D:\1.txt»), NumtoStr(20000000-1000000+date,0)+","+Numtostr(time,0)+","+Numtostr(s,2)+","+Numtostr(s,2)+","+Numtostr(s,2)+","+Numtostr(s,2));
//////////////////////////////////////////////////////
Если бы не было блока
if s[1]-s[2]<-0.9 then x=x+0.8;
if s[1]-s[2]>0.9 then x=x-0.8;
то это было бы просто броуновское движение, на котором заработать нельзя. Поэтому все средние, люстры, итд итп являются просто подгоночным бредом, не имеющим никакого отношения к делу. За счет же этого блока процесс является контртрендовым, поэтому правильная, осознанная, основанная на нормальном понимании процесса стратегия такова--покупай, если упало больше, чем на 0.9 и продавай, если выросло больше, чем на 0.9. Код:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if marketposition=0 and close-close[1]<-0.9 then buy this bar 1 share at close;
if barssinceentry=1 then sell this bar 1 share at close;
if marketposition=0 and close-close[1]>0.9 then sell short this bar 1 share at close;
if barssinceentry=1 then buy to cover this bar 1 share at close;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Эквити и параметры:
Обратим внимание на среднюю сделку--она равна 0.8, как и должно быть из формулы генерации процесса.
На реальном рынке ситуация во многом похожа. Существует значительное число людей, бродящих в потемках со средними и боллинджерами. Они не понимают, что делают, химича со всякой дурью. Поскольку рынок--это не броуновское движение, то иногда некоторым удается чисто случайно найти что-то рабочее, которое торгуется и в будущем. Но не имея понимания, торгуется некая производная. Что такое торговать производную? Это, на примере нашего инструмента, следующий код, который взялся из блуждания в темноте:
//////////////////////////////////////////////
if marketposition=0 and average(close,3)<average(close,30) then buy this bar 1 share at close;
if barssinceentry=7 then sell this bar 1 share at close;
///////////////////////////////////////////////////
Эквити:
Вроде, работает, и будет и в будущем работать на радость изобретателю (в отличие от трендилки из начала поста, которая есть просто переподгонка). Но это лишь жалкое подобие того, что должно быть. А поскольку на реальном рынке к таким сильнейшим неэффективностям, как в этом примере, не подступишься, то в реале работать будет еще хуже.
Какие выводы?
1) В реале никакой формулы типа
////////////////////////////////
var: s(10),x(0);
x=2*Random(1)-1;
if s[1]-s[2]<-0.9 then x=x+0.8;
if s[1]-s[2]>0.9 then x=x-0.8;
s=s[1]+x;
////////////////////////////////
не существует. Поэтому реально ситуация значительно сложней этого примера. В реале все, что у нас есть, это лишь история.
2) Однако, неэффективности существуют и имеют вполне конкретную природу. В значительном числе случаев можно довести понимание природы неэффективности практически до формульного уровня. Но для этого нужны труд и время.
3) Основное в системостроении--это именно понимание, а не жонглирование параболиками. А математика, тестирование, статистика--это лишь инструменты для приобретения понимания.
Файл котировок инструмента:
http://www.fayloobmennik.net/3839838
а ещё интересно было бы почитать про анализ реальной ленты сделок (нашего всего — фртс), например, на трендовость или антитрендовость (а то у самого всё руки никак не дойдут ))))
Если значение волы прикрутить к работе тренд/флет?
как будет?)