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

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

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

Добавлено: Владимир » 01 июн 2019, 08:08

Тема: Re: Пытаемся открыть поцицию на последних 30 секундах формирования свечи

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

forts-12-1.png
forts-12-1.png (174.24 КБ) 18821 просмотр

Индикатор который должен был получать сигнал с робота на отрисовку линии при формировании потерна.

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

function Initialize()
{
// Обязательные параметры:
    IndicatorName = "Search_level_Robot";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = true;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Candle);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)

   AddSeries("Last1", DrawAs.Line, Color.Red);// Задаем вид линии индикатора с именем ряда Last
   AddLevel(0, Color.Red, LineStyles.Dot, 2, "Last");
   
    //Данные получаемые с робота
    AddParameter("GetPriceStep_ind", 0);      // Минимальный шаг цены получаемый с робота (число знаков после запятой)
   AddParameter("Period", 200);            // Период построения уровней
    AddParameter("Enable_Recalculation", 1);   // Разрешение на обработку данных
    AddParameter("max_stop", 20);            // Период построения уровней (длинна истории)
    AddParameter("gap", 4);                  // Период построения уровней (длинна истории)

    //Данные передаваемые в робот
   AddSeries("Direction");                  // Направление открываемой позиции (0 - нет направления, 1- лонг, 2- шорт)
   
   AddGlobalVariable("ListDouble", Types.DoubleList);
   AddGlobalVariable("path", Types.String, @"c:\\dell\\Search_level_Robot.txt");

}

function Evaluate()
//Владимир
{
    int Period_int =  (int)Period;
    double High=Input.High[2];      // Переменная хранения значения хая для сравнения
    double Low=Input.Low[2];      // Переменная хранения значения хая для сравнения
    double Hx=0;
    double Lx=0;
    Direction=0;
    string Model="нет";

if ((MaxIndex - CurrentIndex) > Period_int) return;

if (CurrentIndex == MaxIndex)
   {
//////// Описываем модель на покупку
//модель 1
   double Low2=Input.Low[2]+gap;
   if(Input.Low[0] ==Input.Low[2] && (Input.Low[0]<=Input.Low[1] && Low2>=Input.Low[1]))
   {
      for(var x=3; x<Period_int;  x++ )
         {
            if ((Low==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Lx=Low;
                     if( Low>0)
               {
               Model="Лонг - 1";
               Direction=1;
                ListDouble.Add(Lx);
               }
            }
          }
   }

//модель 2
   if(Input.Low[0] ==Input.Low[1] && Input.Low[0] ==Input.Low[2] 
   && Input.Low[0] > Input.Low[3] && Input.Low[0] < Input.Close[3] && Input.Low[0] < Input.Open[3] )
   {
      for(var x=4; x<Period_int;  x++ )
         {
            if ((Low==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Lx=Low;
                     if( Low>0)
               {
               Model="Лонг - 2 (простой ложный пробой)";
               Direction=1;
                ListDouble.Add(Lx);
               }
            }
          }
   }

//модель 3
   if(Input.Low[0] ==Input.Low[1] && Input.Low[0] ==Input.Low[2]
    && Input.Low[0] > Input.Close[3] && Input.Low[0] < Input.Open[3]  && Input.Low[0] < Input.Close[4])
   {
      for(var x=5; x<Period_int;  x++ )
         {
            if ((Low==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Lx=Low;
                     if( Low>0)
               {
               Model="Лонг - 3 (сложный ложный пробой)";
               Direction=1;
                ListDouble.Add(Lx);
               }
            }
          }
   }

//////// Описываем модель на продажу
//модель 1
   double High2=Input.High[2]-gap;
   if(Input.High[0] ==Input.High[2] && (Input.High[0]>=Input.High[1] && High2<=Input.High[1]))
   {
      for(var x=3; x<Period_int;  x++ )
         {
            if ((High==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Hx=High;
                     if( High>0)
               {
               Model="Шорт - 1";
               Direction=2;
                ListDouble.Add(Hx);
               }
            }
          }
   }

//модель 2
   if(Input.High[0] ==Input.High[1] && Input.High[1] ==Input.High[2] 
   && Input.High[0] < Input.High[3] && Input.High[0] > Input.Close[3] && Input.High[0] > Input.Open[3] )
   {
      for(var x=5; x<Period_int;  x++ )
         {
            if ((High==Input.High[x])||(Low==Input.Low[x]) )
               {
                    Hx=High;
                     if( High>0)
               {
               Model="Шорт - 2 (простой ложный пробой)";
               Direction=2;
                ListDouble.Add(Hx);
               }
            }
          }
   }

//модель 3
   if(Input.High[0] ==Input.High[1] && Input.High[0] ==Input.High[2]
    && Input.High[0] > Input.Close[3] && Input.High[0] < Input.Open[3]  && Input.High[0] < Input.Close[4])
   {
      for(var x=5; x<Period_int;  x++ )
         {
            if ((High==Input.High[x])||(Low==Input.Low[x]) )                
                 {
                    Hx=High;
                     if( High>0)
               {
               Model="Шорт - 3 (сложный ложный пробой)";
               Direction=2;
                ListDouble.Add(Hx);
               }
            }
          }
   }

//////////////////////////////////
                 
      using (System.IO.StreamWriter sw = System.IO.File.CreateText(path))
      {
         sw.WriteLine("Модель - " + Model);
         sw.WriteLine("Направление - " + Convert.ToString(Direction ));
         sw.WriteLine(string.Join("\r\n", ListDouble ));
         sw.Close(); sw.Dispose();
      }
 
   if (Direction>0 && (Convert.ToBoolean(Enable_Recalculation)==true))
   {   //Открываем позицию вконце формирования свечи с индексом[0] (за 30 секунд до закрытия свечи)
   Levels[0].Level = ListDouble[0];
   }
   //else
   //{Levels[0].Level=0;}
   
}//off if (CurrentIndex == MaxIndex)
 
}


Индиеатор формирует линиию с задержкой на одну свечу (тестовый)

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

function Initialize()
{
// Обязательные параметры:
    IndicatorName = "Search_level";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = true;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Candle);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)

   AddSeries("Last1", DrawAs.Line, Color.Red);// Задаем вид линии индикатора с именем ряда Last
    AddLevel(0, Color.Red, LineStyles.Dot, 2, "Last");
   /* AddLevel(1, Color.Red, LineStyles.Dot, 2, "Last");
    AddLevel(2, Color.Red, LineStyles.Dot, 2, "Last");
    AddLevel(3, Color.Red, LineStyles.Dot, 2, "Last");
    AddLevel(4, Color.Red, LineStyles.Dot, 2, "Last");
    AddLevel(5, Color.Red, LineStyles.Dot, 2, "Last");*/
   
   AddSeries("Direction");                     // Направление открываемой позиции (0 - нет направления, 1- лонг, 2- шорт)
   // AddSeries("GetPriceStep_ind");            // Минимальный шаг цены получаемый с робота (число знаков после запятой)
   AddParameter("GetPriceStep_ind", 2);            // Минимальный шаг цены (число знаков после запятой)
   AddParameter("Period", 200);                  // Период построения уровней

   AddGlobalVariable("path", Types.String, @"c:\\dell\\Search_level.txt");
   AddGlobalVariable("ListDouble", Types.DoubleList);

}

function Evaluate()
//Владимир
{
    int Period_int =  Period-0;
    double max_stop=Math.Round((Input.High[0]*0.2/100),(GetPriceStep_ind+0));
    double gap=Math.Round((max_stop*0.2),(GetPriceStep_ind+0));
    double High=Input.High[3];      // Переменная хранения значения хая для сравнения
    double Low=Input.Low[3];         // Переменная хранения значения хая для сравнения
    double Hx=0;
    double Lx=0;
    Direction=0;
    string Model="нет";

if ((MaxIndex - CurrentIndex) > Period_int) return;

if (CurrentIndex == MaxIndex)
   {
//////// Описываем модель на покупку
//модель 1
   double Low2=Input.Low[3]+gap;
   if(Input.Low[1] ==Input.Low[3] && (Input.Low[1]<=Input.Low[2] && Low2>=Input.Low[2]))
   {
      for(var x=4; x<Period_int;  x++ )
         {
            if ((Low==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Lx=Low;
                     if( Low>0)
               {
               Model="Лонг - 1";
               Direction=1;
                ListDouble.Add(Lx);
               }
            }
          }
   }

//модель 2
   if(Input.Low[1] ==Input.Low[2] && Input.Low[1] ==Input.Low[3] 
   && Input.Low[1] > Input.Low[4] && Input.Low[1] < Input.Close[4] && Input.Low[1] < Input.Open[4] )
   {
      for(var x=5; x<Period_int;  x++ )
         {
            if ((Low==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Lx=Low;
                     if( Low>0)
               {
               Model="Лонг - 2 (простой ложный пробой)";
               Direction=1;
                ListDouble.Add(Lx);
               }
            }
          }
   }

//модель 3
   if(Input.Low[1] ==Input.Low[2] && Input.Low[1] ==Input.Low[3]
    && Input.Low[1] > Input.Close[4] && Input.Low[1] < Input.Open[4]  && Input.Low[1] < Input.Close[5])
   {
      for(var x=6; x<Period_int;  x++ )
         {
            if ((Low==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Lx=Low;
                     if( Low>0)
               {
               Model="Лонг - 3 (сложный ложный пробой)";
               Direction=1;
                ListDouble.Add(Lx);
               }
            }
          }
   }

//////// Описываем модель на продажу
//модель 1
   double High2=Input.High[3]-gap;
   if(Input.High[1] ==Input.High[3] && (Input.High[1]>=Input.High[2] && High2<=Input.High[2]))
   {
      for(var x=4; x<Period_int;  x++ )
         {
            if ((High==Input.High[x])||(Low==Input.Low[x]) )
               {
                 Hx=High;
                     if( High>0)
               {
               Model="Шорт - 1";
               Direction=2;
                ListDouble.Add(Hx);
               }
            }
          }
   }

//модель 2
   if(Input.High[1] ==Input.High[2] && Input.High[1] ==Input.High[3] 
   && Input.High[1] < Input.High[4] && Input.High[1] > Input.Close[4] && Input.High[1] > Input.Open[4] )
   {
      for(var x=6; x<Period_int;  x++ )
         {
            if ((High==Input.High[x])||(Low==Input.Low[x]) )
               {
                    Hx=High;
                     if( High>0)
               {
               Model="Шорт - 2 (простой ложный пробой)";
               Direction=2;
                ListDouble.Add(Hx);
               }
            }
          }
   }

//модель 3
   if(Input.High[1] ==Input.High[2] && Input.High[1] ==Input.High[3]
    && Input.High[1] > Input.Close[4] && Input.High[1] < Input.Open[4]  && Input.High[1] < Input.Close[5])
   {
      for(var x=6; x<Period_int;  x++ )
         {
            if ((High==Input.High[x])||(Low==Input.Low[x]) )                
                 {
                    Hx=High;
                     if( High>0)
               {
               Model="Шорт - 3 (сложный ложный пробой)";
               Direction=2;
                ListDouble.Add(Hx);
               }
            }
          }
   }

//////////////////////////////////
                 
      using (System.IO.StreamWriter sw = System.IO.File.CreateText(path))
      {
         sw.WriteLine("Модель - " + Model);
         sw.WriteLine("Направление - " + Convert.ToString(Direction ));
         sw.WriteLine(string.Join("\r\n", ListDouble ));
         sw.Close(); sw.Dispose();
      }
 if (Direction>0)
 {
 Levels[0].Level = ListDouble[0];
 }
 
   }//off if (CurrentIndex == MaxIndex)
   
}

Автоматизированная торгавля по данному индикатору оказалась невозможна по причине описанной выше