SWT-Robot

3 ноября 2024, 15:53
Nikolay Skrigan
0
131

Введение


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


Это почти правильно, но относится к командирам. А солдат должен исполнять приказы, правильно и с максимальной эффективностью.

Очень многое зависит от командиров. На Востоке говорят: -"Стадо баранов победит в сражении, если их ведет лев. И стадо львов проиграет, если ими командует баран."

 

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

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

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

Как добиться такого понимания?

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

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

1. SWT-Robot. Параметры настройки и состояния

SWT-Robot - расширенная версия ряда предыдущих программ предыдущих программ с добавлением возможности использования контр-трендовой торговли и адаптивного алгоритма сетки и двумя сервисными сервисными добавками - адаптивный трейлинг стоп и закрытие прибыльных позиций на паттернах разворота внутридневного тренда.

Прежние версии робота можно получить отключив дополнительные параметры настройки.

1.1. Параметры настройки.


Рис.1.1. График с установленным торговым роботом.

SWT-Robot - это программа для реализации торговых стратегий на основе SWT-метода. Торговые стратегии определяются выбором значений параметров робота, определяющих режимы его работы.

При сбрасывании робота на график отображается окно настройки параметров (рис.1.2).


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

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

TrendVector - целое число, задающее глубину анализа рынка и определяющее старший тренд, начиная с которого учитываются все тренды более низкого уровня при определении направления торговли. Количество трендов, используемых для проектирования торговых стратегий восемь: Basic - основной, Long - долгосрочный, Medium - среднесрочный, Short - краткосрочный, Weekly - недельный, Daily - дневной, IDay - внутридневной и Hourly - часовой тренды. 
Значение параметра 9 означает, что в расчет принимается глобальный и все младшие тренды, значение параметра 8 - основной и все младшие тренды и т.д.
Тренды Daily - дневной, IDay - внутридневной и Hourly - часовой учитываются всегда.

AdaptibeMode - режим адаптивной настройки на результирующий тренд.
В режиме AdaptibeMode=true тренды Basic - основной, Long - долгосрочный, Medium - среднесрочный, Short - краткосрочный и Weekly - недельный учитываются начиная со старшего направленного. Например, если TrendVector = 8, основной и долгосрочный тренды находятся в фазе коррекции, а среднесрочный тренд направленный, то учитываются все тренды, начиная со среднесрочного и ниже. Направление основного и долгосрочного трендов при этом игнорируются.
Если все старшие тренды за исключением недельного находятся в фазе коррекции, то недельный тренд учитывается и при коррекционном характере движения рынка по этому тренду.
В режиме AdaptibeMode=false учитываются все тренды согласно установкам параметра TrendVector. независимо от того направленное или коррекционное движение идет по этим трендам.

ContrTrend - при значении параметра true меняет направление торговли по тренду на контртрендовое. Значение параметра не влияет на дневной, внутридневной и часовой тренды, направление торговли по которым остается неизменным независимо от значения параметра ContrTrend.

ReverseReadyToTrade - при true устанавливает разрешение на открытие первой позиции после отката по дневному или внутридневному трендам. Недельный тренд противоположного направления (направленный,не коррекционный!) сбрасывает ранее установленное разрешение на открытие позиции независимо от отката.

DominantTrend - в режиме AdaptibeMode=true при значении параметра true робот учитывает только старший из направленных трендов, при значении false - направления всех трендов ниже старшего из направленных.

DominantCorrection - при значении параметра true робот учитывает  направленные тренды с направлением, противоположным доминирующему тренду. Режим работает только при AdaptibeMode=trueDominantTrend = true. В режиме ContrTrend влияние режима изучено недостаточно, в некоторых ситуациях учет доминирующей коррекции идет на пользу в других нет, но большого влияния на результаты не оказывает. 

Grid=true - при открытии позиции по торговому алгоритму включает режим адаптивной сетки в выбранном направлении торговли открывая дополнительные позиции с переменным шагом, рассчитываемым автоматически, как произведение V*GridStepFactor, где GridStepFactor - множитель шага сетки.
Параметр V рассчитывается как сумма текущего значения трех величин:
- волатильности часового тренда;
- волатильности внутричасового тренда;
- спреда. 
При отсутствии позиций, открытых торговым алгоритмом, запуск сетки может быть инициирован открытием позиции любого объема (лучше минимального) в ручном режиме.
Рост установленного шага сетки при экстремальном росте волатильности младших трендов ограничен величиной 1/10 волатильности недельного тренда

