ヒストグラムの作成
今回は、MQL4のスクリプトでUSDJPYH1をヒストグラム化してみました。Rの勉強になってない。。以下がコードです。
//+------------------------------------------------------------------+ //| Copyprice.mq4 | //| Copyright ゥ 2009, bighope | //| http://expertadviser-bighope.blogspot.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright ゥ 2009, bighope" #property link "http://expertadviser-bighope.blogspot.com/" #property show_inputs extern string Filename = "USDJPYH1"; int bufindex(){ int hiindex,lowindex,sd; double st; hiindex = iHighest(NULL,0,MODE_HIGH); lowindex = iLowest(NULL,0,MODE_LOW); st = High[hiindex] - Low[lowindex]; sd = st/Point*0.1; return(sd); } //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- int handle,index; bool ret; int HL; double Ds[]; index = bufindex(); ArrayResize(Ds,index); handle=FileOpen(Filename+".csv",FILE_CSV|FILE_WRITE,','); if(handle<1) return(false); for(int i=0;i<Bars;i++){ HL=MathRound((High[i]-Low[i])*MathPow(10,Digits)) ; Ds[HL]++; } for(i=0;i<index;i++){ ret = FileWrite(handle,i,Ds[i]/Bars); if(ret==false)return(0); } FileClose(handle); Comment("Get Data OK"); //---- return(0); } //+------------------------------------------------------------------+スクリプトを作動させると、・・・//experts/filesにCSVファイルが作られます。
※これをRに読み取らせる訳ですが、Rのアイコンを右クリック→プロパティを選択し、作業フォルダーのアドレスを変更しておくと、ひと手間省けて便利です。
Rを起動し以下のコードでヒストグラムが表示されます。
#データの読み込み(リスト形式)
d<-read.csv("UJH1.csv") #データの代入
x<-d[[1]]
y<-d[[2]] #表示
plot(x,y,main="USDJPU1時間足(Hi-Low)",xlab="pips",ylab="頻度%",xlim=c(0,80), ylim=c(0,0.06),col=1)
※Rはデータの種類がいろいろあって、はじめは、ここでつまずきました。 リストとは
確立密度関数の推定
当初は、ガンマ分布を当てはめようと考えていましたが、ある方から、対数正規分布を教えて頂いたので今回は、対数正規分布を当てはめてみました。回帰方法は、nls() 関数を使用しましたが、初期値設定を導くために以下のコードを追加しています。結果をグラフ化したものが以下の通りです。
対数正規分布の性質から平均と分散(偏差)が求まります。
平均=EXP(meanlog+(sdlog^2)/2)=19.01149(pips)
分散=EXP(2×meanlog+sdlog^2)×(EXP(sdlog^2)-1)=148.6416
偏差=√分散=12.19187
時間単位での変化
時間単位で調べてみると以下の表のようになりました。時間帯 | meanlog | sdlog | 平均 | 偏差 |
0 | 2.875508 | 0.508818 | 20.18533 | 10.9727 |
1 | 2.706802 | 0.567246 | 17.59625 | 10.84084 |
2 | 2.462878 | 0.565203 | 13.77155 | 8.448786 |
3 | 2.356058 | 0.561678 | 12.35177 | 7.522623 |
4 | 2.440356 | 0.562824 | 13.4468 | 8.209028 |
5 | 2.593056 | 0.522776 | 15.32834 | 8.593275 |
6 | 2.947423 | 0.468463 | 21.2669 | 10.53519 |
7 | 3.016413 | 0.479638 | 22.90693 | 11.65029 |
8 | 2.948864 | 0.466359 | 21.27663 | 10.48733 |
9 | 2.849121 | 0.495672 | 19.53029 | 10.30681 |
10 | 2.80227 | 0.487687 | 18.56335 | 9.619049 |
11 | 2.857566 | 0.47229 | 19.47429 | 9.735056 |
12 | 3.191692 | 0.516832 | 27.80594 | 15.38629 |
13 | 3.113179 | 0.503577 | 25.53306 | 13.71777 |
14 | 3.242793 | 0.51251 | 29.19876 | 16.00329 |
15 | 3.034412 | 0.475586 | 23.27787 | 11.72715 |
16 | 2.822379 | 0.50759 | 19.12895 | 10.36999 |
17 | 2.655229 | 0.517096 | 16.2635 | 9.004569 |
18 | 2.662298 | 0.519839 | 16.40218 | 9.136312 |
19 | 2.436341 | 0.53617 | 13.1982 | 7.616876 |
20 | 2.371655 | 0.582975 | 12.69978 | 8.079605 |
21 | 2.4068 | 0.499943 | 12.57576 | 6.701269 |
22 | 2.522685 | 0.492323 | 14.06762 | 7.367471 |
23 | 2.745907 | 0.502226 | 17.67272 | 9.465938 |
※時間は、GMT時間を採用
平均値(期待値)が、時間帯によって倍以上の違いがあることがわかります。ボリンジャーバンドもどき
平均と偏差と聞いて思い出すのがボリンジャーバンド!と言うことで、上記の内容を踏まえて指標の作成です。//+----------------------------------------------------------------------------+ //| BBands.mq4| //| Copyright ゥ 2009, bighope | //| http://expertadviser-bighope.blogspot.com/ | //+----------------------------------------------------------------------------+ #property copyright "Copyright ゥ 2011, bighope"
#property link http://expertadviser-bighope.blogspot.com/
#property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 Yellow extern int GMT = 1; extern double Multiple = 1.0; double Average[24] = {0.202,0.176,0.138,0.124,0.134,0.153,0.213,0.229,0.213,0.195,0.186,0.195,0.278,0.255,0.292,0.233,0.191,0.163,0.164,0.132,0.127,0.126,0.141,0.177}; double Deviation[24] = {0.110,0.108,0.084,0.075,0.082,0.086,0.105,0.117,0.105,0.103,0.096,0.097,0.154,0.137,0.160,0.117,0.104,0.090,0.091,0.076,0.081,0.067,0.074,0.095}; double Hibands[]; double Lowbands[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(2); //---- indicator line SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(0,Hibands); SetIndexBuffer(1,Lowbands); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,h,counted_bars=IndicatorCounted(); double hig,lowg,cg; //---- if(Multiple<0)return(0); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(i=0; i<limit; i++){ h = TimeHour(Time[i]); hig = High[iHighest(NULL,0,MODE_HIGH,12,i)]; lowg = Low[iLowest(NULL,0,MODE_LOW,12,i)]; h = h-GMT; if(h<0)h=24+h; cg=(hig+lowg)/2; Hibands[i] = cg + (Average[h]/2) + (Deviation[h] * Multiple); Lowbands[i] = cg - (Average[h]/2) - (Deviation[h] * Multiple); } //---- return(0); } //+------------------------------------------------------------------+ ※USDJPY M5用に作成しています。
まとめ
かなり飛ばしてまとめてしまいました。^^;
0 件のコメント :
コメントを投稿