Librerie: Biblioteca che implementa la logica fuzzy - pagina 2

 

Se qualcuno ha utilizzato la libreria in MT4, mi dica per favore che estensione deve avere il file FCL e dove inserirlo.

Hoscritto un indicatore. La sequenza è quella descritta nell'articolo.

1. creare un modello (nessun errore)

IDm=ffll_new_model(); // creare il modello restituisce l'indice del modello
if(IDm<0){
string txt=ffll_get_msg_textA(IDm); // ottenere il messaggio di errore.
Alert("No model created "+txt);return(0);}

2.Caricare il file con il programma (dà un errore). Il file si trova nella directory \{Esperto\File . Ho provato con l'estensione .fcl .txt.

h=ffll_load_fcl_file(IDm, "Histo.txt"); // caricare il programma del linguaggio di modellazione fuzzy
if(h<0){
txt=ffll_get_msg_textA(IDm); // ottenere il messaggio di errore.
Alert("File del programma non caricato "+txt);return(0);}

3.Creare una figlia.

ID1=ffll_new_child(IDm); // crea un modello figlio per il modello dato restituisce l'indice del modello
if(ID1<0){
txt=ffll_get_msg_textA(IDm); // riceve un messaggio di errore.
Alert("Nessuna figlia creata "+txt);return(0);}

4.Alimentare i dati di input pezzo per pezzo. Cioè.

IN=ffll_set_value(IDm,ID1,0,X); // imposta il valore della prima variabile di input
IN=ffll_set_value(IDm,ID1,1,Y); // imposta il valore della seconda variabile di input

ecc.

5. Ottenere l'uscita.

Res=ffll_get_output_value(IDm,ID1); // ottenere il valore della variabile di uscita.

Condividete la vostra esperienza.

 

Problema simile in MT5. Non apre il file. Esempio di codice:

#include <FuzzyLogic\Flc.mqh>
#property tester_file "model.fcl"

int OnInit()
{   
    string filename = "model.fcl";
    // Считываю строку из файла и убеждаюсь, что его можно открыть.
    int filehandle = FileOpen(filename,FILE_READ|FILE_ANSI);
    if(filehandle < 0)
    {
        Print("Error code ",GetLastError());
        Print(filename);
    }
    else
    {
        Print("Open success");
        Print(FileReadString(filehandle));   
        FileClose(filehandle);
    }
    
    // FFCL
    int model = ffll_new_model();
    if(model < 0)
    {
        Print("Ошибка создания модели!");
    }
    int ret_val = ffll_load_fcl_file(model,filename);
    if(ret_val < 0)
    {
        string txt = ffll_get_msg_textW(model);
        Print("Ошибка: " + txt);
    }
    ffll_close_model(model);
    return(0);
}

void OnDeinit(const int reason){}

void OnTick(){}

Ottengo il seguente output:

Ошибка: Error Opening File
FUNCTION_BLOCK
Open success

Perché genera un errore? Da quanto ho capito, il problema è nel passaggio di un parametro alla funzione ffll_load_fcl_file. (probabilmente qualcosa che riguarda le codifiche o la conversione dei tipi).

Una grande richiesta a coloro che hanno lavorato con questa libreria, per favore rispondete.

 

Potrebbe essere legato alla struttura del file .fcl/ Non ho trovato un programma per verificare se è corretto. Il link nel testo non funziona. Forse qualcuno che ha già affrontato questo rake, per favore mi risponda.

La libreria in linea di principio è molto interessante (e se anche funzionante). L'autore purtroppo intravisto e scomparso. Su domande non vuole rispondere. Non mistero comprensibile (o di occupazione).

TO: SergeyVP/ Il modello figlia non è stato creato e le variabili non sono stati inseriti. Quindi ho capito che hai controllato la possibilità di caricare?

Vogliamo scambiarci i programmi per il controllo?

 

Ci vorrà più tempo per gestire la libreria che per scrivere da soli tre funzioni elementari di logica fuzzy nel codice:

fussyOr(double a, double b)

   return  (MathMin(a, b));

}

fussyAnd(double a, double b)

   return  (MathMax(a, b));

}

fussyNot(double a)

   return  (1.0 - a);

}
 

Non solo. Funzioni accessorie, defuzzificazione, ecc. Non è più facile.

 
Potrebbe essere legato alla struttura del file .fcl

Non proprio. La funzione restituisce -1, il che significa che non trova il file. Ho pensato che il problema fosse nella libreria stessa, ho controllato in C++ con la dll - tutto funziona. Ho preso il codice e il modello dell'esempio sul sito(nei download dell'esempio). Per quanto riguarda la struttura del file fcl, se c'è un errore nella logica, il modello non verrà caricato e ci sarà qualcosa come un errore critico. Almeno in C++, se specificavo un modello con un errore esplicito, il programma si bloccava:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

TO: SergeyVP/ Non è stato creato alcun modello figlio e non sono state inserite variabili. Quindi mi sembra di capire che stavi testando la possibilità di caricare?

Sì, per ora solo il caricamento. Non ha senso creare un modello figlio se il modello non viene caricato.

Scambiamo i programmi per verificare?

Non controllo in alcun modo la correttezza del modello fcl. Creo il modello in MATLAB, ottengo il file fis. Poi converto fis in fcl usando il programma fuzzylite.

Ci vorrà più tempo per gestire la libreria che per scrivere da solo tre funzioni elementari di logica fuzzy nel codice:

Purtroppo sembra che le cose andranno così. Dovrò scriverlo io stesso.
 
SergeyVP:

Non esattamente. La funzione restituisce -1, il che significa che non trova il file. Ho pensato che il problema fosse nella libreria stessa, ho controllato in C++ con la dll - tutto funziona. Ho preso il codice e il modello dell'esempio sul sito(nei download dell'esempio). Per quanto riguarda la struttura del file fcl, se c'è un errore nella logica, il modello non verrà caricato e ci sarà qualcosa come un errore critico. Almeno in C++, se specificavo un modello con un errore esplicito, il programma si bloccava, emettendo:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

Sì, per ora solo caricamento. Non ha senso creare un figlio se il modello non viene caricato.

Non controllo in alcun modo la correttezza del modello fcl. Creo un modello in MATLAB, ottengo il file fis. Poi converto fis in fcl usando il programma fuzzylite.
Purtroppo, sembra che le cose andranno così. Dovrò scriverlo da solo.

Ho capito. Grazie.

"Il codice e il modello di esempio sono stati presi dall'esempio sul sito(nei download di esempio)".

Non capisco, da quale sito? Per favore, indicami.

Forse è più facile collegare MATLAB con MT4/MT5? Tutte le soluzioni sono già state offerte.

Probabilmente mi muoverò in questa direzione, se questa libreria non funziona.

 

Тут не понял, с какого сайта? Ткните плз.

Dal sito ufficiale della libreria - ffll.sourceforge.net.

Più precisamente: http://ffll.sourceforge.net/downloads.htm -> Scarica un'applicazione di esempio che utilizza FFLL.

C'è del codice C++ e un semplice modello fcl.

Forse è più facile collegare MATLAB con MT4/MT5? Soprattutto le soluzioni sono già state proposte.

Dove leggerlo?
 
SergeyVP:

Dal sito ufficiale della libreria - ffll.sourceforge.net.

Più precisamente: http://ffll.sourceforge.net/downloads.htm -> Scarica un'applicazione di esempio che utilizza FFLL.

C'è del codice C++ e un semplice modello fcl.

Dove leggerlo?
Qui. https://www.mql5.com/it/articles/44
 

Vorrei sentire il "capo del negozio di trasporti" che ha annunciato questo argomento e ha scritto che tutto ha funzionato meravigliosamente in MT4.

Il problema è che il file .fcl non viene caricato.

A proposito: la libreria non supporta completamente lo standard. Ci sono eccezioni, limitazioni, ecc. E l'output è costituito solo da insiemi di elementi singoli.