Общие вопросы по разработке > закрытие позиции
закрытие позиции
здравствуйте подскажите пожалуйста можно ли прописать в роботе что бы позиция закрывалась через минуту? спасибо
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: закрытие позиции
Здравствуйте.
От таймфрейма зависит.
Если ТФ > 1 минуты, то нет, т.к. сигналы приходят на закрытии бара. Т.е. каждый следующий бар будет всегда закрытием позиции в данном случае и будут > 1 (кратно таймфрейму).
Если ТФ <= 1 минуте, то запоминаем индекс или время бара открытия позиции и на каждом следующем вычисляем разницу времени бара открытия и текущего бара BarTime().TotalMinutes - OpenPositionTime.TotalMinutes >= 1, т.е. если >= 1 минуты закрываем позицию. Здесь OpenPositionTime - это глобальная переменная, содержащая дату\время открытия позиции, сохраненную в момент открытия позиции OpenPositionTime = BarTime().
От таймфрейма зависит.
Если ТФ > 1 минуты, то нет, т.к. сигналы приходят на закрытии бара. Т.е. каждый следующий бар будет всегда закрытием позиции в данном случае и будут > 1 (кратно таймфрейму).
Если ТФ <= 1 минуте, то запоминаем индекс или время бара открытия позиции и на каждом следующем вычисляем разницу времени бара открытия и текущего бара BarTime().TotalMinutes - OpenPositionTime.TotalMinutes >= 1, т.е. если >= 1 минуты закрываем позицию. Здесь OpenPositionTime - это глобальная переменная, содержащая дату\время открытия позиции, сохраненную в момент открытия позиции OpenPositionTime = BarTime().
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: закрытие позиции
Пример реализации с сохранением индекса бара.
Стратегия - пример, т.е. это не рабочая стратегия. Для демонстрации открывается позиция в лонг при условии, что бар падающий и позиция текущая не открыта.
Здесь M - параметр стратегии, определяющий количество минут до закрытия позиции (по умолчанию 1)
Если разница времени открытия позиции и времени текущего бара отрицательная (перенос на след день), позиция так же закрывается.
Стратегия - пример, т.е. это не рабочая стратегия. Для демонстрации открывается позиция в лонг при условии, что бар падающий и позиция текущая не открыта.
Здесь M - параметр стратегии, определяющий количество минут до закрытия позиции (по умолчанию 1)
Если разница времени открытия позиции и времени текущего бара отрицательная (перенос на след день), позиция так же закрывается.
Код: Выделить всё
/**ClosePositionMinute
Developed by evge;**/
function Initialize()
{
StrategyName = "ClosePositionMinute";
AddParameter("M", 1, "", 1);
AddInput("Input1", Inputs.Candle, -15, true, "SBER=МБ ЦК");
LongLimit = 1;
ShortLimit = -1;
AddGlobalVariable("OpenPosition", Types.Int, 0);
}
function OnUpdate()
{
if (CurrentPosition() != 0 && OpenPosition == 0 )
OpenPosition = CurrentIndex - 1;
if (CurrentPosition() == 0 && OpenPosition != 0)
OpenPosition = 0;
/// ПРАВИЛО 1
if ( (Input1.Open > Input1.Close) && (CurrentPosition() == 0) )
{
EnterLong();
}
/// ПРАВИЛО 2
TimeSpan iM = BarTime() - BarTime(CurrentIndex - OpenPosition);
if ( (CurrentPosition() != 0) && iM.TotalMinutes >= M || iM.TotalMinutes < 0)
{
ClosePosition();
}
}
никогда такого не было и вот опять
Re: закрытие позиции
нашёл робота в ватс лабе 4 показатели фантастические но как я понял там язык паскаль тяму не хватает в альфу перенести жалко очень((
- Вложения
-
- РОБОТ.png (16.47 КБ) 24873 просмотра
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: закрытие позиции
чуть поправил выше мой код. т.к. там перенос на след день не учтен был, когда разница времени текущего бара и открытия бара отрицательная.
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: закрытие позиции
и ещё
было
стало
т.к. мы проверяем динамически позицию открытую и значение глобальной переменной сохраненного индекса открытия позиции и значение присваиваем на следующей итерации после открытия позиции, то необходимо брать предыдущий индекс бара.
было
Код: Выделить всё
OpenPosition = CurrentIndex;
стало
Код: Выделить всё
OpenPosition = CurrentIndex - 1;
т.к. мы проверяем динамически позицию открытую и значение глобальной переменной сохраненного индекса открытия позиции и значение присваиваем на следующей итерации после открытия позиции, то необходимо брать предыдущий индекс бара.
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: закрытие позиции
можно, но мне проще описать алгоритм входа выхода и я подумаю, можно ли такое реализовать в АД4.
Разбирать код WealthLab чужой не хочется
Проще и быстрее будет описать алгоритм словами. Я попробую, по возможности, накидать код для АД4, если это быстро получится.
Разбирать код WealthLab чужой не хочется
Проще и быстрее будет описать алгоритм словами. Я попробую, по возможности, накидать код для АД4, если это быстро получится.
никогда такого не было и вот опять
Re: закрытие позиции
Код: Выделить всё
{#OptVar1 1;1;10;1}
// Eager Beaver 2 with PeekChecker
// by DrKoch 2003-09
{$I 'Gaussian'}
{$I 'PeekChecker'}
var BAR, P: integer;
var z: float;
var exit_f: float;
var ema_per, atr_per: integer;
var ma, C: float;
var exit_limit, exit_dist: float;
var uptrend: boolean;
var timeout: integer;
// Parameter
ema_per := 130; // period of MA
atr_per := 6;
exit_f := 0.6; // factor * Range for exit
timeout := 1;
// Graphics
EnableTradeNotes( false, false, true );
PlotSeries( GaussianSeries( #Close, ema_per, 4), 0, #red, #Thin );
DrawLabel( 'Gaussian( Close, ' + IntToStr(ema_per) + ')', 0 );
// Trading System
StartPeekCheck(1, 0);
InstallTimeBasedExitR( timeout );
for Bar := 30 to BarCount() - 1 do begin
ApplyAutoStopsR( Bar );
// intermediate values
z := ATR(Bar, atr_per);
C := PriceCloseR(Bar); // most recent close
ma := Gaussian(Bar, #Close, ema_per, 4); // moving average
uptrend := (C > ma); // what is the trend?
exit_dist := z * exit_f; // exit price rel. close
if uptrend then exit_limit := C + exit_dist
else exit_limit := C - exit_dist;
// Exit Rules
if ActivePositionCount() > 0 then begin
for p:= 0 to PositionCount -1 do begin
if not PositionActive( p ) then continue;
if PositionLong(p) then SellAtLimitR( Bar+1, exit_limit, p, 'Sell')
else CoverAtLimitR(Bar+1, exit_limit, p, 'Cover');
end;
end;
// Entry Rules
// enter a new position at Open of each Bar
if uptrend then BuyAtMarketR(Bar+1, '' )
else ShortAtMarketR(Bar+1, '' );
end;
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей