勝てば官軍! ~ 日経225システムトレード編 -42ページ目

【実装】スリングショット

http://ameblo.jp/traderssystem/entry-10116514516.html


------------------------------------------------------

Input : entryPoint(10), fltrPoint(10);


//1日目、株価は過去2ヶ月間の高値を更新
If High[1] == Highest(High, 40) and


//2日目の安値は1日目の安値を少なくともNポイント下回る
Low[0] < Low[1] - fltrPoint Then {


//2日目、3日目に1日目の高値のNポイント上で逆指し買い
Buy("SW5601新規買", AtStop, High[0] + entryPoint);
}


//損切りは買値の2ポイント下

ExitLong("SW5601買決済", OnClose);

------------------------------------------------------

3日目のみの注文となっています。

アイデアを忠実に実現しようとしたら

下記のような分足ベースのロジックに変える必要がありそうです。


2日目

DayLow(0) < DayLow(1) - fltrPoint

のとき発注。


【実装】ブーマーズ

http://ameblo.jp/traderssystem/entry-10116513998.html


--------------------------------------------------------

Input : entryPoint(10), adxPeriod(14), adxPoint(30), diPeriod(10);


//ADXが30以上
If ADX(adxPeriod)[2] >= adxPoint and


//+DI>-DI
Diplus(diPeriod)[2] > DiMinus(diPeriod)[2] and


//2日目ははらみ足
High[2] > High[1] and Low[2] < Low[1] and


//3日目もはらみ足
High[1] > High[0] and Low[1] < Low[0] Then {


//4日目に3日目の高値からNポイント上で逆指し買い
Buy("SW5501新規買", AtStop, High[0] + entryPoint);
}


//損切りは3日目の安値からNポイント下

ExitLong("SW5501買決済", OnClose);

--------------------------------------------------------

引けでの決済としていますが、アイデアどおりならば

3日目の安値を変数に格納しておいてAtStop注文を出すような

形になると思います。





【実装】ジャック・イン・ザ・ボックス

http://ameblo.jp/traderssystem/entry-10116513482.html


------------------------------------------------------------

Input : entryPoint(10), highPeriod(60), rangePeriod(10);


//株価は過去60日間の高値を更新
If High[1] == Highest(High[1], highPeriod) and


//当日の値幅は過去9日間で最大
//(ここまで拡大ブレイクアウトの考え方)
NthHighestBar(1, Range[1], rangePeriod) == 1 and


//翌日ははらみ足(前日高値>当日高値 かつ 前日安値<当日安値)
High[1] > High[0] and Low[1] < Low[0] Then {


//はらみ足の翌日、拡大ブレイクアウトした日の高値からNポイント上で逆指し買い
Buy("SW5401新規買", AtStop, High[0] + entryPoint);
}


//損切りは買値の1ポイント下

//強く引けるならば少なくともポジションの半分を持ち越す → どう実装するか!

ExitLong("SW5401買決済", OnClose);

------------------------------------------------------------


実運用するときは当面1枚で取引を行おうと思っているので

「//強く引けるならば少なくともポジションの半分を持ち越す」

の部分は実装していません。


はらみ足という用語がありますが、

「前日高値>当日高値 かつ 前日安値<当日安値」

とおきかえれば難しくはないと思います。


DVD 岩本祐介さん

DVD 日経225先物デイトレード戦略のアイディア・検証・改良/岩本祐介
¥5,040
Amazon.co.jp


GAPアップしたとき、GAPダウンしたときのエントリー方法

レンジブレイクアウトと曜日によるフィルター

日経225とTOPIX先物の関連性


などについて語っています。


曜日フィルターについては自作ソースで試してみようと思いました。


【実装】180

http://ameblo.jp/traderssystem/entry-10116512754.html


----------------------------------------------------

Input : entryPoint(10), profitPrice(50), lssPoint(10),
rangePrcnt1(0.25), rangePrcnt2(0.75),
shortPeriod(10), longPeriod(50);


//1日目、株価はその日の値幅の25%以下で終了
If Close[1] <= Low[1] + Range[1] * rangePrcnt1 and


//2日目、株価はその日の値幅の75%以上で終了
Close[0] >= Low[1] + Range[1] * rangePrcnt2 and


//2日目の終値は10日移動平均、50日移動平均を上回る
Close[0] >= Ma(Close, shortPeriod) and
Close[0] >= Ma(Close, longPeriod) Then {


//3日目に2日目高値のNポイント上で逆指し買い
Buy("SW5301新規買", AtStop, High[0] + entryPoint);
}


//損切りは買値の1ポイント下
//ExitShort("SW5301売決済_損切", AtStop, EntryPrice - lssPoint);


//トレーリングストップを利用(日足で使うときは注意が必要)
//SetStopProfittarget(profitPrice, PointStop);


ExitLong("SW5301買決済", OnClose);

----------------------------------------------------


損切り、トレーリングストップをコメントアウトして大引け決済としています。

検証するときはいろいろ試してみる必要があると思います。



【実装】拡大ピボット

http://ameblo.jp/traderssystem/entry-10116512108.html


---------------------------------------------------------------

Input : entryPoint(10), profitPrice(50), lssPoint(10), fltrPoint(100);


//本日値幅が過去9日間の値幅よりも大きい
If NthHighestBar(1, Range, 10) == 0 and


//昨日または本日、株価はその50日移動平均線と同じか下回っている
(Close[0] <= Ma(Close, 50) or Close[1] <= Ma(Close[1], 50)) and


