Страница 1 из 1

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

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

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

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

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

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

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


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

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

Добавлено: 24 янв 2019, 11:33
k.4nt
Когда 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;
}


Работает. Но пока мало понятно на сколько будет грузить ПК при "долгой" работе.

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

Добавлено: 24 янв 2019, 12:35
evge
Того же результата можно добиться так:

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

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

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

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

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

Добавлено: 24 янв 2019, 12:45
k.4nt
Вы правы во всём. Это первая реализация и проба пера так сказать.

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

Добавлено: 20 окт 2022, 18:09
Maks
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 баров чтобы дойти до искомой сделки)
► Показать