Заметка

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

  3  

Вход в лонг/выход шорт при робитии верхней границы ценового канала, вход в шорт/выход лонг при пробое нижней границы, инструмент — акция Сбербанка, таймфрейм — 15 минут, подобрал параметры, получил в районе 100-150% годовых на четырехлетнем периоде.

Стратегию опять же создал с помощью конструктора в Tradematic. На мой взгляд, довольно удобная вещь, чтобы быстро проверять свои идеи. Особенно для новичка. Мне пока хватает его возможностей, а там посмотрим. До этого писал о роботе, который входил в позицию после направленного движения цены в течение трех баров. Сделал с десяток вариантов этого робота. Лучший результат показывает стратегия с ограничением по времени на вход в позицию. Тестирую его на демо-счете. В стратегии на основе пробоя ценового канала тоже использовал временные параметры, но теперь, ради интереса, применил в качестве условия на выход.

Условия в конструкторе стратегий выглядят так

Для входа в позиции параметр ценового канала равен 8, для выхода — 7. Закрываем шорты — с 11.00 до 16.00, лонги с 14.00 и до конца сессии.

График стратегии выглядит так

Для тестирования стратегии взял четырехлетний интервал акции Сбербанка, таймфрейм — 15 минут, в позицию входим всей суммой, комиссия — 0,03%, проскальзывание — 0,03%. Результаты ниже.

С марта 2010 года до лета 2011 года система ничего не зарабатывает. Буду возиться со стратегией. Хочется кривую сделать более благообразной. Если получится, выложу результаты. Заметил, что оптимизация по времени дает хорошие результаты во многих случаях, что скажете об этом методе?

Код стартегии, который можно засунуть в трейдматик и все проверить:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using TradeMatic;
using TradeMatic.Indicators;

namespace ScriptNamespace
{
 class MyScript : Script
 {
  private StrategyParameter parameter0;
  private StrategyParameter parameter1;
  private StrategyParameter parameter2;
  private StrategyParameter parameter3;
  private StrategyParameter parameter4;
  private StrategyParameter parameter5;
  private StrategyParameter parameter6;
  private StrategyParameter parameter7;
  private StrategyParameter parameter8;
  private StrategyParameter parameter9;
  private StrategyParameter parameter10;
  private StrategyParameter parameter11;

  public MyScript()
  {
   parameter0 = CreateParameter("Период PC (LE)", 8, 0, 1000, 1);
   parameter1 = CreateParameter("Период PC (SE)", 8, 0, 1000, 1);
   parameter2 = CreateParameter("Период PC (LX)", 8, 0, 1000, 1);
   parameter3 = CreateParameter("Час (LX)", 14, 0, 24, 1);
   parameter4 = CreateParameter("Минута (LX)", 0, 0, 60, 1);
   parameter5 = CreateParameter("Час (LX)", 19, 0, 24, 1);
   parameter6 = CreateParameter("Минута (LX)", 0, 0, 60, 1);
   parameter7 = CreateParameter("Период PC (SX)", 8, 0, 1000, 1);
   parameter8 = CreateParameter("Час (SX)", 11, 0, 24, 1);
   parameter9 = CreateParameter("Минута (SX)", 0, 0, 60, 1);
   parameter10 = CreateParameter("Час (SX)", 16, 0, 24, 1);
   parameter11 = CreateParameter("Минута (SX)", 0, 0, 60, 1);
  }

  public override void Execute()
  {
   // Вывод индикаторов на график
   PlotSeries(PricePane, Highest.Series(High, parameter0.ValueInt) >> 1, Color.Red, LineStyle.Solid, 1);
   PlotSeries(PricePane, Lowest.Series(Low, parameter1.ValueInt) >> 1, Color.Red, LineStyle.Solid, 1);
   PlotSeries(PricePane, Lowest.Series(Low, parameter2.ValueInt) >> 1, Color.Red, LineStyle.Solid, 1);
   PlotSeries(PricePane, Highest.Series(High, parameter7.ValueInt) >> 1, Color.Red, LineStyle.Solid, 1);

   // Инициализация

   // Основной цикл
   for (int bar = 8; bar < Symbol.Count; bar++)
   {
    if (MarketPosition == 1)
    {
     // Выход из длинной позиции
     if ((CrossUnder(bar, Close, Lowest.Value(bar-1, Low, parameter2.ValueInt))) && (Date[bar] > new DateTime(Date[bar].Year, Date[bar].Month, Date[bar].Day, parameter3.ValueInt, parameter4.ValueInt, 0)) && (Date[bar] < new DateTime(Date[bar].Year, Date[bar].Month, Date[bar].Day, parameter5.ValueInt, parameter6.ValueInt, 0)))
     {
      SellAtClose(bar, LastPosition, "");
     }
    }
    else if (MarketPosition == -1)
    {
     // Выход из короткой позиции
     if ((CrossOver(bar, Close, Highest.Value(bar-1, High, parameter7.ValueInt))) && (Date[bar] > new DateTime(Date[bar].Year, Date[bar].Month, Date[bar].Day, parameter8.ValueInt, parameter9.ValueInt, 0)) && (Date[bar] < new DateTime(Date[bar].Year, Date[bar].Month, Date[bar].Day, parameter10.ValueInt, parameter11.ValueInt, 0)))
     {
      CoverAtClose(bar, LastPosition, "");
     }
    }
    
    if (MarketPosition == 0)
    {
     // Вход в длинную позицию
     if ((CrossOver(bar, Close, Highest.Value(bar-1, High, parameter0.ValueInt))))
     {
      BuyAtClose(bar, "");
     }
    }
    
    if (MarketPosition == 0)
    {
     // Вход в короткую позицию
     if ((CrossUnder(bar, Close, Lowest.Value(bar-1, Low, parameter1.ValueInt))))
     {
      ShortAtClose(bar, "");
     }
    }
   }
  }
 }
}

