エリオット波動理論に基づくトレーディング戦略 - ページ 28

 
また、計算について。最近、正規分布密度関数を使う必要性を考えましたが、まだ着手していません。また、トリッキーな関数を使うか、表形式でやるか、どちらかというとExcelの表を千分の一(あるいは万分の一)単位で埋めて、大きな配列を埋めるためのmq4コードを含むtxtファイルとして保存する方法を考えていました。今は、Vladislavのおかげで、CPUのリソースも節約できるようになりました。
全体として、私は多くの有益なことを学びました。:)
 
<br/ translate="no"> あなたの公理の1つは、最適化プロセスによって決定される真の(すなわち単一の)軌道が存在することです。どうして一つの軌道が複数のチャンネルになるのですか?


また回答が遅くなり申し訳ありません。軌道を近似するとき、同じ信頼区間 であれば、ある近似が軌道そのものをどれだけよく表しているかはわからない。そしてその結果、信頼区間内に収まる近似値はすべて等価と見なすことができる。原則的にはそうです。可能な近似値の集合から予測を行うには(誤差の境界が設定されているため、通常は選択基準を満たすものはありません)、いわば「最も」最適なものを選択するのがよいのです。アルゴリズムを研究していくうちに、もう一つ特殊なことに気づきました。近似値は違っても、ほとんどの場合、予測値は同じになるのです。もう一度言いますが、軌跡そのものは必要ありませんし、求めてもいません。チャネルについて - チャネルの独自性は、研究対象の構造の「詳細度」(とでも言おうか)に関係している。したがって、トレンドがあれば、プルバックゾーンを特定し、トレンドの終了、反転ゾーンのブレークダウンなどの確率を推定することができる。あるいは、市場に参入しないほうがよい不確実な領域を特定するためだけです。また、サンプルサイズの制限を常に念頭に置く必要があります。そうしないと、結果の不確実性が高くなりすぎてしまいます。頑張って、良い流れを作ってください。
 
ウラジスラフさんへ

ハースト係数の計算について誤解していることがあるのですが。
線形回帰の場合、SとRの計算には2つのバリエーションがあります。

バリエーション1。
S - 線形回帰線の全長に沿った偏差差の総和として計算することができる。
意味は、

S=0.0;
for (n=0; n<Period; n++) { S+ = MathPow( Close[n] - (a+b*n) , 2); } です。
S=MathSqrt( S / Period );

そして、線形回帰の全線に沿った最大偏差と最小偏差の差としてRを計算することができます。
すなわち、

pMax=0.0; pMin=0.0;
for (n=0; n<Period; n++)
{
dc=Close[n] - (a+b*n);
if ( dc > pMax) pMax = dc;
if ( dc < pMin) pMin = dc
}
R=MathAbs( pMax - pMin);

オプション2.
標準的なテクニカル指標の セットからiStdDev( )を使用して、最後のバーとの相対的なSを計算することができます。しかし、この場合、最後のバーを基準にSを計算させることになり、直線回帰線の途中の値を基準にSを計算することと同じになる。

そしてR - 水平投影における最大値と最小値の差として:

pMax=High[Highest(NULL,0,MODE_HIGH,Period,i)];
pMin=Low[Lowest(NULL,0,MODE_Low,Period,i)];

これは全く正しくありません。最初にCloseとするならば、 MODE_CLOSEとする方が正しいでしょう。

私の理解では、2番目のバリエーションが使用されているのですね?それとも、私の勘違いでしょうか?

そこで質問ですが、より正確にハースト係数を計算するためには、どのバリエーションがより正しいのでしょうか?

回答よろしくお願いします-アレクサンダー
 
信頼区間内に収まる近似値はすべて等価とみなすことができる

ウラジスラフさん、ありがとうございます。この点は、なんとなく考慮していませんでした。でも、本当にそうなんです。つまり、複数のチャンネルではなく、最大角度と最小角度の線で囲まれた全範囲を得ることができるのだ。
サンプルサイズの制限を常に念頭に置く必要があり、そうでなければ、結果はあまりにも多くの不確実性を持つことになります。

