Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Курс системной торговли группы трейдеров Форекс Системс


Информационный Канал Subscribe.Ru

 

 

 

Простая торговая система

(По материалам http://www.trade2win.com/knowledge/articles/general%20articles/a-simple-trading-system)

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

Шаг 1: Выбор рынка и таймфрейма

Один из самых популярных рынков наших дней the e-mini S&P, и это не просто так: это индекс 500 компаний. Один из самых больших в мире и это означает, что он обладает высокой ликвидностью и волантильностью. Это также двунаправленный рынок, в котором входить в короткую позицию также просто и безопасно, как и в длинную. Это полностью электронный рынок, предоставляющий все возможности электронных контрактов.

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

Шаг 2: Определяем правила входа

По моему мнению, свинговая торговля является одним из лучших торговых стилей для начинающего трейдера. Вот почему в этом примере мы выбрали данный подход.

Многие трейдеры знакомы с концепцией «Линий Боллинжера». Они состоят из центральной линии и двух ценовых каналов, одна выше центральной линии, другая – ниже. Важная вещь, которую нужно знать при использовании линий заключается в том, что они содержат в себе до 95% цен закрытия, в зависимости от параметров.


На графике вверху, вы видите красную центральную линию и ценовые каналы, представленные голубым цветом. Здесь видно только два дня в начале Ноября, когда цены закрытия оказывались вне границ Боллинжера.

Мы используем эти знания для создания очень простых правил входа:

Ј        Продавать когда цена двигается выше границ Боллинжера

Ј        Покупать, когда цены уходят ниже границ Боллинжера.

Идея заключается в том, что цены должны вернуться внутрь границ Боллинжера к концу дня.

Шаг 3: Определим правила выхода

Давайте начнем с очень простого правила выхода:

Ј         Выход по закрытию текущего дня.

Ниже кривая эквити за последние 2 года. Первые результаты ободряют.

Шаг 4: Оценим вашу систему

Суммарный профит системы 13,525$

Средний профит на сделку – 149$. Даже если мы вычтем 20$ на комиссию и проскальзывание, у нас еще останется 129$.

Профит фактор 2.20

Процент выигрыша 66%, а максимальный дродаун 2,775$.

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

Первоначально мы тестировали систему со следующими параметрами – Скользящая средняя с периодом 34, стандартное отклонение (Standard Deviation) равнялось 2.5. Таблица ниже показывает результаты тестирования системы при изменении параметров скользящей средней от 29 до 39.

Как видно из таблицы, ни одна из позиций не изменяется слишком сильно при изменении параметров. Далее запустим систему для тестирования на различных рынках, чтобы убедиться в том, что система не оптимизирована только для одного рынка.

Протестируем систему на пяти различных рынках:

Суммарный профит, средняя торговля и максимальная просадка, существенно отличаются, но профит-фактор похоже стабилен. Причина такой искаженной картины – разная цена пункта для каждого рынка. В следующей таблице посмотрим на среднюю торговлю и макс. просадку в проценте от суммарной прибыли:

Теперь мы видим совсем другую картину: только макс. просадка немного отличается в зависимости от рынка, но остальные параметры остаются стабильными.

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

Шаг 5: Улучшаем вашу торговую систему

Попробуем улучшить торговую систему, добавив стоп лосс:

Отметим, что система работает лучше всего без всяких стопов.

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

 

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

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

 Первоначальные параметры (выход в день входа):

Модифицированные параметры (выход на второй день после входа):

 

Заключение

Мы начали с очень простой идеи и определили два простых правила входа. Добавив простейший из всех стопов (выход в конце рабочего дня) мы получили систему, дающую прекрасные результаты. Мы протестировали систему с различными параметрами на различных рынках для того, чтобы убедиться в том, что система не подогнана под кривую. Затем мы пытались улучшить торговую систему. После добавления стоп лосса, система не дала лучших результатов. А увеличение времени торговли было очень удачным - мы увеличили профит на 30%, в то время как просадка уменьшилась на 17%. Протестировав новые параметры на других рынках мы не получили серьезных изменений результатов тестирования, что говорит о том, что система не является подогнанной под кривую.

Илья Никишин (aka Ilya)
Партнер финансовой группы "ФОРЕКС СИСТЕМС"
ilya@forexsystems.ru

 

Паралич анализа

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

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

Нормальное течение паралича анализа

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

Патологические варианты

Патологический вариант паралича анализа весьма отличается от нормального принятия решения. Трейдеры с такой болезнью испытывают жадную потребность отыскать уверенность и безопасность. Для них неуверенность представляет собой ненадежность. Это не просто пессимистический взгляд на события. Они приравнивают деньги к психологической безопасности; проигранные деньги представляются не только потерей финансовой безопасности, но и потерей эмоциональной безопасности и хорошего самочувствия. Как развивается такая болезнь? У многих она зародилась в раннем детстве. Родители часто создавали правила для детей и наказывали их, когда правила нарушались. Ребенок искал, каким правилами следовать, чтобы избежать наказания и неприятных ощущений, связанных с ним. Став взрослым, мы создаем собственные правила и решаем, следовать им или нет; мы больше не ищем, как дети, "верные" правила, чтобы избежать наказания. Люди с параличом анализа, напротив, стремятся искать "верные правила". Они непрерывно ищут правила, а когда четких правил не находится, они просто составляют их. Так, как будто родители последовали за ними во взрослую жизнь. Они всегда рядом с ними - ворчащие и угрожающие наказанием, если "верные" правила не определены и не соблюдаются неукоснительно. Для трейдеров с параличом анализа такой конфликт детства проявляется, как поиск "верного" индикатора или "верных" торговых правил. У них есть сильная потребность, чтобы все было идеальным. Поскольку, если это не так, они уверены, что неминуем какой-либо вид наказания.

У Вас экстремальная форма паралича анализа? Если так, жизненно необходимо идентифицировать эту болезнь и выработать стратегию борьбы с нею.

Валерий Сучков (aka vs33)
Партнер финансовой группы "ФОРЕКС СИСТЕМС"
vs33@forexsystems.ru

 

Часть вторая.

Попробуем применить полученные выводы. Но для начала небольшое отступление. Когда я готовил первую часть, то столкнулся с неожиданным поведением советника. В одном случае он зарабатывал на EURUSD D1 (модель Open Price) , в другом сливал. Выяснилось, что вся разница из-за постащика данных. При тестировании на истории от Альпари советник, фактически, сливал.



А на истории от MetaQuotes он успешно зарабатывал.



Выяснилось, что в истории от Альпари не хватает буквально пары дней. Поэтому советник и учебный, использовать МТС или ТС, результат работы которых зависит от изменения котировок за один-два периода, думаю, не стал бы никто.

Изменим советник так, чтобы он закрывал позиции, по которым текущий убыток превышает заданное число пунктов. Этот параметр назовем StopLevel. Коме того, путем оптимизации параметров MovingPeriod (от 12 до 30 ) и MovingShift ( от 1 до 13 ) были взяты параметры с лучшей прибылью бек-теста на истории. Кривая Баланса сразу выправилась. Вот график Баланса на данных от Альпари. Но лучшие параметры для котировок от Альпари не являются лучшими для котировок от MetaQuotes. Фактически, параметры являются подгонокй для данного советника. Поэтому продолжим рассмотрение на прежних параметрах, но на истории от Альпари.



Код измененного советника.

//+------------------------------------------------------------------+
//| Moving Average Stop.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA 20050610
#include <Tracert.mqh>
#include <EquityOscillator.mqh>
extern double Lots = 0.1;
extern double MaximumRisk = 0.02;
extern double DecreaseFactor = 3;
extern double MovingPeriod = 12;
extern double MovingShift = 6;
extern int StopLevel =140;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//---- select lot size
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- return lot size
if(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double ma;
int res;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- buy conditions
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
return;
}
//----
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double ma;
int res;
double ProfitPoint;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
ProfitPoint=(OrderOpenPrice()-Close[1])/Point;
//---- check order type
if(OrderType()==OP_BUY)
{
if(((Open[1]>ma)&&(Close[1]<ma))||(ProfitPoint>=StopLevel))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
}
if(OrderType()==OP_SELL)
{
if(((Open[1]<ma)&&(Close[1]>ma))||(-ProfitPoint>=StopLevel))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
}
//----
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
WriteEquity();
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
//+------------------------------------------------------------------+

Изменения коснулись блока CheckForClose().
После прогона советника опять открываем файл Equity.csv и видим примерно такую картину на диаграмме (которую надо сделать вручную).



Теперь мы видим, что убыточные позиции (области ниже нуля) практически отсутствуют, зато области прибыли радуют.
Если провести оптимизацию по нововведенному параметру StopLevel (от 10 до 300), то получим такую картинку:



Зеленым квадратиком отмечена область StopLevel от 100 до 140. Ирония заключается в том, что при проведении оптимизации на данных от MetaQuotes, мы не получим подобной картинки, оптимизация в этом случае говорит , что чем больше уровень StopLevel, тем прибыльней советник. Что опять таки говорит от подгонке. Но на данных от Альпари мы даже получили прибыль.

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

Конец второй части.


Оптимизация

 Description:

 

 Filesize:

 9.86 KB

 Viewed:

 11 Time(s)




Альпари с измененными параметрами советника

 Description:

 

 Filesize:

 8.32 KB

 Viewed:

 16 Time(s)


Альпари с измененными параметрами советника.gif



MetaQuotes

 Description:

 

 Filesize:

 7.76 KB

 Viewed:

 19 Time(s)




Альпари

 Description:

 

 Filesize:

 8.44 KB

 Viewed:

 19 Time(s)


______________________________________________________

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

 С уважением к вам,
Трейдеры финансовой группы "ФОРЕКС СИСТЕМС"

http://forexsystems.ru/phpBB

 

 

 


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: fin.forex.forexsystems
Отписаться
Вспомнить пароль

В избранное