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

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

スポンサーサイト

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

アジアブレイクの改良ストラテジジーの10回目(ストラテジーソースコード)

アジアブレイクの改良ストラテジジーの10回目です。

これまで掲載してきた変更点を全て盛り込んだストラテジーのソースコードを掲載します。
結構長いので「続きを読む」を参照してください

入力項目の説明:
barminute=15 使用するチャートの時間足(分)
open_hour=7 1日の始まり時刻(値幅フィルターの値幅計算開始時刻)
start_hour=13 高値安値設定の始まり時刻
end_hour=18 高値安値設定の終わり時刻(18時以後になるとエントリー可能になる)
entry_endhour=23 エントリー終了時刻(23時台はエントリー可能)
delta=0 売買ラインの微調整に使う(平均値幅の割合で規定する)
entryrange=0.7 値幅フィルターの動作レベル設定(平均値幅の70%以上になるとエントリー出来ない)
ave_days=3 平均値幅の平均日数
limit=0.02 平均値幅計算の上限値
trend=true 単純移動平均トレンドフィルターの有効/無効切り替え
smaperiod=196 単純移動平均の期間
fixexit=false 固定利益確定ラインの有効/無効切り替え
profit_ratio=0.25 利益確定ラインの平均値幅比率(25%)
loss_ratio=0.3 損失確定ラインの平均値幅比率(30%)
トレール手仕舞設定
trail_0=true 買いの利確1ライン未満、売りの利確1ライン以上での手仕舞の有効/無効切り替え
exbar_0=3 その領域では3本前までの安値高値をブレイクすると手仕舞
trail_1=true 買いの利確1ライン以上・利確2ライン未満、売りの利確1ライン以下・利確2ライン以上での手仕舞の有効/無効切り替え
exbar_1=1 その領域では1本前までの安値高値をブレイクすると手仕舞
trail_2=true 買いの利確2ライン以上、売りの利確2ライン以下での手仕舞の有効/無効切り替え
exbar_2=1 その領域では1本前までの安値高値をブレイクすると手仕舞

参考になったらクリックよろしく 人気blogランキング
    
検証にはGFTのdealbook360を使っています
GFT

これまでの開発システムソースコード:
モジュール目次

システム売買ルール

自前の検証をお勧めします
口座開設はこちらから
サザインベストメント

/*時刻間高値安値ブレイクストラテジ- */

strategy str_time_HL_break;
input barminute=15, open_hour=7,start_hour=13,end_hour=18,entry_endhour=23,delta=0,
entryrange=0.7,ave_days=3 ,limit=0.02,
trend=true,smaperiod=196,
fixexit=false, profit_ratio=0.25, loss_ratio=0.3,
trail_0=true, exbar_0=3, trail_1=true, exbar_1=1, trail_2=true, exbar_2=1,
lots=1 ;
vars i(number),lst(number),sma_line(series),smatrend(number),
top_line_0(series),bottom_line_0(series),
top_line_1(series),bottom_line_1(series),
top_line_2(series),bottom_line_2(series),
buy_line(series), sell_line(series),bar(number),c_range(series),AV_range(series),
prflong_line1(series), prfshort_line1(series),
losslong_line(series), lossshort_line(series),
prflong_line2(series),prfshort_line2(series);

begin

lst := back(close) ;
if lst < front(close)+ (4*1440/barminute) then return;

ind_range_break(exbar_0,1) ;{ 直近安値(高値)更新での手仕舞いに使います }
top_line_0 := ind_range_break.top_line ;
bottom_line_0 := ind_range_break.bottom_line ;

ind_range_break(exbar_1,1) ;{ 直近安値(高値)更新での手仕舞いに使います }
top_line_1 := ind_range_break.top_line ;
bottom_line_1 := ind_range_break.bottom_line ;

ind_range_break(exbar_2,1) ;{ 直近安値(高値)更新での手仕舞いに使います }
top_line_2 := ind_range_break.top_line ;
bottom_line_2 := ind_range_break.bottom_line ;


ind_time_HL_break_3av(start_hour, end_hour, ave_days, limit,
profit_ratio,loss_ratio, delta);
//利確、損きりラインを定義します
prflong_line1 := ind_time_HL_break_3av.prflong_line1;
prflong_line2 := ind_time_HL_break_3av.prflong_line2;
losslong_line := ind_time_HL_break_3av.losslong_line;
prfshort_line1 := ind_time_HL_break_3av.prfshort_line1;
prfshort_line2 := ind_time_HL_break_3av.prfshort_line2;
lossshort_line := ind_time_HL_break_3av.lossshort_line;
// エントリ-ラインを定義します
buy_line := ind_time_HL_break_3av.buy_line;
sell_line := ind_time_HL_break_3av.sell_line;
//値幅インジケタの呼び出し
ind_DayRange_bar(open_hour , ave_days , limit);
c_range := ind_DayRange_bar.range_bar ;
AV_range := ind_DayRange_bar.AV_Range ;
//単純移動平均の呼び出し
Mov_Avg_Simple(close, smaperiod, 0, 1) ;
sma_line := Mov_Avg_Simple.line ;
smatrend := sma_line[lst]-sma_line[lst-1] ;

//損切りラインでの損切り
if long() and close[lst] < losslong_line[lst] then exitlong();
if short() and close[lst] > lossshort_line[lst] then exitshort() ;


/*エントリ- */
//値幅フィルタ
if c_range[lst-1] < AV_range[lst-1]*entryrange then begin

//エントリ-ラインでのドテン  
if long() and close[lst] < sell_line[lst] then begin
exitlong() ;
sell(lots) ;
end;
if short() and close[lst] > buy_line[lst] then begin
exitshort() ;
buy(lots) ;
end;

//トレンドフィルタ有効
if trend = true then begin
{ エントリー終了時刻が23時台以前の場合 }
if entry_endhour<=23 and entry_endhour>=end_hour then begin
if hour(timestamp[lst]) <= entry_endhour and hour(timestamp[lst]) >= end_hour then begin
if close[lst] <= sell_line[lst] and close[lst-1] > sell_line[lst-1] and smatrend < 0
then sell(lots) ;
if close[lst] >= buy_line[lst] and close[lst-1] < buy_line[lst-1] and smatrend > 0
then buy(lots) ;
end;
end;

{ エントリー終了時刻が0時以降の場合 }
if entry_endhour<=start_hour then begin
if hour(timestamp[lst]) <= entry_endhour or hour(timestamp[lst]) >= end_hour then begin
if close[lst] <= sell_line[lst] and close[lst-1] > sell_line[lst-1] and smatrend < 0
then sell(lots) ;
if close[lst] >= buy_line[lst] and close[lst-1] < buy_line[lst-1] and smatrend > 0
then buy(lots) ;
end;
end;

//トレンドフィルタ無効
end else begin
{ エントリー終了時刻が23時台以前の場合 }
if entry_endhour<=23 and entry_endhour>=end_hour then begin
if hour(timestamp[lst]) <= entry_endhour and hour(timestamp[lst]) >= end_hour then begin
if close[lst] <= sell_line[lst] and close[lst-1] > sell_line[lst-1]
then sell(lots) ;
if close[lst] >= buy_line[lst] and close[lst-1] < buy_line[lst-1]
then buy(lots) ;
end;
end;

{ エントリー終了時刻が0時以降の場合 }
if entry_endhour<=start_hour then begin
if hour(timestamp[lst]) <= entry_endhour or hour(timestamp[lst]) >= end_hour then begin
if close[lst] <= sell_line[lst] and close[lst-1] > sell_line[lst-1]
then sell(lots) ;
if close[lst] >= buy_line[lst] and close[lst-1] < buy_line[lst-1]
then buy(lots) ;
end;
end;
end;
end;

/* 直近安値(高値)ブレイクでの手仕舞い(トレ-ルストップ) */

 //買いの利確1ライン未満、売りの利確1ライン以上での手仕舞
if trail_0 = true then begin  { この機能の有効無効を切り替える }
if close[lst] <= prflong_line1[lst] then begin
if close[lst] < bottom_line_0[lst] and close[lst-1] >= bottom_line_0[lst-1] then exitlong() ;
end;
if close[lst] >= prfshort_line1[lst] then begin
if close[lst] > top_line_0[lst] and close[lst-1] <= top_line_0[lst-1] then exitshort() ;
end;
end;
//買いの利確1ライン以上・利確2ライン未満、売りの利確1ライン以下・利確2ライン以上での手仕舞
if trail_1 = true then begin  { この機能の有効無効を切り替える }
if close[lst] > prflong_line1[lst] and close[lst] <= prflong_line2[lst] then begin
if close[lst] < bottom_line_1[lst] and close[lst-1] >= bottom_line_1[lst-1] then exitlong() ;
end;
if close[lst] < prfshort_line1[lst] and close[lst] >= prfshort_line2[lst] then begin
if close[lst] > top_line_1[lst] and close[lst-1] <= top_line_1[lst-1] then exitshort() ;
end;
end;
//買いの利確2ライン以上、売りの利確2ライン以下での手仕舞
if trail_2 = true then begin { この機能の有効無効を切り替える }
if close[lst] > prflong_line2[lst] then begin 
if close[lst] < bottom_line_2[lst] and close[lst-1] >= bottom_line_2[lst-1] then exitlong() ;
end;
if close[lst] < prfshort_line2[lst] then begin
if close[lst] > top_line_2[lst] and close[lst-1] <= top_line_2[lst-1] then exitshort() ;
end;
end;

/* 利確ラインでの手仕舞い */
if fixexit = true then begin { この機能の有効無効を切り替える }
if close[lst] < prflong_line2[lst] and close[lst-1] >= prflong_line2[lst-1] then exitlong() ;{ 利確 }
if close[lst] < prflong_line1[lst] and close[lst-1] >= prflong_line1[lst-1] then exitlong() ;{ 利確 }

if close[lst] > prfshort_line1[lst] and close[lst-1] <= prfshort_line1[lst-1] then exitshort() ;{ 利確 }
if close[lst] > prfshort_line2[lst] and close[lst-1] <= prfshort_line2[lst-1] then exitshort() ;{ 利確 }
end;

/*時刻強制手仕舞い */
bar := func_barminute();
if hour(timestamp[lst]) = start_hour-1 and minute(timestamp[lst]) = 60 - 2*bar then begin
exitlong();
exitshort();
end;
end.
スポンサーサイト

コメント

コメントの投稿


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

トラックバック

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

FC2Ad

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