понедельник, 11 февраля 2019 г.

Конструктор торговых роботов SWT-Pro

Каждый воин должен понимать свой манёвр! (с) А.В.Суворов



Рынок так устроен, что любая железка, завязанная на жесткий алгоритм действий, рано или поздно натолкнется на ситуацию, когда этот алгоритм будет приносить не прибыль, а убытки. Возможно это случится через три года, возможно через 5 минут.
Если вы относитесь к роботу, как к черному ящику, не понимая, что, как и почему он делает, то вы в данной ситуации обречены терпеть убытки до окончания неблагоприятного периода. Когда он закончится? Возможно через час, возможно через год.
Поэтому, независимо от того, пользуетесь вы роботом или торгуете по индикаторам вручную, вы должны четко понимать принципы анализа рынка, заложенные в систему индикаторов, и понимать ситуацию на рынке с точки зрения SWT-метода. Без этого никуда.

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

Как добиться такого понимания?
1. Изучить основы SWT-метода по интерпретации состояния и движений рынка. Это не требует углубления в теорию, все понимается на уровне простых наглядных графических образов.
2. Понимать алгоритм действий робота и его изменения в зависимости от каждой настройки.
3. Трезво взвешивайте свои силы, потому что легкость и простота в обращении с индикаторами и роботом, следующие из материалов блога, в значительной степени определяются опытом автора.
4. Контроль, контроль и еще раз контроль рисков. Ваша главная задача - оставаться в игре, а не стать богатым, сделав одну ставку. Ставка может и не сыграть.

Удачи!!!

Конструктор торговых роботов SWT-Pro. 

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


1.1. Список параметров и их назначение.

При сбрасывании робота на график торгуемого инструмента появляется диалоговое окно для настройки параметров, показанное на рисунке 1.1.



Рис.1.1. Диалоговое окно настройки параметров торгового робота.

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

FiltrBasicTrend - при значении параметра true включается фильтр основного тренда. При значении параметра false основной тренд роботом не учитывается.
FiltrLongTrend - при значении параметра true включается фильтр долгосрочного тренда. При значении параметра false долгосрочный тренд роботом не учитывается.
FiltrMediumTrend - при значении параметра true включается фильтр среднесрочного тренда. При значении параметра false среднесрочный тренд роботом не учитывается.
FiltrShortTrend - при значении параметра true включается фильтр краткосрочного тренда. При значении параметра false краткосрочный тренд роботом не учитывается.
FiltrLocalTrend - при значении параметра true включается фильтр локального тренда. При значении параметра false локальный тренд роботом не учитывается.
FiltrDailyTrend - при значении параметра true включается фильтр дневного тренда. При значении параметра false дневной тренд роботом не учитывается.
FiltrIdayTrend - при значении параметра true включается фильтр внутридневного тренда. При значении параметра false внутридневной тренд роботом не учитывается.
FiltrHourTrend - при значении параметра true включается фильтр часового тренда. При значении параметра false часовой тренд роботом не учитывается.
IncreaseFilterOrder - при значении параметра true порядок полосовых фильтров, используемых для разделения трендов, переключается со второго на четвертый.
AdaptiveAdjustmentMode - при значении параметра true включается режим адаптивной настройки трендов, отключающий учет коррекционного режима трендов если тренд на уровень младше направленный. При значении параметра false адаптивной настройки нет, все тренды учитываются независимо друг от друга.
ZeroTDmode - при значении параметра true включается режим определения направления трендов без задержки (см. описание индикатора SWT).
AutoMM - выбор режима автоматического определения размера (объема) позиции. Значение true соответствует автоматическому определению размера позиции, исходя из процента риска, задаваемого параметром RiskPercForTradeAutoMM. Значение false - ручной выбор размера позиции, задаваемый параметром LotsForManualMM.
AdvancedMM - при значении параметра true в тестах и в торговле включается рост объемов пропорциональный корню квадратному от эквити. При значении параметра false зависимость объема от эквити линейная. Режим включается при условии, что задано значение начального баланса торгового счета.
RiskPercForTradeAutoMM - максимальный процент риска на сделку при AutoMM=true и размере стопа, задаваемого через параметры робота. При отсутствии стопа объем считается исходя из размера волатильности среднесрочного тренда V1440 (см. описание индикатора SWT_PowTr).
Процент риска считается от эквити торгового счета.
LotsForManualMM - размер лота для торговли фиксированным объемом, задаваемым вручную, и действующий при AutoMM=false.
NMaxNumberOrdersInMarket - максимальное количество ордеров в рынке по инструменту, открываемых роботом по торговым сигналам. Ограничение не распространяется на позиции, открываемые сеточным алгоритмом (комментарий GrSWT), поскольку позиции сетки открываются в направлении роста прибыли и незначительно увеличивают общие риски торговли.
TheSizeTakeProfit_0_7 - целое число от 0 до 7. Задает размер ордера тейк-профит:
0 - ордер тейк-профит не устанавливается;
1 - ордер тейк-профит равен волатильности часового тренда V01 или устанавливается по каналу часового тренда;
2 - ордер тейк-профит равен волатильности внутридневного тренда V05 или устанавливается по каналу внутридневного тренда;
3 - ордер тейк-профит равен волатильности дневного тренда V15 или устанавливается по каналу дневного тренда;
4 - ордер тейк-профит равен волатильности локального тренда V60 или устанавливается по каналу локального тренда;
5 - ордер тейк-профит равен волатильности краткосрочного тренда V240 или устанавливается по каналу краткосрочного тренда;
6 - ордер тейк-профит равен волатильности среднесрочного тренда V1440 или устанавливается по каналу среднесрочного тренда;
7 - ордер тейк-профит равен волатильности долгосрочного тренда V10080 или устанавливается по каналу долгосрочного тренда.
TheSizeStopLoss_0_7 - целое число от 0 до 7. Задает размер ордера стоп-лосс, устанавливаемого при открытии позиции:
0 - ордер стоп-лосс не устанавливается;
1 - ордер стоп-лосс равен волатильности часового тренда V01 с поправкой на спред или ставится за каналом часового тренда;
2 - ордер стоп-лосс равен волатильности внутридневного тренда V05 с поправкой на спред или ставится за каналом внутридневного тренда;
3 - ордер стоп-лосс равен волатильности дневного тренда V15 с поправкой на спред или  ставится за каналом дневного тренда;
4 - ордер стоп-лосс равен волатильности локального тренда V60 с поправкой на спред или  ставится за каналом локального тренда;
5 - ордер стоп-лосс равен волатильности краткосрочного тренда V240 с поправкой на спред или  ставится за каналом краткосрочного тренда;
6 - ордер стоп-лосс равен волатильности среднесрочного тренда V1440 с поправкой на спред или  ставится за каналом среднесрочного тренда;
7 - ордер стоп-лосс равен волатильности долгосрочного тренда V10080 с поправкой на спред или  ставится за каналом долгосрочного тренда.
Поправка на размер спреда необходима для инструментов, у которых спред больше параметров волатильности для младших трендов.
TheChannelStopProfit - при значении параметра true включается режим установки стопов и целей на границах каналов волатильности для соответствующего тренда (см. описание индикатора SWT_SRLvl). При значении параметра false установка ордеров производится по параметрам волатильности (см. размер стопов и целей, указанный в предыдущих пунктах описания TheSizeStopLoss_0_6 и TheSizeTakeProfit_0_6).
TheMovingStopLoss - при значении параметра true происходит подтягивание первоначального ордера стоп-лосс за позицией при продвижении позиции в зону прибыли. Параметр работает и в зоне прибыли и в зоне убытка, чем отличается от классического трейлинг-стопа, который начинает действовать только в случае, если прибыль по позиции превысила заданное значение.
TrailingStopAdaptive - при значении параметра true работает адаптивный трейлинг-стоп в размере, задаваемом параметром TrailingStopLevel:
- при TrailingStopLevel <=1 адаптивный трейлинг стоп равен V - сумме волатильностей часового и внутричасового трендов V01+V00;
- при TrailingStopLevel =2 адаптивный трейлинг стоп равен волатильности внутридневного тренда V05;
- при TrailingStopLevel =3 адаптивный трейлинг стоп равен волатильности дневного тренда V15;
- при TrailingStopLevel >3 адаптивный трейлинг стоп равен волатильности локального тренда V60.
При значении параметра false используется размер трейлинг стопа, задаваемый вручную в пипсах (пунктах) параметром TrailingStopLevel.
TrailingStopLevel - параметр, определяющий размер адаптивного или ручного трейлинг-стопа. Если адаптивный трейлинг стоп отключен (параметр TrailingStopAdaptive=false), то при значении 0 - ручной трейлинг-стоп отсутствует. Если значение больше 0, но меньше минимально допустимого в торговом терминале, то устанавливается минимально допустимое значение + спред.
Grid - при значении параметра true в дополнение к основным торговым алгоритмам включается сеточный алгоритм, наращивающий объем по мере продвижения рынка в направлении торгуемого тренда. Запуск алгоритма производится по первой сделке данного направления. Сеточный алгоритм работает независимо от состояния фильтров до тех пор, пока не сформируется сигнал закрытия позиций данного направления или не будет обнулен уровень открытия следующей позиции по сетке.
GridStepFaktor. Шаг сетки равен размеру стопа для часового тренда V (V=V01+V00+удвоенный спред) с поправкой на множитель шага сетки GridStepFaktor. С ростом волатильности шаг сетки растет, с уменьшением - снижается.
GridVolumeFaktor - множитель объемов позиций сетки.Увеличивает либо уменьшает объем позиций, открываемых по сеточному алгоритму, по сравнению с объемом позиций, открываемых по торговым сигналам.
UpLevel и DownLevel - уровни старта сеточного алгоритма при ручном запуске сетки в момент загрузки робота. Изменение параметров UpLevel и DownLevel загруженного робота не влияет на внутреннее значение уровней.
Используются после выключения терминала, если необходимо восстановить работу сеточного алгоритма от какого либо уровня. Могут использоваться для инициации работы сеточного алгоритма без использования основных торговых алгоритмов.
TimeOutOpenNewPosMinutes - интервал в минутах блокировки открытия по торговому сигналу однотипной позиции с целью исключения эффекта "дребезга" индикаторов вблизи пороговых уровней. По умолчанию установлено значение 720 минут - половина периода тренда дневного цикла. Установка интервала меньше 12 минут заблокирована программно.
Ограничение по времени не распространяется на позиции, открываемые сеточным алгоритмом, а также не действует, если данному инструменту не открыто ни одной позиции.
InitialFrequencySWT - параметр гребенки фильтров, задающий положение центральных частот полосы пропускания каждого фильтра (в данной модификации метода с шагом, кратным 5). Значение параметра. установленное по умолчанию, обеспечивает точную настройку фильтров на частоты дневного и недельного циклов. Если вы решите изменить значение этого параметра и построить свою систему волновых трендов, то это изменение необходимо произвести во всех индикаторах комплекта.
ControlManualPosByExpert - при значении параметра true ваш робот будет управлять позициями, открытыми вручную, устанавливая размером стопа, трейлингом и закрывая позиции, при поступлении соответствующих сигналов.
Magic - мэджик-идентификатор обеспечивает возможность настройки различных копий роботов для одновременной работы на одном инструменте с разными конфигурациями параметров для различных типов торгуемых трендов. Значение по умолчанию 112358. Селекция позиций при их обработке экспертом производится по символу и мэджик-идентификатору. При желании трейдер может задавать свои значения идентификатора для работы на одном и том же инструменте различных версий советника с различными настройками параметров. Нельзя использовать несколько экземпляров робота с разными настройками на одном инструменте с одинаковым мэджик-идентификатором.
HideLabels - при значении параметра true отключается режим отображения меток, показывающих состояние торгового робота. Используется при желании разгрузить график от лишних графических элементов.
TestOfExpert - значение параметра true необходимо устанавливать при тестировании робота.
Параметр AbsoluteDrawdownLevelForTest задает уровень допустимой абсолютной просадки при тестировании. При реальной торговле параметр просадки задается в области глобальных переменных торгового терминала (клавиша F3).
Параметр EquityProfitTargetStepPerc задает шаг цели по прибыли для тестов. В реальной торговле этот параметр задается в области глобальных переменных торгового терминала (клавиша F3).
SizeLabel - задает размер шрифта графических объектов (меток), если настройки компьютера не позволяют использовать шрифт по умолчанию.
Параметр ModifyColorLabel позволяет изменять цвет надписей если этого требуют параметры монитора и цветовая схема графика.
TickValueFaktor - по умолчанию 1. Позволяет компенсировать иногда встречающиеся ошибки сервера по цене тика торговых инструментов. Это проще, чем бороться с ветряными мельницами технической поддержки.