UPD

Комментарии

Николай Камынин — 31 мая 2012 г.

А вас не смущает максимальная просадка минус 113%
А я думал, что больше, чем есть на депозите потерять нельзя.
Как вам это удалось?

-1 +

Николай Камынин — 31 мая 2012 г.

и еще вопрос.
Объясните, что значит использование счета для шорта 577%, а для лонга 54%.

0 +

spitfire — 31 мая 2012 г.

Да-да, оптимизация дает хорошие результаты, но увы, частенько только на истории :) Больше смахивает на курва-фиттинг. Проведите форвардный тест и убедитесь что Ваша система не работает. Хотя сомневаюсь что в этой брокерской поделке есть этот тест. Поэтому просто для примера соптимизируйте систему на данных 2009-2010 годах, когда прошел дикий ахтунг на рынке и данные более-менее валидные, и запустите бектест с оптимизированными параметрами на 2011-2012 годах - вы будете неприятно удивлены.
Вообще Трейдматик это программулина, сделанная по заказу брокеров чтобы малознающие трейдеры создавали чудо-граали, на которых бы потом сливали деньги. Прежде чем создавать торговые стратегии, почитайте хотя бы пару книжек по системному трейдингу типа Пардо "Компьютерный анализ фьючерсных рынков".

1 +

ALendi — 1 июня 2012 г.

Я доведу эту системку до ума и без пары книжек. Tradematic - это просто программа, которая имеет определенные возможности по созданию роботов и позволяет довольно просто запускать их в торговлю.

0 +

AlexLan73 — 1 июня 2012 г.

spitfire — 11 часов назад
" Вообще Трейдматик это программулина, сделанная по заказу брокеров чтобы малознающие трейдеры создавали чудо-граали, на которых бы потом сливали деньги. Прежде чем создавать торговые стратегии, почитайте хотя бы пару книжек по системному трейдингу типа Пардо "Компьютерный анализ фьючерсных рынков". "

)))))))))))))))))) Как точно подмечено!!!!
С Трейдматик работаю с августа прошлого года тесты, всегда были супер в реали слив денег. На данный момент у них не отлажен механизм открытие позиции. Нужно отдать должное разработчикам ребята стараются.
Общался с директором энергичный, вдумчивый и еще много плюсов к его характеристике.
Он говорил, что в версии 1.7, которая выйдет летом, будет исправлена много ошибок и недочетов.
А к новому году в планах выпустить версию 2.0 на основе WPF (и все что из этого вытекает) - увидим )))
Вот тогда, наверно, можно будет отнестись долее серьезно к тестам Трейдматик.
Отношусь с большим уважением к разработчикам Трейдматик.

0 +

ALendi — 1 июня 2012 г.

"На данный момент у них не отлажен механизм открытие позиции".
AlexLan73, что это значит?

0 +

AlexLan73 — 1 июня 2012 г.

