Страница 4 из 4

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

Добавлено: 19 май 2023, 15:34
ip851874

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

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

function Initialize()
{

   StrategyName = "InvestPozitive 2MA";
   AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Pfast"}});
   AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Pslow"}});
   AddParameter("Pfast", 7, "быстрая ema", 1);
   AddParameter("Pslow", 14, "медленная ema", 0)
   AddParameter("OnPrice", 250, "Стартовая цена (начать торговлю при пересечении цены)", 0);
   AddParameter("qStart", 1000, "Сколько купить при старте", 0);
   AddParameter("cmax", 160, "Целевая цена", 0);
   AddParameter("cmin", 60, "Нижний порог покупки", 0);
   AddParameter("Q", 10, "Шаг покупки в штуках", 0);
   AddParameter("Poor", 0, "Закрывать докупки частями, если значение не 0", 0);
   


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

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

}

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

double c = Input1.Close[0];
double pos = CurrentPosition();
double qStep;
if (!Started) Started = (Input1.Close[0] <= OnPrice && Input1.Close[1] > OnPrice) || (Input1.Close[0] >= OnPrice && Input1.Close[1] < OnPrice);
if (!Started) return;

// Правило 1: Открытие позиции на начальный объем
// и расчет DeltaPrice
if ( (EMA(Input1.Close, Pfast) > EMA(Input1.Close, Pslow)) && (Pfast < Pslow) )
   {
      
   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;
     }
     
// Правило 5: Закрытие докупленной части позиции при росте выше последней цены на deltaPrice
   if ( Poor != 0 && c > LastPrice + DeltaPrice && pos > qStart)
    {
       CloseLong(Q);
       LastPrice =  c;
     }
   
     

}



Подскажите почему компиляцию перестал проходить? Что то где то намудрил

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

Добавлено: 19 май 2023, 16:25
Maks
1.
ip851874 писал(а):   AddParameter("Pslow", 14, "медленная ema", 0)

В AddParameter не хватает ";"

2. И в правиле 1 не хватает закрывающей скобки "}"

3. В вопросе не хватает сообщения компилятора (в котором эти две ошибки написаны)

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

Добавлено: 19 май 2023, 23:35
ip851874
Спасибо! Поправил.

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

Добавлено: 20 май 2023, 09:43
ip851874

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

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

function Initialize()
{

   StrategyName = "InvestPozitive 2MA";
   AddParameter("Pfast", 3, "быстрая ema", 1);
   AddParameter("Pslow", 185, "медленная sma", 0);
   LongLimit = 0;
   AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Pfast"}});
   AddChartIndicator("SMA", new Dictionary <string, string>{{"Period", "Pslow"}});
   AddParameter("qStart", 1000, "Сколько купить при старте", 0);
   AddParameter("cmax", 160, "Целевая цена", 0);
   AddParameter("cmin", 60, "Нижний порог покупки", 0);
   AddParameter("Q", 10, "Шаг покупки в штуках", 0);
   AddParameter("Poor", 0, "Закрывать докупки частями, если значение не 0", 0);
   


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

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

}

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

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

// Правило 1: Открытие позиции на начальный объем
// и расчет DeltaPrice когда будет сигнал на пересечение

   if ( (LastPrice == 100000000000) )
   {   
       // Проверки
       if ( (EMA(Input1.Close, Pfast) > SMA(Input1.Close, Pslow)) && (Pfast < Pslow) )
   {
      EnterLong();
   }

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

}




Сейчас закупается на максимальный лот, потом его сразу продает а только потом покупает qStart

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

Добавлено: 20 май 2023, 09:47
ip851874
и открытие не по пересечению

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

Добавлено: 22 май 2023, 12:49
Maks
ip851874 писал(а):и открытие не по пересечению


в условиях нет пересечения.
Есть
EMA...Pfast > SMA...Pslow


и если это условие не выполнено, то что? идём дальше по коду и всё равно покупаем если qStart>0. Идея точно была именно в этом?

Сейчас закупается на максимальный лот, потом его сразу продает а только потом покупает qStart

сейчас в коде так и написано (хаотично). В правиле 1 купили, в правиле 4 (вероятно) продали. Конечно если выполнены условия правила 4, но они часто будут выполнены сразу

в первом приближении можно/нужно взять исходный (работающий) код и воспользоваться советом Евгения:
evge писал(а):условие перенесите, добавив его сюда

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

 // Открываем позицию, если стартовое кол-во больше 0
       if (qStart > 0)

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

Добавлено: 23 май 2023, 00:37
ip851874
Идея была осуществлять вход по сигналу а сопровождение и выход оставить по стратегии и после выхода из позиции ждать подходящий сигнал. Работает только в лонг. За сигнал взял 2 скользящие.

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

Добавлено: 29 мар 2024, 19:35
ip851874
Maks писал(а):
ip851874 писал(а):и открытие не по пересечению


в условиях нет пересечения.
Есть
EMA...Pfast > SMA...Pslow


и если это условие не выполнено, то что? идём дальше по коду и всё равно покупаем если qStart>0. Идея точно была именно в этом?

Сейчас закупается на максимальный лот, потом его сразу продает а только потом покупает qStart

сейчас в коде так и написано (хаотично). В правиле 1 купили, в правиле 4 (вероятно) продали. Конечно если выполнены условия правила 4, но они часто будут выполнены сразу

в первом приближении можно/нужно взять исходный (работающий) код и воспользоваться советом Евгения:
evge писал(а):условие перенесите, добавив его сюда

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

 // Открываем позицию, если стартовое кол-во больше 0
       if (qStart > 0)


Поможете реализовать правильно?