//株価は急上昇 → どう定義するか!
Close[0] >= Close[1] + fltrPoint Then {


//明日、今日の高値のNポイント上で逆指し買い
Buy("SW5201新規買", AtStop, High[0] + entryPoint);
}


//損切りは買値の1ポイント下
ExitLong("SW5201買決済_損切", AtStop, EntryPrice - lssPoint);


//トレーリングストップを利用(日足で使うときは注意が必要)
SetStopProfittarget(profitPrice, PointStop);

---------------------------------------------------------------

アイデアではトレーリングストップを利用していますが、

ここでは利益確定の決済条件を使っています


株価の急上昇という考えに対しては

前日比XX円プラスという形で変数化しています。


未来の価格?

TradeStationのEasyLanguageで


Open of tommorow というのがあるのですが、どう処理されるのでしょうか?


(使用例)

stb = open of tommorrow + 0.5 * (hige - low);



TradeStadiumのYesLanguageではどう実行したらいいでしょうか?


ご存知の方がいましたらご指導ください。


【実装】SlowD関数

SlowD()関数を実装してみました。


アイデアは

http://www.investechno.com/et/help/shihyou/techoff/B19.htm

http://www.investechno.com/et/help/shihyou/techoff/B18.htm

を参考にしています。


----------------------------------------------------

Input : period1(Numeric), period2(Numeric), period3(Numeric);

SlowD = Ma(SlowK(period1, period2), period3);

----------------------------------------------------

SlowK()関数の単純移動平均を算出しています。


----------------------------------------------------

Input : Period(NumericSimple), Period1(NumericSimple);

SlowK = FastD(Period, Period1);

----------------------------------------------------

SlowK()関数です

FastD()関数の結果を返しています。


----------------------------------------------------

Input : Period(NumericSimple), Period1(NumericSimple);

FastD = ema(FastK(Period), Period1);

----------------------------------------------------

FastD()関数です

FastK()関数の指数移動平均を返しています。


----------------------------------------------------

Input : Period(NumericSimple);
Var : Value_Lowest(0), Value_Highest(0);


Value_Lowest = Lowest(L, Period);
Value_Highest = Highest(H, Period);


FastK = (Close - Value_Lowest) / (Value_Highest - Value_Lowest) * 100;

----------------------------------------------------

FastK()関数です


(終値-指定期間の最安値)÷(指定期間の最高値-指定期間の最安値)×100

を結果として返しています。


【実装】King Keltner Program

勝利の売買システム (ウィザードブックシリーズ 113)/ジョン・R・ヒル
¥8,190
Amazon.co.jp

Easy→Yesへの変換です。


-----------------------------------------------

Input : avgLength(40), atrLength(40);
Var : upBand(0), dnBand(0), liquidPoint(0), movAvgVal(0);


movAvgVal = Average((High + Low + Close) / 3, avgLength);


upBand = movAvgVal + ATR(atrLength);
dnBand = movAvgVal - ATR(atrLength);


If movAvgVal[0] > movAvgVal[1] Then {
Buy("新規買", AtStop, upBand);
}


If movAvgVal[0] < movAvgVal[1] Then {
Sell("新規売", AtStop, dnBand);
}


liquidPoint = movAvgVal;


If MarketPosition == 1 Then {
ExitLong("買決済", AtStop, liquidPoint);
}


If MarketPosition == -1 Then {
ExitShort("売決済", AtStop, liquidPoint);
}

-----------------------------------------------


ATR()関数でAverageTrueRangeを出しているくらいで

後は難しくないと思います。


【実装】Bollinger Bandit

勝利の売買システム (ウィザードブックシリーズ 113)/ジョン・R・ヒル
¥8,190
Amazon.co.jp

に記載されているEasyLanguageコードの変換です。


---------------------------------------------

Var : upBand(0), dnBand(10), liqDays(50);


upBand = BollBandUp(50, 1.25);
dnBand = BollBandDown(50, 1.25);


If MarketPosition <> 1 Then {
Buy("新規買", AtStop, upBand);
}


If MarketPosition <> -1 Then {
Sell("新規売", AtStop, dnBand);
}


If MarketPosition == 0 Then {
liqDays = 50;
}


If MarketPosition <> 0 Then {
liqDays = liqDays - 1;
liqDays = MaxList(liqDays, 10);
}


If MarketPosition == 1 and
Average(Close, liqDays) < upBand Then {
ExitLong("買決済", AtStop, Average(Close, liqDays));
}

If MarketPosition == -1 and
Average(Close, liqDays) > dnBand Then {
ExitShort("売決済", AtStop, Average(Close, liqDays));
}

---------------------------------------------


EasyLanguageでは、BollingerBand()関数というのがあるようですが、

YesLanguageにはないので、BollBandUp()関数、BollBandDown()関数で代用しています。

(機能としては同じだと思っています)


決済はX日移動平均の逆指値ですが、

X日がliqDays(上記のソースでは50日)から始まって

10日まで徐々に短くなってきます。


約定した当日は50日、翌日は49日、2日後は48日・・・

と徐々に狭まってくるイメージです。


---------------------------------------------

//BollBandUp()関数

Input : Period(Numeric), D(Numeric);

BollBandUp = ma(C, Period) + (D * std(C, Period));

---------------------------------------------


---------------------------------------------

//BollBandDown()関数

Input : Period(Numeric), D(Numeric);

BollBandDown = ma(C, Period) - (D * std(C, Period));

---------------------------------------------


指定期間の単純移動平均に指定期間の標準偏差×掛目

を加減算しています。