Specification
Нужно доработать готовый советник, исходный код советника будет предоставлен
на текущий момент
советник рассчитан на то
чтобы работать против тренда
по тренду первая сделка сразу же закрывается и
открывается новая
суть доработки в том чтобы открывать по тренду 2-ю, 3-ю и т.д. сделки, до момента пока тренд не развернется. Чтобы не было брошенных
ордеров после разворота тренда, открытым сделкам нужно будет устанавливать стоп-лосс на указанном в настройках уровне, чтобы когда
тренд развернется ордера закрылись и не тянули убыток.
Алгоритм работы советника:
(все настройки описаны в конце файла)
Кидаем советник на график
Открывается первый ордер buy 0.01
Сетка строится по тренду
у 1-го колена сетки, ордера buy 0.01 нет TP (тейкпрофит)
далее рассмотрим 2 варианта движения котировок
1) по тренду:
к примеру у нас такие настройки:
Grid=25
GridTrend=15
Lot=0,01
Добавилась настройка GridTrend
2-е колено
если котировки проходят дальше по тренду
советник открывает ордер 2-го уровня
сетки через GridTrend пунктов
объемом Lot предыдущего ордера*MultSize с округлением
тогда откроется ордер
buy через 25 пунктов
но старый
ордер
buy 0.01 не закрывается
оба
ордера теперь остаются в рынке
3-е колено
при движении котировок дальше по тренду
открывается 3-й
уровень сетки через 15 пунктов (GridTrend)
объем
ордера формируется также как и раньше – это не трогаем
4-е колено
при движении котировок дальше по тренду
открывается 4-й
уровень сетки
при этом все 3 предыыдущих ордера открыты
если в настройках указано:
MultLotStart=3,
то первые 2 колена будут одинаковым объемом равным
Lot, в нашем случае это 0,01, и начиная с 3-го колена будет начинаться
умножение сетки
Добавить настройку GridType. Она будет отвечать за шаг сетки. Значения: Fix – используется фиксированный шаг сетки, указанный в Rangestep, AddPips – к шагу будет добавляться цифра, указанная в параметре Grid_AddPips
Новые параметры:
Grid_Level1 - № п/п ордера (колена) сетки, начиная с которого (включительно) текущий шаг
сетки будет корректироваться (на каждом колене) на GridStep_AddPips пипсов
Grid_AddPips - количество пипсов, на которое будет корректироваться текущий шаг сетки на каждом колене, начиная с колена GridLevel.
Может быть =0, >0 и даже <0
Grid_Level2 - № п/п ордера (колена) сетки, начиная с которого (включительно) текущий шаг сетки будет корректироваться
(на каждом колене) на GridStep_Level2_AddPips пипсов
Grid_Level2_AddPips - количество пипсов, на которое будет
корректироваться текущий шаг сетки на каждом колене, начиная с колена S_GridStep_Level2.
Может быть =0, >0 и даже <0
Данные настройки должны работать только
для сетки против тренда
При работе по тренду работает только параметр Grid_Trend,
добавлять шаг по тренду нет необходимости
СТОП ЛОСС:
SL_level
– колено сетки, начиная с которого будет устанавливаться первый стоп лосс
по умолчанию
SL_ level=3
1) как только открывается 3-е колено сетки
и котировки проходят указанное в настройках расстояние SL_otkat
+ SL_dop
пипсов
советник устанавливает SL
ордеру 1-го колена на уровень: цена 2-го ордера + SL_otkat
пипсов,
чтобы в случае откате цены вся сетка buy
схлопнулась
к примеру у нас открыт первый ордер
по цене 1,11000
и уже 2-е колено по цене 1,11200
в
настройках указано:
SL_otkat=20
SL_dop=30
тогда при прохождении 20+30 пипсов по тренду
SL сетки выставляется на уровень
1,11200+20=1,11220
это аналог трейлинг стоп, но разделен на две части для удобства и будет указываться в настройках
на последующих коленах делаем то же самое
то есть при открытии следующего колена и прохождении SL_otkat+
SL_dop
по тренду стоп лосс для всех ордеров передвигается уже на следующее колено сетки
то есть как откроется ордер 3-го колена к примеру на 1.11400
то при прохождении SL_otkat+
SL_dop
по тренду SL сетки выставляется на уровень
цена 3-го ордера +
SL_otkat
пипсов
в нашем случае при прохождении 20+30=50 пипсов по тренду SL
сетки выставляется на уровень 1,11400+20=1,11420
если SL_first_lvl=4
тогда первый стоп-лосс будет установлен при прохождении
SL_otkat+
SL_dop
после открытия 4-го колена сетки.
и далее стоп-лосс ставится всем последующим ордерам
также будет два типа стоп лосса: для всей сетки и для каждого ордера по отдельности. Подробно как работает описал в пункте Параметры ниже.
2) против тренда
против тренда все работает также как и раньше
единственное изменение –
это если у нас остались незакрытыми сделки, которые были открыты по тренду, то они должны начать участвовать в усреднении и хеджироваться
вместе с остальными ордерами
в этом видео есть частичное пояснение как работает сетка по тренду: https://youtu.be/v4SLeGa-htM
Параметры:
Lots – начальный объем одной сделки
Grid_
Trend - шаг сетки по тренду
RangeStep
– шаг сетки
GridType - Значения:
Fix – используется фиксированный шаг сетки, указанный в Rangestep,
AddPips – к шагу будет добавляться цифра,
указанная в параметре Grid_AddPips
Grid_Level1 - № п/п ордера (колена) сетки, начиная с которого (включительно) текущий шаг сетки будет корректироваться (на каждом
колене) на GridStep_AddPips пипсов
Grid_AddPips - количество пипсов, на которое будет корректироваться текущий шаг сетки на каждом колене, начиная с колена GridLevel.
Может быть =0, >0 и даже <0
Grid_Level2 - № п/п ордера (колена) сетки, начиная с которого (включительно) текущий шаг сетки будет корректироваться
(на каждом колене) на GridStep_Level2_AddPips пипсов
Grid_Level2_AddPips - количество пипсов, на которое будет
корректироваться текущий шаг сетки на каждом колене, начиная с колена S_GridStep_Level2.
Может быть =0, >0 и даже <0
SL_otkat
- количество пипсов ТР, которое ставится предыдущему колену при откате котировок
SL_dop
– доп. количество пипсов, которое нужно пройти, чтобы выставился TP
предыдущему колену
SL_level
– колено сетки, начиная с которого будет устанавливаться стоп лосс при прохождении SL_otkat+
SL_dop
по тренду. По умолчанию –3. То есть первым двум коленам не ставится стоп лосс а начиная с третьего – ставим.
SL_type
– тип стоп-лосса. Значения: All orders
– все ордера, Each order
– каждому ордеру отдельно.
Когда выбрано All
orders – стоп устанавливается всем ордерам сетки, когда же
выбрано
Each order
- то каждому по отдельности. К примеру робот открыл 3-е колено сетки,
SL_level=3
и
SL_type=
All orders,
, то при прохождении
SL_otkat+
SL_dop
по тренду стоп лосс будет установлен сразу для всех 3-х ордеров сетки на уровень цена 3-го ордера + SL_otkat+
SL_dop.
Если же
SL_type=
Each order,
то стоп лосс будет установлен на уровень
цена++ SL_otkat+
SL_dop
для каждог ордера.
MaxOrders - максимум ордеров (после достижения максимума ордеров - новые не открываются)
Версию доработанного советника без внедрения второй части ТЗ прошу выложить отдельно для тестирования.
Второй FXSpace хежирующий первого
Суть такая: нужно советника, которого мы доработали в первом разделе тех. задания, запустить параллельно, но в другую
сторону.
В момент когда FXSpace будет идти
против тренда и заходить в просадку, на определенном уровне сетки, указанном в настройках, будет запускаться этот же советник – вторая
копия, но уже по тренду.
Нужно добавить настройку: Activation_Hedge
Если
Activation_Hedge=3,
это означает что при открытии 3-го колена сетки против тренда, открывается первый ордер второго
FXSpace, но уже по тренду и для него действуют все настройки по тренду.
Добавятся настройки
Grid_Trend - шаг
сетки по тренду
RangeStep (оастается) - шаг сетки против
тренда (настройка остается, но будет работать только для сетки против тренда)
То есть теперь шаг сетки по тренду и против трена будет отличаться
MultSizeStart - № п/п ордера (колена) сетки, начиная
с которого начинает применяться
MultSize
MultSize_Trend
– множитель объема сделки при движении котировок по тренду
Если MultSizeStart=3
и
MultSize_Trend=1,5
то объём сделки начинает умножаться на 1,5 начиная с 3-го колена сетки.
Добавятся настройки
Lots
– начальный объем одной сделки
Lots_Hedge
– начальный объем одной сделки для второй сетки советника, которая включается через Activation_Hedge
КАК ОПРЕДЕЛЯЕМ ОБЪЕМ 1-Й СДЕЛКИ НОВОЙ СЕТКИ ПО ТРЕНДУ:
новая сетка по тренду строится в двух случаях:
1. Открылось
n-е колено сетки
против тренда указанное в
Activation_Hedge.
Если
Activation_Hedge=3,
то как только откроется 3-е колено сетки против тренда, сразу открывается первый ордер сетки по тренду
2. Когда сетка ордеров по тренду при развороте курса захлопнулась (по SL)
Объем первой сделки определяется по NewSetkaLot
если
выбрано
Lots_Hedge
– берется объем сделки Lots_Hedge,
указанный в настройках, в нашем случае 0,02
если выбрано Previous, тогда первым лотом данной сетки будет
последний лот предыдущей закрытой сетки, но если предыдущих сеток еще не было – просто берем значение
Lots_Hedge
если выбрано
Percent, то тогда первый лот новой сетки будет вычисляться по формуле:
лотность последней открытой на данный момент сделки FXSpace против тренда* Percent
/ 100,
то есть если я укажу 70% и лотность последней активной сделки сетки FXSpace
будет 0.30, то FXSpace откроет по тренду сделку объемом 0.30*70/100=0,21
Добавится настройка:
Pips_to_open
– количество пипсов движения по тренду, необходимое для открытия новой сетки после закрытия предыдущей сетки по тренду
Пример:
Настройки:
Lots – 0,01
Grid_Trend – 10
RangeStep – 15
GridType - AddPips
Grid_Level1 – 2
Grid_AddPips - 10
Grid_Level2 - 5
Grid_Level2_AddPips - 20
Lots_Hedge – 0,02
MultSizeStart – 2
MultSize_Trend – 1,5
SL_otkat - 20
SL_dop – 70
SL_level – 3
SL_type – All orders
MaxOrders – 20
Activation_Hedge –
3
Pips_to_open – 5
NewSetkaLot – Percent
Percent – 50
1. Открывается первый ордер buy 0.01
2. котировки идут против тренда и через RangeStep 15 пунктов открывается 2-й ордер против тренда buy 0.02
3. котировки идут дальше против тренда и через Предыдущий шаг сетки + Grid_AddPips то есть 15 + 1=16 пунктов открывается третий ордер buy 0.03 и так как Activation_Hedge = 3 активируется FXSpace по тренду и открывается первая сделка sell 0.02 (NewSetkaLot – Percent расчет: 0.03*50%=0,015 округляется до 0.02)
4. далее котировки продолжают идти вниз и через Предыдущий шаг сетки + Grid_AddPips то есть через 16 + 1=17 пунктов открывается ордер buy 0.04 и sell 0.03 (MultSizeStart=2, то есть с 2-го колена по тренду мы начинаем умножать объем на MultSize_Trend, в нашем случае 0.02*1,5=0.03)
5. далее котировки продолжают идти вниз и так как Grid_Level2 – 5 и
Grid_Level2_AddPips – 20, то через Предыдущий шаг сетки +
Grid_Level2_AddPips то есть через 17 + 2 =19 пунктов открывается ордер
buy 0.05 и sell
0.05 (0.03*1,5=0.045 округляем до 0.05)
так как SL_level
– 3, то как только котировки проходят расстояние 90 пипсов (20+70, SL_otkat+
SL_dop)
то так как
SL_type
– All orders
– ставим общий стоп лосс для всех открытых по тренду ордеров на уровень цена последнего открытого ордера sell
0.05 + 20 пипс (SL_otkat)
замечу что если бы
SL_type
стояло Each_order,
то тогда бы стоп лосс был бы установлен на каждый ордер на расстоянии 20 пипсов от цены каждого ордера
6. далее котировки корректируются вверх и все ордера по тренду закрываются по стоп лосс, а открытые ордера против тренда частично закрываются согласно алгоритма FXSpace (попарно)
замечу что если бы SL_type
стояло Each_order,
то тогда бы стоп лосс был бы установлен на каждый ордер на расстоянии 20 пипсов (
SL_otkat)
от цены каждого ордера
и тогда при откате котировок закрылся бы по стопу только последний ордер sell
0.05
остальные ордера остались бы в рынке
7. далее котировки продолжают идти вниз и так как Grid_Level2 – 5 и
Grid_Level2_AddPips – 20, то через Предыдущий шаг сетки +
Grid_Level2_AddPips то есть через 19 + 2 =21 пунктов открывается ордер
buy 0.06 по сетке против тренда
а по тренду у нас открывается
новая сетка и так как
NewSetkaLot = Percent
и Percent
= 50 то открывается первый ордер
sell объемом 0,03 (0,05*50/100=0,025
округляем до 0.03, формула: Лотность последней открытой на данный момент сделки FXSpace против тренда* Percent
/ 100,
и т.д.
Рассмотрим ситуацию движения сразу по тренду
Открывается первый ордер buy 0.01
котировки идут по тренду и через
Grid_Trend
10 пунктов открывается второй ордер buy 0.02 (MultSizeStart
– 2,
MultSize_Trend
– 1,5, 0.01*1,5=0,015, округляем до 0.02)
котировки идут дальше по тренду и через Grid_Trend
10 пунктов открывается третий ордер buy
0.03 (0.02*1,5=0.03)
далее котировки идут по тренду вверх и так как SL_level
– 3 то как они проходят 90 пипсов (20+70, SL_otkat+
SL_dop)
то так как
SL_type
– All orders
– ставим общий стоп лосс для всех открытых по тренду ордеров на уровень цена последнего открытого ордера buy
0.03 + 20 пипс (SL_otkat)
далее котировки корректируются вверх и все ордера закрываются по стоп лосс, открытых ордеров нет
замечу что если бы SL_type
стояло Each_order,
то тогда бы стоп лосс был бы установлен на каждый ордер на расстоянии 20 пипсов (
SL_otkat)
от цены каждого ордера
и тогда при откате котировок закрылся бы по стопу только последний ордер buy
0.03
остальные ордера остались бы в рынке
советник открывает первый ордер по индикатору в buy или sell
и работает дальше как обычно строя сетку по тренду или против тренда
если против тренда сетка начала строиться
то на колене на колене 3 (Activation_Hedge = 3) начнет строиться сетка по тренду
после прохождения по тренду до колена 3 (SL_level – 3) будет установлен стоп-лосс для всех ордеров сразу если выбрано SL_type – All orders и для каждого при SL_type – Each order
далее при коррекции курса ордера по трену могут закрыться
и затем при продолжении движения по тренду при отрытых позициях против тренда новая сетка по тренду снова открывается через Pips_to_open – 5
то есть достаточно 5 пипсов по тренду чтобы она активировалась
первым ордером у сетки по тренду будет при настройке NewSetkaLot – Percent, Percent – 50
ордер объемом в 50% от текущего открытого ордера сетки против тренда
если же будет стоять выбрано NewSetkaLot – Previous, то будет открыт последний ордер предыдущей закрытой сетки
к примеру у нас при откате котировок закрылся ордер объемом 0.04
тогда при установленном значении NewSetkaLot – Previous, первым ордером сетки по тренду будет ордер объемом 0.04 направлении противоположном сетке против тренда