FX取引ルール確立のために

取引方針が定まらぬ臆病者の外国為替証拠金取引の行方。 取引ルールの柱にテクニカルな売買サインを導入中。システム開発状況を全て公開。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

平均値幅インジケータ 検証用

実際の値幅と平均値幅との関係を検証するには、
ブログ右欄にある値幅表示と同じスタイルのインジケータが見やすい。
そこで作ってみました。

**********************
  平均値幅インジケータ
**********************
1日ごとに前日までの平均値幅と実値幅を描き比較できるようにする

考え方:
1 実際の日値幅と前日までの平均値幅を描く

CTL:
1 高値安値インジケータを使い、各日の実値幅を計算する
2 実値幅ラインを表示する
3 1日づらした値幅ラインをもとに1日単位の移動平均を求める
3 その移動平均をもとに平均値幅ラインを表示する
4 ベ-スラインを移動させることにより、表示スケ-ルを拡大できる
5 func_barminuteというすでに作ったファンクションがインストールされている必要がある

ソースコードは、続きを読むを参照してください。

高値安値予想インジケータhist
下段が今回のインジケータです。
過去の検証をするには高値安値予想インジケータより見やすい。
CTLは、ほとんど同じで何を表示させるかの違いのみ。
実値幅をヒストグラムにすると棒グラフ状になり見やすくなる。

実取引は1000通貨単位から売買可能のこちらの口座で行っています。


ランキング低迷中、励みのクリックよろしく 人気blogランキング
banner_11.gif

検証にはGFTのdealbook360を使っています
自前の検証をお勧めします
dealbook360口座開設はこちらから
FX
indicator ind_DayRange_hist ;
input starthour = 6, ave_days1 = 3, ave_days2 = 5, baseline=0 ;
draw DayRange("DayRange"), AV_Range1("AV1"),AV_Range2("AV2"), line_base("base") ;

vars fst(number), lst(number), i(number), j(number), k(number),
ave_range1(series),ave_range2(series), DayRange_delay(series),
Whigh (number),Wlow(number),line_high(series),line_low(series),
barminute(number), one_day_delay(number), DayRange_D(series) ;
  
begin
lst := back(close);
fst := front(close);
if lst < fst then return;

line_base := makeseries(front(close), back(close), baseline);

/* 1日のバーの本数を数える */
barminute := func_barminute();
one_day_delay := 1440/barminute;

/* 高値安値ライン */
{ チャ-ト初めにあるかもしれないゴミデ-タを無視する為、4番目のバ-からはじめる }
Whigh := close[fst+3] ;
Wlow := close[fst+3] ;
j := fst+3 ;

for i := fst+1+3 to lst do begin
 { スタ-ト時刻になるとこれまでの高値安値ラインを引く }
if hour(timestamp[i]) >= starthour and hour(timestamp[i-1]) < starthour then begin
for k := j to i-1 do begin 
line_high[k] := Whigh ;
line_low[k] := Wlow ;
end;

Whigh := close[i];
Wlow := close[i];
j :=i ;
end;

{ その日の高値安値を更新する }
if high[i] > Whigh then Whigh := high[i];
if low[i] < Wlow then Wlow := low[i];
end;

{ 本日のラインを引く }
{ jは直近のstathourのインデックス }
for k := j to lst do begin
line_high[k] := Whigh ;
line_low[k] := Wlow ;
end;

/* その日の値幅と1日分づらした値幅を求める */
for i:=lst downto fst+3 do
DayRange[i] := line_high[i] - line_low[i] ;
for i:=lst downto fst+3+2*one_day_delay do
DayRange_delay[i] := line_high[i-one_day_delay] - line_low[i-one_day_delay] ;

/* 1日分づらした値幅ラインをもとに、1日ごとの移動平均を求める */

j := lst;
DayRange_D[lst] := DayRange_delay[lst];
for i := lst-1 downto fst+3+2*one_day_delay do begin
if hour(timestamp[i+1]) >= starthour and hour(timestamp[i]) < starthour then begin
j := j - 1;
DayRange_D[j] := DayRange_delay[i];
end;
end;

ave_range1 := sma(DayRange_D, ave_days1);
ave_range2 := sma(DayRange_D, ave_days2);

/* 平均値幅のラインを引く */
k := lst;
AV_Range1[lst]:= ave_range1[lst];
AV_Range2[lst]:= ave_range2[lst];

for i := lst-1 downto fst+3 do begin
if hour(timestamp[i+1]) >= starthour and hour(timestamp[i]) < starthour then begin
k := k - 1;
AV_Range1[i] := ave_range1[k];
AV_Range2[i] := ave_range2[k];
end else begin
AV_Range1[i] := AV_Range1[i+1];
AV_Range2[i] := AV_Range2[i+1];
end;
end;
end.
スポンサーサイト

テーマ:FXでシステムトレード - ジャンル:株式・投資・マネー

コメント

こんにちは。

