MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1279

 
leonerd:

値動きの角度を計算する簡単なコードに鼻を突っ込む。下の写真はその様子です。


x(ピクセル、バーまたは時間)とy(ピクセルまたは価格)が何で測定されるかに依存します。
そして、それはどのようなタスクに依存するか:現在のスケール(ピクセル単位のバー幅)とタイムフレームで現在のチャートの角度を測定する?あるいは、どのようなTFやスケールでも角度が変わらないように測定することでしょうか?
タスクと座標系が違えば、ソリューションも違う。
 
leonerd:

値動きの角度を計算する簡単なコードに鼻を突っ込む。下の写真はその様子です。


まあ、タンジェントで計算すればいいんですけどね。しかも、角度そのものは必要なく、タンジェントが分かればいいのです。

 
Alexey Viktorov:

また、角度そのものは必要なく、タンジェントがあればいいのです。

そのとおりです。そして、私たちの接線は、「スピード」と呼ばれています。

この例では、1時間足のローソク足39本で1884ポイントを通過しています。この波の全速力は1884/(39/24) = 1159 pips/日です。

double interval=double(iBarShift(symbol,frame,start_time)-iBarShift(symbol,frame,finish_time)*PeriodSeconds(frame)/86400;
int distance=MathAbs(finish_price-start_price);
int speed=interval>0?(distance/interval):0;
そして、角度は必要ありません。なぜ角度が必要なのでしょうか?グラフを伸ばしたり、平らにしたりすると、角度はどうなるのでしょうか? 角度は、X軸とY軸が同じ単位であれば、測定することができます。例えば、正方形が描かれたノートを手に取り、その対角線に沿って線を引くと、45度になります。そして、上にあるもの、右にあるものはセンチメートルです。そしてここで、1つの価格帯は何に相当するのか?1時間、1日、それは比較にならない価値です。
 
Aleksei Stepanenko:

そのとおりです。そして、私たちの接線は、「スピード」と呼ばれています。

この例では、1時間のローソク足39本で1,884ポイントを通過しています。この波の全速力は1884/(39/24) = 1159 pips/日です。

そして、角度は必要ありません。なぜ角度が必要なのでしょうか?グラフを伸ばしたり、平らにしたりすると、角度はどうなるのでしょうか? 角度は、X軸とY軸が同じ単位であれば、測定することができます。例えば、正方形が描かれたノートを手に取り、その対角線に沿って線を引くと、45度になります。そして、上にあるもの、右にあるものはセンチメートルです。そしてここで、1つの価格帯は何に相当するのか?1時間とか1日とか、比較にならない値 です。

なぜ、比較する必要があるのでしょうか?キロメートルと時間も比較できないが、だからといって速度を時速キロメートルでカウントすることはできない。

接線が速度の場合、チャート周期の 単位時間あたりのその速度になります。39時間で価格が1884pips動いた場合、1時間あたり48pipsとなります。日数に換算する必要はありません。

しかし、「加速度」は、直前のバーの速度に対する現在の速度の比率として計算することもできます。そして、この値を複数集めることで、平均的な加速度を求めることができる。

 
Aleksei Stepanenko:

そして、ここでは、1つの価格帯が何に相当するのか?1時間、1日? 値が比較できない。

まあ、距離も光年で測るんですけどね。だから、問題ないのです。
一定速度を導入してみよう。例えば、1本の1分足バーに対して 1 _Point 、両軸の価格に座標系を持って くる。

そうすると、どの時間軸でも角度は同じになります。

主な 内容は、x1x2 の 間にある分バーの数を正しく計算 することです

このシステムでは、45度の角度はN分間にN*tg(45)=Nピップスの価格変動を意味し、30度の角度はN分間にN*tg(30)=N*0.57735ピップスの価格変動を意味することになります。
週末やボラティリティが低いなど、時間的な穴があるので、時間ではなく分単位のバーを使用するのがよいでしょう。
 

ローソク足は水平方向にも垂直方向にも伸ばせるので、100%賛成です。そして、角度を決める基準(ローソク足の幅をピクセル単位で、1ピクセルの中のポイント数)があるはずです。

オフトピックな質問をしてもいいでしょうか?

コンパイラが悪さをしないように、datatimeをdoubleに正しく変換するにはどうしたらいいですか(間違った変換によるデータ損失はあり得ます)?

double A = Time[1];

ありがとうございました。

 
Alexey Viktorov:

39時間で1884pipsの場合、1時間あたり48pipsのスピードとなります。また、それを日数に換算する必要は全くありません。

はい、それは私の推測です。スピードをint型(全ピップ)にしたので、ピリオドを大きくして、スピードの端数はあまり問題に せず、捨てられるようにしようと思ったのです。だから、1日につき1ポイントもらえたんです。まあ、これは人間の体内時計と一致するんですけどね。疲れて寝て、朝起きて「昨日のスピードは何だったんだ?見た目が安定しているので、それが自分の中の基準になっています。あとはもちろん、個人の好みの問題ですね。


ニコライ・セムコ

まあ、距離も光年で測るんですけどね。だから、それは問題ない。
等速を導入してみよう。例えば、1本の1分足バーに対して 1 _Point 、両軸の価格に座標系を持って くる。

はい、ここでも速度は得られますが、単位は「ポイント/分」のみです。土日や穴については、チャート上にローソク足があるものが時間間隔、ないもの(日/時間)はないものとして、次のように捉えました。なぜなら、土日を考慮し、その時間帯に価格が据え置かれると、理由もなく速度が著しく低下してしまうからです。でも、これも人それぞれですからね:)


ロニ鉄

コンパイラが悪さをしないように、datatimeをdoubleに正しく変換する方法(間違った変換によるデータ損失の可能性がある)。

double A = (double)Time[1];

なぜdatatimeをdoubleで保存するのですか?異なる種類の変数を同じ配列に格納し、あちこちに持っていく場合は、通常の配列を構造体配列に置き換えることを検討してください。


struct My
   {
   datetime time;
   double price;  
   } my[];

int finish=0;
ArrayResize(my,finish+1);
my[finish].time=Time[1];
my[finish].price=Close[1];
 

ありがとうございました。

構造体はmql5でのみ動作しますか、それともmql4で既に動作していますか?

 
そうです、4本で動くんです、はっきり言って書くのにとても便利なんです。
 
Roni Iron:

ありがとうございました。

構造体はmql5でのみ動作しますか、それともmql4で既に動作していますか?

構造物だけでなく、組合も。