Общие вопросы по разработке > TrailingStopLoss. Выставление с учётом давности открытия позиции.
TrailingStopLoss. Выставление с учётом давности открытия позиции.
Добрый день.
Если кто-то реализовал уже- подскажите пожалуйста как:
Хочу выставлять TrailingStopLoss() от конкретного уровня. Расчёт идёт по максимуму/минимума за "N" свечей.
Вопрос: максимум и минимум хочу рассчитывать с учётом удаления от места открытия позиции.
То есть. Пока "N" меньше расстояния от места открытия позиции- один код, ушли дальше- другой код.
Если кто-то реализовал уже- подскажите пожалуйста как:
Хочу выставлять TrailingStopLoss() от конкретного уровня. Расчёт идёт по максимуму/минимума за "N" свечей.
Вопрос: максимум и минимум хочу рассчитывать с учётом удаления от места открытия позиции.
То есть. Пока "N" меньше расстояния от места открытия позиции- один код, ушли дальше- другой код.
-
- Сообщения: 535
- Зарегистрирован: 11 ноя 2018, 17:11
- Благодарил (а): 21 раз
- Поблагодарили: 92 раза
Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.
Вот как раз с моментом времени открытия позиции пока всё плохо. Вы можете запомнить его в момент совершения операции ("момент" тоже понятие растяжимое) в работающей стратегии, но после перезапуска стратегии эта информация будет потеряна. В лучшем случае вы можете сбросить запись о сделке в каком-то виде в файл, затем из него читать, чтобы восстановить историю.
В теме "Хотелки" я вписал пожелание приделать время сделки (вернее время изменения учетной цены позиции) к информации, возвращаемой ф-цией GetPosition, но надежда на реализацию этого слабая...
В теме "Хотелки" я вписал пожелание приделать время сделки (вернее время изменения учетной цены позиции) к информации, возвращаемой ф-цией GetPosition, но надежда на реализацию этого слабая...
- Indigo-On
- Сообщения: 61
- Зарегистрирован: 28 ноя 2018, 18:44
- Откуда: Russia
- Благодарил (а): 25 раз
- Поблагодарили: 9 раз
Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.
k.4nt писал(а):Добрый день.
Если кто-то реализовал уже- подскажите пожалуйста как:
Хочу выставлять TrailingStopLoss() от конкретного уровня. Расчёт идёт по максимуму/минимума за "N" свечей.
Вопрос: максимум и минимум хочу рассчитывать с учётом удаления от места открытия позиции.
То есть. Пока "N" меньше расстояния от места открытия позиции- один код, ушли дальше- другой код.
BugsDigger прав насчет времени изменения учетной позиции.
Самое простое, считать количество свечек, прошедших с момента открытия лонговой или шортовой позиции.
В лоб, например, можно так (хотя и некрасиво):
► Показать
Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.
Когда Ema пересечёт Sma- Открываем Long.
Циклом считаем когда это было.
Вот что у меня вышло:
Работает. Но пока мало понятно на сколько будет грузить ПК при "долгой" работе.
Циклом считаем когда это было.
Вот что у меня вышло:
Код: Выделить всё
if ( (EMA(Input1.Close, Ema)[1] <= SMA(Input1.Close, Sma)[1]) && (EMA(Input1.Close, Ema) > SMA(Input1.Close, Sma)) )
{
EnterLong();
}
int Time = 0;
for (var T = 1; ((EMA(Input1.Close, Ema)[T] > SMA(Input1.Close, Sma)[T])); T++) /// Пока Ema Больше Sma (То есть выше), плюсуем Т, что бы высчитать шаг расчёта.
{
Time = T;
}
Работает. Но пока мало понятно на сколько будет грузить ПК при "долгой" работе.
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.
Того же результата можно добиться так:
Код: Выделить всё
Function Initialize()
{
...
AddGlobalVariable("X", Types.Int, 0);
...
}
Function OnUpdate()
{
...
if (Условие)
{
EnterLong();
X = CurrentIndex;
}
//Смещение до бара сигнала вычисляем так:
int Time = CurrentIndex - X;
...
}
никогда такого не было и вот опять
Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.
Вы правы во всём. Это первая реализация и проба пера так сказать.
Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.
evge писал(а):Того же результата можно добиться так:Код: Выделить всё
if (Условие)
{
EnterLong();
X = CurrentIndex;
}
//Смещение до бара сигнала вычисляем так:
int Time = CurrentIndex - X;
...
}
Тема старая, но всё еще актуальная)
Этот код через индексы будет работать только до первого перезапуска терминала. После перезапуска свечки для робота перезагрузятся, индекс собьется (проинициализируется), смещения сползут)
Надо не через индексы, а через время.
Можно сохранить в глоб переменную время открытия позиции GetTime().
Код: Выделить всё
... AddGlobalVariable("TimeStamp", Types.DateTime, new DateTime(1111, 11, 11));
...
И потом в цикле от текущего бара идти к сохраненному времени и считать шаги:
Код: Выделить всё
... int i = 0;
while (GetTime(i) >= TimeStamp) i++;
...
после сделки (ну то есть сигнала в простом случае) обновлять время:
Код: Выделить всё
... EnterLong();
TimeStamp = GetTime(0);
...
актуально для больших ТФ и не очень редких сделок (то есть чтобы хватило 2000 баров чтобы дойти до искомой сделки)
► Показать
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей