Стратегии и роботы > Стратегия Invest_Positive

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

Re: Стратегия Invest_Positive

Непрочитанное сообщение evge » 23 окт 2017, 10:04

Небольшая доработка в стратегиях Positive и Negative.

Добавлено ещё одно правило (5).

и добавлен параметр

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

Выгодно это будет при долгой просадке и блуждании цены в предполагаемой области докупки / допродажи.

Параметр задается как 0 - нет частичного закрытия, НЕ 0, т.е. любое число - будет частичное закрытие.

Пример

Invest-Positive-Negative-01.png
Пример использования Poor, цель обозначена зеленым кружком


Скачать обе стратегии

Invest-Positive-Negative.zip
(58.93 КБ) 2680 скачиваний
никогда такого не было и вот опять

Аватара пользователя
Simonov
Сообщения: 89
Зарегистрирован: 20 сен 2017, 11:36
Благодарил (а): 83 раза
Поблагодарили: 20 раз

Re: Стратегия Invest_Positive

Непрочитанное сообщение Simonov » 23 окт 2017, 18:16

evge писал(а):Небольшая доработка в стратегиях Positive и Negative.


Полезная доработка! Спасибо большое!

Petr.Kutyrev
Сообщения: 9
Зарегистрирован: 13 мар 2019, 20:17
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Стратегия Invest_Positive

Непрочитанное сообщение Petr.Kutyrev » 13 мар 2019, 20:54

Евгений, добрый день. Помогите пожалуйста немного изменить правила стратегии Invest_Positive.
Сейчас после открытия позиции может быть две ситуации:
1.Цена пошла ниже-мы докупаем по сетке и продаем дополнительно набранные позиции когда цена вернулась на стартовый уровень- это оставляем без изменений.
2.Цена пошла выше- сейчас в стратегия продает актив только когда он достигнет нужного уровня. Если актив нужного уровня не достигнет, стратегия будет держать прибыльную позиции без фиксации.Прошу добавить возможность постепенно распродавать актив по сетке. К примеру с шагом в процентах или в диапазоне до нужного уровня цены. При откатах не докупать, что бы не увеличивать среднею стоимость по инструменту. Если цена по инструменты возвращается к стартовому уровню то мы снова докупаем ранее распроданный объем и все начинается по кругу- при росте распродажа, при снижение набор позиции. Важно, не докупать инструмент пока мы находимся в зоне выше стартовой.

Надеюсь смог изъяснить мысль, буду признателен за помощь.

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

Re: Стратегия Invest_Positive

Непрочитанное сообщение evge » 13 мар 2019, 21:11

Приветствую! Ок, принято. Завтра посмотрю как можно доработать. Отпишу здесь.
никогда такого не было и вот опять

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

Re: Стратегия Invest_Positive

Непрочитанное сообщение evge » 14 мар 2019, 15:12

Модифицированный (предварительный) вариант на проверку.

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

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

/**
Инвестиционная стратегия.
При старте покупает по текущим ценам начальный объем qStart.
Докупает на Q при снижении цены, не более позиции робота и не ниже порога (cmin).
Продает докупленное кол-во при росте цены выше цены начальной покупки.
Если Poor не равен 0, докупка закрывается частями по цене выше чем последняя цена на дельту.
Продает весь объем при росте цены выше целевой цены и останавливается
Algorithm = ИНВЕСТИЦИИ;**/

function Initialize()
{

   StrategyName = "Invest_positive";
   AddParameter("qStart", 1000, "Сколько купить при старте", 0);
   AddParameter("cmax", 160, "Целевая цена", 0);
   AddParameter("QC", 100, "Шаг закрытия позиции в штуках", 0);
   AddParameter("cmin", 60, "Нижний порог покупки", 0);
   AddParameter("Q", 100, "Шаг покупки в штуках", 0);
   AddParameter("Poor", 0, "Закрывать докупки частями, если значение не 0", 0);

   AddInput("Input1", Inputs.Candle, 1, true, "");

   AddGlobalVariable("LastPrice", Types.Double, 100000000000);
   AddGlobalVariable("LastPriceClose", Types.Double, 100000000000);
   AddGlobalVariable("FirstPrice", Types.Double, 0);
   AddGlobalVariable("DeltaPrice", Types.Double, 0);
   AddGlobalVariable("DeltaPriceClose", Types.Double, 0);

}