Работаю внутри свечки, Трейдматик входит в позицию одним контрактом (акциями) все как положено. Затем забывает, что вошел и снова входит и так пока не закончатся день на депозите.
Пропадают сделки.((( Программа входит в сделку затем после очередного пересчета, после N свече она у себя в программе отбрасывает эти сделки, и ты был в лонгах стал в шорте - это по программе.
Разработчике мне рекомендовали, что бы не было за облочной прибыли построить алгоритм на открывать следующего бара. )) И предыдущие проблемы обещали исправить в версии 1.7.

0 +

ALendi — 1 июня 2012 г.

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

"Разработчике мне рекомендовали, что бы не было за облочной прибыли построить алгоритм на открывать следующего бара" Стратегии в Трейдматик в торговлю запускаются только при условии открытия позиции на закрытии текущего бара. Разработчики рекомендовали перед этим тестировать с условием открытия на открытии следующего? Результаты при тестах, как правило, примерно те же. Или что-то другое имелось ввиду?

0 +

AlexLan73 — 1 июня 2012 г.

Если бы результаты были бы те же как на тестах. )))) Я бы еще до Нового Года купил бы себе все Канарские острова )))))
А не сливал бы счет.(((((

0 +

ALendi — 1 июня 2012 г.

Так результаты и не должны быть такими, как на тестах. Вы, вероятно, как и я, какие-то параметры оптимизируете. Наивно думать, что, вложив 10 000 в эту стратегию с 6000% прибыли за четыре года на тестах, я получу 600 000 тыс. к 2016. Представленная выше стратегия может вообще не работать. Мне хотелось услышать мнения об оптимизции по времени входа/выхода, потому что она значительно улучшает результаты некоторых систем. Кто-нибудь ее использует?

0 +

AlexLan73 — 1 июня 2012 г.

У меня заложен в алгоритме заложен канал + еще всякая обвязка для входа в боковике и выходе на пиках.
Так же тест на газ, сбер 15 мин расчетный капитал 100т. руб работаю без плеча на 90% от капитала
Проскальзывание почти как у тебя, чуть больше. Сделки примерно одна в три часа.
результат в среднем за год
просадка <5%, прибыль 450-600% годовых ее можно увеличить/уменьшить в зависимость от количества сделок.
По фьючам все то же супер.
Но это только тест в реале пока не работает. ((( Здесь еще можно добавить медленную реакцию Трейдматика на событие. Пробит канал, и только через 5, 10, 30 сек когда все пересчитается Трейдматика выставляет заявку.
А цена уже далеко улетела. Жду новую версию и учусь писать робота в stocksharp.

0 +

Николай Камынин — 1 июня 2012 г.

AlexLan73, могу предположить, что Ваша система заглядывает в будущее, поэтому плохо работает в реале.

0 +

Николай Камынин — 1 июня 2012 г.

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

0 +

Николай Камынин — 1 июня 2012 г.

AlexLan73 , и еще если Вы работаете на 90% капитала это значит что Вы прибыль реинвестируете обратно в сделки . При это риски возрастают пропорционально прибыли. Такие системы всегда на тестах дают тысячи процентов.

0 +

AlexLan73 — 1 июня 2012 г.

"Николай Камынин — 2 минуты назад
AlexLan73, могу предположить, что Ваша система заглядывает в будущее, поэтому плохо работает в реале."
Николай, спасибо за замечание. С огромным интересом читаю Ваши посты. Система не заглядывает в перед..
Пробития канала и линии стопа в реальном времени. А в остальных случаях принимает решение на значениях предыдущей свечки. Типа на вчерашней свечки, скользящие пересеклись, а на этой свечки входим.
Когда заглядывает, прибыль имеет порядок 20-30 знаков в % годовых )))))))

0 +

ALendi — 1 июня 2012 г.

"Пробития канала и линии стопа в реальном времени" Это позволяет делать функция Трейдматика "Работать внутри бара". Как в таком случае проводится тестирование? У нас-то всего четыре значения свечи, 15-минутной, как вы говорите.

0 +

AlexLan73 — 1 июня 2012 г.

Извини я не понял "У нас-то всего четыре значения свечи, 15-минутной, как вы говорите."

0 +

ALendi — 1 июня 2012 г.

Open, Close, High, Low Если мы качаем историю для тестов, то имеем только эти четыре значения для каждых 15 минут. Как может пробитие канала и стопа происходить в реальном времени?

0 +

AlexLan73 — 1 июня 2012 г.

Вот я об этом и писал
Цена пробивает катал, заявка выставляется через секунд 5-30 ... цена далеко "улетает"
По этому тест)))) это все хорошо, а в реале все грустно (((
Вот и жду версию 1.7 может исправят.

0 +

ALendi — 1 июня 2012 г.

AlexLan73, так и я об этом. Как можно протестировать систему на 15-минутках, которая пробивает канал "в реальном времени"? Мы можем входить либо по close свечи, либо по open. Вы пишете, что система дает на тестах 500%, а в реале она сливает. Как она тестируется?

0 +

AlexLan73 — 1 июня 2012 г.

Тестируется - так же как и у Вас одна и та же программа.
Вы наверно не можете меня понять (((
Тест в Трейдматик к большому сожалению далек от реали.
И даже это на самое худшее.
Хуже когда программа забывает, что она в несколько свечей назад была в лонге. И переворачивается в шорт.
Еще хуже когда программа забывает, что она уже подола акции и пытается еще продать пока не закончится депозит.
А говорите тесты)))

0 +

AlexLan73 — 1 июня 2012 г.

ВЫ просто запустите по следите пару недель как она работает.
И Вам будет все понятно.
Говорят, что она работа у кого то. К сожалению я таких не знаю.
Хотелось бы по общаться.

0 +

ALendi — 1 июня 2012 г.

Можно со мной. У меня запущена стратегия несколько недель, на часовиках. До сих пор сигналы отрабатывались корректно. Я понял, что вы говорите о каких-то технических косяках в процессе работы в режиме реальных торгов. Я о другом сейчас.

Вы пишете: "Пробития канала и линии стопа в реальном времени. А в остальных случаях принимает решение на значениях предыдущей свечки". Просто хочу понять, что значит в реальном времени.

0 +

AlexLan73 — 1 июня 2012 г.

Я, за Вас рад. )))
" Просто хочу понять, что значит в реальном времени." - что здесь не понятно?
Я уже Вам несколько раз об этом писал..
Заявки выставляются с большой задержкой.

0 +

AlexLan73 — 1 июня 2012 г.

Пример. Стоп стоит на 80 рублях. смотрю свеча ее пробила. Засекаю время. проходит 30 сек (у меня опрос стоит 5 сек) и только тогда ТМ выставляет заявку. так понятно?

0 +

ALendi — 1 июня 2012 г.

Это я сразу понял. Кстати, интересно, как это реализуется в трейдматик. Где выстваляется частота опроса.

Вопрос был в другом. Как вы тестируете систему, которая реале торгует с опросом в 5 сек.? В процессе бэктестинга нет возмножности совершать опрос. То есть выходы будут совершаться по open или close.

0 +

AlexLan73 — 1 июня 2012 г.

Читайте документацию.)))
Читать все таки полезно)))
И вопросы к разработчикам.)))

0 +

ALendi — 1 июня 2012 г.

Да не найду я ничего в документации, потому что нелья протестировать систему, которая в процессе торговли опрашивает цену каждые 5 сек. на 15-минутном таймфрейме. Теоретически можно протестить на тиковых данных, но их в трейдматике нет.

0 +

Николай Камынин — 2 июня 2012 г.

ALendi, Вы очевидно не обратили внимание на мой вопрос про 577% использования счета в шорте (см Вашу таблицу результатов) Это полная лажа.
Практически означает, что Вам кто-то даст бумаг на стоимость в пять раз больше ваших денег.
Этого показателя достаточно, чтобы все результаты выкинуть в урну и программу тоже туда отнесите.
Возьмите Амиброкера и тестируйте на здоровье таких показателей не получите.

1 +

ALendi — 2 июня 2012 г.

AlexLan73, приношу свои извинения. Читать все же полезно. При тестировании TM, по всей видимости, использует значения индикаторов на таймфрейме в качестве значения входа/выхода.
Николай, да, какая-то лажа, разбираюсь с тем, что это может значить.

0 +

AlexLan73 — 3 июня 2012 г.

))) принимаю) Нужно относится "осторожно" к полученным данным при тестировании.

0 +

palevas — 4 июня 2012 г.

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

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

1 +

ALendi — 4 июня 2012 г.

palevas, исторические данные у меня в одном файле, в ТМ, насколько я знаю, они всегда должны быть в одном. Почитал документацию, но с процентом использования счета пока не разобрался. Если торгуем фиксированной без реинвестирования, то проблем нет.

0 +

ALendi — 4 июня 2012 г.

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

0 +

Николай Камынин — 5 июня 2012 г.

ALendi,
1) при шорте Вы используете заемные акции, а не денежные средства. Акции продаете и средства от продажи используете для покупки других акций либо они у вас лежат и брокер их сам пользует..
2)При этом взяв у брокера акций на 1, Вы в залог отдаете акций на сумму в 1.5 раза больше.
А акций берете на сумму примерно 70% от от оценки имеющихся собственных.
3)Попробуйте объяснить что значит использование счета в шорте на 577%.
Вам дали плечо по акциям 1:5 в нарушение закона?
или Вы построили пирамиду на различных акциях?

0 +

Николай Камынин — 5 июня 2012 г.

и еще, поясните, как понять :
годовая доходность всего 188% при этом по логу 166 а по шорту 111.
Что с чем сложить чтобы 188 получить?

0 +

Написать комментарий

Чтобы написать комментарий, необходимо авторизоваться.

Написать администратору