İş Gereklilikleri
Разработка инструментов торговли по тренду: волатильность, стопы, наращивание позиции.
Открытый проект по разработке простых инструментов для наращивания позиции (открытия контрактов) на фундаментально обоснованных супертрендах с учетом максимально возможной волатильности: программа с опциями и скрипт для изучения волатильности на исторических данных по супертрендам. Приглашаются все желающие, нужно написать код (открытый, в исходниках), будут обсуждения, корректировки…
Стратегия «Супертрендер».
Суть «трендера»: работаем только на фундаментальных супертрендах (непрошибаемые основания, достойный апсайд, общий консенсус).
Задача наращивать позиции по мере движения с контролем риска до максимума (как правило, чтобы при отстапливании все равно был ощутимый плюс).
Как это возможно? Понятно, что можно посмотреть максимальную волатильность по предыдущим данным – в процентах (по активу на прошлых супертрендах).
- Открываем контракт (контракты).
- При движении цены по тренду на чуть большую величину, чем экспертно определенная максимальная волатильность (по прошлым данным) мы можем открыть новые контракты, поставив стопы по всем контрактам на предыдущий уровень цен.
Собственно, по этой процентной величине мы заранее определяем шаги нашего алгоритма - при движении цены по тренду!
Если величина правильная – то наши контракты по стопу не выбиваются.
А если выбьются? Надо таки при открытии новых контрактов контролировать риск!! Как?
Просто:
По всем открытым контрактам мы должны поставить стоп, который, как мы думаем, не выбьет по волатильности!!! (на чуть большую величину, чем экспертно определенная волатильность (по прошлым данным)).
- Понятно, что по контрактам, вновь открытым на новом шаге, - при отстапливани мы получаем убыток, а по предыдущим (если шагов было больше 2) – прибыль…
Так как количество контрактов с предыдущих шагов у нас возрастает, то и количество вновь открываемых мы можем нарастить!!!
Вопрос только, сколько контрактов открыть на текущем достигнутом по цене уровне? Надо для варианта отстапливания соотносить прибыль от предыдущих контрактов (с учетом, что они все были открыты на разных уровнях) и убытком от тех, что мы открываем сейчас. Это нетрудно посчитать в Eхcel.
Агрессивная стратегия - соотношение прибыли и убытков при отстапливании – предполагает равным нулю (позволит открыть максимальное количество контрактов на тренде).
Но это не совсем правильно – всегда возможен вариант, что максимальная волатильность на тренде окажется выше предполагаемой…
Если мы открываем такое количество контрактов, чтобы при отстапливании мы все равно были в хорошее плюсе – тогда, если отстопили - не беда, мы начинаем снова двигаться по тренду с тем же плечом, что и начинали, но уже от большей суммы на счете…
Итак, что нам надо?
- Прога по изучению волатильности на трендах.
- Алгоритм «трендер» для торговли (самый элементарный).
=================================================================
1. Прога по изучению волатильности на трендах.
1. Есть начальная, есть конечная точка на графике (тренд).
2. Есть заданная волатильность в пунктах, но правильнее в процентах.
3. Задается направление.
4. Прога просматривает график и, если видит отклонение в процентах от тренда* большее, чем на заданный процент*, то выписывает в таблицу:
- верхнюю/нижнюю точку
- дату/время верхней/нижней точки
- процент отклонения от тренда *(падения на растущем тренде или процент роста на падающем)
- отклонение в пунктах
* Отклонение в процентах от тренда* - пояснение: например, график (участок между начальной и конечной точкой) направлен вверх (растущий тренд), двигаясь по графику находим локальную вершину А1, а дальше есть локальный провал (коррекция) с нижней точкой А2, тогда «отклонение в процентах от тренда»: (А1 – А2)/А1 * 100.
** Оптимальный алгоритм просмотра – задача для математиков, но можно идти тупо прямо по тренду и вести расчет (следует учитывать, что бывают очень краткосрочные коррекции – за 5 минут может резко скорректироваться и отскочить, прога не должна пропускать такие вещи). Допустим рост: записываем вершины и спады, находимо от каждой вершины найти максимальный спад, считаем процент, если больше заданного - выписываем.
=================================================================
2. Алгоритм «трендер» для торговли (самый элементарный).
1. Есть текущая цена.
2. Задаем параметром направление тренда.
3. Для торговли нам потребуется работа с таблицей (количество полей определим, дочитав алгоритм до конца!!!).
В таблице есть цены и количество ордеров по каждый цене (и еще параметр - если у какой-то цены стоит ноль контрактов, перетаскивать ли в этом случае стопы по предыдущим контрактам на уровень предыдущей цены (например, 0 – не перетаскиваем, 1 перетаскиваем)).
Под количеством ордеров – понимаем количество ордеров минимального размера. Это зависит от брокера, надеюсь для робота все равно отрыть ли 10 минимальных отдельных ордеров или 1 ордер на 10 минимальных, если для скорострельности это все равно - безусловно, надо открывать именно минимальными ордерами.
Размер минимального ордера – задаваемый параметр (зависит от брокера).
3.1. Мне надо бы, чтобы таблицу можно было забирать экспортом из Excel:
1) Указав соответствие столбцов и строк.
2) Или можно упростить – всегда будут 3 (или 4 или 5, см. ниже) первых столбца и с первой строки (если лениво задавать строки и столбцы для импорта из Eхcel) – но здесь для меня есть неудобство.
3) Или импорт из CSV – сделать, в общем подумать…
4) Или я ручками перебью, но это не культурно.
3.2. Должна быть возможность посмотреть таблицу после экспорта в роботе и, если что, - там ручками править!!!
4. Ставим первые отложенные ордера по таблице на определенную цену (в количестве из таблицы), при срабатывании которого выставляем все остальные ордера по таблице (цены и количество).
Про стоп первого контракта – см. пункт 6.
5. Понятно, что отложенные ордера могут быть разных типов, в зависимости от того, в какой точке они находятся от текущей цены (cм. справку метатрейдера).
Пример 1.
EUR/USD 1,40 мы хотим отыграть тренд вниз при достижении цены 1,42.
По таблице у нас есть ордера на 1,42, на 1,41 на 1,39 - тогда ставим 1,42 Sell Limit, когда он срабатывает, ставим Sell Stop 1,41, 1,39.
Пример 2.
EUR/USD 1,40, мы хотим отыграть тренд вниз при достижении цены 1,39. По таблице у нас есть ордера 1,39, 1,38, 1,37 - это все будет Sell Stop.
Примечание - на первых порах тип ордеров можно ставить вручную, решить эту задачу потом.
6. Стоп - на первом этапе (как я подумал), при достижении новой точки по таблице (новой цены) перетаскиваем стоп по всем предыдущим контрактам на предыдущий уровень (предыдущую точку, цену). Если на новой точке открывается ноль контрактов, то перетаскивать стоп или нет - определяется параметром, стоящим в таблице на этой точке (по умолчанию - параметр говорит - перетаскиваем). В дальнейшем (NB: только в дальнейшем) - делаем культурный трейлинг стоп - с заданным параметром.
Здесь есть вопрос: а не надо ли выносить уровень стопа для контрактов, открываемых на шаге в отельный столбец???
Рассмотрим оба варианта:
6.1. Разберем пример:
| B | E |
|
| Цена | Контрактов на шаге |
Перетаскивание |
0 | 1,26000 |
|
|
1 | 1,27446 | 2 |
|
2 | 1,29388 | 2 |
|
3 | 1,3133 | 2 |
|
4 | 1,33301 | 2 |
|
5 | 1,35302 | 6 |
|
6 | 1,37333 | 6 |
|
7 | 1,39394 | 5 |
|
8 | 1,41486 | 0 | 0 |
А) Допустим, сработали отложенные ордера на 1,3133 (шаг 3) - по моему алгоритму для всех ранее сработавших ордеров (открытых контрактов) стопы перетаскиваются на 1,29388 (шаг 2) (кстати, номер шага – это чисто справочное поле, для алгоритма нам не нужно, строго говоря).
Б) По первым сработавшим ордерам 1,27446 (шаг 1) стоп ставим по предыдущей строке, где есть цена, нет количества контрактов (1,26000, шаг 0). Если на шаге 0 пусто (как в примере) – или первого шага нет (т.е. нет строки, предшествующей первой, где есть количество ордеров) – значит, стоп не ставим!!!
В) Теперь допустим, цена достигла 1,41486 (шаг 8), на ней мы открываем 0 контрактов, при этом по предыдущим открытым контрактам (сработавшим ордерам) - мы перетаскиваем стоп на предыдущий уровень 1,39394 (шаг 7)??? На 8 шаге в параметрах перетаскивания 0 - значит нет! (а было бы «1», то надо было бы перетащить, как обычно.
6.2. Можно сделать с прямым указанием в отдельном столбце стопов, на которые мы перетаскиваем все предыдущие открытые контракты, при срабатывании отложенных ордеров на данном шаге по данной цене.
| B |
| E |
| Цена | Стоп | Контрактов на шаге |
1 | 1,27446 |
| 2 |
2 | 1,29388 | 1,27446 | 2 |
3 | 1,3133 | 1,29388 | 2 |
4 | 1,33301 | 1,3133 | 2 |
5 | 1,35302 | 1,33301 | 6 |
6 | 1,37333 | 1,35302 | 6 |
7 | 1,39394 | 1,37333 | 5 |
8 | 1,41486 | 1,37333 | 0 |
Если, предположим, на шаге стопа нет – значит, его не ставим.
В этом случае и делать столбец (параметров перетаскивания) не нужно.
В принципе, для моего алгоритма - пока лишнее, но потенциально на будущее – возможна некоторая степень свободы – словом на Ваше усмотрение.
7. Тейк профит - задается как параметр цели.
7.1. Надо обязательно сделать кнопку (опцию) установить/поменять Тейк Профит по всем ордерам.
Причем очень желательно, чтобы опционально можно было установить/поменять тейк:
- по всем ордерам
- только по сработавшим ордерам (открытые контракты)
- только по всем отложенным ордерам (еще не сработавшим)
7.2. Дополнительный функционал.
При этом – если по каким-то контрактам не удается перетащить тейк (т.е. не хватает пунктов):
- выводится сообщение, что по столько-то контрактам не удалось перетащить
- спрашивается - нужно ли по ним перетаскивать?
- спрашивается, какой отступ в пунктах для них сделать?
Этот цикл повторяется, пока не отработают команды пользователя (т.е. пока он не откажется от перетаскивания по тем контрактам, по которым не удалось перетащить или не подставятся все тейки в соответствии с задаваемыми им в этом процессе параметрами).
7.3. Перетащить тейк для выбранных контрактов (т.е. пользователю предлагается таблица открытых (сработавших) и отложенных контрактов и текущие тейки по ним – пользователь выбирает галочкой, по каким он хочет перетаскивать, ставит значение, на которое он хочет перетащить). Дальше см. пункт 7.2.
8. Продумать перенесение через выходные. Поскольку стопы по всем ордерам лежат на одном уровне (это в первой редакции) - это будет не сложно.
8.1. Вопрос вот в чем: если цена после выходных оказалась ниже стопа???
Думаю параметризуется также в таблице:
| B |
| E |
|
| Цена | Стоп | Контрактов на шаге | Стоп после пятницы |
1 | 1,27446 |
| 2 |
|
2 | 1,29388 | 1,27446 | 2 | 1,27446 |
3 | 1,3133 | 1,29388 | 2 | 1,29388 |
4 | 1,33301 | 1,3133 | 2 | 1,3133 |
5 | 1,35302 | 1,33301 | 6 | 1,33301 |
6 | 1,37333 | 1,35302 | 6 | 1,34 |
7 | 1,39394 | 1,37333 | 5 | 1,37333 |
8 | 1,41486 | 1,37333 | 0 | 1,37333 |
Т.е. по умолчанию уровни совпадают – и если оказались ниже – все закрываем (только не механизмом стопа, а автоматически (приказом)).
Представим, однако, что – на 6 шаге у нас по всем (уже открытым) контрактам стоп стоит на 1,35302. Мы полагаем, что цена после пятницы может уйти ниже, но не хотим закрываться – тогда заходим в таблицу и в столбце после пятницы меняем умолчание – пишем 1,34 и при открытии либо ставим такой стоп, либо, если цена еще ниже (1,3399), закрываем все (как контракты, так и отложенные ордера) автоматически.
8.2. Хотелось бы по номеру контракта – сохранять его историю, т.е. по какой цене он был открыт, но это чисто для информации – можно не делать, конечно…
9. Продумать, как сделать, чтобы робот работал, когда комп отключен (можно ли это где-то на сервере запускать).
10. Кнопка - убрать все не сработавшие отложенные ордера.
10.1. Кнопка - поставить отложенные ордера (это если мы их убрали кнопкой) в соответствии с таблицей (таблица может быть для повторного открытия отложенных ордеров скорректирована).
11. Кнопка - закрыть все ордера как не сработавшие, так и текущие, работающие (открытые контракты).
12. Кнопка - перетащить стопы для всех/для определенного количества открытых контрактов (где они были) на такое-то значение.
12.1. Параметр: все контракты/количество открытых контрактов.
12.2. При этом – если по каким-то контрактам не удается перетащить стоп (т.е. не хватает пунктов):
- выводится сообщение, что по столько-то контрактам не удалось перетащить
- спрашивается - нужно ли по ним перетаскивать?
- спрашивается, какой отступ в пунктах для них сделать?
Этот цикл повторяется, пока не отработают команды пользователя (т.е. пока он не откажется от перетаскивания по тем контрактам, по которым не удалось перетащить или не подставятся все стопы в соответствии с задаваемыми им в этом процессе параметрами).
12.3. Перетащить стопы для выбранных контрактов (т.е. пользователю предлагается таблица открытых контрактов и текущие стопы по ним – пользователь выбирает галочкой, по каким он хочет перетаскивать, ставит значение, на которое он хочет перетащить). Дальше см. пункт 12.2.
13. Кнопка - закрыть все не сработавшие ордера, а текущих открытых контрактов закрыть столько-то (для уменьшения плеча).
14. При отстапливании - мне бы очень нужен сигнал - лучше всего SMS на телефон (отправить с сайта МТС, например, или письмом на SMS сервер, а потом придет SMS) или (это хуже) в ISQ или Skype (есть API) или воспользоваться возможностями, предоставляемыми брокером…
15. Вся реализация должна быть на MQL4, т.к. не все брокеры поддерживают MQL5 (но продумать возможность в дальнейшем портировать на MQL5).
Ждем предложений, готовы к сотрудничеству!
PS
При комментировании, пожалуйста, не цитируйте весь документ, а только конкретные места во избежание разрастания темы.