どのような不確実性を言っているのか、よくわからないのですが。しかし、もうひとつはっきりしていることがあります。サンプルは回帰チャネルを定義する必要があり、回帰チャネルはトレンドチャネルである。トレンドと横ばいを一括りにしてサンプルとした場合、そのサンプルからは、ほとんど何も得られない。したがって、相場をフェーズに分けること、さらに言えば、早い段階、すなわち実際の相場でトレンドとフラットを見極めるという問題に直面します。これは非常に非自明な課題だと私は思っています。
 
プリベット
標準偏差の指標となる数値は、その数値の大きさによって異なります。



Vot kod mojevo indikatora:

//+------------------------------------------------------------------+
//|                                                   StdDevChan.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                      irc://irc.omnitel.net/forex |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Blue

//---- input parameters
extern int       PriceBars=350;
extern int       Shift;
extern bool      Comments=false;

double Support[];
double StdDev[];
double Resistance[];

//---- buffers
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void SetObject(string ObjName,int ObjType,datetime ObjTime1,double ObjPrice1,datetime ObjTime2=0,double ObjPrice2=0,color ObjColor=Red,int ObjSize=1,int ObjStyle=STYLE_SOLID,datetime ObjTime3=0,double ObjPrice3=0)
{

if (ObjectFind(ObjName) != -1) ObjectDelete(ObjName);
ObjectCreate(ObjName, ObjType, 0,ObjTime1 , ObjPrice1, ObjTime2, ObjPrice2, ObjTime3, ObjPrice3);
ObjectSet(ObjName,OBJPROP_COLOR,ObjColor); 
ObjectSet(ObjName,OBJPROP_STYLE,ObjStyle); 
ObjectSet(ObjName,OBJPROP_WIDTH,ObjSize); 
}


int init()
  {
//---- indicators
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Resistance);
   SetIndexDrawBegin(0,0);
   SetIndexEmptyValue(0,0);
   SetIndexShift(0,0);
   SetIndexLabel(0,"Standart Deviation Support-");
//----
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,StdDev);
   SetIndexDrawBegin(1,0);
   SetIndexEmptyValue(1,0);
   SetIndexShift(1,0);
   SetIndexLabel(1,"Standart Deviation");
