Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ? - страница 5

 
Сергей Таболин:

Теперь по существу. Файл с лигитимными цепочками создал. Как теперь его использовать? Подозреваю, что надо через onTester, фреймы... Документацию смотрел, но что-то не складывается. Не могу разобраться как с этим бороться.

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

Полагаю, эту задачу лучше решать аналитически.  Вам нужно на ходу сгенерировать цепочку, зная её индекс.  Погуглите "Комбинаторика. Размещения".   Там через треугольник Паскаля вроде должно вычисляться.  По крайней мере я так решал задачу для поиска сочетаний, думаю для размещений будет что-то аналогичное.

А вообще, мне не очень ясна цель вашей задачи.  Почему нельзя, чтобы функции повторялись в цепочке?

 
Alexey Navoykov:

А вообще, мне не очень ясна цель вашей задачи.  Почему нельзя, чтобы функции повторялись в цепочке?

Ну если так:

  • 11
  • 22

то, а нафига?

А если так:

  • 121
то ведь итог будет как 21. А цепочка 21 повторит этот результат. Дублирование, лишнее время на, в принципе, бесполезные прогоны...

 
Сергей Таболин:

Ну если так:

  • 11
  • 22

то, а нафига?

А если так:

  • 121
то ведь итог будет как 21. А цепочка 21 повторит этот результат. Дублирование, лишнее время на, в принципе, бесполезные прогоны...

Я думал, у вас обработка функций идёт последовательно, т.е. результат вычисления первой функции передаётся на вход второй функции и т.д.   А тут получается, что всё работает независимо чтоль?  Тогда вообще непонятно, что вы там оптимизируете.

 
Сергей Таболин:

Файл с лигитимными цепочками создал. Как теперь его использовать? Подозреваю, что надо через onTester, фреймы...

Фреймы здесь никаким боком. Передавайте либо через tester_file, либо через COMMON. Рабочий пример здесь.

 
Сергей Таболин:

Да дело не в архитектуре. Дело в наборе функций и порядка их применения.

Дайте больше информации о роли этих функций в вашей программе (это и есть архитектура, о которой идет речь).

 

Функции определения условий входа в рынок.

Сделал считывание цепочек из файла по номеру записи. Запустил генетику. Вроде работает и не матерится.

Только вот вопрос: цепочки ведь никак не систематизированы, найдёт ли генетика лучший вариант? Она же все варианты не просматривает. Может стоит для начала отсортировать полученный файл? Как это сделать? 

 

Отсортировал текстовый файл. Теперь надо считать строку с цепочкой, разбить её на состовляющие и заполнить массив.

Но при компиляции сразу выдаёт предупреждение, а с какого бодуна - не пойму...

//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- считать цепочки из файла
   int chain[6];
   string   filenameF   = "KR\\func_KrL_sort.txt";
   string   filename    = "KR\\func_KrL_sort.bin";
   string   str, str_chain[];
   if(FileIsExist(filenameF,FILE_COMMON))
   {
      int filehandleF = FileOpen(filenameF,FILE_READ|FILE_TXT|FILE_COMMON);
      if(filehandleF != INVALID_HANDLE)
      {
         for(int f = 0; f <= 1953; f++)
         {
            ArrayInitialize(chain,0);
            FileReadString(filehandleF,str); // implicit conversion from 'string' to 'number'
            Print(str);
            StringSplit(str,",",str_chain);  // implicit conversion from 'string' to 'number'
            for(int i = 0; i <= 5; i++)
            {
               ArrayInitialize(chain,0);
               chain[i] = (int)StringToInteger(str_chain[i]); // array out of range
               Print(string(chain[0])+","+string(chain[1])+","+string(chain[2])+","+string(chain[3])+","+string(chain[4])+","+string(chain[5]));
            }
         }
         
         FileClose(filehandleF);
         ExpertRemove();
      }
   }
}
//+------------------------------------------------------------------+

А при запуске ошибка array out of range

Содержание текстового файла:

1,0,0,0,0,0
1,2,0,0,0,0
1,2,3,0,0,0
1,2,3,4,0,0
1,2,3,4,5,0
1,2,3,4,5,6
1,2,3,4,6,0
1,2,3,4,6,5
1,2,3,5,0,0
1,2,3,5,4,0
...........
 

Переделал:

//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- считать цепочки из файла
   int chain[6];
   string   filenameF   = "KR\\func_KrL_sort.txt";
   string   filename    = "KR\\func_KrL_sort.bin";
   string   str, str_chain;
   if(FileIsExist(filenameF,FILE_COMMON))
   {
      int filehandleF = FileOpen(filenameF,FILE_READ|FILE_TXT|FILE_COMMON);
      if(filehandleF != INVALID_HANDLE)
      {
         for(int f = 0; f < 1953; f++)
         {
            ArrayInitialize(chain,0);
            str = FileReadString(filehandleF);
            //Print(str); // этот рисует всё как надо
            for(int i = 0, p = 0; i <= 5; i++, p += 2)
            {
               str_chain   = StringSubstr(str,p,1);
               chain[i]    = (int)StringToInteger(str_chain);
            }
         }
         
         FileClose(filehandleF);
         ExpertRemove();
      }
   }
}
//+------------------------------------------------------------------+
 
Сергей Таболин:

Только вот вопрос: цепочки ведь никак не систематизированы, найдёт ли генетика лучший вариант? Она же все варианты не просматривает. Может стоит для начала отсортировать полученный файл? Как это сделать? 

Конечно не найдёт. Как ты его не сортируй.  Вам надо для начала разобраться в сути генетического алгоритма, понять что такое "гены".

Ваш подход, озвученный в первом посте ("Я, как пользователь, хочу получить результат, а как оно там работает - мне глубоко фиолетово") абсолютно ошибочен в данном случае.

 
Alexey Navoykov:

Ваш подход, озвученный в первом посте ("Я, как пользователь, хочу получить результат, а как оно там работает - мне глубоко фиолетово") абсолютно ошибочен в данном случае.

а вот ничего подобного. пока нет четкой документации и туториала от МК по их генетике, требовать от пользователя глубоких знаний по генетике является издевательством. мало того, реализаций может быть огромное множество, поэтому даже глубокие знания по генетике не означают гарантированно эффективной оптимизации