DoubleGrid=true  - режим адаптивной сетки, при котором позиции открываются при движении цены в обе стороны, как по направлению торговли, так и на откате против направления торговли.

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

GridStepManual - при значении, отличном от нуля, задает шаг сетки, устанавливаемый вручную.

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

GridTakeProfitSize задает размер ордера t/p для позиций сетки. При значении параметра ноль ордер устанавливается на общих основаниях, задаваемых параметром TakeProfitLevel. При отличном от нуля значении параметра положение ордера t/p относительно цены открытия позиции определяется как произведение параметра волатильности V на GridTakeProfitSize.

LeverageLimit - задание предельно допустимого значение кредитного плеча. При значении ноль используется кредитное плечо, разрешенное брокером.

RiskLimitPerc - лимит риска по открытым позициям. При значении ноль лимит риска не устанавливается.

RiskTradePerc - процент риска на сделку.

LotsManual - объем сделки, устанавливаемый вручную. При нулевом значении параметра объем сделки рассчитывается автоматически исходя из параметров уровня стоп-лосс и заданного риска RiskTradePercent  на сделку.

MFactor - при значении true включает режим агрессивного наращивания объемов торговли таким образом, чтобы после после объема в шесть раз большего объема однократной сделки робота каждые пять новых позиций удваивали общий объем позиции. Это своего рода мартингейл, только плавный и растянутый по шкале цен с постепенным ростом объема. При удачной рыночной ситуации режим обеспечивает быстрый рост прибыли, но требует крайней осторожности в использовании из-за возможности быстрого катастрофического убытка, особенно в период выхода важных новостей. При включении режима HardGrid=true это автоматизированная версия торговой тактики "Линейка ордеров". Но осторожность, осторожность и еще раз осторожность. 

StopLossLevel - целое число, задающее номер тренда, по которому определяются уровни ордера стоп-лосс: 0 - нет ордера стоп-лосс, 1 - часовой, 2 - внутридневной, 3 - дневной, 4 - недельный, 5 - краткосрочный, 6 - среднесрочный, 7 - долгосрочный, 8 основной.

TakeProfitLevel - целое число, задающее номер тренда по которому определяются уровни ордера тейк-профит: 0 - нет ордера тейк-профит, 1 - часовой, 2 - внутридневной, 3 - дневной, 4 - недельный, 5 - краткосрочный, 6 - среднесрочный, 7 - долгосрочный, 8 основной.

VolumeNormLevel при отличном от нуля значении задает уровень стопа для расчета объема сделки независимо от от размера установленного ордера стоп-лосс. Та, например, при значении параметра 4 объем рассчитывается по параметрам ордера стоп-лосс для недельного тренда. Настройка в основном необходима для корректной оптимизации параметров относитльно размера ордера стоп-лосс.    

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

AdaptiveTrailingStop - при значении отличном от нуля включает адаптивный трейлинг-стоп величины AdaptiveTrailingStop*V.

SafeModeClose - после выхода совокупной позиции в зону целевой прибыли при значении параметра true закрывает прибыльные позиции по признакам паттерна разворота внутридневного тренда. 

CloseIfNotTrend - при значении параметра true все позиции закрываются если по данным установка робота нет признака тренда вверх или вниз.

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

Трейлинг-стоп и группа параметров закрытия позиций по условиям предназначены для повышения безопасности торговли и снижают риски. Но прибыль тоже падает - это две стороны одной медали.
 
ManualPositionControl - при true разрешает роботу обрабатывать позиции, открытые вручную.

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

PermitLong - при true разрешить лонг.

PermitShort - при true разрешить шорт.

TickValueFactor - коэффициент корректировки возможных ошибок сервера в цене тика (бывает).

SizeLabel - размер шрифта текстовых меток.

ModifyColorLabel - задание цвета текстовых меток.

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

HideLabels позволяет выключить отображение на графике метод с параметрами состояния робота.

Важное замечание. Как правило я использую параметры робота заданные по умолчанию, значения их представлены на рисунке. При оптимизации параметров настройки меняется параметр вектора трендов в диапазоне от 6 до 8, режим контртренд и иногда параметр ордера стоп лосс от 4 до 6.
Режимы сетки можно менять при четком понимании того, что и зачем вы делаете. На начальном этапе освоения робота сетку лучше вообще не использовать.

