Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 14 мар 2019, 15:12

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

Текст сообщения:

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

Добавлен параметр 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-02.png
Invest-positive-mod-02.png (22.47 КБ) 36806 просмотров

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