1.2. Глобальные переменные.

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


Рис.1.2. Область глобальных переменных торгового терминала

С помощью системы глобальных переменных задаются следующие параметры:

GV_TestAllowedAbsoluteDrawdownLevel - задание уровня предельной просадки по счету, по достижении которой автоматическая торговля будет заблокирована;
GV_AllowedDrawdownPerc - задание уровня относительной просадки в процентах для заданного торгового цикла, при достижении которого торговля будет заблокирована до принятия трейдером решения о возобновлении торговых операций;
GV_Block - признак блокировки торговли при значении 1;
GV_EquityProfitTarget - абсолютная цель прибыли по эквити, при достижении которой все открытые торговые позиции принудительно закрываются;
GV_EquityProfitTargetPerc - шаг для расчета следующего уровня GV_EquityProfitTarget. Следующий уровень рассчитывается при нулевом значении цели по прибыли, при достижении ранее установленного значения, а также при уменьшении баланса счета. Если GV_EquityProfitTargetPerc=0, то автоматический расчет новых целей прибыли не производится, однако можно установить цели вручную;
GV_GlobalAccountNumber - номер торгового счета. Рассчитывается, чтобы выдать предупреждение о необходимости редактирования глобальных переменных при смене торгового счета;
GV_LeverageLimits - ограничение кредитного плеча, установленное трейдером. Например, брокер предоставляет кредитное плечо 1:200, а трейдер решил разрешить торговлю до уровня 1:20;
GV_TestAllowedAbsoluteDrawdownLevel - уровень абсолютной просадки для теста. Задается в параметрах робота при тестировании;
GV_TestInitialAccountBalance - начальный баланс торгового счета при тестировании. Задается в тестере.
GV_TheInitialAccountBalance - задание уровня начального баланса торгового счета для очередного торгового цикла (устанавливается при необходимости, начало цикла определяется трейдером). Параметр необходим для режима AdvancedMM=true.

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



Рис.1.3. Предупреждение о необходимости проверить установку глобальных переменных торгового терминала при смене торгового счета


1.3. Индикация параметров настройки.

При работе с портфелем инструментов, да и при работе с одним инструментов, но с гибко изменяемой настройкой параметров робота в голове трудно удержать используемую конфигурацию параметров. Для удобства в робот добавлена индикация основных настроек в виде текстовых и числовых меток, как показано на рисунке 1.4 (текстовые метки на правом краю графика).


Рис.1.4. Индикация параметров настройки

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

InitAB - обозначение параметра TheInitialAccountBalance и заданное числовое значение начального баланса.
ADDL - обозначение параметра AllowedAbsoluteDrawdownLevel и заданное значение допустимого уровня абсолютной просадки.
EqTP - обозначение параметра EquityProfitTarget и заданный уровень целевого профита по эквити в единицах баланса торгового счета.
EquityTpPerc - обозначение параметра EquityProfitTargetPerc и заданное числовое значение процентного шага по новой цели прибыли.
DDLimitPerc - обозначение параметра AllowedDrawdownPerc и заданное числовое значение процента относительной просадки текущего торгового цикла.
Lev+Block - комбинированный индикатор, первое число указывает значение установленного ограничения кредитного плеча LeverageLimits, а второе - значение параметра Block.

