Стратегии и роботы > Робот для торговли фьючерсами. Оптимизация стратегии.

Обсуждение, описание стратегий и роботов, идеи для стратегий
oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

Re: Робот для торговли фьючерсами. Оптимизация стратегии.

Непрочитанное сообщение oxi » 11 июл 2019, 11:10

Из таблицы котировок берем значения "цена шага" и "шаг".
Коэффициент перевода из пунктов в рубли
К = "цена шага" / "шаг" = 6,32317 / 0,01 = 632,317

BRQ таблица.PNG
BRQ таблица.PNG (7.84 КБ) 4233 просмотра


https://www.moex.com/ru/contract.aspx?code=BR-8.19
Комиссия биржи в 0,925 рублей. Общая комиссия в 2*0,925 = 1.85 рубля.
Комиссия в пунктах = 1,85 / 632 = 0,0029 (не проценты)

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

Re: Робот для торговли фьючерсами. Оптимизация стратегии.

Непрочитанное сообщение oxi » 11 июл 2019, 11:48

MATrail с двумя параметрами

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

function Initialize()
{
IndicatorName = "MATrail2Period";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddParameter("PeriodLong", 50, 1);
AddParameter("PeriodShort", 50, 1);
AddSeries("MATrail", DrawAs.Line, Color.Blue);

AddGlobalVariable("MA", Types.Double, 0.0);
AddGlobalVariable("Flag", Types.Int, 1);
AddGlobalVariable("MinPrice", Types.Double, 100000000000.0);
AddGlobalVariable("MaxPrice", Types.Double, 0.0);
}

function Evaluate()
{
// Alfadirect 2019. OX
// Cледящий трендовый индикатор - модификацированный EMA
if (CurrentIndex <= Math.Max(PeriodLong, PeriodShort) )
{
   MATrail = Input[0];
   MA = Input[0];
}
else
{
    double K0 = 0;
    double K1 = 0;
    double std = 0;
    double e = 0;
   // падение ************************************   
   if (Flag < 0)
   {   
       K0 = 2.0/((double)PeriodShort + 1.0);
       K1 = 1.0 - K0;
       std = 3.0*LIB.STD(Input, PeriodShort)[0];
       e = Math.Abs(Input[0] - MA);
       
       if (Input[0] <= MinPrice || e > std)
       {
          MinPrice = Input[0];
         MA = K1 * MA + K0 * Input[0];
       }
       if (Input[0] > MA )
       {    Flag = 1;
            MaxPrice = Input[0];
            if (Input[0] - MinPrice < 1.0*std)
               MA = MinPrice;
            else    
               MA = Input[0] - std;
       }
   }
   // рост ****************************************   
   else if (Flag > 0)
   {   
       K0 = 2.0/((double)PeriodLong + 1.0);
       K1 = 1.0 - K0;
       std = 3.0*LIB.STD(Input, PeriodLong)[0];
       e = Math.Abs(Input[0] - MA);
       if (Input[0] >= MaxPrice || e > std)
       {
          MaxPrice = Input[0];
         MA = K1 * MA + K0 * Input[0];
       }
       if (Input[0] < MA )
       {    Flag = -1;
            MinPrice = Input[0];
            if (MaxPrice - Input[0] < 1.0*std)
            MA = MaxPrice;             
          else    
               MA = Input[0] + std;
        }
     }
// отображение ряда ************************************
MATrail  = MA;
}
}



nikkrav
Сообщения: 35
Зарегистрирован: 19 май 2016, 15:20
Благодарил (а): 51 раз

Re: Робот для торговли фьючерсами. Оптимизация стратегии.

Непрочитанное сообщение nikkrav » 11 июл 2019, 11:59

Пишет - скобки не хватает.

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

Re: Робот для торговли фьючерсами. Оптимизация стратегии.

Непрочитанное сообщение vdm » 11 июл 2019, 12:04

oxi писал(а):MATrail с двумя параметрами

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

function Initialize()
{
IndicatorName = "MATrail2Period";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddParameter("PeriodLong", 50, 1);
AddParameter("PeriodShort", 50, 1);
AddSeries("MATrail", DrawAs.Line, Color.Blue);

AddGlobalVariable("MA", Types.Double, 0.0);
AddGlobalVariable("Flag", Types.Int, 1);
AddGlobalVariable("MinPrice", Types.Double, 100000000000.0);
AddGlobalVariable("MaxPrice", Types.Double, 0.0);
}

function Evaluate()
{
// Alfadirect 2019. OX
// Cледящий трендовый индикатор - модификацированный EMA
if (CurrentIndex <= Math.Max(PeriodLong, PeriodShort) )
{
   MATrail = Input[0];
   MA = Input[0];
}
else
{
    double K0 = 0;
    double K1 = 0;
    double std = 0;
    double e = 0;
   // падение ************************************   
   if (Flag < 0)
   {   
       K0 = 2.0/((double)PeriodShort + 1.0);
       K1 = 1.0 - K0;
       std = 3.0*LIB.STD(Input, PeriodShort)[0];
       e = Math.Abs(Input[0] - MA);
       
       if (Input[0] <= MinPrice || e > std)
       {
          MinPrice = Input[0];
         MA = K1 * MA + K0 * Input[0];
       }
       if (Input[0] > MA )
       {    Flag = 1;
            MaxPrice = Input[0];
            if (Input[0] - MinPrice < 1.0*std)
               MA = MinPrice;
            else    
               MA = Input[0] - std;
       }
   }
   // рост ****************************************   
   else if (Flag > 0)
   {   
       K0 = 2.0/((double)PeriodLong + 1.0);
       K1 = 1.0 - K0;
       std = 3.0*LIB.STD(Input, PeriodLong)[0];
       e = Math.Abs(Input[0] - MA);
       if (Input[0] >= MaxPrice || e > std)
       {
          MaxPrice = Input[0];
         MA = K1 * MA + K0 * Input[0];
       }
       if (Input[0] < MA )
       {    Flag = -1;
            MinPrice = Input[0];
            if (MaxPrice - Input[0] < 1.0*std)
            MA = MaxPrice;             
          else    
               MA = Input[0] + std;
        }
     }
// отображение ряда ************************************
MATrail  = MA;
}
}


При добавлении получаем сообщение : ошибка компиляции , не найдена закрывающая скобка в OnUpdate

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

Re: Робот для торговли фьючерсами. Оптимизация стратегии.

Непрочитанное сообщение evge » 11 июл 2019, 12:19

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

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

Re: Робот для торговли фьючерсами. Оптимизация стратегии.

Непрочитанное сообщение oxi » 11 июл 2019, 12:34

Это был индикатор.
В стратегия меняется только индикатор

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

function Initialize()
{
   StrategyName = "forts_MATrail2";
   AddInput("Input1", Inputs.Candle, 1, true, "SIU9=ФОРТС");
   AddParameter("PeriodLong", 61, "Период на лонг", 1);
   AddParameter("PeriodShort", 25, "Период на шорт", 1);
   AddChartIndicator("MY.MATrail2Period", new Dictionary <string, string>{{"PeriodLong", "PeriodLong"}, {"PeriodShort", "PeriodShort"}});
}

function OnUpdate()
{
   var line = MY.MATrail2Period(Input1.Close, PeriodLong, PeriodShort);
   double pos = CurrentPosition();
   
      if ( Input1.Close[0] > line[0] && Input1.Close[1] <= line[1] && pos <= 0 )
      {
            EnterLong();
      }
      if ( Input1.Close[0] < line[0] && Input1.Close[1] >= line[1] && pos >= 0 )
      {
            EnterShort();
      }
      
}




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

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

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