Общие вопросы по разработке > Take Profit без Stop Loss (BreakingStop)

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
yaroslav13
Сообщения: 3
Зарегистрирован: 11 янв 2019, 13:40
Поблагодарили: 1 раз

Take Profit без Stop Loss (BreakingStop)

Непрочитанное сообщение yaroslav13 » 28 сен 2019, 23:25

Добрый день! У меня такойвопрос, можно ли как то сделать, что бы заявка создавалась с take profit без stop lossa?
BreakingStop(3, 0.3, SignalPriceType.DeltaInPercentFromAveragePrice); если поставить 0, то все плохо вместо стоп лосса.

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

Re: Take Profit без Stop Loss (BreakingStop)

Непрочитанное сообщение evge » 29 сен 2019, 07:17

CloseLongLimit(Price)
CloseLongLimit(Price, Q) – закрыть позицию лонг по стратегии по цене Price полностью (или заданное количество Q).

CloseShortLimit(Price)
CloseShortLimit(Price, Q) – закрыть позицию шорт по стратегии по цене Price полностью (или заданное количество Q).

Или

Поставить стоп в BreakingStop() заведомо большой, с низкой вероятностью исполнения.

Но вариант с CloseLongLimit() и CloseShortLimit() не будет работать в таком виде:

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

if (Long)
{
EnterLong();
CloseLongLimit(Take);
}


За один бар (сигнал) АД4 не принимает 2 подряд заявки, т.е. не ставит в очередь заявку CloseLongLimit(), а просто её игнорирует.

В отличие от стоп заявок, которые уходят в очередь на исполнение, и как исполнится заявка на открытие позиции сразу же выставляется заявка на стоп.

т.е. вот такой вариант будет работать:

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

if (Long)
{
EnterLong();
BreakingStop(Stop, Take, SignalPriceType.DeltaInPercentFromAveragePrice);
}


Не знаю, ошибка ли это в АД4 или так и было задумано, но это прибавляет забот по закрытию позиции по лимиту.

Чтобы первый вариант заработал нужно:
- открыть позицию на баре по сигналу;
- на следующем баре выставить лимитную заявку на закрытие.

что-то типа такого:

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

//сигнал на открытие
if (CurrentPosition() == 0)
{
   EnterLong();
}

//позиция Long есть, ставим заявку на закрытие по лимиту
if (CurrentPosition() > 0)
{
   CloseLongLimit(Take);
}


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

Т.е. есть 1 бар временного лага, когда тейка (LMT заявки закрытия) не будет вообще, а позиция будет уже открыта!

Ещё нужно учитывать то, что CloseLongLimit() и CloseShortLimit() выполняются по цене, а не дельте, но это не особо "проблема".

В итоге:
1. Действительно, в АД4 не хватает заявки типа CloseLongLimit(), CloseShortLimit(), работающих по аналогии с стоп заявками уходящими в очередь на исполнение после заявок открытия позиции. Ну и возможность задавать их с параметром SignalPriceType как у стоп заявок.
2. Выход пока только в виде BreakingStop() с большим стопом ( но есть вероятность что он когда-то выстрелит (исполнится) :) )
никогда такого не было и вот опять

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

Re: Take Profit без Stop Loss (BreakingStop)

Непрочитанное сообщение evge » 29 сен 2019, 08:01

Пример сказанного выше:

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

function Initialize()
{
   StrategyName = "AA";
   AddParameter("TakeProfit", 0.1, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{

if (CurrentPosition() > 0)
{
   CloseLongLimit(AverPrice() * (1 + 0.01 * TakeProfit));
}

if (CurrentPosition() == 0)
{
   EnterLong();
}

}


CloseLimit-01.png
CloseLimit-01.png (18.53 КБ) 2532 просмотра


а теперь вариант команд подряд:

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

function Initialize()
{
   StrategyName = "AA";
   AddParameter("TakeProfit", 0.1, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "RIU9=ФОРТС");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{

if (CurrentPosition() == 0)
{
   EnterLong();
   CloseLongLimit(AverPrice() * (1 + 0.01 * TakeProfit));
}

}


CloseLimit-02.png
CloseLimit-02.png (18.17 КБ) 2532 просмотра


и вариант с BreakingStop() и большим, "маловероятно" исполнимым стопом:

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

function Initialize()
{
   StrategyName = "AA";
   AddParameter("TakeProfit", 0.1, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "RIU9=ФОРТС");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{

if (CurrentPosition() == 0)
{
   EnterLong();
   BreakingStop(10, TakeProfit, SignalPriceType.DeltaInPercentFromAveragePrice);
}

}


CloseLimit-03.png
CloseLimit-03.png (17.93 КБ) 2523 просмотра
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

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

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