function OnUpdate()
{
// В момент запуска покупаем qStart акций
// Основная прибыль: продаем qStart акций по цели (cmax)
// Дополнительно: ниже цены старта покупаем (но не ниже cmin), выше продаем

// evge 14.03.2019 https://alfadirect4.ru
// модификация стратегии с закрытием по частям при движении к целевой цене

double c = Input1.Close[0];
double pos = CurrentPosition();
double qStep;

// Правило 1: Открытие позиции на начальный объем
// и расчет DeltaPrice
   if ( (LastPrice == 100000000000) )
   {   
       // Проверки
      if (Q <= 0)
      {
              ShowMessage("Не задано Q - шаг количества");
              Stop();
      }
      if ( cmin >= cmax )
      {
              ShowMessage("cmin больше, чем cmax ");
              Stop();
      }
   
       // Открываем позицию, если стартовое кол-во больше 0
       if (qStart > 0)
         EnterLong(qStart);
        LastPrice =  c;
   LastPriceClose = c;
        FirstPrice =  c;
      // Расчитываем дельту цены для докупки
      if (Q > 0 )
      {
         qStep = (LongLimit - qStart) / Q ;
         DeltaPrice = (LastPrice - cmin) / qStep;
      }
      // Расчитываем дельту цены для закрытия позиции частями
      if (QC > 0 )
      {
         qStep = qStart / QC ;
         DeltaPriceClose = (cmax - LastPrice) / qStep;
      }
   }
   
// Правило 2: Закрытие всей позиции при достижении сmax
   if ( c > cmax)
    {
       CloseLong();
       //ShowMessage("Цена достигла цели, робот закрывает позицию и будет остановлен");
       //Stop();
       // Остановка робота
     }

// Правило 2.1: закрытие позиции частями
   if ( c > LastPriceClose + DeltaPriceClose && c < cmax )
   {
   CloseLong(QC);
        LastPriceClose =  c;
     }

// Правило 2.2: повторный старт
   if ( pos < qStart && c <= FirstPrice)
   {
   EnterLong(qStart - pos);
        LastPrice =  c;
   LastPriceClose = c;
        //FirstPrice =  c;
     }
     

// Правило 3: Добавление к позиции при падении
   if ( c < LastPrice - DeltaPrice && c > cmin )
   {
   EnterLong(Q);
        LastPrice =  c;
     }

// Правило 4: Продажа докупки росте цены выше стартовой цены
   if ( c > FirstPrice && pos > qStart)
    {
   CloseLong(pos - qStart);
   LastPrice =  c;
     }
     
// Правило 5: Закрытие докупленной части позиции при росте выше последней цены на deltaPrice
   if ( Poor != 0 && c > LastPrice + DeltaPrice && pos > qStart)
    {
       CloseLong(Q);
       LastPrice =  c;
     }
}


пример работы и параметры тестирования на таймфрейме M5:

Invest-positive-mod-01.png
Invest-positive-mod-01.png (38.18 КБ) 49869 просмотров

Invest-positive-mod-02.png
Invest-positive-mod-02.png (22.47 КБ) 49869 просмотров
никогда такого не было и вот опять

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

Re: Стратегия Invest_Positive

Непрочитанное сообщение evge » 14 мар 2019, 15:15

с включенным poor = 1

Invest-positive-mod-poor-on-03.png
Invest-positive-mod-poor-on-03.png (37.45 КБ) 49869 просмотров
никогда такого не было и вот опять

Petr.Kutyrev
Сообщения: 9
Зарегистрирован: 13 мар 2019, 20:17
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Стратегия Invest_Positive

Непрочитанное сообщение Petr.Kutyrev » 14 мар 2019, 16:54

Предварительно, все идеально, как я хотел. Вечером протестирую, дам обратную связь. Огромное спасибо Евгений!

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

Re: Стратегия Invest_Positive

Непрочитанное сообщение evge » 14 мар 2019, 17:03

Если что-то не так, сообщайте, поправлю код.
никогда такого не было и вот опять

Petr.Kutyrev
Сообщения: 9
Зарегистрирован: 13 мар 2019, 20:17
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Стратегия Invest_Positive

Непрочитанное сообщение Petr.Kutyrev » 15 мар 2019, 02:50

Доброе время. Протестировал. Система работает как хотел.
Стратегия весьма эффективна в инструментах типа Газпром (годами ходит в боковике) или поможет набрать портфель на интересном активе при инвестировании. Пара тестов показали, что частичное закрытие позиции в зоне ниже нуля ухудшали итоговую прибыль. На мой взгляд лучше не крыть позиции в убыточной зоне, надо давать прибыли вырасти.

Спасибо Евгений!

Аватара пользователя
ip851874
Сообщения: 42
Зарегистрирован: 21 ноя 2020, 22:56
Откуда: Москва
Благодарил (а): 14 раз
Контактная информация:

Re: Стратегия Invest_Positive

Непрочитанное сообщение ip851874 » 09 мар 2021, 20:32

Приветствую!
При тестировании возник вопрос, не могу уловить как считается дельта для продажи докупленного объема :?:


Вернуться в «Стратегии и роботы»

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

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