Стратегии и роботы > Установка беубыточного стопа с профитом
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
Установка беубыточного стопа с профитом
Здравствуйте. Прошу помочь как написать стратегию * Если НПУ% больше 3% от цены открытия, то отменить стоп и установить новый стоп на уровне больше цены открытия на 3 руб. , на 3 пункта , на 0,3 цента.*. Одним словом чтобы новый стоп устанавливался с небольшим профитом . Бедем я и моя жена очень Вам благодарны.
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
В вашей стратегии нужно сделать примерно так
Комментарий к коду
В первой строке это проверка прибыли больше чем 3%, можно заменить на параметр.
В строке StopLoss можно подставить константу или заменить на параметр число 3 - количество шагов цены торгуемого инструмента, добавляемое к учетной цене для стоплоса.
CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.
CancelStopLoss() – отменить (снять) стоп-заявку, выставленную для защиты текущей позиции робота. Функция используется для отмены или редактирования положения текущего стопа. Повторный вызов функции выставления стопа не снимает старый и не выставляет новый стоп. Поэтому необходимо использовать данную функцию для отмены ранее выставленной заявки.
StopLoss(ValueStop, SignalPriceType) – выставить защитную стоп¬-маркет заявку к текущей позиции робота (размер и направление позиции робот определяет сам).
SignalPriceType – тип задаваемого значения,
• Price – значения ValueStop и ValueTake задаются в абсолютных величинах (как цены стоп уровня и уровня тейк профита):
• DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
• DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).
AverPrice() – возвращает учетную цену открытой позиции
Учетная цена – средневзвешенная цена сделок, которые увеличивают текущую открытую позицию по роботу
GetPriceStep() – функция возвращает шаг цены по инструменту, используемому в стратегии.
CurrentPosition() – возвращение объем текущей позиции (штук), которые посчитаны по сделкам только данной стратегии (робота). Положительное количество – показывает объем позиции лонг, отрицательное количество – объем позиции шорт.
Код: Выделить всё
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() – возвращение объем текущей позиции (штук), которые посчитаны по сделкам только данной стратегии (робота). Положительное количество – показывает объем позиции лонг, отрицательное количество – объем позиции шорт.
никогда такого не было и вот опять
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
чуть поправил код и описание выше
никогда такого не было и вот опять
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
Re: Установка беубыточного стопа с профитом
Получается, что после достижения НПУ заданного значения и до срабатывания стопа, робот будет на каждом баре снимать стоп и ставить новый? Можно ли этого избежать? На младших ТФ эти может быть неудобно.
И еще вопрос - что означет вот этот кусок кода:
" *CurrentPosition() > 0 ? 1 : -1 "
при задании цены стоп-лосса?
И еще вопрос - что означет вот этот кусок кода:
" *CurrentPosition() > 0 ? 1 : -1 "
при задании цены стоп-лосса?
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
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.
никогда такого не было и вот опять
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Установка беубыточного стопа с профитом
Хотел бы поинтересоваться, - я хочу чтобы стоп лосс переставлял на 1% выше учётной цены можно ли так упростить, при условии что работаю только в лонг?
Вместо
StopLoss(AverPrice() + 3 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1),
Просто написать
StopLoss(CurrentPLper() > 1)
Этого будет достаточно?
Вместо
StopLoss(AverPrice() + 3 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1),
Просто написать
StopLoss(CurrentPLper() > 1)
Этого будет достаточно?
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Установка беубыточного стопа с профитом
Или надо написать
StopLoss(AverPrice() +CurrentPLper() = 1)
StopLoss(AverPrice() +CurrentPLper() = 1)
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
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
никогда такого не было и вот опять
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей