Общие вопросы по разработке > TrailingStopLoss. Выставление с учётом давности открытия позиции.

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

TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение k.4nt » 22 янв 2019, 13:21

Добрый день.
Если кто-то реализовал уже- подскажите пожалуйста как:
Хочу выставлять TrailingStopLoss() от конкретного уровня. Расчёт идёт по максимуму/минимума за "N" свечей.
Вопрос: максимум и минимум хочу рассчитывать с учётом удаления от места открытия позиции.
То есть. Пока "N" меньше расстояния от места открытия позиции- один код, ушли дальше- другой код.

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение BugsDigger » 22 янв 2019, 13:41

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

В теме "Хотелки" я вписал пожелание приделать время сделки (вернее время изменения учетной цены позиции) к информации, возвращаемой ф-цией GetPosition, но надежда на реализацию этого слабая...

Аватара пользователя
Indigo-On
Сообщения: 55
Зарегистрирован: 28 ноя 2018, 18:44
Откуда: Russia
Благодарил (а): 24 раза
Поблагодарили: 9 раз

Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение Indigo-On » 22 янв 2019, 14:46

k.4nt писал(а):Добрый день.
Если кто-то реализовал уже- подскажите пожалуйста как:
Хочу выставлять TrailingStopLoss() от конкретного уровня. Расчёт идёт по максимуму/минимума за "N" свечей.
Вопрос: максимум и минимум хочу рассчитывать с учётом удаления от места открытия позиции.
То есть. Пока "N" меньше расстояния от места открытия позиции- один код, ушли дальше- другой код.


BugsDigger прав насчет времени изменения учетной позиции.
Самое простое, считать количество свечек, прошедших с момента открытия лонговой или шортовой позиции.
В лоб, например, можно так (хотя и некрасиво):
► Показать

Аватара пользователя
k.4nt
Сообщения: 7
Зарегистрирован: 11 янв 2019, 11:35
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение k.4nt » 24 янв 2019, 11:33

Когда 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
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение evge » 24 янв 2019, 12:35

Того же результата можно добиться так:

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

Function Initialize()
{
...
AddGlobalVariable("X", Types.Int, 0);
...
}

Function OnUpdate()
{
...
if (Условие)
{
EnterLong();
X = CurrentIndex;
}

//Смещение до бара сигнала вычисляем так:
int Time = CurrentIndex - X;
...
}
никогда такого не было и вот опять

Аватара пользователя
k.4nt
Сообщения: 7
Зарегистрирован: 11 янв 2019, 11:35
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение k.4nt » 24 янв 2019, 12:45

Вы правы во всём. Это первая реализация и проба пера так сказать.

Maks
Сообщения: 52
Зарегистрирован: 15 июн 2020, 15:29
Благодарил (а): 8 раз
Поблагодарили: 27 раз

Re: TrailingStopLoss. Выставление с учётом давности открытия позиции.

Непрочитанное сообщение Maks » 20 окт 2022, 18:09

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 баров чтобы дойти до искомой сделки)
► Показать


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

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

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