CTLについて質問があるのですが、お時間ある時にでも聞いてはいただけないでしょうか・・・

RSIの値が40から60のの間だけボリンジャーを目安に取引としたいのですが・・・

10行目でエラーになってしまいます。
このやり方はだめなんでしょうか?

strategy bori_bori;
input lots =1, BB_period =20;
vars bb_upper_line(series), bb_lower_line(series), bb_middle_line(series),
rs_upper_line(series), rs_lower_line(series), rs_line(series);
begin
Relative_Strength(close,14,60,40);
rs_line := Relative_Strength.line;
rs_upper_line := Relative_Strength.line_hi;
rs_lower_line := Relative_Strength.line_lo;
if (rs_line <= rs_upper_line) and (rs_line >= rs_lower_line) then begin
Bollinger_Bands(close,BB_period,2);
bb_upper_line := Bollinger_Bands.line_upper;
bb_lower_line := Bollinger_Bands.line_lower;
bb_middle_line := Bollinger_Bands.line_mid;

if crossdown(close,bb_upper_line) then sell(lots);
if crossup(close,bb_lower_line) then buy(lots);

if crossdown(close,bb_middle_line) then exitshort();
if crossup(close,bb_middle_line) then exitlong();

end;
end.

  • 2009/03/12(木) 16:03:10 |
  • URL |
  • 南アフリカランド #-
  • [ 編集]

Re: タイトルなし

南アフリカランドさん

動くように変更しました。
赤字部分が変更点です。

strategy bori_bori;
input lots =1, BB_period =20;
vars bb_upper_line(series), bb_lower_line(series), bb_middle_line(series),lst=1,
rs_upper_line(series), rs_lower_line(series), rs_line(series);
begin
lst := back(close) ;
if lst <= front(close)+ BB_period then return;
{ この部分は、チャートのはじめにボリンジャーやRSIのデータがないと
動作しないのを防止するためにその部分を飛ばしています }
Relative_Strength(close,14,60,40);
rs_line := Relative_Strength.line;
rs_upper_line := Relative_Strength.line_hi;
rs_lower_line := Relative_Strength.line_lo;

if (rs_line[lst] <= rs_upper_line[lst]) and (rs_line[lst] >= rs_lower_line[lst]) then begin
{ ここのラインはシリーズという形式で数の連続的並びです。シリーズ同士を比較することはできないので、numberの形式にしています。lstは最後のバーを指定しています。ストラテジーの場合、lst=1にするのが約束のようです。
この辺とところはchart studioのhelpの見本を参照してください }
Bollinger_Bands(close,BB_period,2);
bb_upper_line := Bollinger_Bands.line_upper;
bb_lower_line := Bollinger_Bands.line_lower;
bb_middle_line := Bollinger_Bands.line_mid;

if crossdown(close,bb_upper_line) then sell(lots);
if crossup(close,bb_lower_line) then buy(lots);

if crossdown(close,bb_middle_line) then exitshort();
if crossup(close,bb_middle_line) then exitlong();

end;
end.


> こんにちは。
>
> CTLについて質問があるのですが、お時間ある時にでも聞いてはいただけないでしょうか・・・
>
> RSIの値が40から60のの間だけボリンジャーを目安に取引としたいのですが・・・
>
> 10行目でエラーになってしまいます。
> このやり方はだめなんでしょうか?
>
> strategy bori_bori;
> input lots =1, BB_period =20;
> vars bb_upper_line(series), bb_lower_line(series), bb_middle_line(series),
> rs_upper_line(series), rs_lower_line(series), rs_line(series);
> begin
> Relative_Strength(close,14,60,40);
> rs_line := Relative_Strength.line;
> rs_upper_line := Relative_Strength.line_hi;
> rs_lower_line := Relative_Strength.line_lo;
> if (rs_line <= rs_upper_line) and (rs_line >= rs_lower_line) then begin
> Bollinger_Bands(close,BB_period,2);
> bb_upper_line := Bollinger_Bands.line_upper;
> bb_lower_line := Bollinger_Bands.line_lower;
> bb_middle_line := Bollinger_Bands.line_mid;
>
> if crossdown(close,bb_upper_line) then sell(lots);
> if crossup(close,bb_lower_line) then buy(lots);
>
> if crossdown(close,bb_middle_line) then exitshort();
> if crossup(close,bb_middle_line) then exitlong();
>
> end;
> end.

  • 2009/03/12(木) 22:32:55 |
  • URL |
  • bingodog #-
  • [ 編集]

ありがとうございます!

しかも、解説まで付いていただき修正までしてくださって・・・

本当に感謝です。

修正点、なるほどです。

SRIの値は連続した値で比較できないのは当然ですね。

back(close)を使えばいいですね。。

  • 2009/03/13(金) 14:28:34 |
  • URL |
  • 南アフリカランド #-
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://fxrun.blog55.fc2.com/tb.php/1071-423f2d7d
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。