3. 入力データのセット

学習入力データセット処理として定義したmake_input_data()の実装方法を見ていきましょう。

void make_input_data()
{
      IZEL_open_x_train(handle); 

      double ma1 = iMA(NULL, 0, 5, 0, MODE_SMMA, PRICE_CLOSE, 0);
      double rsi1 = iRSI(NULL, 0, 5, PRICE_CLOSE, 1)/100;       
      double ac1 = iAC(NULL, 0, 1);    
      double ad1 = iAO(NULL, 0, 1);     
      double atr1 = iATR(NULL, 0, 5, 1);          
      double momentum1 = iMomentum(NULL, 0, 5, PRICE_CLOSE, 1)/100;           
      double wpr1 = iWPR(NULL, 0, 5, 1)/100;
                                       
      IZEL_append_x_train(handle, Open[1]-ma1);
      IZEL_append_x_train(handle, rsi1);                        
      IZEL_append_x_train(handle, ac1);
      IZEL_append_x_train(handle, ad1); 
      IZEL_append_x_train(handle, atr1);
      IZEL_append_x_train(handle, momentum1);
      IZEL_append_x_train(handle, wpr1);       
}

ここでは移動平均と価格との乖離、RSIなどの7つの指標を使うことにします。RSI, モメンタム, WPRは100で割ってありますがこれは正規化です。ディープラーニングでは学習精度を向上するためにデータを-1から1の範囲となるように正規化を行うことが一般的です。

この例では、いくつかのパラメータは厳密には-1から1の範囲に収まる保証がないものもあります。例えば移動平均と価格の乖離が1を超えることは起こり得ます。しかしながら15分足ではあまり起こり得ないケースであり、そこまで気にしなくても学習結果への悪影響はないので、ここでは厳密な正規化は行わずに説明を進めます。

IZEL_open_x_train()

学習データの入力データをセットするにはIZEL_open_x_train(), IZEL_append_x_train(), IZEL_close_x_train()の順で呼び出します。これで学習データの入力データ1サンプルをセットすることになります。N個の入力データサンプルをセットするにはこの処理をN回繰り返します。

IZEL_append_x_train

学習データの入力値をサンプルに追加します。1サンプルデータは複数のデータを含めるのが普通で、繰り返しこの関数を呼び出します。

※ただし、全てのサンプルデータ間で入力値のデータ長は全て同じ長さである必要があります。サンプルデータ間でデータ長が異なったセットを作成した場合は、学習開始時にエラーとなるので注意してください。

IZEL_close_x_train()

最後にIZEL_close_x_train() を呼ぶことでサンプルデータ1個の学習データの入力データとして定義されます。ただし、この時点ではこの関数を呼び出していません。この次に教師ラベルのセット方法について解説しますが、IZEL_close_c_train()はそちらで呼び出すことにします。理由の説明は後に譲るので、ここでは一旦そういうものだと思っておいてください。

学習データを増やしてみる

上の例では移動平均やRSIなどの指標についてはある程度の数を用意しました。予測においてどの指標が有効なのかがわからないので、わからないまま、ある程度たくさんの指標を学習させるというのがディープラーニングの基本的な考え方です。

ですが、それぞれの指標はそれぞれパラメータがあり、それについても自由度を持っています。例えば上の例では、移動平均やRSIの期間として5を採用しています。この値は5が良いのでしょうか。それとも他の値を採用すべきでしょうか。これについては正解はわかりませんが、ここではパラメータについてもある程度の範囲を持たせそれらもデータとして作成し、学習させてみましょう。

ここでは学習データの入力サンプルとして、以下のようにしてみます。

void make_input_data()
{
      IZEL_open_x_train(handle); 
    
      double ma1 = iMA(NULL, 0, 5, 0, MODE_SMMA, PRICE_CLOSE, 0);
      double ma2 = iMA(NULL, 0, 10, 0, MODE_SMMA, PRICE_CLOSE, 0);
      double ma3 = iMA(NULL, 0, 20, 0, MODE_SMMA, PRICE_CLOSE, 0);
      double ma4 = iMA(NULL, 0, 40, 0, MODE_SMMA, PRICE_CLOSE, 0);
      double ma5 = iMA(NULL, 0, 80, 0, MODE_SMMA, PRICE_CLOSE, 0);
 
      double rsi1 = iRSI(NULL, 0, 5, PRICE_CLOSE, 1)/100;  
      double rsi2 = iRSI(NULL, 0, 10, PRICE_CLOSE, 1)/100;  
      double rsi3 = iRSI(NULL, 0, 20, PRICE_CLOSE, 1)/100; 
      double rsi4 = iRSI(NULL, 0, 40, PRICE_CLOSE, 1)/100;  
      double rsi5 = iRSI(NULL, 0, 80, PRICE_CLOSE, 1)/100; 
           
      double ac1 = iAC(NULL, 0, 1);
      double ac2 = iAC(NULL, 0, 5);
      double ac3 = iAC(NULL, 0, 10);  
      double ac4 = iAC(NULL, 0, 15);     
      double ac5 = iAC(NULL, 0, 20);
      
      double ad1 = iAO(NULL, 0, 1);
      double ad2 = iAO(NULL, 0, 5);
      double ad3 = iAO(NULL, 0, 10); 
      double ad4 = iAO(NULL, 0, 15);
      double ad5 = iAO(NULL, 0, 20); 
            
      double atr1 = iATR(NULL, 0, 5, 1);
      double atr2 = iATR(NULL, 0, 10, 1);
      double atr3 = iATR(NULL, 0, 20, 1);
      double atr4 = iATR(NULL, 0, 40, 1);
      double atr5 = iATR(NULL, 0, 80, 1);
            
      double momentum1 = iMomentum(NULL, 0, 5, PRICE_CLOSE, 1)/100; 
      double momentum2 = iMomentum(NULL, 0, 10, PRICE_CLOSE, 1)/100; 
      double momentum3 = iMomentum(NULL, 0, 20, PRICE_CLOSE, 1)/100;  
      double momentum4 = iMomentum(NULL, 0, 40, PRICE_CLOSE, 1)/100; 
      double momentum5 = iMomentum(NULL, 0, 80, PRICE_CLOSE, 1)/100;  
            
      double wpr1 = iWPR(NULL, 0, 5, 1)/100;
      double wpr2 = iWPR(NULL, 0, 10, 1)/100;     
      double wpr3 = iWPR(NULL, 0, 20, 1)/100;                         
      double wpr4 = iWPR(NULL, 0, 40, 1)/100;     
      double wpr5 = iWPR(NULL, 0, 80, 1)/100;  
 
                                       
      IZEL_append_x_train(handle, Open[1]-ma1);
      IZEL_append_x_train(handle, Open[1]-ma2);
      IZEL_append_x_train(handle, Open[1]-ma3);
      IZEL_append_x_train(handle, Open[1]-ma4);
      IZEL_append_x_train(handle, Open[1]-ma5);

      IZEL_append_x_train(handle, rsi1);
      IZEL_append_x_train(handle, rsi2);
      IZEL_append_x_train(handle, rsi3); 
      IZEL_append_x_train(handle, rsi4);
      IZEL_append_x_train(handle, rsi5);
                        
      IZEL_append_x_train(handle, ac1);
      IZEL_append_x_train(handle, ac2);
      IZEL_append_x_train(handle, ac3);
      IZEL_append_x_train(handle, ac4);
      IZEL_append_x_train(handle, ac5);

      IZEL_append_x_train(handle, ad1);
      IZEL_append_x_train(handle, ad2);
      IZEL_append_x_train(handle, ad3);            
      IZEL_append_x_train(handle, ad4);
      IZEL_append_x_train(handle, ad5);                    
     
      IZEL_append_x_train(handle, atr1);
      IZEL_append_x_train(handle, atr2);
      IZEL_append_x_train(handle, atr3);  
      IZEL_append_x_train(handle, atr4);
      IZEL_append_x_train(handle, atr5);  
      
      IZEL_append_x_train(handle, momentum1);
      IZEL_append_x_train(handle, momentum2);
      IZEL_append_x_train(handle, momentum3); 
      IZEL_append_x_train(handle, momentum4);
      IZEL_append_x_train(handle, momentum5); 
      
      IZEL_append_x_train(handle, wpr1);
      IZEL_append_x_train(handle, wpr2);
      IZEL_append_x_train(handle, wpr3); 
      IZEL_append_x_train(handle, wpr4);
      IZEL_append_x_train(handle, wpr5);                 
}

全部で7個の指標についてそれぞれ5個のパラメータを与えてみました。ある程度広範囲のパラメータとなるようにしてみます。1サンプルの学習用入力データとして合計で5x7=35個の入力データをセットしました。

これで学習データの入力データのセット方法は完了です。

次は教師ラベルのセット方法について解説します。

Copyright (C) izel.cloud-line.com All Rights Reserved.