Добрый день! У меня такойвопрос, можно ли как то сделать, что бы заявка создавалась с take profit без stop lossa?
BreakingStop(3, 0.3, SignalPriceType.DeltaInPercentFromAveragePrice); если поставить 0, то все плохо вместо стоп лосса.
			
									
						Общие вопросы по разработке > Take Profit без Stop Loss (BreakingStop)
- 
				yaroslav13
 - Сообщения: 3
 - Зарегистрирован: 11 янв 2019, 13:40
 - Поблагодарили: 1 раз
 
- evge
 - Администратор
 - Сообщения: 1817
 - Зарегистрирован: 04 фев 2016, 09:46
 - Откуда: Млечный путь, планета Земля
 - Благодарил (а): 83 раза
 - Поблагодарили: 375 раз
 - Контактная информация:
 
Re: Take Profit без Stop Loss (BreakingStop)
CloseLongLimit(Price)
CloseLongLimit(Price, Q) – закрыть позицию лонг по стратегии по цене Price полностью (или заданное количество Q).
CloseShortLimit(Price)
CloseShortLimit(Price, Q) – закрыть позицию шорт по стратегии по цене Price полностью (или заданное количество Q).
Или
Поставить стоп в BreakingStop() заведомо большой, с низкой вероятностью исполнения.
Но вариант с CloseLongLimit() и CloseShortLimit() не будет работать в таком виде:
За один бар (сигнал) АД4 не принимает 2 подряд заявки, т.е. не ставит в очередь заявку CloseLongLimit(), а просто её игнорирует.
В отличие от стоп заявок, которые уходят в очередь на исполнение, и как исполнится заявка на открытие позиции сразу же выставляется заявка на стоп.
т.е. вот такой вариант будет работать:
Не знаю, ошибка ли это в АД4 или так и было задумано, но это прибавляет забот по закрытию позиции по лимиту.
Чтобы первый вариант заработал нужно:
- открыть позицию на баре по сигналу;
- на следующем баре выставить лимитную заявку на закрытие.
что-то типа такого:
есть вероятность того, что на баре открытия и до бара отправки заявки закрытия по лимиту (take) цена может сходить до лимитной цены take и уже больше туда не прийти, а заявки на take ещё не выставлялось.
Т.е. есть 1 бар временного лага, когда тейка (LMT заявки закрытия) не будет вообще, а позиция будет уже открыта!
Ещё нужно учитывать то, что CloseLongLimit() и CloseShortLimit() выполняются по цене, а не дельте, но это не особо "проблема".
В итоге:
1. Действительно, в АД4 не хватает заявки типа CloseLongLimit(), CloseShortLimit(), работающих по аналогии с стоп заявками уходящими в очередь на исполнение после заявок открытия позиции. Ну и возможность задавать их с параметром SignalPriceType как у стоп заявок.
2. Выход пока только в виде BreakingStop() с большим стопом ( но есть вероятность что он когда-то выстрелит (исполнится)
 )
			
									
						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
 - Администратор
 - Сообщения: 1817
 - Зарегистрирован: 04 фев 2016, 09:46
 - Откуда: Млечный путь, планета Земля
 - Благодарил (а): 83 раза
 - Поблагодарили: 375 раз
 - Контактная информация:
 
Re: Take Profit без Stop Loss (BreakingStop)
Пример сказанного выше:
а теперь вариант команд подряд:
и вариант с BreakingStop() и большим, "маловероятно" исполнимым стопом:
			
									
						Код: Выделить всё
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();
}
}
а теперь вариант команд подряд:
Код: Выделить всё
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));
}
}
и вариант с 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);
}
}
никогда такого не было и вот опять
						Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 31 гость