1.2. Параметры состояния. 



Рис.1.3. Значение параметров состояния

Значение параметров состояния показано в таблице в правом верхнем углу графика. 

В первой строке таблицы содержатся следующие данные:
Trade - параметр, который указывает, что может делать робот в текущей ситуации. Это параметр принимает три значения:
BUY - покупать;
SELL - продавать;
NO - не предпринимать никаких действий.
Trend - направление совокупного тренда, определяемое в соответствии с выбранной торговой стратегий:
UP - вверх;
DN - вниз;
NO - не определено.
RTT (Ready To Trade) - готовность к сделке по сигналу в направлении:
UP - вверх;
DN - вниз;
NO - не готов.

Vect|AM|Ctr|RTT - показывает значения параметров TrendVector, AdaptiveMode, ContrTrend и ReverseReadyToTrade. При включенном режиме ReverseReadyToTrade его значение отображается трехзначным числом, единица во втором разряде - разрешение на покупку, единица в младшем - разрешение на продажу.

DT|DC|G|DG|HG - показывает значения параметров DominantTrend, DominantCorrection, Grid,
DoubleGrid и HardGrid.

St|Gsf|Gtp - показывает текущие значения шага сетки, множителя шага сетки GridStepFactor и величину параметра тейк-профит позиций сетки, определяемую значением  GridTakeProfitSize.

Leverage|Lim - отображает фактическое значение кредитного плеча и заданный его предел, при превышении которого строка подсвечивается красным цветом. Торговля при этом не прерывается, чтобы не нарушать логику торгового алгоритма. Это сигнал для трейдера, что риски находятся в опасной зоне и необходимо их уменьшить изменением параметров торговли.

CurRisk|Lim|Risk - отображает текущий риск открытых позиций, установленный лимит риска в процентах от средств счета и процентный риск на сделку при установленном значении ордера стоп-лосс.. Знак минус текущего риска показывает, что риска по установленным стопам нет, есть прибыль. При превышении текущим риском заданных ограничений строка подсвечивается красным цветом.
Торговля по сеточному алгоритму при этом не прерывается, чтобы не нарушать логику торгового алгоритма. Это сигнал для трейдера, что риски находятся в опасной зоне и необходимо их уменьшить изменением параметров торговли.

Profit|Eq - текущая прибыль по инструменту и средства Equity торгового счета.

Trgt|PP|P/R - показывает целевую прибыль для открытых позиций, при которой включается режим их закрытия на откате, установленное значение порога плавающей прибыли в процентах от эквити ProfitPerc, при котором включается режим закрытия позиций на откате, а также процентное соотношение уровня плавающей прибыли к риску открытых позиций ProfitRiskPerc, при котором включается режим их закрытия на откате.

ATS|MF - показывает значение параметров AdaptiveTrailingStop, MFactor..

SMC|Lot - значения параметров SafeModeClose и LotsManual. При значении параметра Lot отличном от нуля значение параметра ProfitPerc игнорируется и объемы позиций определяются значением Lot.
 
TP|SL|VNL - значения параметров TakeProfitLevel, StopLossLevel, VolumeNormLevel.

Lot: L|S - объемы позиции для лонга и шорта при установленных параметрах риска и стопах. Если лонг или шорт не разрешены для торговли настройками робота, то объем для соответствующего направления будет равен нулю.

Nb|Ns|V - отображает количество открытых длинных и коротких позиций, а также общий объем открытых позиций в лотах.

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

CtrM|T-out - отображает значения параметров ManualPositionControl и TimeOutMinutes.

Lup и Ldn индикация текущих уровней срабатывания позиций сетки. Значение ноль указывает на отсутствие активного уровня.

Если в вашей версии робота нет какого-либо из указанных в описании параметров настройки, значит этот режим в вашей версии не предусмотрен.


2. SWT-Robot. Правила открытия позиций

2.1. Задание глубины анализа рынка




Рис.2.1. SWT-Robot. Отображения параметров состояния 

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

Уровень старшего тренда задается параметром TrendVector - целое число, определяющее номер старшего тренда, начиная с которого учитываются все тренды более низкого уровня при определении направления торговли.

Количество трендов, используемых для проектирования торговых стратегий восемь, и им присвоены следующие номера:
Basic - номер 8 - основной тренд;
Long - номер 7 - долгосрочный тренд;
Medium - номер 6 - среднесрочный тренд;
Short - номер 5 - краткосрочный тренд;
Weekly - номер 4 - недельный тренд;
Daily - номер 3 - дневной тренд;
IDay - номер 2 - внутридневной тренд;
Hourly - номер 1 - часовой тренд. 

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

