Non per gli sviluppatori di MT! Con cosa sostituire INIT_PARAMETERS_INCORRECT? - pagina 5

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

Ora la sostanza. Ho creato un file con catene legittime. Come lo uso adesso? Sospetto che dovrebbe essere attraverso onTester, cornici... Ho guardato la documentazione, ma qualcosa non quadra. Non riesco a capire come affrontarlo.

Sto pensando di leggerlo in un array e prenderne i dati...

Penso che questo problema si risolva meglio analiticamente: bisogna generare una catena al volo, conoscendo il suo indice. Google "Combinatorics". Sembra essere risolto tramite il triangolo di Pascal. Almeno ho risolto questo problema per la ricerca di combinazioni, penso che ci sarà qualcosa di simile per i piazzamenti.

In generale, non mi è molto chiaro lo scopo del tuo problema: perché le funzioni non possono essere ripetute nella catena?

 
Alexey Navoykov:

In generale, non mi è molto chiaro lo scopo del tuo compito: perché le funzioni non possono essere ripetute in una catena?

Beh, se è così:

  • 11
  • 22

allora perché?

E se è così

  • 121
allora il totale sarebbe come 21. E una catena di 21 ripeterebbe questo risultato. Duplicazione, tempo supplementare per, in linea di principio, corse inutili...

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

Se questo è il caso:

  • 11
  • 22

allora qual è il punto?

E se è così

  • 121
allora il totale sarebbe come 21. E una catena di 21 ripeterebbe questo risultato. Duplicazione, tempo supplementare per, in linea di principio, corse inutili...

Pensavo che l'elaborazione delle funzioni fosse sequenziale, cioè, il risultato del calcolo della prima funzione viene passato all'input della seconda funzione, ecc. E si scopre che tutto funziona indipendentemente? Allora non è nemmeno chiaro cosa si sta ottimizzando lì.

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

È stato creato un file con le catene legittime. Come lo uso adesso? Ho il sospetto che tu debba usare onTester, frames...

Le cornici non c'entrano niente. Usate o tester_file o COMMON. Ecco un esempio di lavoro.

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

Non si tratta di architettura. Si tratta dell'insieme delle funzioni e di come vengono applicate.

Date maggiori informazioni sul ruolo di queste funzioni nel vostro programma (questa è l'architettura in questione).

 

Funzioni per definire le condizioni di ingresso al mercato.

Realizza catene di lettura da un file per numero di voce. Genetica iniziata. Sembra funzionare e non impreca.

L'unica domanda è: le catene non sono sistematizzate in alcun modo e la genetica troverà la variante migliore? Non li guarda tutti. Non dovremmo iniziare ordinando il file risultante? Come fare?

 

Ho ordinato un file di testo. Ora devo leggere la stringa con la catena, romperla in componenti e riempire l'array.

Ma quando si compila, genera immediatamente un avvertimento, e non capisco perché...

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

All'avvio l'errorearray out of range

Contenuto del file di testo:

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

Rielaborato:

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

Ma la domanda è: le catene non sono sistematizzate in alcun modo, la genetica troverà l'opzione migliore? Non guarda tutte le varianti. Non dovremmo iniziare con l'ordinare il file? Come facciamo?

Certo che no. Bisogna prima capire l'algoritmo genetico, capire cosa sono i "geni".

Il tuo approccio, espresso nel primo post ("Io, come utente, voglio ottenere un risultato, e non mi interessa come funziona") è assolutamente sbagliato in questo caso.

 
Alexey Navoykov:

Il tuo approccio, come detto nel primo post ("Io, come utente, voglio risultati, e non me ne frega niente di come funziona") è completamente sbagliato in questo caso.

Questo non è il caso. finché non c'è una documentazione chiara e un tutorial di MK sulla loro genetica, è una presa in giro richiedere all'utente una profonda conoscenza della genetica. ci può essere un numero enorme di implementazioni, quindi anche una profonda conoscenza della genetica non significa un'ottimizzazione efficace garantita