Не понимаю как работает CloseAtTrailingStop
Здравствуйте! Никак не пойму как работать с функцией CloseAtTrailingStop. Я так понимаю, что трейлинг стоп должен автоматически подтягиваться к цене и держаться от нее на заданном растоянии. А в функции CloseAtTrailingStop есть только параметры позиция, цена активаци и цена ордера, как для простого стоп оредра. А как тогда сделать, чтобы стоп следовал за ценой?
Цитата: Dima
Здравствуйте! Никак не пойму как работать с функцией CloseAtTrailingStop. Я так понимаю, что трейлинг стоп должен автоматически подтягиваться к цене и держаться от нее на заданном растоянии. А в функции CloseAtTrailingStop есть только параметры позиция, цена активаци и цена ордера, как для простого стоп оредра. А как тогда сделать, чтобы стоп следовал за ценой?
Нужно каждую новую свечку или трейд, в коде, пытаться выставить новый CloseAtTrailingStop. Он будет подтягиваться, а отодвигаться не будет.
Спасибо за ответ! Еще один вопрос появился по поводу этой функции. Я ее вызываю в событии CandleFinishedEvent. Я пока проверяю в тестере. Когда эта функция срабатывает, то позиция сразу закрывается и все сделка завершена и вызывается событие PositionClosingSuccesEvent. Вот кусочек кода.
if (positions[0].State == PositionStateType.Open)
{
if (lastCandle.Close > positions[0].EntryPrice + TrailingStop_Value * PriceStep) //цена пошла в нашу сторону
{
CurTab.CloseAtTrailingStop(positions[0], lastCandle.Close, lastCandle.Close - TrailingStop_Value * PriceStep);
}
}
Когда в отладчике эту строку проходишь позиция еще не закрыта и в PositionsOpenAll она есть, но уже на следующей свече, позиции нет. И получается вход и через несколько пнуктов выход. Не получается сделать так чтобы например вошел по 1000 рублей, цена стала 1500, поставил стоп на 1200, потом цена стала 1800 поднялся стоп на 1600 и т.д. А программа получается выходит из сделки после первого же стопа.
Цитата: Dima
Спасибо за ответ! Еще один вопрос появился по поводу этой функции. Я ее вызываю в событии CandleFinishedEvent. Я пока проверяю в тестере. Когда эта функция срабатывает, то позиция сразу закрывается и все сделка завершена и вызывается событие PositionClosingSuccesEvent. Вот кусочек кода.
if (positions[0].State == PositionStateType.Open) { if (lastCandle.Close > positions[0].EntryPrice + TrailingStop_Value * PriceStep) //цена пошла в нашу сторону { CurTab.CloseAtTrailingStop(positions[0], lastCandle.Close, lastCandle.Close - TrailingStop_Value * PriceStep); } }
Когда в отладчике эту строку проходишь позиция еще не закрыта и в PositionsOpenAll она есть, но уже на следующей свече, позиции нет. И получается вход и через несколько пнуктов выход. Не получается сделать так чтобы например вошел по 1000 рублей, цена стала 1500, поставил стоп на 1200, потом цена стала 1800 поднялся стоп на 1600 и т.д. А программа получается выходит из сделки после первого же стопа.
Не надо передавать в качестве цены стопа текущее закрытие свечи... Нужно отнимать от него значение какое-то... Иначе позиция действительно будет закрываться
Цитата: Алексей Ван
Нужно каждую новую свечку или трейд, в коде, пытаться выставить новый CloseAtTrailingStop. Он будет подтягиваться, а отодвигаться не будет.
Пробовал ставить CloseAtTrailingStop по примерам из готовых роботов.
_tab.CloseAtTrailingStop(openPositions[i],
_lastPrice - _lastPrice * TrailStop.ValueDecimal / 100,
_lastPrice);
Так стоп и подтягивается и отодвигается. Гуляет на одном растоянии от цены, пока цена резко не пробьёт стоп ордер.
Подскажите как исправить.
private List<decimal> candlesMA24Low = new List<decimal>();
///////////////////////////////////////////////////
if (candles.Count > 25)
{
candles24Low.Clear();
for (int i = 24; i > 0; i--)
{
candles24Low.Add(candles[candles.Count - i].Low);
}
}
//////////////////////////////////////////////////
if (openPositions[i].Direction == Side.Buy)
{
if (candles24Low.Count > 1)
{
decimal averageLow = Math.Round(candles24Low.Average(), 2); // средняя минимальная цена за последние 24 свечи с округлением до 2
decimal PriceActivation = averageLow - Math.Round(averageLow * 1 / 100, 2);// цена активации = минус 1 % от средней минимальной цены за 24 свечи с округлением до 2
decimal PriceOrder = PriceActivation - 10 * _tab.Securiti.PriceStep; // цена ордера продажи = цена активации - 10 шагов цены
_tab.CloseAtTrailingStop(openPositions[i], PriceActivation, PriceOrder);
}
}
Такая идея.
При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус.
Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.
Цитата: Алексей
Такая идея.
При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус.
Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.
Здравствуйте. Вы можете подпиаться на другой тип событий, например на новые трейды и использовать цену последнего трейда, не дожидаясь завершения свечей.
Цитата: IgorB
Цитата: Алексей
Такая идея.
При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус.
Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.
Здравствуйте. Вы можете подпиаться на другой тип событий, например на новые трейды и использовать цену последнего трейда, не дожидаясь завершения свечей.
Я не силен в программировании. Есть ли примеры роботов, использующих цену последнего трейда?
Цитата: Алексей
Цитата: IgorB
Цитата: Алексей
Такая идея.
При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус.
Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.
Здравствуйте. Вы можете подпиаться на другой тип событий, например на новые трейды и использовать цену последнего трейда, не дожидаясь завершения свечей.
Я не силен в программировании. Есть ли примеры роботов, использующих цену последнего трейда?
Посмотрите TimeOfDayBot. Или воспользуетесь поиском по проекту, ищите NewTickEvent.
Для выставления стопа и профита в нем используется
private void TabOnPositionOpeningSuccesEvent(Position position)
в котором используется один параметр "Position " и не будет работать TrailingStop. Стоп не будет перемещаться за новой свечей. Все данные будут подтягиваться из открытой позиции
Цитата: Алексей
Для выставления стопа и профита в нем используется
private void TabOnPositionOpeningSuccesEvent(Position position)
в котором используется один параметр "Position " и не будет работать TrailingStop. Стоп не будет перемещаться за новой свечей. Все данные будут подтягиваться из открытой позиции
Почти все идикаторы строят свои линии по закрытию свечей. Пока свеча не закрыта, линии могут пересекатся и обратно расходится на этой свече, это хорошо видно при больших движениях. Без закрытия свечи у линии нет определенного состояния. Так же без закрытия свечи у нее нет цены закрытия.
В MacdTrail использется отклонение от цены закрытия последней свечи. Как вы хотите сравнивать то, что еще не случилось? Нужно привязывать значение трейлинг стопа к чемуто другому. Ускорить закрытие позиции можно только тем, что бы сравнивать цену последней сдлелки с последним значением индикатора чаще чем 1 раз за свечу.
А можно подписаться на событие сделки, а цену взять от закрытия предыдущей свечи?
И есть возможность поставить стоп от начала события до завершения свечи?
Ма
Цитата: Алексей
А можно подписаться на событие сделки, а цену взять от закрытия предыдущей свечи?
И есть возможность поставить стоп от начала события до завершения свечи?
Свечи хранятся в коллекции. Можно взять любую свечу из истории, отнимая индекс от крайнего индекса. Candles[Candles.Count -1] это крайняя свеча. Так же есть разные события , например CandleUpdateEvent - событие обновления посленей свечи. PositionOpeningSuccesEvent - собыите успешного открытия позиции. Реализовать можно любую логику, если она не противоречит математике и времени возникновения событий.
надо изучать матчасть! все реализуется достаточно просто. разберусь с кодом - напишу (если интересно).
ООО «ВАН ТЕХНОЛОГИИ»т: +7 953 769 56 45
* Торговля на финансовых рынках связана с риском, который лежит на Вас.
* Ничто из написанного на сайте o-s-a.net не является рекомендацией.
* Если Вы этого не понимаете, не читайте этот сайт, ничего не покупайте.