Tento dokument je zcela nová technická dokumentace pro LSTM DLL v2.1.0 (kernel.cu) se zaměřením na:
- asynchronní trénování (
DN_TrainAsync), - reporting průběhu tréninku (
DN_GetProgress*,DN_GetProgressAll), - bezpečné řízení životního cyklu modelu v prostředí MetaTrader 5 + MQL5.
Verze 2.1.0 sjednocuje robustní GPU trénink, správu stavu modelu a telemetrii do jedné DLL API vrstvy.
Nejdůležitější body:
- Async trénování na pozadí bez blokování hlavní MQL5 logiky (
DN_TrainAsync). - Jemnozrnný progress reporting (epocha, minibatch, ETA, elapsed, best MSE, grad norm).
- Hromadné čtení telemetrie jedním voláním (
DN_GetProgressAll) pro nižší overhead. - Více současných modelů přes handle architekturu (
DN_Create/DN_Free). - Snapshot/restore vah pro rollback experimentů (
DN_SnapshotWeights,DN_RestoreWeights). - Serializace stavu pro persistenci (
DN_SaveState,DN_GetState,DN_LoadState). - Centralizované chybové hlášení (
DN_GetError) použitelné v každé fázi pipeline.
Každý model je reprezentován integer handlem. Můžete provozovat více handle instancí paralelně (např. různé symboly/timeframy).
Doporučený lifecycle:
DN_CreateDN_SetSequenceLengthDN_SetMiniBatchSizeDN_AddLayerEx(opakovaně pro stack LSTM vrstev)DN_SetOutputDimDN_LoadBatch- (volitelně)
DN_SnapshotWeights DN_TrainAsyncneboDN_Train- polling přes
DN_GetTrainingStatus+DN_GetProgressAll DN_GetTrainingResultDN_PredictBatchDN_Free
Všechny exporty používají
__stdcall.Typ
MQL_BOOL:1 = success,0 = fail.
int DN_Create();
void DN_Free(int h);DN_Createvrací kladný handle, při chybě<= 0.DN_Freevždy volejte při ukončení práce s modelem.
MQL_BOOL DN_SetSequenceLength(int h, int seq_len);
MQL_BOOL DN_SetMiniBatchSize(int h, int mbs);
MQL_BOOL DN_AddLayerEx(int h, int in, int out, int act, int ln, double drop);
MQL_BOOL DN_AddGRULayer(int h, int in, int out, double drop);
MQL_BOOL DN_AddRNNLayer(int h, int in, int out, double drop);
MQL_BOOL DN_SetGradClip(int h, double clip);
MQL_BOOL DN_SetOutputDim(int h, int out_dim);Konfigurační zásady:
seq_len > 0mbs > 0dropv intervalu<0, 1)out_dimmusí odpovídat cílovému rozměru vT
Pro čisté LSTM workflow používejte primárně
DN_AddLayerEx.
MQL_BOOL DN_LoadBatch(int h, const double* X, const double* T,
int batch, int in, int out, int l);
MQL_BOOL DN_PredictBatch(int h, const double* X,
int batch, int in, int l, double* Y);Datový kontrakt:
in = seq_len * feature_dimlen(X) = batch * inlen(T) = batch * outlen(Y) = batch * out_dim- musí platit
in % seq_len == 0
MQL_BOOL DN_Train(int h, int epochs, double target_mse, double lr, double wd);
MQL_BOOL DN_TrainAsync(int h, int epochs, double target_mse, double lr, double wd);
int DN_GetTrainingStatus(int h);
void DN_GetTrainingResult(int h, double* out_mse, int* out_epochs);
void DN_StopTraining(int h);Použití:
DN_Train= blokující (synchronní) varianta.DN_TrainAsync= neblokující varianta na pozadí.DN_StopTraining= bezpečný požadavek na ukončení async běhu.
int DN_GetProgressEpoch(int h);
int DN_GetProgressTotalEpochs(int h);
int DN_GetProgressMiniBatch(int h);
int DN_GetProgressTotalMiniBatches(int h);
double DN_GetProgressLR(int h);
double DN_GetProgressMSE(int h);
double DN_GetProgressBestMSE(int h);
double DN_GetProgressGradNorm(int h);
int DN_GetProgressTotalSteps(int h);
double DN_GetProgressPercent(int h);
double DN_GetProgressElapsedSec(int h);
double DN_GetProgressETASec(int h);
MQL_BOOL DN_GetProgressAll(
int h,
int* epoch, int* total_epochs,
int* minibatch, int* total_minibatches,
double* mse, double* best_mse,
double* lr, double* grad_norm,
double* percent, double* elapsed_sec, double* eta_sec
);Doporučení pro produkční MT5:
- polling dělejte v
OnTimer(např. 100–500 ms), ne v každém ticku, - preferujte
DN_GetProgressAllpřed sérií jednotlivých getterů, - ETA je orientační, ale velmi užitečná pro UI/UX tréninku.
int DN_GetLayerCount(int h);
double DN_GetLayerWeightNorm(int h, int l);
double DN_GetGradNorm(int h);
int DN_SaveState(int h);
MQL_BOOL DN_GetState(int h, char* buf, int max_len);
MQL_BOOL DN_LoadState(int h, const char* buf);
MQL_BOOL DN_SnapshotWeights(int h);
MQL_BOOL DN_RestoreWeights(int h);
void DN_GetError(short* buf, int len);DN_SaveState+DN_GetState+DN_LoadState= serializace modelu.DN_SnapshotWeights/DN_RestoreWeights= rychlý rollback vah mezi experimenty.- Při libovolném
MQL_FALSEvždy ihned čtěteDN_GetError.
DN_GetTrainingStatus vrací:
0→TS_IDLE1→TS_TRAINING2→TS_COMPLETED-1→TS_ERROR
Bezpečný polling pattern:
int st = DN_GetTrainingStatus(h);
while(st == 1) {
// čekání řízené timerem / Sleep
st = DN_GetTrainingStatus(h);
}
if(st == 2) {
double mse = 0.0;
int epochs_done = 0;
DN_GetTrainingResult(h, &mse, &epochs_done);
}- vytvořte handle,
- nakonfigurujte topologii,
- načtěte batch,
- spusťte
DN_TrainAsync.
- čtěte
DN_GetTrainingStatus, - čtěte
DN_GetProgressAll, - aktualizujte panel / Comment / log,
- při
TS_COMPLETEDnačtěteDN_GetTrainingResult.
- volejte
DN_StopTraining(pokud ještě běží), - následně
DN_Free.
Parametry DN_Train*:
epochs– max počet epoch,target_mse– cílová chyba pro early stop,lr– learning rate,wd– weight decay.
Praktická doporučení:
- začněte konzervativně (
lrnižší, rozumnýepochs), - sledujte
best_mse+grad_norm(detekce nestability), - při explozivních gradientech nastavte
DN_SetGradClip.
- Otevřete
MQL5GPULibrary_LSTM.sln. - Ověřte kompatibilní CUDA Toolkit.
- Build:
Release | x64. - DLL zkopírujte do
MQL5\Librariesv datové složce MT5.
- Umístěte DLL do
MQL5\Libraries. - Umístěte indikátor z
MQL5/IndicatorsdoMQL5\Indicators. - Zkompilujte v MetaEditoru.
- V MT5 povolte DLL imports.
kernel.cu— implementace LSTM DLL v2.1.0.MQL5/Indicators/— integrační MQL5 indikátory a příklady.docs/— statická dokumentační aplikace.MQL5GPULibrary_LSTM.sln,MQL5GPULibrary_LSTM.vcxproj— build konfigurace.
- Po každé chybě (
MQL_FALSE) čtěteDN_GetError. - Ověřte správné dimenze
X/T/Yaseq_len. - Ujistěte se, že je dostupná CUDA kompatibilní GPU konfigurace.
- Při paralelních modelech striktně oddělte handle + data.
- Při dlouhých trénincích používejte snapshoty a průběžný progress polling.
MIT — viz LICENSE.txt.