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

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

スポンサーサイト

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

レジスタンス・サポートラインインジケータ

毎週掲載している今週の戦略の4時間足チャートには、
過去の高値安値ラインが引いてあります。
これを自動的に引くためのインジケータのソースコードを掲載します。
2009.4.5時間足

名称:
ind_resistance_support_3_back

目的:
過去の高値安値がレジスタンスやサポートになりやすいと言われている。
これを自動的に表示して売買戦略の補助とする。

仕様:
現在から過去に遡り、日ごとの高値安値を比較して更新されれば水平ラインを引く。
チャート上で上にある高値ラインは、下にあるラインよりも古い日の高値になる。
安値についても同様。

1日の開始と同時にラインは更新される。
現在値がラインをまたいでもラインはそのまま表示される。

func_barminute と ind_HL_market2というインジケータがインストールされている必要がある。
3大市場高値安値インジケータ
右欄のモジュール集から探してください。

使い方(入力項目):
highline:
高値ラインの数。10本まで表示できる。

lowline:
安値ラインの数。10本まで表示できる。

daystarthour1:
1日の始まり時刻。通常7時、サマータイム6時。
過去のライン状態を再現する機能にリンクしている、

starthour2:
starthour3:
1日を2分割、3分割してそれぞれの高値安値を表示する為、指定時刻を設定する。
daystarthour1と同じ時刻にすれば、分割されない。

day_before:
0にすると現在日の始値を基準にしてラインを引く。
1にすると前日の始値を基準にしてラインを引く。
以下順次過去にさかのぼる。
高値安値ラインがレジスタンス・サポートとして機能しているかどうかの検証に使う。

ソースコードは続きを読むを参照。

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


参考になったら、励みのクリックよろしく 人気blogランキング
banner_11.gif

検証にはGFTのdealbook360を使っています
自前の検証をお勧めします
dealbook360口座開設はこちらから
FX



/* 過去の高値、安値に基づいて水平線を引く */
/* 現在の高値よりも高い直近の高値を有効とする */
/* 順次過去に遡り高値更新する場合のみ有効とする */
/* 安値についても同様とする */
/* 最大水平線数は10本づつ */
/* 表示線数を制限できる */
/* 更新されたラインをそのまま表示させる
検証のために過去の状態を再現できる(day_beforeの数が増えると過去にさかのぼる) */

indicator ind_resistance_support_3_back ;
input highline=5, lowline=5, daystarthour1=7, starthour2=7,starthour3=7,day_before =0 ;
{daystarthour1は6時または7時にする。daystarthour2、daystarthour3は1日の中の適切な時刻を選ぶ}
draw R1("R1",solid_line,dark_red ), R2("R2",solid_line,dark_red), R3("R3",solid_line,dark_red),
R4("R4",solid_line,dark_red), R5("R5",solid_line,dark_red), R6("R6",solid_line,dark_red ),
R7("R7",solid_line,dark_red), R8("R8",solid_line,dark_red), R9("R9",solid_line,dark_red),
R10("R10",solid_line,dark_red),
S1("S1",solid_line,dark_red), S2("S2",solid_line,dark_red), S3("S3",solid_line,dark_red),
S4("S4",solid_line,dark_red), S5("S5",solid_line,dark_red) ,
S6("S6",solid_line,dark_red), S7("S7",solid_line,dark_red), S8("S8",solid_line,dark_red),
S9("S9",solid_line,dark_red), S10("S10",solid_line,dark_red) ,
line_high("Day High",dot_line, dark_gray ), line_low("Day Low", dot_line, dark_gray);
vars lst(number), fst(number),linecountH(number),linecountL(number), delay(number),
No_drawH(number),No_drawL(number),one_day_delay(number),todaybar(number),
Rhigh1(number), Rhigh2(number), Rhigh3(number), Rhigh4(number), Rhigh5(number),
Rhigh6(number), Rhigh7(number), Rhigh8(number), Rhigh9(number), Rhigh10(number),
Slow1(number), Slow2(number), Slow3(number), Slow4(number), Slow5(number),
Slow6(number), Slow7(number), Slow8(number), Slow9(number), Slow10(number),
Wlow(number), Whigh(number), i(number),barminute(number), line_open(series);

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 do begin
todaybar := todaybar + 1 ;
if hour(timestamp[i]) < daystarthour1 and hour(timestamp[i+1]) >= daystarthour1 then
break ;
end;

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

/* 高値安値比較の為の初期設定
  初期値を始値にする。
  高値安値更新しても、当日中はラインが消えないようにするため */
line_open[fst] := open[fst];
for i := fst+1 to lst do begin
if hour(timestamp[i]) >= daystarthour1 and hour(timestamp[i-1]) < daystarthour1
or hour(timestamp[i]) >= starthour2 and hour(timestamp[i-1]) < starthour2
or hour(timestamp[i]) >= starthour3 and hour(timestamp[i-1]) < starthour3
then
line_open[i] := open[i]
else
line_open[i] := line_open[i-1] ;
end;

/* 高値安値検索の初期設定 */
Whigh := line_open[lst-delay] ;
Wlow := line_open[lst-delay] ;

ind_HL_market2(daystarthour1, starthour2, starthour3 );
line_high := ind_HL_market2.market_high ;
line_low := ind_HL_market2.market_low ;
linecountH := 0;
linecountL := 0;

/* 高値検索 */
for i := (lst-1-delay) downto fst do begin

if hour(timestamp[i]) < daystarthour1 and hour(timestamp[i+1]) >= daystarthour1
or hour(timestamp[i]) < starthour2 and hour(timestamp[i+1]) >= starthour2
or hour(timestamp[i]) < starthour3 and hour(timestamp[i+1]) >= starthour3
then begin

if Whigh < line_high[i] then begin
linecountH := linecountH + 1 ;
Whigh := line_high[i] ;

if linecountH = 1 then Rhigh1 := line_high[i] ;
if linecountH = 2 then Rhigh2 := line_high[i] ;
if linecountH = 3 then Rhigh3 := line_high[i] ;
if linecountH = 4 then Rhigh4 := line_high[i] ;
if linecountH = 5 then Rhigh5 := line_high[i] ;
if linecountH = 6 then Rhigh6 := line_high[i] ;
if linecountH = 7 then Rhigh7 := line_high[i] ;
if linecountH = 8 then Rhigh8 := line_high[i] ;
if linecountH = 9 then Rhigh9 := line_high[i] ;
if linecountH = 10 then Rhigh10 := line_high[i] ;
end;

No_drawH := min(linecountH, highline) ;
        { ラインの指定数と検出したライン数の小さい方を選択する } 

/* 安値検索 */
if Wlow > line_low[i] then begin
linecountL := linecountL + 1 ;
Wlow := line_low[i] ;

if linecountL = 1 then Slow1 := line_low[i] ;
if linecountL = 2 then Slow2 := line_low[i] ;
if linecountL = 3 then Slow3 := line_low[i] ;
if linecountL = 4 then Slow4 := line_low[i] ;
if linecountL = 5 then Slow5 := line_low[i] ;
if linecountL = 6 then Slow6 := line_low[i] ;
if linecountL = 7 then Slow7 := line_low[i] ;
if linecountL = 8 then Slow8 := line_low[i] ;
if linecountL = 9 then Slow9 := line_low[i] ;
if linecountL = 10 then Slow10 := line_low[i] ;
end;

No_drawL := min(linecountL, lowline) ;
        { ラインの指定数と検出したライン数の小さい方を選択する } 
end;

/* 指定された数だけのラインを描く */
if No_drawH >= 1 then R1 := makeseries(fst, lst-delay, Rhigh1) ;
if No_drawH >= 2 then R2 := makeseries(fst, lst-delay, Rhigh2) ;
if No_drawH >= 3 then R3 := makeseries(fst, lst-delay, Rhigh3) ;
if No_drawH >= 4 then R4 := makeseries(fst, lst-delay, Rhigh4) ;
if No_drawH >= 5 then R5 := makeseries(fst, lst-delay, Rhigh5) ;
if No_drawH >= 6 then R6 := makeseries(fst, lst-delay, Rhigh6) ;
if No_drawH >= 7 then R7 := makeseries(fst, lst-delay, Rhigh7) ;
if No_drawH >= 8 then R8 := makeseries(fst, lst-delay, Rhigh8) ;
if No_drawH >= 9 then R9 := makeseries(fst, lst-delay, Rhigh9) ;
if No_drawH >= 10 then R10 := makeseries(fst, lst-delay, Rhigh10) ;

if No_drawL >= 1 then S1 := makeseries(fst, lst-delay, Slow1) ;
if No_drawL >= 2 then S2 := makeseries(fst, lst-delay, Slow2) ;
if No_drawL >= 3 then S3 := makeseries(fst, lst-delay, Slow3) ;
if No_drawL >= 4 then S4 := makeseries(fst, lst-delay, Slow4) ;
if No_drawL >= 5 then S5 := makeseries(fst, lst-delay, Slow5) ;
if No_drawL >= 6 then S6 := makeseries(fst, lst-delay, Slow6) ;
if No_drawL >= 7 then S7 := makeseries(fst, lst-delay, Slow7) ;
if No_drawL >= 8 then S8 := makeseries(fst, lst-delay, Slow8) ;
if No_drawL >= 9 then S9 := makeseries(fst, lst-delay, Slow9) ;
if No_drawL >= 10 then S10 := makeseries(fst, lst-delay, Slow10) ;

end;
end.
スポンサーサイト

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

コメント

エラーメッセージに関して

最近CTLの勉強を始めたばかりの素人ですが、いつも参考にさせていただいています。ところでレジスタンスサポートラインインジケーターを早速チャートに載せようとしたのですが、Cart studioでベリファイしようとしたところ、
(Ln:27 Col:14) Error:mudule func_barminutes not found
(Ln:27 Col:11) Error: imcompatible types
とのエラーメッセージが表示されました。おそらく、func_barminutesという関数を認識できないよ、という意味だと思うのですが、この関数のモジュールはどこで手に入れることができるのでしょうか。よろしくお願いします。

  • 2009/05/03(日) 07:22:19 |
  • URL |
  • katsu #-
  • [ 編集]

見つけました。

上記の関数の件ですが、以前のモジュール集のなかにあるのを見つけることができました。どうもお騒がせしました。
今後とも、サイトが更新されるのを楽しみにしています。

  • 2009/05/03(日) 08:41:08 |
  • URL |
  • katsu #-
  • [ 編集]

コメントの投稿


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

トラックバック

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

FC2Ad

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