Общие вопросы по разработке > закрытие позиции

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
magnaut
Сообщения: 10
Зарегистрирован: 14 авг 2016, 10:10
Благодарил (а): 2 раза

закрытие позиции

Непрочитанное сообщение magnaut » 14 авг 2016, 10:15

здравствуйте подскажите пожалуйста можно ли прописать в роботе что бы позиция закрывалась через минуту? спасибо
:shock:

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: закрытие позиции

Непрочитанное сообщение evge » 14 авг 2016, 11:36

Здравствуйте.

От таймфрейма зависит.

Если ТФ > 1 минуты, то нет, т.к. сигналы приходят на закрытии бара. Т.е. каждый следующий бар будет всегда закрытием позиции в данном случае и будут > 1 (кратно таймфрейму).

Если ТФ <= 1 минуте, то запоминаем индекс или время бара открытия позиции и на каждом следующем вычисляем разницу времени бара открытия и текущего бара BarTime().TotalMinutes - OpenPositionTime.TotalMinutes >= 1, т.е. если >= 1 минуты закрываем позицию. Здесь OpenPositionTime - это глобальная переменная, содержащая дату\время открытия позиции, сохраненную в момент открытия позиции OpenPositionTime = BarTime().
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: закрытие позиции

Непрочитанное сообщение evge » 14 авг 2016, 12:19

Пример реализации с сохранением индекса бара.

Стратегия - пример, т.е. это не рабочая стратегия. Для демонстрации открывается позиция в лонг при условии, что бар падающий и позиция текущая не открыта.

Здесь 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();
   }

}


ClosePositionMunute-01.png
ClosePositionMunute-01.png (33.33 КБ) 24876 просмотров

ClosePositionMunute-02.png
ClosePositionMunute-02.png (42.24 КБ) 24876 просмотров
никогда такого не было и вот опять

magnaut
Сообщения: 10
Зарегистрирован: 14 авг 2016, 10:10
Благодарил (а): 2 раза

Re: закрытие позиции

Непрочитанное сообщение magnaut » 14 авг 2016, 12:26

нашёл робота в ватс лабе 4 показатели фантастические но как я понял там язык паскаль тяму не хватает в альфу перенести жалко очень((
Вложения
РОБОТ.png
РОБОТ.png (16.47 КБ) 24873 просмотра

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: закрытие позиции

Непрочитанное сообщение evge » 14 авг 2016, 12:35

чуть поправил выше мой код. т.к. там перенос на след день не учтен был, когда разница времени текущего бара и открытия бара отрицательная.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: закрытие позиции

Непрочитанное сообщение evge » 14 авг 2016, 12:42

и ещё

было

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

OpenPosition = CurrentIndex;


стало

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

OpenPosition = CurrentIndex - 1;


т.к. мы проверяем динамически позицию открытую и значение глобальной переменной сохраненного индекса открытия позиции и значение присваиваем на следующей итерации после открытия позиции, то необходимо брать предыдущий индекс бара.
никогда такого не было и вот опять

magnaut
Сообщения: 10
Зарегистрирован: 14 авг 2016, 10:10
Благодарил (а): 2 раза

Re: закрытие позиции

Непрочитанное сообщение magnaut » 14 авг 2016, 12:45

МОЖНО Я СКИНУ СТРАДЕГИЮ С ВАТ ЛАБА И ВЫ ПОСМОТРИТЕ НА СКОЛЬКО ОНА ЭФЕКТИВНА?

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: закрытие позиции

Непрочитанное сообщение evge » 14 авг 2016, 12:47

можно, но мне проще описать алгоритм входа выхода и я подумаю, можно ли такое реализовать в АД4.

Разбирать код WealthLab чужой не хочется :)

Проще и быстрее будет описать алгоритм словами. Я попробую, по возможности, накидать код для АД4, если это быстро получится.
никогда такого не было и вот опять

magnaut
Сообщения: 10
Зарегистрирован: 14 авг 2016, 10:10
Благодарил (а): 2 раза

Re: закрытие позиции

Непрочитанное сообщение magnaut » 14 авг 2016, 12:49

КОД НЕ ЧУЖОЙ ОН В СВОБОДНОМ ДОСТУПЕ А ОПИСАТЬ НЕ МОГУ НЕ ДО КОНЦА ПОНЯЛ ЕГО

magnaut
Сообщения: 10
Зарегистрирован: 14 авг 2016, 10:10
Благодарил (а): 2 раза

Re: закрытие позиции

Непрочитанное сообщение magnaut » 14 авг 2016, 12:51

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

{#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 гостей