Pas pour les développeurs MT ! Par quoi remplacer INIT_PARAMETERS_INCORRECT ? - page 5

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

Maintenant, pour la substance. J'ai créé un fichier avec des chaînes légitimes. Comment puis-je l'utiliser maintenant ? Je pense que ça devrait passer par onTester, les cadres... J'ai regardé la documentation, mais quelque chose ne colle pas. Je ne sais pas comment m'y prendre.

Je pense le lire dans un tableau et en extraire des données...

Je pense que ce problème est mieux résolu de manière analytique. Vous devez générer une chaîne à la volée, en connaissant son index. Google "Combinatorics". Il semble être résolu par le triangle de Pascal. Au moins, j'ai résolu ce problème pour la recherche de combinaisons, je pense qu'il y aura quelque chose de similaire pour les placements.

En général, je ne comprends pas très bien l'objectif de votre problème. Pourquoi les fonctions ne peuvent-elles pas être répétées dans la chaîne ?

 
Alexey Navoykov:

En général, je ne comprends pas très bien l'objectif de votre tâche. Pourquoi les fonctions ne peuvent-elles pas être répétées en chaîne ?

Eh bien, si c'est le cas :

  • 11
  • 22

alors pourquoi ?

Et si c'est comme ça :

  • 121
alors le total serait de 21. Et une chaîne de 21 répéterait ce résultat. Duplication, temps supplémentaire pour, en principe, des courses inutiles...

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

Si c'est le cas :

  • 11
  • 22

alors quel est l'intérêt ?

Et si c'est comme ça :

  • 121
alors le total serait de 21. Et une chaîne de 21 répéterait ce résultat. Duplication, temps supplémentaire pour, en principe, des courses inutiles...

Je pensais que le traitement des fonctions était séquentiel, c'est-à-dire que le résultat du calcul de la première fonction est transmis à l'entrée de la deuxième fonction, etc. Et il s'avère que tout fonctionne indépendamment ? Dans ce cas, ce que vous optimisez là n'est pas clair.

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

Un fichier a été créé avec les chaînes légitimes. Comment puis-je l'utiliser maintenant ? Je pense que vous devez utiliser onTester, les cadres...

Les cadres n'ont rien à voir avec cela. Utilisez soit tester_file soit COMMON. Voici un exemple concret.

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

Il ne s'agit pas d'architecture. Il s'agit de l'ensemble des fonctions et de la manière dont elles sont appliquées.

Donnez plus d'informations sur le rôle de ces fonctions dans votre programme (il s'agit de l'architecture en question).

 

Fonctions permettant de définir les conditions d'entrée sur le marché.

Fait des chaînes de lecture à partir d'un fichier par numéro d'entrée. Début de la génétique. Il semble fonctionner et ne jure pas.

La seule question qui se pose est la suivante : les chaînes ne sont en aucune façon systématisées et la génétique trouvera-t-elle la meilleure variante ? Il ne les regarde pas tous. Ne devrions-nous pas commencer par trier le fichier résultant ? Comment faire ?

 

J'ai trié un fichier texte. Maintenant, je dois lire la chaîne avec la chaîne, la décomposer en composants et remplir le tableau.

Mais à la compilation, il génère immédiatement un avertissement, et je ne comprends pas pourquoi...

//+------------------------------------------------------------------+
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();
      }
   }
}
//+------------------------------------------------------------------+

Au démarrage, l'erreur "array out of range

Contenu du fichier texte :

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
...........
 

Retravaillé :

//+------------------------------------------------------------------+
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();
      }
   }
}
//+------------------------------------------------------------------+
 
Сергей Таболин:

Mais la question est la suivante : les chaînes ne sont pas systématisées de quelque manière que ce soit, la génétique trouvera-t-elle la meilleure option ? Il ne regarde pas toutes les variantes. Ne devrions-nous pas commencer par trier le dossier ? Comment faire ?

Bien sûr que non. Vous devez d'abord comprendre l'algorithme génétique, comprendre ce que sont les "gènes".

Votre approche, exprimée dans le premier message ("Moi, en tant qu'utilisateur, je veux obtenir un résultat, et je ne me soucie pas de savoir comment cela fonctionne") est absolument fausse dans ce cas.

 
Alexey Navoykov:

Votre approche, telle qu'elle est exposée dans le premier message ("En tant qu'utilisateur, je veux des résultats et je me fiche de la façon dont cela fonctionne") est totalement erronée dans ce cas.

Ce n'est pas le cas. tant qu'il n'y a pas de documentation claire et de tutoriel de MK sur leur génétique, il est ridicule d'exiger de l'utilisateur une connaissance approfondie de la génétique. il peut y avoir un grand nombre d'implémentations, donc même une connaissance approfondie de la génétique ne signifie pas une optimisation efficace garantie.