システムトレード 게시글

シンプルな単層パーセプトロンEA - MetaTrader 4向けの自動売買システム

첨부파일
18987.zip (1.98 KB, 다운로드 0회)

1. パーセプトロンについて

パーセプトロンについては、こちらのDr. Mark Humphrysの単層ニューラルネットワークを参考にしています。

私は、パーセプトロンの論理を人工知能として考えています。


2. アルゴリズム


2.1. 入力

w1, w2, w3, w4は、最適化によって決定された値を設定する重みです。

input int    x1 = 0;//weight1
input int   x2 = 0;//weight2
input int   x3 = 0;//weight3
input int   x4 = 0;//weight4


2.2. パーセプトロン

簡単なEAを作成するために、しきい値はゼロに設定します。出力は変わらず、"発火"の場合は1、"発火しない"場合は0です。

The Rule

double w1 = x1 - 100;

 double w2 = x2 - 100;    double w3 = x3 - 100;    double w4 = x4 - 100;   //パーセプトロンの計算(2017/03/18の前)

   double a11 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,1))/100-0.5)*2;

 double a21 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,1))/100-0.5)*2;    double a31 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,1))/100-0.5)*2;    double a41 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,1))/100-0.5)*2;    double Current_Percptron = (w1 * a11 + w2 * a21 + w3 * a31 + w4 * a41);   //パーセプトロンの計算(2017/03/18の前の2バープロセス)

   double a12 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,2))/100-0.5)*2;

   double a22 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,2))/100-0.5)*2;    double a32 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,2))/100-0.5)*2;    double a42 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,2))/100-0.5)*2;  double Pre_Percptron = (w1 * a12 + w2 * a22 + w3 * a32 + w4 * a42);

このEAではRSIを使用していますが、他のオシレーターでも大丈夫だと思います。RCIやW%Rなども使えます。


2.3. 注文のオープンとクローズ

前のパーセプトロンが0未満で、現在のパーセプトロンが0を超えた場合、ショートポジションがあればそれをクローズします。

そして、EAがロングオーダーを送信します。

if(Pre_Percptron < 0 && Current_Percptron > 0) //ロングシグナル
   {
      //ショートポジションがあれば、注文をクローズ
      if(pos < 0)
      {
         ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0);
         if(ret) pos = 0; //注文クローズが成功した場合、ポジションステータスはゼロ
      }
      //ポジションがない場合、ロングオーダーを送信
      if(pos == 0) Ticket = OrderSend(
                                       _Symbol,           // シンボル
                                       OP_BUY,                 // オペレーション
                                       Lots,              // ボリューム
                                       Ask,               // 価格
                                       0,            // スリッページ
                                       0,            // ストップロス
                                       0,          // テイクプロフィット
                                       Trade_Comment,        // コメント
                                       MagicNumber,// マジックナンバー
                                       0,        // 保留注文の有効期限
                                       Green  // 色
                                       );
   }

逆に、現在のパーセプトロンが0未満で、前のパーセプトロンが0を超えた場合、ロングポジションがあればそれをクローズします。

そして、EAがショートオーダーを送信します。


3. 最適化

"Slime_Mold_RSI_template.set"を読み込み、モデルには"オープン価格のみ"を選択します。

Inputs

Optimization


4. コメントとマジックナンバー

マジックナンバーは最適化に使用した期間を設定しており、このEAはコメントにマジックナンバーを使用します。

string Trade_Comment = IntegerToString(MagicNumber,5,' ') + "Days-Optimization";

Comment


5. 関連記事(日本語)

こちらから関連記事をご覧いただけます。

연관 포스트

댓글 (0)