//----
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Support);
   SetIndexDrawBegin(2,0);
   SetIndexEmptyValue(2,0);
   SetIndexShift(2,0);
   SetIndexLabel(2,"Standart Deviation Resistance+");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counter,counter2;
   double DevAvg=0;
   double DevPlus1=0;
   double DevMinus1=0;
   double DevPlusStart=0;
   double DevMinusStart=0;
   double DevAvgStart=0;
   double DevPlusEnd=0;
   double DevMinusEnd=0;
   double DevAvgEnd=0;
   double DevPlus2=0;
   double DevMinus2=0;
   double DevAvg1=0;
   double DevAvg2=0;
   double PriceDiff;
   double deviance,Max,Min;
   int DrawBegin = Shift;   
   int DrawEnd;
   int counted_bars=IndicatorCounted();
   DrawEnd=Bars-counted_bars;
   
   if ( DrawEnd < DrawBegin + PriceBars) DrawEnd = DrawBegin + PriceBars;
   
   if (Bars < (PriceBars * 2 + Shift)) return(0);
   
   for (counter=DrawBegin-1;counter<=DrawEnd;counter++)
   {
   deviance=iMA(Symbol(),Period(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,counter);
   Max=High [Highest (NULL,0,MODE_HIGH,PriceBars,counter)];
   Min=Low [Lowest (NULL,0,MODE_LOW,PriceBars,counter)];
   //DevAvg=MathPow((Max + Min + deviance) / 3,2);  
   DevAvg=(Max + Min + deviance) / 3;  

   for (counter2=(PriceBars + counter);counter2 >=counter;counter2--)
   {
   PriceDiff = (Max + Min + Open[counter2]) / 3;
   deviance+= MathPow((PriceDiff - DevAvg),2);   
   }

   // Calculate average deviation
   deviance = deviance / (PriceBars + 1);
   DevAvg = MathSqrt(deviance/Point) * Point; 

   // Calculate deviation channel starting/current average deviation prices
   DevAvg1 = (DevPlus1 + DevMinus1 + (Max + Min + Open[PriceBars + counter]) / 3) / 3;

   // Calculate deviation channel +/- starting points
   DevPlus1 = (Min+Max + Open[PriceBars + counter]) / 3 + DevAvg;
   DevMinus1 = (Min+Max + Open[PriceBars + counter]) / 3 - DevAvg;     

  // Calculate deviation channel current +/- points
   DevPlus2 = (Max + DevAvg1) / 2 + DevAvg;
   DevMinus2 = (Min + DevAvg1) / 2 - DevAvg;

   DevAvg2 = (DevPlus2 + DevMinus2 + (Max + Min + DevAvg1) / 3) / 3;
   
   Resistance[counter]=DevMinus2;
   Support[counter]=DevPlus2;
   StdDev[counter]=DevAvg2;   
   //if (counter == DrawEnd && Symbol() == "EURUSD" ) Print ("DevMinus2=",DevMinus2," DevPlus2=",DevPlus2," DevAvg2=",DevAvg2);

   if (counter == DrawBegin)
   {
   DevPlusEnd=Resistance[counter];
   DevMinusEnd=Support[counter];
   DevAvgEnd=StdDev[counter];
//   if (Symbol() == "EURUSD" ) Print ("DrawBegin=",DrawBegin," DrawEnd=",DrawEnd," DevMinus2=",DevMinus2," DevPlus2=",DevPlus2," DevAvg2=",DevAvg2);
   }      
   
   if (counter == DrawBegin + PriceBars)
   {
   DevPlusStart=Resistance[counter];
   DevMinusStart=Support[counter];
   DevAvgStart=StdDev[counter];
   }      

   }
//----

   if (Comments) Comment(Symbol()," DevAvg=",DevAvg," DevAvgStart=",DevAvgStart," DevAvgEnd=",DevAvgEnd," DevPlusStart=",DevPlusStart," DevPlusEnd=",DevPlusEnd," DevMinusStart=",DevMinusStart," DevMinusEnd=",DevMinusEnd);
   //Draw channel
   SetObject(Symbol()+"_StdDev+",OBJ_TREND,Time[PriceBars + Shift],DevPlusStart,Time[Shift],DevPlusEnd,Blue,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDev+","Standart Deviation Resistance", 8, "Arial", Green);
   SetObject(Symbol()+"_StdDev-",OBJ_TREND,Time[PriceBars + Shift],DevMinusStart,Time[Shift],DevMinusEnd,Red,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDev-","Standart Deviation Support", 8, "Arial", Green);
   SetObject(Symbol()+"_StdDevAvg",OBJ_TREND,Time[PriceBars + Shift],DevAvgStart,Time[Shift],DevAvgEnd,White,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDevAvg","Standart Deviation Average", 8, "Arial", Green);
   
   return(0);
  }
//+------------------------------------------------------------------+
 
2 ANG3110 実は、この質問にはすでに上で回答しています。私も怠け者なので、もう一度-最後に-答えます;)。標準偏差は、近似値と実際に得られた価格との相対値で計算する必要があります。終値をミュービングで近似すれば、各バーで Kloseとミュービングの値の差になるはずです。そして、標準的なアルゴリズムであるiStdDev( )を使用することができます。線形回帰チャネルによって、その後、回帰線の値とkloseの間。それ以外の方法であれば、近似関数の値と実際に得られた値との差になります。もし、トレードの収益性など、他のものを近似的に求めるのであれば、他の変数を選択する必要があります。iStdDev()は計算には使っていません。

というのはちょっと違うので、最初にCloseを使うならMODE_CLOSEを使う方が正しいでしょう。

ここで重要なのは、最初にCloseで数えた場合

2Yurixx 不確実性について - 標本の自由度の数が不十分な場合、その収束を確実に推定できないため、収束した標本にしか適用できない統計解析手法を発散した標本に適用することができます。そのため、結果は不確実です。

PS ここでいう「サンプル」とは、分布という意味で使われました。すなわち、「標本の自由度の数は、その標本に対して有効な分布の収束を決定する際の信頼性の程度に影響する」と言った方が正しいでしょう。収束した分布に対して有効な方法を、発散した分布(あるいは収束の事実がない分布)にも適用することができる。

頑張って、流行に乗り遅れないようにしてください。
 
プリベット

また、このようなパラメータを設定することもできます。

   deviance=iMA(Symbol(),Period(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,counter); Max=High [最高値 (NULL,0,MODE_HIGH,PriceBars,counter)]; Min=Low [最低値 (NULL,0,MODE_LOW,PriceBars,counter)]; DevAvg=(Max + Min + deviance) / 3.を計算します。



このグラフィックは、とても美しいです。

 
ウラジスラフさんへ<br/ translate="no">
ハースト係数の計算について誤解していることがあるのですが。
線形回帰の場合、SとRの計算には2つのバリエーションがあります。


これは面白い質問ですね :)RMS収束基準を満たす
線形回帰 チャネル(例えば昇順型)があるとする.一方、チャネルが上昇している場合、それに含まれるバーのRMSの計算値は1.0になる傾向があります(シフトが明白であるため)。一方、回帰直線に対して相対的にRMSを計算すると(つまり、ずれを取り除くと)、RMSは正規分布に近いので、0.5になる傾向があります。皆さんも自分で確かめてみてください(その方がずっと面白いです)。
 
我慢できず、solandrさんのスクリプトを改造してしまいました。30要素までのサンプルでは、(1乗の数)による除算が妥当なので、RMS抽出を含めると、ビルトインのiStdDevOnArrayを使用した方がより正しいです。
//+------------------------------------------------------------------+
//|                                                     Herst-II.mq4 |
//|                             solandr (обработал напильником Rosh) |
//|                       http://www.metaquotes.ru/forum/6839/page11 |
//+------------------------------------------------------------------+
#property copyright "solandr (обработал напильником Rosh)"
#property link      "http://www.metaquotes.ru/forum/6839/page11"
#property show_inputs

extern int start_bar=500;
extern int end_bar=0;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
double viborka[];
int size_of_array,i;

size_of_array=start_bar-end_bar+1;
ArrayResize(viborka, size_of_array);
for(i=size_of_array-1;i>=0;i--) viborka[i]=Open[i+end_bar];

double S_A=iMAOnArray(viborka,0,size_of_array,0,MODE_SMA,0);
Print("Среднее арифметическое выборки = ",DoubleToStr(S_A,8));

double S=iStdDevOnArray(viborka,0,size_of_array,MODE_SMA,0,0);

Print("СКО выборки (размах) = ",DoubleToStr(S,8));

double pMax=viborka[ArrayMaximum(viborka)];
double pMin=viborka[ArrayMinimum(viborka)];

double R=pMax-pMin;
Print("pMin = ",pMin," pMax = ",pMax, " R = ",R);

double Hrst;
if( (R>0)&&(S>0)) Hrst = MathLog(R/S)/MathLog(size_of_array*0.5);
Print("Хёрст = ",DoubleToStr(Hrst ,8));
  
  return(0);
}
//+------------------------------------------------------------------+



エクストリームサーチは、位置や区切りではなく、生データをもとに検索します。 したがって、その基準はやや異なります。


2006.05.28 14:53:08 Herst EURUSD,M15: 削除<br/ translate="no"> 2006.05.28 14:53:08 Herst EURUSD,M15: Hearst = 0.27582880
2006.05.28 14:53:08 Herst EURUSD,M15: pMin = 1.2691 pMax = 1.2892 R = 0.0201
。28 14:53:08 Herst EURUSD,M15: Sampling RMS (spread) = 0.00438062
2006.05.28 14:53:08 Herst EURUSD,M15: Sampling variance = 0.00001919
2006.05.28 14:53:08 Herst EURUSD,M15: Sampling mean = 1.27924631
2006.05.08 14:53:07 Herst EURUSD,M15: Sampling variance = 0.00001918 2006.05.08 Herst EURUSD,M15: サンプリング平均 = 1.27924631 2006.05.28 14:53:06 Herst EURUSD,M15: loaded successfully
2006.05.28 14:52:59 Herst-II EURUSD,M15: removed
2006.05.28 14:52:59 Herst-II EURUSD,M15: Hurst = 0.26196806
2006.05.28 14:52:59 Herst-II EURUSD,M15: pMin = 1.2696 pMax = 1.2882 R = 0.0186
2006.05.29 14:52:58 Herst-EURUSD,M15: pMax = 0.2881 *** 2006.05.28 14:52:5828 14:52:59 Herst-II EURUSD,M15: Sample RMS (spread) = 0.00437625
2006.05.28 14:52:59 Herst-II EURUSD,M15: Sample Mean = 1.27924631
2006.05.28 14:52:59 Herst-II EURUSD,M15: ロード成功
2006.05.28 14:52:54 Compiling 'Herst-II'
.

 
ウラジスラフさんへ
包括的なご回答をありがとうございました。