Стратегии и роботы > Установка беубыточного стопа с профитом

Обсуждение, описание стратегий и роботов, идеи для стратегий
vlad195050
Сообщения: 16
Зарегистрирован: 03 июн 2017, 17:50

Установка беубыточного стопа с профитом

Непрочитанное сообщение vlad195050 » 03 июн 2017, 18:45

Здравствуйте. Прошу помочь как написать стратегию * Если НПУ% больше 3% от цены открытия, то отменить стоп и установить новый стоп на уровне больше цены открытия на 3 руб. , на 3 пункта , на 0,3 цента.*. Одним словом чтобы новый стоп устанавливался с небольшим профитом . Бедем я и моя жена очень Вам благодарны.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 03 июн 2017, 22:25

В вашей стратегии нужно сделать примерно так

Код: Выделить всё

if (CurrentPLper() > 3)
{
CancelStopLoss();
StopLoss(AverPrice() + 3 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
}


Комментарий к коду

В первой строке это проверка прибыли больше чем 3%, можно заменить на параметр.
В строке StopLoss можно подставить константу или заменить на параметр число 3 - количество шагов цены торгуемого инструмента, добавляемое к учетной цене для стоплоса.

CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.

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

StopLoss(ValueStop, SignalPriceType) – выставить защитную стоп¬-маркет заявку к текущей позиции робота (размер и направление позиции робот определяет сам).
SignalPriceType – тип задаваемого значения,
• Price – значения ValueStop и ValueTake задаются в абсолютных величинах (как цены стоп уровня и уровня тейк профита):
• DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
• DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).

AverPrice() – возвращает учетную цену открытой позиции
Учетная цена – средневзвешенная цена сделок, которые увеличивают текущую открытую позицию по роботу

GetPriceStep() – функция возвращает шаг цены по инструменту, используемому в стратегии.

CurrentPosition() – возвращение объем текущей позиции (штук), которые посчитаны по сделкам только данной стратегии (робота). Положительное количество – показывает объем позиции лонг, отрицательное количество – объем позиции шорт.
никогда такого не было и вот опять

vlad195050
Сообщения: 16
Зарегистрирован: 03 июн 2017, 17:50

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение vlad195050 » 03 июн 2017, 22:32

Спасибо, опробую в ближайшее время.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 03 июн 2017, 22:36

чуть поправил код и описание выше
никогда такого не было и вот опять


MaxMx2
Сообщения: 1
Зарегистрирован: 27 фев 2017, 13:38

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение MaxMx2 » 07 июн 2017, 11:40

Получается, что после достижения НПУ заданного значения и до срабатывания стопа, робот будет на каждом баре снимать стоп и ставить новый? Можно ли этого избежать? На младших ТФ эти может быть неудобно.

И еще вопрос - что означет вот этот кусок кода:

" *CurrentPosition() > 0 ? 1 : -1 "

при задании цены стоп-лосса?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 07 июн 2017, 12:55

MaxMx2 писал(а):Получается, что после достижения НПУ заданного значения и до срабатывания стопа, робот будет на каждом баре снимать стоп и ставить новый? Можно ли этого избежать? На младших ТФ эти может быть неудобно.


Можно.
Завести флаг в виде глоб. переменной и ориентироваться на него, определяя его при открытии позиции и меняя после перестановки стопа.

в Initialize() {...} добавить

Код: Выделить всё

AddGlobalVariable("SLSet", Types.Boolean, false);


при открытии позиции делать

Код: Выделить всё

SLSet = true;


условие переноса в безубыток изменить на

Код: Выделить всё

if (CurrentPLper() > 3 && SLSet)
{
CancelStopLoss();
StopLoss(AverPrice() + 3 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
SLSet = false;
}



MaxMx2 писал(а):И еще вопрос - что означет вот этот кусок кода:

" *CurrentPosition() > 0 ? 1 : -1 "

при задании цены стоп-лосса?


Определяем направление открытой позиции.
Это нужно для определения куда ставить стоп от учетной в + или - от учетной, т.к. у нас будет указана конкретная цена, а не Delta

если long, то умножаем на 1
если short, то умножаем на -1

т.е. к учетной цене мы либо 3 шага прибавляем (* 1), либо отнимаем (* -1)

ещё проще объяснение

это определение знака (+ или -) для 3 * GetPriceStep()

если сама конструкция оператора ? непонятна, то вот выдержка из msdn

Условный оператор

t ? x : y — если тест t имеет значение true, вычисляет и возвращает x, в противном случае вычисляет и возвращает y.
никогда такого не было и вот опять

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение dkostiunin » 11 июн 2017, 11:38

Хотел бы поинтересоваться, - я хочу чтобы стоп лосс переставлял на 1% выше учётной цены можно ли так упростить, при условии что работаю только в лонг?

Вместо
StopLoss(AverPrice() + 3 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), 

Просто написать

StopLoss(CurrentPLper() > 1)

Этого будет достаточно?

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение dkostiunin » 11 июн 2017, 11:41

Или надо написать

StopLoss(AverPrice() +CurrentPLper() = 1)

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 11 июн 2017, 12:28

dkostiunin писал(а):хочу чтобы стоп лосс переставлял на 1% выше учётной цены


у StopLoss есть второй параметр, который отвечает за тип цены

StopLoss(ValueStop, SignalPriceType)

SignalPriceType – тип задаваемого значения,
Price – значения ValueStop и ValueTake задаются в абсолютных величинах (как цены стоп уровня и уровня тейк профита):
DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).

т.е. чтобы выставить стоп на 1% от учетной цены достаточно сделать так:

Код: Выделить всё

// выставить стоплосс на 1% от учетной цены
StopLoss(1, SignalPriceType.DeltaInPercentFromAveragePrice);


но это будет ниже учетной цены при позиции Long

если надо выше, опять же придётся читать конкретную цену и тип цены должен быть Price
никогда такого не было и вот опять


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 21 гость