ニューラルネットワーク、どう使いこなすか、何から始めるか? - ページ 17

 
int    w0=1;
double w1=(High[1]-Low[1])/Point*(Close[1]-Open[1])/Point;
double w2=(High[2]-Low[2])/Point*(Close[2]-Open[2])/Point;
double w3=(High[3]-Low[3])/Point*(Close[3]-Open[3])/Point;
double w4=(High[4]-Low[4])/Point*(Close[4]-Open[4])/Point;
double w5=(High[5]-Low[5])/Point*(Close[5]-Open[5])/Point;
double w6=(High[0]-Low[0])/Point*(Close[0]-Open[0])/Point;
バー1の結果に基づいてエントリーするのであれば
w6=(High[0]-Low[0])/Point*(Close[0]-Open[0])/Point;

は取引開始後に形成されます。つまり、このエントリー(w6)が取引開始の質に影響を与えることはあり得ません。

私の理解が正しければ、w6は、過去5本のバー(w1、w2、w3、w4、w5)の分析に基づいて、取引開始後に価格がどちらに動いたかを検出するために導入されたものだと思います。

 

形成された5本のバーの分析結果に基づいてエントリーします。したがって、ゼロ・バーはエントリー・バーとしては使用されません。

そうですね。

double w0=1.;
double w1=(High[1]-Low[1])/Point*(Close[1]-Open[1])/Point;
double w2=(High[2]-Low[2])/Point*(Close[2]-Open[2])/Point;
double w3=(High[3]-Low[3])/Point*(Close[3]-Open[3])/Point;
double w4=(High[4]-Low[4])/Point*(Close[4]-Open[4])/Point;
double w5=(High[5]-Low[5])/Point*(Close[5]-Open[5])/Point;

High-Low系列(HL)とClose-Open系列(CO)の正規化係数を紹介しよう。平均化ウィンドウで対応する増分の標準偏差 として定義してみましょう、例えば100です。

double HL=0.;

double CO=0.;

for(i=0;i<100;i++) {

HL=HL+(High[i] -Low[i] )*(High[i] -Low[i] );

CO=CO+(Close[i]-Open[i])*(Close[i]-Open[i]);

}

HL=MathSqrt(HL/100);

CO=MathSqrt(CO/100);

正規化関数を実行してみましょう(数値軸全体を±1セグメントにマッピングします)。

double th(double x)
{
if(MathAbs(x)<100.)S=(MathExp(x)-MathExp(-x))/(MathExp(x)+MathExp(-x));
else S=MathAbs(x)/x;
return(S);
}

そして、NSの正規化された入力は以下のようにカウントされることになる。

double d0=1.;
double d1=th((High[1]-Low[1])/HL*(Close[1]-Open[1])/CO);
double d2=th((High[2]-Low[2])/HL*(Close[2]-Open[2])/CO);
double d3=th((High[3]-Low[3])/HL*(Close[3]-Open[3])/CO);
double d4=th((High[4]-Low[4])/HL*(Close[4]-Open[4])/CO);
double d5=th((High[5]-Low[5])/HL*(Close[5]-Open[5])/CO);

もう一つ、w1...w5はNS入力ではなく、割付の過程で調整できる重さである。入力はd1, d2...と表記する。d5
 

エントリー正規化 = キャンドル(pips)単位

double a;
int CandleMax=20, CandleMin=-20, Diapazon;
Diapazon= CandleMax- CandleMin;

a=(Close[ i]-Open[ i])/Point;
if( a> CandleMax) a= CandleMax;
if( a< CandleMin) a= CandleMin;
a=( a- CandleMin)/ Diapazon;
P.S. древний вариант
 
コリー 「ファイン」ノーマライゼーション(±1区間を均等に埋めること)を採用します。これは原則的なポイントです。
 

Neutronさん、今回もこんなに詳しい説明をありがとうございました。

今、あなたが書いたものに60分かけると思うので、もし面倒でなければ1時間後にこのトピックを調べてみてください。

もしご興味があれば、EAアルゴリズムの説明と非ネットワーク係数の説明のついたチャートをお送りするかもしれません。

 

正直、私信は 苦手です。原則的に制約がないのであれば、こちらでやり取りをした方が良い。また、このトピックに興味を失うかもしれないので(念のため)、強制的に維持することにこだわりはありません:-)

取引?

 
Neutron писал(а)>>
コリー 「薄い」正規化(セグメント+/-1が均等に埋まる場合)を使用することにします。これは原則的なポイントです。

これも均等に塗りつぶされますが、端に曲率がありません。つまり、古代のバージョンはセグメントへの完全なマッピングではありません

 
Korey писал(а)>>

これも均等に塗りつぶされているが、端に皺がない、つまり古代のものは断面に完全にマッピングされているわけではない

そうですね、でも一度に全部必要なんです

 
Neutron >> :

正直、私信は苦手です。原則的に制約がないのであれば、こちらでやり取りをした方が良い。また、このトピックに興味を失うかもしれないので(念のため)、強制的に維持することにこだわりはありません:-)

取引は成立しているのか?

>> お得な情報

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
//Введём нормировочные коэффициенты для ряда High-Low - HL и для ряда Close-Open - CO. 
//Определим их как стандартное отклонение от соответствующих приращений с окном усреднения, например 100.
double HL=0.;

double CO=0.;

for(int i=0; i<100; i++) {

HL= HL+(High[ i] -Low[ i] )*(High[ i] -Low[ i] ); //Эти значения умножаются друг на друга, 
                                             //чтобы в случае если значение будет отрицательным
CO= CO+(Close[ i]-Open[ i])*(Close[ i]-Open[ i]); //при умножении оно стало положительным?

}
HL=MathSqrt( HL/100);//Получилось среднее значение диапазона 100 последних баров
CO=MathSqrt( CO/100);//Получилось среднее значение диапазона между open b close 100 последних баров

//Ведём нормализующую функцию (отображает всю числовую ось в отрезок +/-1):
double th(double x); // что значит эта строчка?
{
if(MathAbs( x)<100.) S=(MathExp( x)-MathExp(- x))/(MathExp( x)+MathExp(- x));
else S=MathAbs( x)/ x;
return( S); // для чего вычислялась S? 
}

//Тогда нормализованные входа для НС будут считаться следующим образом:
double w0=1.; // что значит точка после числа?
double w1= th((High[1]-Low[1])/ HL*(Close[1]-Open[1])/ CO);
double w2= th((High[2]-Low[2])/ HL*(Close[2]-Open[2])/ CO);
double w3= th((High[3]-Low[3])/ HL*(Close[3]-Open[3])/ CO);
double w4= th((High[4]-Low[4])/ HL*(Close[4]-Open[4])/ CO);
double w5= th((High[5]-Low[5])/ HL*(Close[5]-Open[5])/ CO);

//И ещё. w1...w5 это не входа НС, это настраиваемые в процессе её обцчения веса. Входа будем обозначать как d1, d2... d5

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

小さな小石

for(int i=1; i<=100; i++) {

HL= HL+(High[ i] -Low[ i] )*(High[ i] -Low[ i] ); //Эти значения умножаются друг на друга, 
                                             //чтобы в случае если значение будет отрицательным
CO= CO+(Close[ i]-Open[ i])*(Close[ i]-Open[ i]); //при умножении оно стало положительным?

}
そうですね......まだゼロバーがないんです。