L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 3243

 
fxsaber #:

Controllo del pattern su una MA standard, solo sui tick.

...

Un modello funzionante.

e ancora non è chiaro: come il segnale onnx entrerà in questo modello funzionante?

 
blef #:

e ancora non è chiaro: come onnx-signal entrerà in questo template funzionante?

Attraverso la vostra variante del corpo di questa funzione.

Ogni tick arriva all'input - l'output è una decisione ONNX sul segnale di trading.

Una variante del corpo di tale funzione è stata mostrata sopra. Nel caso di ONNX è collegato il proprio model.onnx.


Il modello EA rimane invariato.

 
fxsaber #:

Attraverso la sua variante corporea di questa funzione.


Ogni tick arriva all'ingresso - l'uscita è la decisione di ONNX sul segnale di trading.

La variante del corpo di tale funzione è mostrata sopra. Nel caso di ONNX, è collegato il proprio model.onnx.


Il modello EA rimane invariato.

Cioè, il corpo di questa funzione dovrebbe implementare le funzioni specificate nella Guida MQL5 in questa pagina - https://www.mql5.com/ru/docs/onnx?

Документация по MQL5: ONNX модели
Документация по MQL5: ONNX модели
  • www.mql5.com
ONNX модели - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
blef #:

Cioè il corpo di questa funzione dovrebbe implementare le funzioni specificate nella Guida MQL5 in questa pagina - https://www.mql5.com/ru/docs/onnx?

Tranne le prime tre, che sono responsabili della creazione e dell'eliminazione della sessione ONNX.
 
Capisco, grazie per il chiarimento - cercherò di fare qualcosa per il Ministero della Difesa.
 
blef #:

Cioè il corpo di questa funzione dovrebbe implementare le funzioni specificate nella Guida MQL5 in questa pagina - https://www.mql5.com/ru/docs/onnx?

È così.

// Торговый сигнал.
double SignalONNX( const MqlTick &Tick )
{
  struct ONNX
  {
  public:
    const long Handle;
    
    ONNX( const string FileName ) : Handle(::OnnxCreate(FileName, ONNX_DATA_TYPE_DOUBLE)) {}
    ~ONNX() { ::OnnxRelease(this.Handle); }
  } static const Model("model.onnx"); // Подключили модель с автоматическим отключением.
  
  OnnxRun(Model.Handle, ONNX_DATA_TYPE_DOUBLE, ...); // Прогоняем данные через модель, получаем результат.
  
  // .... Обрабатываем результат вычислений.
  
  return(0); // Возвращаем торговый сигнал.
}
 
fxsaber #:

È più o meno così.


Tutto sommato, va bene.
Ma perché il valore restituito dalla funzione è doppio?
 

Per qualche motivo continua a parlare di reti neurali.

Ma c'è un convertitore elencato qui

ONNXMLTools di Microsoft consente di convertire i modelli nel formato ONNX.

che è in grado di convertire i seguenti modelli

Conversione nel formato ONNX (ONNXMLTools)

ONNXMLTools consente di convertire i modelli di vari toolkit di apprendimento automatico nel formatoONNX.

Le istruzioni per l'installazione e l'uso sono disponibili nelrepository ONNXMLToolssu GitHub.

Supporto

Attualmente sono supportati i seguenti toolkit:

  • Keras( shell diconversione keras2onnx);
  • Tensorflow( shell di conversione tf2onnx);
  • scikit-learn( shell di conversione skl2onnx);
  • Apple Core ML;
  • Spark ML (modalità sperimentale);
  • LightGBM
  • libscm;
  • XGBoost;
  • H2O
  • CatBoost

Ci sono molte altre reti NON neurali rispetto alle reti neurali di questo elenco.

Документация по MQL5: ONNX модели
Документация по MQL5: ONNX модели
  • www.mql5.com
ONNX модели - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Andrey Dik #:

Tutto sommato, va bene.
ma perché il valore restituito dalla funzione è doppio?

Perché il modello finale potrebbe essere più difficile da elaborare per i segnali di trading ricevuti rispetto a quello originale.

Si doveva discutere del template. Passiamo.

 

In ONNX, i dati di input sono vettori e matrici.

Per la predizione di un modello già pronto, ci si può accontentare di queste caratteristiche (una matrice ha un solo tipo di dati, il che limita le opzioni del predittore), ma l'addestramento di un modello µl è impossibile: qualsiasi modello anche primitivo ha un numero molto maggiore di parametri di ingresso diversi.

Ad esempio, è impossibile inserire RF in una matrice:

randomForest( x, y=NULL, xtest=NULL, ytest=NULL,

ntree=500,

mtry=if (! is.null( y) && ! is.factor(y)) max( floor( ncol( x)/3), 1) else floor( sqrt( ncol( x)),

pesi=NULL,

replace=TRUE,

classwt=NULL,

cutoff,

strati,

sampsize = if ( replace) nrow( x) else ceiling(.632*nrow( x)),

nodesize = if (! is.null( y) && ! is.factor( y)) 5 else 1,

maxnodes = NULL,

importanza=FALSO,

localImp=FALSE,

nPerm=1,

prossimità,

oob.prox=prossimità,

norm.votes=TRUE,

do.trace=FALSE,

keep.forest=! is.null( y) && is.null( xtest), c

orr.bias=FALSE, keep.inbag=FALSE, ...)

Quindi, addestramento solo in python, test e altre gioie, e poi conversione per il caricamento in µl e verifica dell'EA da parte del tester. Non è chiaro come e dove preparare i predittori per il test in µl, se scrivendo il codice in µl, o rivolgendosi a python e ricavando da esso i predittori per la predizione...., e anche se fossero gli stessi su cui è stato addestrato il modello.