Стратегии и роботы > Установка беубыточного стопа с профитом
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Установка беубыточного стопа с профитом
а если написать
StopLoss(-1, SignalPriceType.DeltaInPercentFromAveragePrice);
тогда ведь он выставит на 1% выше учетной цены?
Учитывая более раннее условие заданное, что выставлять такой стоплосс только при достижении текущей цены выше на 3%, от учетной, должно сработать?
или отрицательные значения нельзя использовать?
StopLoss(-1, SignalPriceType.DeltaInPercentFromAveragePrice);
тогда ведь он выставит на 1% выше учетной цены?
Учитывая более раннее условие заданное, что выставлять такой стоплосс только при достижении текущей цены выше на 3%, от учетной, должно сработать?
или отрицательные значения нельзя использовать?
- evge
- Администратор
- Сообщения: 1813
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 369 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
Может быть сработает, надо пробовать
никогда такого не было и вот опять
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
Re: Установка беубыточного стопа с профитом
Установил безубыточный стоп как Вы рекомендовали, не работает. что не так? Зто программа для Фьючерса нефти.
Код: Выделить всё
function Initialize()
{
StrategyName = "Нефть с профитом";
AddParameter("P1", 0, "", 1);
AddInput("Input1", Inputs.Candle, 1, true, ""); AddGlobalVariable("SLSet", Types.Boolean, false)
LongLimit = 0;
ShortLimit = 0;
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( (Input1.Close > Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossAbove(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close > MY.NRTR(Input1.Close, 0.2)) )
{
EnterLong();
StopLoss(0.2, SignalPriceType.DeltaInPercentFromAveragePrice);
SLSet = true; }
/// ПРАВИЛО 2
if ( (Input1.Close < Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossBelow(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close < MY.NRTR(Input1.Close, 0.2)) )
{
EnterShort();
StopLoss(0.2, SignalPriceType.DeltaInPercentFromAveragePrice); SLSet = true;
}
/// ПРАВИЛО 3
if ( (CurrentPLper() > 0.2) )
{ CancelStopLoss();
StopLoss(AverPrice() + 2 * GetPriceStep() * CurrentPosition() > 0 ? 1 : -1, SignalPriceType.Price);
SLSet = false;
}
}
- evge
- Администратор
- Сообщения: 1813
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 369 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
не проверяете в последнем правиле флаг на установку стопа, но это повлиять не должно было
заменить на
Код: Выделить всё
/// ПРАВИЛО 3
if ( (CurrentPLper() > 0.2) )
заменить на
Код: Выделить всё
/// ПРАВИЛО 3
if ( CurrentPLper() > 0.2 && SLSet )
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1813
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 369 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
Код: Выделить всё
StopLoss(AverPrice() + 2 * GetPriceStep() * CurrentPosition() > 0 ? 1 : -1, SignalPriceType.Price);
заменить на
Код: Выделить всё
StopLoss(AverPrice() + 2 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
Ранее было с ошибкой, нужно взять в () CurrentPosition() > 0 ? 1 : -1.
Ранее в тексте тоже поправил.
никогда такого не было и вот опять
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
Re: Установка беубыточного стопа с профитом
Еще один вопрос. Если цена продолжает идти в мою сторону, то можно ли отменить предыдущий стоп с профитом и назначить другой. с более высоким профитом, например:
т . е получить ступенчатый треллинг- стоп .
Код: Выделить всё
/// ПРАВИЛО 3
if ( CurrentPLper() > 0.1 && SLSet )
{ CancelStopLoss();
StopLoss(AverPrice() + 2 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
SLSet = false;
}
/// ПРАВИЛО 4
if ( CurrentPLper() > 0.3 && SLSet )
{ CancelStopLoss();
StopLoss(AverPrice() + 7 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
SLSet = false;
}
-
- Сообщения: 16
- Зарегистрирован: 03 июн 2017, 17:50
Re: Установка беубыточного стопа с профитом
То что я написал не отменяет предыдущий стоп с профитом и не переносит на более высокий уровень, ПРАВИЛО 4 НЕ РАБОТАЕТ. Работает только правило 3
Re: Установка беубыточного стопа с профитом
Всегда срабатывает правило 3 . Его надо ограничить
Код: Выделить всё
/// ПРАВИЛО 3
if ( CurrentPLper() > 0.1 && CurrentPLper() <= 0.3 && SLSet )
{ CancelStopLoss();
StopLoss(AverPrice() + 2 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
SLSet = false;
}
- evge
- Администратор
- Сообщения: 1813
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 369 раз
- Контактная информация:
Re: Установка беубыточного стопа с профитом
oxi писал(а):Всегда срабатывает правило 3
помимо этого, ещё флаг SLSet установлен в false правилом 3 и в правиле 4 не выполнится условие SLSet (true)
лучше вообще переписать код перестановки стопа
Вот полный код с изменениями:
Здесь перенос стопа осуществляется от цены предыдущего стопа, т.е. на учетную цену не ориентируемся.
Код: Выделить всё
function Initialize()
{
StrategyName = "BRProfit";
AddParameter("P1", 30, "", 1);
// % стоплосс при открытии позиции
AddParameter("StopStart", 0.4, "", 1);
// если текущая цена больше (меньше) на S % от текущей цены стоплосс, то переносим его.
AddParameter("StopShift", 0.4, "", 1);
// на какой % цены переносим стоплосс, должен быть не больше StopShift
AddParameter("StopStep", 0.1, "", 1);
AddInput("Input1", Inputs.Candle, 1, true, "");
//Здесь сохраняем цену текущего стоплосс
AddGlobalVariable("SL", Types.Double, 0.0);
LongLimit = 1;
ShortLimit = -1;
}
function OnUpdate()
{
var isLong = (Input1.Close > Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossAbove(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close > MY.NRTR(Input1.Close, 0.2));
var isShort = (Input1.Close < Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossBelow(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close < MY.NRTR(Input1.Close, 0.2));
// Long
if ( isLong )
{
EnterLong();
StopLoss(StopStart, SignalPriceType.DeltaInPercentFromAveragePrice);
SL = Input1.Close - Input1.Close * 0.01 * StopStart;
}
// Short
if ( isShort )
{
EnterShort();
StopLoss(StopStart, SignalPriceType.DeltaInPercentFromAveragePrice);
SL = Input1.Close + Input1.Close * 0.01 * StopStart;
}
// StopLoss
if ( SL > 0.0 && CurrentPosition() != 0 && (Input1.Close / SL * 100 - 100) * (CurrentPosition() > 0 ? 1 : -1) > StopShift )
{
CancelStopLoss();
var NS = SL + SL * 0.01 * StopStep * (CurrentPosition() > 0 ? 1 : -1);
StopLoss(NS, SignalPriceType.Price);
SL = NS;
}
}
никогда такого не было и вот опять
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей