スクリプト形式のニューラルネットワーク - ページ 4

 
rip:
YuraZ:

正規化は必ずしも必要ではありません。グリッドは0と1でしか動作しない、あるいは動作しなければならないと誰が言ったのでしょうか?


例として簡単なグリッドを添付することができます(残念ながら、今手元に資料がありません)。

ここで、単純なNNは、正規化でデータ準備なしでこの問題を解決します。

出典はこちら


とはいえ、私が挙げた例では、すでにノーマライズされているようなものです。

この条件には2つの範囲があります。


1 0-100

2 10-30


という、ある範囲での位置の比率を求めればよいのです。

つまり、これがスケーリングなのです。

ノーマライゼーションはほとんどの場合必要です。データは活性化関数の定義範囲内である必要があります。

スクリプトでは、シグモイドは [-1;+1] です。これを例えば指数関数に置き換えると......。または平方根。


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


ネットワーク構築の一例をご紹介します。 入力はLOW、すなわち正規化なし

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


ネットワーク構築の一例をご紹介します。 入力はLOW、つまり正規化なし


正規化されていないデータを使うことは、時に非常に有効です。変形時に失われがちな情報量も失われない。

そして、トレーニングサンプルの情報量を決定するための正式なメカニズムがない...。


ところで、この記事には、どのような活性化関数が使われているのか、どこにも書かれていない。どうやら、定義域 [-inf;+inf] または [0;+inf] の何かがあるようです・・・。

 

は、プログラムを少し変更しました

出力形式を若干変更


SCRIPTは現在、出力データを高い精度で計算することを義務として考えている

もちろん、このプログラムは万能ではなく、いくつかの入出力に特化したものである。

が、隠れ層の大きさ!は学習過程で調整されます。



次のリリースでは、入出力数の柔軟性を持たせるようにしたいと思います。

を追加し、成功したら、遺伝的アルゴリズムに

その目的は、多くのエラーを持つニューロンを殺すことである。

を、少ないエラーで再現することができます。

つまり,配列の中から誤差が最も少ないニューロンを探し,そこから繁殖させて置き換えることです

を、神経細胞の働きが悪いと...


1 現在、学習率が低い

2 変更 - 第1レベルの隠れニューロンの数がロジックなしでランダムになる

3 入出力サンプルデータに対して高い精度を得た場合、学習処理を停止する。


ファイル:
 

どのように使用するのですか?チャートに台本を貼る、数字の山が書き換えを始める...。この数字が何を物語っているのか?

 
Blast:

どのように使用するのですか?チャートに台本を貼る、数字の山が書き換えを始める...。この数字は何を物語っているのだろうか。

何のために必要なのか?自分なりのGAアルゴリズムを持っているが、コードをほとんど理解していない。どこにインプットを置くか、どのようにアウトプットするか、いつ買い決済するか、全くできないか、などを理解する時間が必要だ。それとも、聖杯の ために来たのか?

 
Loknar:
ブラスト

どのように使用するのですか?チャートに台本を貼る、数字の山が書き換えを始める...。この数字は何を物語っているのだろうか。

何のために必要なのか?自分なりのGAアルゴリズムを持っていますが、コードをほとんど理解していません。入力をどこに置くか、どのように取り出すか、もしあるとすれば、いつ買付決済を行うかを理解するのに時間が必要です。それとも、ここで聖杯を狙ってるんでしょうか?

ブラスト 、Expert Advisorやインジケータを探すな - それは遠い先の話だ。


MQL4でニューラルネットワークの 原理を学ぶというよりは

---

一般的には、C++でDLLの形で書くのが合理的、あるいは他の高速言語


Loknar - これは、より正確なデータを出力するために、最初にスクリプトを修正しただけ です。

--

ところで、レイヤーを追加しようとした :-)、出力入力は言うに及ばず......パイプ学習アルゴリズムが一瞬で死んでしまう...。


---


のようなものを試してみたい。

3出力

出力は0や1、-1 0 +1だけでなく、範囲

x 0 0 - バイホールド

0×0-フラット(出口買い・売り)

0 0 x 売り - ホールド売り

ここで、x は 0 や 1 ではなく、ある範囲の偏差を持つものである。

すなわち、0.1122または-0.012の値を取ることができます。


3つの出力の組み合わせが境界を越えるかどうか解析する


各時間枠に9つのエントリーを設置 - M1 M5 M15 M30 H1 H4 合計54のエントリーを実施。

各トラフの平均値 3 5 8 13 21 34 55 89 144 233 の差分をフィードする。

合計 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 時間軸ごとに計9回

グリッドビューで平均値のベリファイを行うことができます。:-) マトリックスに

パターン2 3 4 5 6 7 8 9 10 11 のようなものがある場合、ファンが上向きに全開していると判断して売ります。

2 -3 -4 -5 -6 -7 -8 -9 -10 -11のパターンがあるとき、パターンは完全に下向きに開いている -BAY

数字は任意であり、時には大きな時間枠で-1 -3 -7 -10 -15 -20 -30 -40 -80のパターンになることもある



---

というようなトレーニングサンプル


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

H4

 

学習用データの準備





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
ブラスト

どのように使用するのですか?チャートに台本を貼る、数字の山が書き換えを始める...。この数字は何を物語っているのだろうか。

何のために必要なのか?自分なりのGAアルゴリズムを持っていますが、コードをほとんど理解していません。入力をどこに置くか、どのように取り出すか、もしあるとすれば、いつ買付決済を行うかを理解するのに時間が必要です。それとも、聖杯を取りに行ったのか?

当初、私はニューラルネットワークの アイデアが好きでした。私が知っているのは、1000点あると、どういうわけかネットワークが1点に収束してしまうということだけなのですが......。と、ネットワークアルゴリズムに基づいたEAでオートトレードを勝ち取ったこと。このようなネットワークの自作を計画しているが、現段階では、mql4もニューラルネットワークも何も分かっていない。

そこで、まずは自分のストラテジーをExpert Advisorに入れ、mql4の勉強をしてみることにします。そして、ネットワークについて考えるようになります。

興味本位で御社のバージョンをダウンロードさせていただきました。そんなことに初めて出会いました。このようなネットワークの運用は理解できない。このようなネットワークの仕組みが分からないので、質問させていただきました。

同じようなテーマで、注目に値すると思われる文献があれば、喜んで紹介しますよ。

 

THIS NETWORK(ザ・ネットワーク

YuraZ:

は、ソフトを少し変更しました

の表示形式を少し変更しました。

SCRIPTでは、出力データを高精度に計算することを義務としています。

プログラムはユニバーサルではなく、入出力数に特化している

が、隠れ層の大きさ!は学習過程で調整されます。



次のリリースでは、入出力数の柔軟性を持たせるようにしたいと思います。

を追加し、成功したら、遺伝的アルゴリズムに

その目的は、多くのエラーを持つニューロンを殺すことである。

を、少ないエラーで再現することができます。

つまり,配列の中から誤差が最も少ないニューロンを探し,そこから繁殖させて置き換えることです

を、神経細胞の働きが悪いと...


1 現在、学習率が低い

2 変更 - 第1レベルの隠れニューロンの数はロジックなしでランダムになります

3 入出力サンプルデータで高い精度が得られたら学習を停止する


同じネットワークだが、Microsoft Visual C++ 6.0 で書かれている。

MQL4と比較して、スピードが桁違いに速い

アルゴリズムは変更されず、MQL4からC++への移行は、クラス・オブジェクトを使用することなく、可能な限り単純化されています。

ファイル:
yzpnn.zip  63 kb
 

もう一つの選択肢、ただしMQLについて


M1が現在のトレンドの方向性を示している。

3日に終了し、理論的には、起動時に教えることはできません - しかし、すぐに準備ウェイトを取る - 事前に教える


---

ミューウイングの 正規化された差分が入力される9つの入力

---

OUT-1 OUT-2 OUT-3 出力

0.9 0.01 0.01 トレンドアップ

0.01 0.9 0.01 フレット

0.01 0.01 0.9 トレンドダウン



---

3~4個のタイムフレームを追加して、一気にカウントする予定です

PNNの重量を測定すると、非常に高速に動作する

---


実験的なテストコード - 私を蹴らないでください。






ファイル: