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

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

Стратегия Invest_Positive

Непрочитанное сообщение Simonov » 20 окт 2017, 13:29

Добрый день! Евгений, в одном из вебинаров Дмитрий Ерёмин высказал идею создания стратегии Invest_Positive, но в дальнейшем уточнил, что сейчас у него нет времени заниматься данным вопросом и отложил решение на неопределённый срок. Таким образом, для желающих опробовать данную стратегию в ближайшее время остаётся единственный шанс - это Ваше участие в создании кода. ;) Помогите, пожалуйста, воплотить сие в жизнь!

Идея данной стратегии наглядно отображена на картинке с вебинара. Если можно, то сделайте сразу два варианта - для работы в Лонг, и для работы в Шорт.

Invest_Positive.PNG
Invest_Positive.PNG (181.29 КБ) 4669 просмотров


Заранее благодарен!

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

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

Непрочитанное сообщение evge » 20 окт 2017, 13:32

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

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

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

Непрочитанное сообщение Simonov » 20 окт 2017, 13:34

evge писал(а):Приветствую! Ок, займусь в ближайшее время. Скорее всего, за выходные посмотрю.

Огромная благодарность! Будем ждать!

Аватара пользователя
Den
Сообщения: 308
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 12 раз
Поблагодарили: 4 раза

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

Непрочитанное сообщение Den » 20 окт 2017, 13:48

Друзья, не забываем, что усреднение и пересиживание обнулило многие депозиты.

oxi
Сообщения: 133
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 61 раз

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

Непрочитанное сообщение oxi » 20 окт 2017, 17:48

Стратегия простая.
Ее можно даже не переделывать под списки

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

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

function Initialize()
{

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

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

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

}

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

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;
        FirstPrice =  c;
      // Расчитываем дельту цены для докупки
      if (Q > 0 )
      {
         qStep = (LongLimit - qStart) / Q ;
         DeltaPrice = (LastPrice - cmin) / qStep;
      }
   }
   
// Правило 2: Закрытие всей позиции при достижении сmax
   if ( c > cmax)
    {
       CloseLong();
       ShowMessage("Цена достигла цели, робот закрывает позицию и будет остановлен");
       Stop();
       // Остановка робота
     }
     
// Правило 3: Добавление к позиции при падении
   if ( c < LastPrice - DeltaPrice && c > cmin )
   {
      EnterLong(Q);
        LastPrice =  c;
     }
// Правило 4: Продажа кусочка от позиции при падении
   if ( c > FirstPrice && pos > qStart)
    {
       CloseLong(pos - qStart);
         LastPrice =  c;
     }

}

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

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

Непрочитанное сообщение evge » 20 окт 2017, 18:36

Ура! В выходные отдыхаем! :)
никогда такого не было и вот опять

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

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

Непрочитанное сообщение Simonov » 20 окт 2017, 20:19

oxi писал(а):Стратегия простая.
Ее можно даже не переделывать под списки

Огромная благодарность, Дмитрий!

evge писал(а):Ура! В выходные отдыхаем! :)

Евгений Алексеевич, если не сильно затруднит, помогите переделать код от Дмитрия для работы в Шорт, пожалуйста! 8-)

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

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

Непрочитанное сообщение evge » 20 окт 2017, 20:37

Simonov писал(а):Евгений Алексеевич, если не сильно затруднит, помогите переделать код от Дмитрия для работы в Шорт, пожалуйста! 8-)


ок :)
никогда такого не было и вот опять

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

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

Непрочитанное сообщение evge » 20 окт 2017, 20:39

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

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

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

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

Short версия :)

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

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

function Initialize()
{

   StrategyName = "Invest_negative";
   AddParameter("qStart", 1000, "Сколько продать при старте", 0);
   AddParameter("cmin", 140, "Целевая цена", 0);
   AddParameter("cmax", 180, "Верхний порог продажи", 0);
   AddParameter("Q", 10, "Шаг продажи в штуках", 0);

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

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

}

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

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)
         EnterShort(qStart);
        LastPrice =  c;
        FirstPrice =  c;
      // Расчитываем дельту цены для докупки
      if (Q > 0 )
      {
         qStep = (Math.Abs(ShortLimit) - qStart) / Q ;
         DeltaPrice = (cmax - LastPrice) / qStep;
      }
   }
   
// Правило 2: Закрытие всей позиции при достижении сmin
   if ( c < cmin)
    {
       CloseShort();
       ShowMessage("Цена достигла цели, робот закрывает позицию и будет остановлен");
       Stop();
       // Остановка робота
     }
     
// Правило 3: Добавление к позиции при росте
   if ( c > LastPrice + DeltaPrice && c < cmax )
   {
      EnterShort(Q);
      LastPrice =  c;
     }
// Правило 4: Закрытие допроданной части позиции при падении ниже цены стартовой продажи
   if ( c < FirstPrice && -pos > qStart)
    {
       CloseShort(-pos - qStart);
       LastPrice =  c;
     }

}
никогда такого не было и вот опять


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

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

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