Basic, Long, Medium, Short, Local, Daily, IDay, Hourly - комбинированные индикаторы, знак которых показывает состояние фильтров трендов и направление движения по каждому тренду. Красный (оранжево-красный) цвет числа указывает на то, что при определении направления тренда используется нулевая задержка. Значения десятичных разрядов несут следующую информацию:
- знак - направление движения при действующем фильтре;
- первый разряд слева: 1 - тренд принимается во внимание, 0 - фильтр тренда отключен;
- второй разряд слева - значение параметра настройки адаптивного режима AdaptiveAdjustmentMode;
- третий разряд слева - характер движения:
- 1 - коррекция;
- 2 - тренд;
- 0 - фильтр отключен.

Filtr+ZeroTrD - комбинированный индикатор, первое число которого указывает значение параметра IncreaseFilterOrder, второе число - значение параметра ZeroTDmode.

AdvMM+Lot - комбинированный индикатор, первое число которого указывает значение параметра AdvancedMM, а второе число - значение параметра LotsForManualMM.

AutoMM+Risk - комбинированный индикатор, первое число которого указывает значение параметра AutoMM, а второе число - значение параметра RiskPercForTradeAutoMM.

Pr+St+Mst+N - комбинированный индикатор, первое число которого указывает значение параметра TheSizeTakeProfit_0_7, второе - значение параметра TheSizeStopLoss_0_7, третье - значение параметра TheMovingStopLoss, и четвертое - значение параметра NMaxNumberOrdersInMarket.

ChSP+TsA+TsL - комбинированный индикатор, первое число которого указывает значение параметра TheChannelStopProfit, второе - значение параметра TrailingStopAdaptive, а третье - значение параметра TrailingStopLevel.

Grid+StF+VF - комбинированный индикатор параметров сеточного алгоритма, первое число которого указывает значение параметра Grid - включение сетки, второе число - значение множителя шага сетки GridStepFaktor, и третье - значение множителя объемов позиций сетки GridVolumeFaktor.

UpLvl и DnLvl при ручном запуске сетки в момент загрузки робота показывают верхний и нижний уровни старта сеточного алгоритма, а в процессе работы - текущие уровни, на которых будут открываться позиции. Нулевые значения означают, что сеточный алгоритм или не включен или еще не запущен.

All+Gr+Sig - комбинированный индикатор, первое число которого показывает общее количество позиций, открытых роботом по всем инструментам торгового терминал, второе число - количество позиций сеточного алгоритма по данному инструменты, третье число - количество позиций, открытых по торговым сигналам.

T-out+CtrlMan - комбинированный индикатор, первое число которого указывает значение установленного параметра TimeOutOpenNewPosMinutes, а второе число - значение параметра ControlManualPosByExpert, ответственного за обработку роботом позиций, открытых вручную.

Profit(All_Symb) - комбинированный индикатор, первое число которого показывает не зафиксированную прибыль (убыток) по всем инструментам торгового терминала, а второе число - прибыль (убыток) по всем позициям, открытым по инструменту текущего графика.

InitFrqncy - значение параметра InitialFrequencySWT гребенки фильтров SWT-метода, задающего положение центральных частот полосы пропускания каждого фильтра.

В верхнем левом углу графика расположены еще две метки, добавленные для удобства пользователей:
TrendDirection, которая принимает значения UPDOWN и No Trend. Метка указывает на направление торговли, сформированное группой настраиваемых трендов - локальным, краткосрочным, среднесрочным и долгосрочным - в соответствии с выбранным значением вектора фильтрации и режимом адаптивной настройки.
ReadyToTrade,  которая принимает значения UPDOWN и Not Ready. Метка указывает на готовность и направление проведения сделки по торговому сигналу в зависимости от постоянно включенных фильтров часового, внутридневного и дневного трендов.
Сделка производится если направление торговли по обоим меткам совпадает. При отключенных фильтрах локального, краткосрочного, среднесрочного и долгосрочного трендов робот торгует по группе младших трендов, фильтры которых остаются постоянно включенными.
Метки полезны для быстрой оценки ситуации, что бывает полезным, если торговля роботом совмещается с агрессивной ручной торговлей в направлении действующих трендов, а также для торговли внутри дня.

Алгоритм работы не является черным ящиком и абсолютно прозрачен. Пояснения по деталям формирования торговых сигналов и особенностям их фильтрации в материалах блога.

Комментариев нет:

Отправить комментарий