342 lines
28 KiB
MQL4
342 lines
28 KiB
MQL4
//+------------------------------------------------------------------+
|
|
//| Defines.mqh |
|
|
//| Copyright 2021, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2021, MetaQuotes Ltd."
|
|
#property link "https://www.mql5.com"
|
|
//+------------------------------------------------------------------+
|
|
//| Ресурсы |
|
|
//+------------------------------------------------------------------+
|
|
#resource "opencl_program.cl" as string cl_program
|
|
//+------------------------------------------------------------------+
|
|
//| Константы |
|
|
//+------------------------------------------------------------------+
|
|
#define defNeuronNet 0x8000
|
|
#define defArrayLayers 0x8001
|
|
#define defBufferDouble 0x8002
|
|
#define defActivation 0x8003
|
|
#define defNeuronBase 0x8010
|
|
#define defNeuronConv 0x8011
|
|
#define defNeuronProof 0x8012
|
|
#define defNeuronLSTM 0x8013
|
|
#define defNeuronAttention 0x8014
|
|
#define defNeuronMHAttention 0x8015
|
|
#define defNeuronGPT 0x8016
|
|
#define defNeuronDropout 0x8017
|
|
#define defNeuronBatchNorm 0x8018
|
|
//---
|
|
#define defFileName StringFormat("%s_%s_%s.nns",MQLInfoString(MQL_PROGRAM_NAME),_Symbol,StringSubstr(EnumToString(_Period),7))
|
|
//+------------------------------------------------------------------+
|
|
//| OpenCL кернелы |
|
|
//+------------------------------------------------------------------+
|
|
#define def_k_PerceptronFeedForward 0
|
|
#define def_k_Normalize 1
|
|
#define def_k_CalcOutputGradient 2
|
|
#define def_k_DeActivateGradient 3
|
|
#define def_k_CalcHiddenGradient 4
|
|
#define def_k_CalcDeltaWeights 5
|
|
#define def_k_SGDUpdate 6
|
|
#define def_k_MomentumUpdate 7
|
|
#define def_k_AdaGradUpdate 8
|
|
#define def_k_RMSPropUpdate 9
|
|
#define def_k_AdaDeltaUpdate 10
|
|
#define def_k_AdamUpdate 11
|
|
#define def_k_ProofFeedForward 12
|
|
#define def_k_ProofHiddenGradients 13
|
|
#define def_k_ConvolutionFeedForward 14
|
|
#define def_k_ConvolutionHiddenGradients 15
|
|
#define def_k_ConvolutionDeltaWeights 16
|
|
#define def_k_LSTMFeedForward 17
|
|
#define def_k_LSTMHiddenGradients 18
|
|
#define def_k_AttentionFeedForward 19
|
|
#define def_k_AttentionScoreGradients 20
|
|
#define def_k_AttentionHiddenGradients 21
|
|
#define def_k_GPTFeedForward 22
|
|
#define def_k_GPTScoreGradients 23
|
|
#define def_k_GPTHiddenGradients 24
|
|
#define def_k_BatchNormFeedForward 25
|
|
#define def_k_BatchNormCalcHiddenGradient 26
|
|
#define def_k_BatchNormCalcDeltaWeights 27
|
|
#define def_k_MaskMult 28
|
|
//+------------------------------------------------------------------+
|
|
//| OpenCL параметры |
|
|
//+------------------------------------------------------------------+
|
|
//--- Прямой проход перцептрона
|
|
#define def_pff_inputs 0
|
|
#define def_pff_weights 1
|
|
#define def_pff_sums 2
|
|
#define def_pff_outputs 3
|
|
#define def_pff_inputs_total 4
|
|
#define def_pff_activation 5
|
|
#define def_pff_act_param_a 6
|
|
#define def_pff_act_param_b 7
|
|
//--- Нормализация
|
|
#define def_norm_inputs 0
|
|
#define def_norm_outputs 1
|
|
#define def_norm_inputs_total 2
|
|
#define def_norm_const_value 3
|
|
//--- Определение градиента ошибки слоя результатов
|
|
#define def_outgr_target 0
|
|
#define def_outgr_outputs 1
|
|
#define def_outgr_gradients 2
|
|
#define def_outgr_outputs_total 3
|
|
//--- Корректировка гралиента на производную функции активации
|
|
#define def_deactgr_sums 0
|
|
#define def_deactgr_outputs 1
|
|
#define def_deactgr_gradients 2
|
|
#define def_deactgr_outputs_total 3
|
|
#define def_deactgr_activation 4
|
|
#define def_deactgr_act_param_a 5
|
|
#define def_deactgr_act_param_b 6
|
|
//--- Определение градиента ошибки скрытого слоя
|
|
#define def_hidgr_gradient_inputs 0
|
|
#define def_hidgr_weights 1
|
|
#define def_hidgr_gradients 2
|
|
#define def_hidgr_outputs_total 3
|
|
//--- Определение градиента ошибки на уровне матрицы весов
|
|
#define def_delt_inputs 0
|
|
#define def_delt_delta_weights 1
|
|
#define def_delt_gradients 2
|
|
#define def_delt_inputs_total 3
|
|
//--- Оптимизация параметров стохастическим гралиентным спуском
|
|
#define def_sgd_delta_weights 0
|
|
#define def_sgd_weights 1
|
|
#define def_sgd_total 2
|
|
#define def_sgd_batch_size 3
|
|
#define def_sgd_learningRate 4
|
|
#define def_sgd_Lambda1 5
|
|
#define def_sgd_Lambda2 6
|
|
//--- Оптимизация параметров методом моментов
|
|
#define def_moment_delta_weights 0
|
|
#define def_moment_weights 1
|
|
#define def_moment_momentum 2
|
|
#define def_moment_total 3
|
|
#define def_moment_batch_size 4
|
|
#define def_moment_learningRate 5
|
|
#define def_moment_beta 6
|
|
#define def_moment_Lambda1 7
|
|
#define def_moment_Lambda2 8
|
|
//--- Оптимизация параметров методом AdaGrad
|
|
#define def_adagrad_delta_weights 0
|
|
#define def_adagrad_weights 1
|
|
#define def_adagrad_momentum 2
|
|
#define def_adagrad_total 3
|
|
#define def_adagrad_batch_size 4
|
|
#define def_adagrad_learningRate 5
|
|
#define def_adagrad_Lambda1 6
|
|
#define def_adagrad_Lambda2 7
|
|
//--- Оптимизация параметров методом RMSProp
|
|
#define def_rms_delta_weights 0
|
|
#define def_rms_weights 1
|
|
#define def_rms_momentum 2
|
|
#define def_rms_total 3
|
|
#define def_rms_batch_size 4
|
|
#define def_rms_learningRate 5
|
|
#define def_rms_beta 6
|
|
#define def_rms_Lambda1 7
|
|
#define def_rms_Lambda2 8
|
|
//--- Оптимизация параметров методом AdaDelta
|
|
#define def_adadelt_delta_weights 0
|
|
#define def_adadelt_weights 1
|
|
#define def_adadelt_momentumW 2
|
|
#define def_adadelt_momentumG 3
|
|
#define def_adadelt_total 4
|
|
#define def_adadelt_batch_size 5
|
|
#define def_adadelt_beta1 6
|
|
#define def_adadelt_beta2 7
|
|
#define def_adadelt_Lambda1 8
|
|
#define def_adadelt_Lambda2 9
|
|
//--- Оптимизация параметров методом Adam
|
|
#define def_adam_delta_weights 0
|
|
#define def_adam_weights 1
|
|
#define def_adam_momentumM 2
|
|
#define def_adam_momentumV 3
|
|
#define def_adam_total 4
|
|
#define def_adam_batch_size 5
|
|
#define def_adam_learningRate 6
|
|
#define def_adam_beta1 7
|
|
#define def_adam_beta2 8
|
|
#define def_adam_Lambda1 9
|
|
#define def_adam_Lambda2 10
|
|
//--- Прямой проход подвыборочного слоя
|
|
#define def_prff_inputs 0
|
|
#define def_prff_outputs 1
|
|
#define def_prff_inputs_total 2
|
|
#define def_prff_input_neurons 3
|
|
#define def_prff_window 4
|
|
#define def_prff_step 5
|
|
#define def_prff_window_out 6
|
|
#define def_prff_activation 7
|
|
//--- Распределение градиента через подвыборочный слой
|
|
#define def_prhgr_inputs 0
|
|
#define def_prhgr_gradient_inputs 1
|
|
#define def_prhgr_outputs 2
|
|
#define def_prhgr_gradients 3
|
|
#define def_prhgr_inputs_total 4
|
|
#define def_prhgr_outputs_total 5
|
|
#define def_prhgr_window 6
|
|
#define def_prhgr_step 7
|
|
#define def_prhgr_window_out 8
|
|
#define def_prhgr_neurons 9
|
|
#define def_prhgr_activation 10
|
|
//--- Прямой проход свёрточного слоя
|
|
#define def_cff_inputs 0
|
|
#define def_cff_weights 1
|
|
#define def_cff_sums 2
|
|
#define def_cff_outputs 3
|
|
#define def_cff_inputs_total 4
|
|
#define def_cff_window 5
|
|
#define def_cff_step 6
|
|
#define def_cff_window_out 7
|
|
#define def_cff_activation 8
|
|
#define def_cff_act_param_a 9
|
|
#define def_cff_act_param_b 10
|
|
#define def_cff_transposed_out 11
|
|
//--- Распределение градиента через свёрточный слой
|
|
#define def_convhgr_gradient_inputs 0
|
|
#define def_convhgr_weights 1
|
|
#define def_convhgr_gradients 2
|
|
#define def_convhgr_outputs_total 3
|
|
#define def_convhgr_window 4
|
|
#define def_convhgr_step 5
|
|
#define def_convhgr_window_out 6
|
|
#define def_convhgr_neurons 7
|
|
#define def_convhgr_transposed_out 8
|
|
//--- Распределение градиента на матрицу весов свёрточного слоя
|
|
#define def_convdelt_inputs 0
|
|
#define def_convdelt_delta_weights 1
|
|
#define def_convdelt_gradients 2
|
|
#define def_convdelt_inputs_total 3
|
|
#define def_convdelt_step 4
|
|
#define def_convdelt_neurons 5
|
|
#define def_convdelt_transposed_out 6
|
|
//--- Прямой проход LSTM блока
|
|
#define def_lstmff_forgetgate 0
|
|
#define def_lstmff_inputgate 1
|
|
#define def_lstmff_outputgate 2
|
|
#define def_lstmff_newcontent 3
|
|
#define def_lstmff_memory 4
|
|
#define def_lstmff_hiddenstate 5
|
|
#define def_lstmff_outputs_total 6
|
|
//--- Распределение гралиента через LSTM блок
|
|
#define def_lstmhgr_outputs 0
|
|
#define def_lstmhgr_gradients 1
|
|
#define def_lstmhgr_inputgate 2
|
|
#define def_lstmhgr_outputgate 3
|
|
#define def_lstmhgr_newcontent 4
|
|
#define def_lstmhgr_memory 5
|
|
#define def_lstmhgr_fg_gradients 6
|
|
#define def_lstmhgr_ig_gradients 7
|
|
#define def_lstmhgr_og_gradients 8
|
|
#define def_lstmhgr_nc_gradients 9
|
|
#define def_lstmhgr_outputs_total 10
|
|
//--- Прямой проход блока внимания
|
|
#define def_attff_querys 0
|
|
#define def_attff_keys 1
|
|
#define def_attff_scores 2
|
|
#define def_attff_values 3
|
|
#define def_attff_outputs 4
|
|
#define def_attff_window 5
|
|
#define def_attff_key_size 6
|
|
#define def_attff_mask 7
|
|
//--- Определение градиента на матрице коэффициентов зависимости блока внимания
|
|
#define def_attscr_scores 0
|
|
#define def_attscr_scores_grad 1
|
|
#define def_attscr_values 2
|
|
#define def_attscr_values_grad 3
|
|
#define def_attscr_outputs_grad 4
|
|
#define def_attscr_scores_temp 5
|
|
#define def_attscr_window 6
|
|
//--- Распределение градиента через блок внимания
|
|
#define def_atthgr_querys 0
|
|
#define def_atthgr_querys_grad 1
|
|
#define def_atthgr_keys 2
|
|
#define def_atthgr_keys_grad 3
|
|
#define def_atthgr_scores_grad 4
|
|
#define def_atthgr_key_size 5
|
|
//--- Прямой проход GPT
|
|
#define def_gptff_querys 0
|
|
#define def_gptff_keys 1
|
|
#define def_gptff_scores 2
|
|
#define def_gptff_values 3
|
|
#define def_gptff_outputs 4
|
|
#define def_gptff_key_size 5
|
|
#define def_gptff_units 6
|
|
//--- Определение градиента на матрице коэффициентов зависимости GPT
|
|
#define def_gptscr_scores 0
|
|
#define def_gptscr_scores_grad 1
|
|
#define def_gptscr_values 2
|
|
#define def_gptscr_values_grad 3
|
|
#define def_gptscr_outputs_grad 4
|
|
#define def_gptscr_scores_temp 5
|
|
#define def_gptscr_window 6
|
|
#define def_gptscr_units 7
|
|
#define def_gptscr_current 8
|
|
//--- Распределение градиента через GPT
|
|
#define def_gpthgr_querys 0
|
|
#define def_gpthgr_querys_grad 1
|
|
#define def_gpthgr_keys 2
|
|
#define def_gpthgr_scores_grad 3
|
|
#define def_gpthgr_key_size 4
|
|
#define def_gpthgr_units 5
|
|
#define def_gpthgr_current 6
|
|
//--- Прямой проход пакетной нормалитзации
|
|
#define def_bnff_inputs 0
|
|
#define def_bnff_options 1
|
|
#define def_bnff_weights 2
|
|
#define def_bnff_outputs 3
|
|
#define def_bnff_batch 4
|
|
#define def_bnff_total 5
|
|
//--- Распределение градиента через слой пакетной нормализации
|
|
#define def_bnhgr_options 0
|
|
#define def_bnhgr_gradient 1
|
|
#define def_bnhgr_inputs 2
|
|
#define def_bnhgr_gradient_inputs 3
|
|
#define def_bnhgr_weights 4
|
|
#define def_bnhgr_batch 5
|
|
#define def_bnhgr_total 6
|
|
//--- Распределение градиента до оптимизируемых параметров пакетной нормализации
|
|
#define def_bndelt_options 0
|
|
#define def_bndelt_delta_weights 1
|
|
#define def_bndelt_gradient 2
|
|
//--- Маскирование данных
|
|
#define def_mask_inputs 0
|
|
#define def_mask_mask 1
|
|
#define def_mask_outputs 2
|
|
#define def_mask_total 3
|
|
//+------------------------------------------------------------------+
|
|
//| Перечисления |
|
|
//+------------------------------------------------------------------+
|
|
// Функции активации
|
|
enum ENUM_ACTIVATION
|
|
{
|
|
ACT_None = -1,
|
|
ACT_LINE,
|
|
ACT_SIGMOID,
|
|
ACT_TANH,
|
|
ACT_LReLU,
|
|
ACT_SOFTMAX,
|
|
ACT_SWISH,
|
|
ACT_AVERAGE_POOLING,
|
|
ACT_MAX_POOLING
|
|
};
|
|
//--- Функции потерь
|
|
enum ENUM_LOSS_FUNCTION
|
|
{
|
|
ENUM_LOSS_MAD,
|
|
ENUM_LOSS_MSE,
|
|
ENUM_LOSS_LogLoss
|
|
};
|
|
//--- Методы оптимизации
|
|
enum ENUM_OPTIMIZATION
|
|
{
|
|
None = -1,
|
|
SGD,
|
|
MOMENTUM,
|
|
AdaGrad,
|
|
RMSProp,
|
|
AdaDelta,
|
|
Adam
|
|
};
|
|
//+------------------------------------------------------------------+
|