Искусственно тренды разбиты на две группы. 
Пять старших формируют параметр Trend
Три младших - параметр готовности к сделке RTT (Ready To Trade).

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




 

Правила очень просты.

В зависимости от настройки тренд/контртренд по каждому из трендов формируются условия для открытия лонга или шорта.

Обозначения на примере недельного тренда:
- Wup - движение вверх;
- Wdn - движение вниз;
- WC - коррекционный характер движения;
- !WC - не коррекция$
- WTup - признак роста по совокупности параметров для недельного тренда;
- WTdn - признак снижения по совокупности параметров для недельного тренда;
- Weekly=true означает, что тренд учитывается при формировании условий сделки.
Для остальных трендов аналогично.

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

Состояние рынка по каждому тренду показано в нижней части таблицы в правой части рисунка 2.1.

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

2.2. Условия открытия позиций


В самом простом варианте при заданной глубине анализа позиции открываются в направлении действующего тренда.
Тренд считается восходящим, если движение по всем учитываемым компонентам - стохастическим волновым трендам - направлено вверх.
Тренд считается нисходящим, если движение по всем учитываемым компонентам - стохастическим волновым трендам - направлено вниз.
В режиме контртренд позиции открываются против направления тренда.
Аналогичным образом трактуется значение параметра RTT (Ready To Trade). Режим контртренда не меняет характер учета трендов, входящих в группу RTT.
Если согласованного движения по двум параметрам при заданных настройках робота нет, то новые позиции не открываются. Старые удерживаются, если не сформированы согласованные по всем учитываемым трендам и всем правилам условия закрытия позиций.
Пример комбинации трендов при глубине анализа 8 и режиме доминирующего тренда представлен на рисунке 2.1.
Из представленных данных видно, что доминирующий (основной) тренд направлен вверх, режим контртрендовый, доминирующая коррекция по недельному тренду направлена против доминирующего тренда, условий для ткрытия новых позиций нет.

2.3. Торговый сигнал


Торговый сигнал формируется по внутричасовому тренду - волна W2 графика минутного масштаба (см. рис.2.2)

 

Рис.2.2. Формирование торговых сигналов

Торговые сигналы формируются по двум признакам.
Первый признак - пересечение волной внутричасового тренда нулевой линии. Если волна пересекает нулевую линию снизу вверх - формируется сигнал BUY. Если сверху вниз - сигнал SELL.
Второй признак - изменение направления движения волны. Если волна находясь в области положительных значений и двигаясь к нулевой линии разворачивается вверх - формируется сигнал BUY. Если волна находясь в области отрицательных значений и двигаясь к нулевой линии разворачивается вниз - формируется сигнал SELL.
Сделка на покупку открывается если параметр Тренд имеет значение UP, параметр RTT - UP, сигнал -  BUY и отсутствуют блокировки на открытие позиции.
Сделка на продажу открывается если параметр Тренд имеет значение DN, параметр RTT - DN, сигнал -  SELL и отсутствуют блокировки на открытие позиции.

2.4. Блокировка начала торговли до отката


Робот совершает сделки сериями в пределах разрешенного лимита риска. 
Параметр ReverseReadyToTrade - при значении true разрешает открытие первой позиции серии после отката по дневному или внутридневному трендам.



Рис.2.3. Отображение значения и состояния параметра ReverseReadyToTrade

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

Логика работы режима показана на рисунке внизу:

 


2.5. Блокировка конфликта интересов


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

2.6. Контртрендовая торговля

При работе по тренду позиции открываются по направлению группы учитываемых из шести старших трендов, которые формируют параметр Trend
При контртрендовой торговле позиции открываются против направления, сформированного этой группой.
Для трех младших трендов, формирующих параметр готовности к сделке RTT (Ready To Trade), ничего не меняется.

2.7. Открытие позиций по алгоритму сетки


В момент открытия лонга по торговому робот формирует два уровня цены

            if(HardGrid)
              {
               if(LevelUp < (Ask + GridStep * Point))
                  LevelUp = Ask + GridStep * Point;
               if(LevelDn > (DoubleGrid * (Ask - GridStep * Point)))
                  LevelDn = DoubleGrid * (Ask - GridStep * Point);
              }
            else
              {
               LevelUp = Ask + GridStep * Point;
               LevelDn = DoubleGrid * (Ask - GridStep * Point);
              }

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

