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

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

スポンサーサイト

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

高値安値予想インジケータの改善版

先日掲載した高値安値予想インジケータを実際のトレードに使ってみた。
改善すべき点があったので修正した。

1 平均値幅を2種類同時に表示する
  3日平均と5日平均とか、前日値幅と3日平均とかの組み合わせで表示してみると、
  なんとなく見えてくるものがあるように思えた。

2 チャートのデータが少ない為に平均値が得られない場合は、エラー表示が出るようにした
  エラー表示は、10本前または15本前の始値終値をそのバーから過去に向かってラインを表示します。

3 チャートの一番左端にゴミデータがある場合があり、
  チャートの縦方向のスケールが拡大してしまうのを避ける為、始の3本のバーを無視するようにした

/*高値安値予想インジケータ(ind average highlow backB)

平均値幅に基づいた高値安値予想ラインを自動的に描く
検証用に過去の日に遡る機能あり

考え方:
1 チャートからここ数日の平均値幅を計算する
2 現在日の高値安値を基に、予想高値安値のラインを描く

CTL:
1 高値安値インジケータを使い、値幅の平均値を2種類計算する
2 現在日の「高値-平均値」と「安値+平均値」を計算して表示する*/

indicator ind_average_highlow_backB;
input starthour = 6, ave_days1 = 3, ave_days2 = 5,day_before = 0 ;
draw line_high("day high",dot_line,red), line_low("day low",dot_line,green),
ave_high1("AVE H1",dash_dot_line,red), ave_low1("AVE L1",dash_dot_line,green),
ave_high2("AVE H2",dash_dot_line,dark_red), ave_low2("AVE L2",dash_dot_line,dark_green);
vars fst(number), lst(number), i(number), j(number), k(number),countD(number),delay(number),
day_range(number), sum_day_range(number),ave_range1(number),ave_range2(number),
Whigh (number),Wlow(number), current_high(number), current_low(number),
barminute(number), one_day_delay(number), todaybar(number);
  
begin
lst := back(close);
fst := front(close);
if lst < fst then return;

/* 過去の時点にさかのぼる為、バーの本数を数える */
barminute := func_barminute();
one_day_delay := 1440/barminute;

todaybar := 0;
for i:=lst-1 downto fst+3 do begin
todaybar := todaybar + 1 ;
if hour(timestamp[i]) < starthour and hour(timestamp[i+1]) >= starthour then break ;
end;

if day_before = 0 then
delay := 0 ;
if day_before >= 1 then
delay := todaybar + one_day_delay * (day_before - 1) ;

/* 高値安値ライン */
{ チャ-ト初めにあるかもしれないゴミデ-タを無視する為、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;

countD := 0 ;
day_range := 0 ;
sum_day_range :=0 ;
ave_range1 := 0;
ave_range2 := 0;

for i:=lst-1-delay downto fst+3 do begin
/* 値幅を積算して平均値を求める */
if hour(timestamp[i+1]) >= starthour and hour(timestamp[i]) < starthour
then begin
countD := countD + 1 ;
day_range := line_high[i] - line_low[i] ;
sum_day_range := sum_day_range + day_range ;
end;

if countD = ave_days1 then
ave_range1 := sum_day_range / ave_days1 ;

if countD = ave_days2 then
ave_range2 := sum_day_range / ave_days2 ;

end;

  /* 現在の高値安値をもとに予想高値安値ラインを引く */
/* 平均値幅は2種類設定できる */
if countD >= ave_days1+1 then begin
ave_high1 := makeseries(fst, lst-delay, line_low[lst-delay] + ave_range1) ;
ave_low1 := makeseries(fst, lst-delay, line_high[lst-delay] - ave_range1) ;
end else begin
ave_high1 := makeseries(fst, lst-10-delay, close[lst-10-delay] ) ;
ave_low1 := makeseries(fst, lst-10-delay, open[lst-10-delay] ) ;
end;

if countD >= ave_days2+1 then begin
ave_high2 := makeseries(fst, lst-delay, line_low[lst-delay] + ave_range2) ;
ave_low2 := makeseries(fst, lst-delay, line_high[lst-delay] - ave_range2) ;
end else begin
ave_high2 := makeseries(fst, lst-15-delay, close[lst-15-delay] ) ;
ave_low2 := makeseries(fst, lst-15-delay, open[lst-15-delay] ) ;
end;
end.
スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック

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

FC2Ad

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