トレンドラインの傾斜角度の算出。 - ページ 15

 
Daniil Kurmyshev:

ああ、なるほど、そうですか)) それから、私はコードを返します、多分Renat Akhtyamov 以外の誰かがそれを必要とするでしょう、ところで、私はあまりフォーラムに座っていません)))

//-----------------------------------------------------------------------------------

// xAngle ///////////////////////////////////////////// // xAngle

//-----------------------------------------------------------------------------------

double xAngle(double x1,double y1,double x2,double y2) // x1,x2 Time[] - y1,y2 価格

{

if(x1==0 || x2==0 || y1==y2){return(0);}.

if(y1==y2) {return(0);}.

//---

double PriceMAX=ChartGetDouble(0,CHART_PRICE_MAX,0);

double PriceMIN=ChartGetDouble(0,CHART_PRICE_MIN,0);

double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100.BAR1proc=(Double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60);

double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

x1=iBarShift(NULL,0,(datetime)x1);

x2=iBarShift(NULL,0,(datetime)x2);

double x1x2=MathAbs(x1-x2)*_Period*60;

double y1y2=MathAbs(y1-y2)/_Point。

double x1x2_proc=x1x2/Bar1proc;

double y1y2_proc=y1y2/Price1proc;

//---

double theta=MathArctan(y1y2_proc/x1x2_proc)*(180/3.1415926535);

if(y2<y1){theta=NormalizeDouble(θ*(-1),2);}となります。

return(theta)です。

}

//+------------------------------------------------------------------+

純粋な機能で、角度を計算するために、自動モードで、チャートのスケールによる補正を行い、私自身も使っていますが、完全に機能します)トレンド戦略については、角度によって、トレンドの強さとおおよその期間を推定することができます。

これです。

double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100.BAR1proc=(Double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60);

double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

100で割るのは冗長です。最終的な計算式では、θを計算する際に分子と分母にそれら(100)が配置される。しかも省略されている。


これです。

double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

double y1y2=MathAbs(y1-y2)/_Point。

ポイントによる分割は冗長です。100で割る場合も同様です。

最終的な計算式では double y1y2_proc=y1y2/Price1proc となる。

_分子と分母のポイントが減少します。

これらの単純化は、第一に計算量(CPU負荷)を減らし、第二に最終結果の精度を上げる可能性があります。


===============================

あるいは、ChartTimePriceToXY 関数を使って、グラフィックツールのアンカーポイントのピクセル値を決定して みるのもいいかもしれません。

三角関数の計算は、縦横の画素数で計算する方が簡単です。バーとポイントの変換なし。

もっとシンプルでいいんです。


//-----------------------------------------------------------------------------------

// xAngle ///////////////////////////////////////////// // xAngle

//-----------------------------------------------------------------------------------

double xAngle(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2 Price.

{

if(x1==0 || x2==0 || y1==y2){return(0);}.

int _x1, _y1, _x2, _y2;

ChartTimePriceToXY(0,0,x1,y1,_x1, _y1)。

ChartTimePriceToXY(0,0,x2,y2,_x2, _y2)。

double theta=MathArctan((double)MathAbs(_y1-_y2)/(double)MathAbs(_x1-_x2))*(180/3.1415926535) となります。

if(y2<y1){theta=NormalizeDouble(θ*(-1),2);}となります。

return(theta)です。

}

ここで if(y2<y1){theta=NormalizeDouble(Theta*(-1),2);} その結果で符号を調整します。
 
Eugeni Neumoin:

これです。

.........

もっとシンプルであるべきです。

はい、これらはすべて、ユーザーが設定したスケールに依存し、異なるチャートで異なる可能性があるため、まったく役に立ちません。

唯一の正解は、単位時間当たりの価格の推移を測定することです。

毎時0.0001ユーロドル」のトレンドは、規模やプラットフォームに関係なく、誰が見ても全く同じように描かれる。

 
George Merts:

これは、ユーザーが設定したスケールに依存し、チャートによって異なる可能性があるため、すべて全く無意味なものです。

唯一の正解は、単位時間当たりの価格の推移を測定することです。

毎時0.0001ユーロドル」のトレンドは、規模やプラットフォームに関係なく、誰が見ても全く同じように描かれる。

スレッドの主題を気にしていませんでした。傾斜のある銘板をトレンドと平行にするための角度を計算するのが面白かったです。上の角度を計算するための簡易関数を書いてみました。スケールには全く依存しません。スケールやその他のチャートプロパティを 変更する際に、銘板が歪まないようにするために、CHARTEVENT_CHART_CHANGE

=========

写真のように、線の近くにキャプションを表示させたいと思いました。上記の変更した機能で、このようになりました。


 
Eugeni Neumoin:

写真のように、線の近くにラベルを表示させたかったのです。上記のような機能で、このような結果になりました。

美しい!
 
Eugeni Neumoin:

私も同意見で、好きではないのですが、最初にこの関数を作ったときに、いくつかの方法を確認し、その後は変えていません)、ピクセルについては、完全に同意見で、私個人にとって最も理想的な角度の計算はこの方法です、以下は私の関数です。

//-----------------------------------------------------------------------------------

// xAnglePixels

//-----------------------------------------------------------------------------------

double xAnglePixels(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2

{

if(x1==0 || x2==0 || y1==y2){return(0);}.

//---

int x[2],y[2]。

ChartTimePriceToXY(0,0,x1,y1,x[0],y[0]);

ChartTimePriceToXY(0,0,x2,y2,x[1],y[1]);

//---

if(x[1]<x[0]){return(-1000);}

//---

double x1x2=MathAbs(x[0]-x[1]);

double y1y2=MathAbs(y[0]-y[1]);

//---

ダブルシータ

if(x1x2!=0){theta=MathArctan(y1y2/x1x2)*(180/3.1415926535);}

else{theta=90;}.

if(y2<y1){theta=NormalizeDouble(theta*(-1),2);}else{theta=NormalizeDouble(theta,2);} とします。

return(theta)です。

}

//---------------------------------------------------------------------------------

p.s. 関数の中でif(x[1]<x[0]){return(-1000);} は、私自身が使ったように、削除することができます)、より具体的には、ユーザーがオブジェクトの 2点を ところどころ入れ替えた場合に必要となります。

//-----------------

ちなみに、チャート上の碑文は、私はそれを使用しています。 先にブランチで私はこの指標の仕事の例を投稿し、そこにあなたがそれを見ることができます。

//-----------------

スペシャル・サンクス・アンド・リスペクト(Special Thanks to you and respect)

 
Eugeni Neumoin:

トレンドと平行に斜め刻みをするための角度を計算するのがおもしろかったです。上記では、角度を計算するための簡略化した関数を書きました。スケールには全く依存しません。

そう、まったく違うケースなのです。ここでの作業は、トレンドを判断するのではなく、モニターにプロットされた直線の傾きを判断することである。そしてこの場合、それは正しい方法なのです。そして、すべてが美しく写っている。
 
George Merts:
そう、これは別件なんです。ここでは、トレンドを判断するのではなく、モニターに表示される直線の傾きを判断することが課題である。そしてこの場合、それは正しい方法なのです。そして、すべてが美しく写っている。
おっしゃるとおり、トレンドラインを 引けばトレンドの方向がわかりますし、ゲームをしなくても、引いたラインに対して正しい角度が表示されます。私のロボットは、すべてのルールに従って構築されていますが、本質は明確です。
ファイル:
 
Daniil Kurmyshev:
先生のお言葉から進めると、トレンドラインを 引けばトレンドの方向が示され、タンバリンを使わなくても引いたラインに対して正しい角度が示されるということです。写真に例を添付しましたが、私のロボットはルールに沿って作っていますが、本質は明確です。
写真は、計算したものをビジュアル化したものです。可視化の比率を歪める(グラフのスケールを変える)ことで、画像が大きく変化します。つまり、線の傾斜角度が度単位で変化するのです。しかし、スケールを変えても、計算結果は変わりません。もちろん、ピクセル単位でトレンドを計算するのであれば話は別ですが
 
Alexander Puzanov:
写真は、計算した結果をビジュアル化したものです。ビジュアライゼーションの比率を歪める(グラフのスケールを変える)ことで、絵は大きく変化します - 線は傾斜角度を度単位で変化させます。しかし、スケールを変えても、計算結果は変わりません。もちろん、ピクセル単位でトレンドを計算していたのなら話は別ですが。
しかし、TFごとにトレンドが違うので、小さいTFでは大きく見えたものが、大きいTFでは小さくなり、傾きも変わってきます。
 
Daniil Kurmyshev:
私もそう思いますが、TFごとにトレンドが異なり、小さいものでは大きく見えたものが、大きいものでは小さくなったり、傾きが変わるのは、トレンドの表現が変わるだけで、角度測定システムが変わるわけではない、測定システムが変われば、何もいいことはない、ということはご理解いただけると思います。
TFを変えても何の関係もない。TFを変えると、計算が変わる。また、スケールを変えても(+/-ボタンや端末のボタンで、時にはチャートをスクロールするだけでも)、計算結果は何も変わらず、°はどこにもないところで浮いている状態です。