Для коротких позиций - шорт - ситуация аналогичная, только уровни отсчитываются от цены Bid, а не Ask.

            if(HardGrid)
              {
               if(LevelUp < (DoubleGrid * (Bid + GridStep * Point)))
                  LevelUp = DoubleGrid * (Bid + GridStep * Point);
               if(LevelDn > (Bid - GridStep * Point))
                  LevelDn = Bid - GridStep * Point;
              }
            else
              {
               LevelUp = DoubleGrid * (Bid + GridStep * Point);
               LevelDn = Bid - GridStep * Point;
              }

При необходимости шаг сетки масштабируется коэффициентом GridStepFactor - множитель шага сетки.

Режим HardGrid запрещает установку уровней внутри отработанного диапазона сеточного алгоритма. Новые уровни могут устанавливаться только за пределами отработанного диапазона цен.


 З. SWT-Robot. Правила закрытия позиций


3.1. Закрытие позиций по признакам разворота тренда



Рис.3.1. Отображение графика с установленным роботом

Правила открытия и закрытия позиций отличаются.
На уровне группы младших трендов (DailyIDay и Hourly) отличий нет.
Отличия начинаются с группы старших трендов, а именно:
- по тренду недельного цикла Weekly условия закрытия позиций формируются при смене направления движения и отсутствии признака коррекции WC;
- по краткосрочному тренду Short условия закрытия позиций формируются при смене направления движения или развороте недельного тренда;
- по среднесрочному тренду Medium условия закрытия позиций формируются при смене направления движения или по признаку разворота краткосрочного тренда;
- по долгосрочному тренду Long условия закрытия позиций формируются при смене направления движения или по признакук разворота среднесрочного тренда;
- по основному тренду Basic условия закрытия позиций формируются при смене направления движения или по признаку разворота долгосрочного тренда.
- по глобальному тренду Global условия закрытия позиций формируются при смене направления движения или по признаку разворота основного тренда.
Разумеется, для формирования условий закрытия любой из перечисленных трендов должен быть включен в группу трендов, формирующих условия торговли.

Признак CloseByRT указывает, что в процессе трейда достигнут целевой уровень прибыли относительно принятого риска и позиции будут закрыты по паттерну разворота дневного тренда и разворота внутридневного тренда (см.п.3.2).

Полные правила закрытия позиций по тренду записываются следующим образом:

 

 

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

Правила п.3.1 являются приоритетными и действуют независимо условий п.3.2 и 3.3.

После закрытия всех позиций начинается новый цикл торговли.

3.2. Закрытие позиций по уровню прибыли.


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

При достижении порогового значения прибыли позиции закрываются по признакам разворота дневного тренда.
В примере, представленном на рисунке 3.1 коэффициент профит/риск (P/R) равен 3 процента, но открытых позиций нет и целевой уровень прибыли не рассчитан.
При открытии позиции уровень будет сформирован, а его превышение включит режим закрытия позиций по признакам разворота дневного тренда.
При открытии дополнительных позиций будет расти и риск и пороговое значение выхода. 

Если установленное соотношение профит/риск равно меньше либо равно нулю, то все позиции закрываются по правилам п.3.1.

После закрытия всех позиций начинается новый цикл торговли.

Если значение параметра ProfitPerc не равно нулю, то порог выхода задается в процентах от эквити. При достижении порогового значения позиции закрываются по признакам разворота дневного тренда.


После закрытия всех позиций начинается новый цикл торговли.

Если не равны нулю одновременно значение P/R и ProfitPerc, то пороговый режим закрытия включается по меньшему из двух значений порога:



На рисунке позаны два варианта формирования условий - с нормировкой объемов по заданному уровню и без нормировки.


3.3. Закрытие прибыльных позиций в режиме SafeModeClose


Условия закрытия:
1. Позиция должна быть в прибыли.
2. Должны быть сформированы признаки разворота внутридневного тренда для позиций соответствующего направления:

 

3.4. Закрытие позиций по трейлинг-стопу, уровням стоп-лосс и тейк-профит.

Ну это как обычно, только трейлинг стоп переменный и зависит от локальной волатильности. И ордер стоп-лосс подтягивается вслед за рынком при изменении расчетных значений каналов. Разумеется, если рынок идет в сторону открытой позиции.