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

【実装】ADXフィルターを併用したオシレータ法

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


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

Input : ShortDayRange(10), LongDayRange(40), ADXDayRange(14),
AdxLow(30), AdxHigh(70);

Value1 = Ma(C, ShortDayRange) - Ma(C, LongDayRange);


IF Value1[0] > Value1[1] and ADX(ADXDayRange) < AdxLow Then {
Buy("買", Atmarket);
}


IF Value1[0] < Value1[1] and ADX(ADXDayRange) > AdxHigh Then {
Sell("売", Atmarket);
}


IF Value1[0] < Value1[1] Then {
ExitLong("買決済", Atmarket);
}


IF Value1[0] > Value1[1] Then {
ExitShort("売決済", AtMarket);
}

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


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

にADX()関数によるフィルターを加えています。


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

Input : period(Numeric);
Var : diff_High(0), diff_Low(0);


diff_High = H - H[1];
diff_Low = L[1] - L;


value1 = 0;
value2 = 0;


if diff_High > 0 && diff_High > diff_Low then
value1 = diff_High;


if diff_Low > 0 && diff_High < diff_Low then
value2 = diff_Low;


value3 = ma(value1, period);
value4 = ma(value2, period);


ADX = ma(abs(value3 - value4) / (value3 + value4) * 100, Period);

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


ADX()関数の中身です。

ソースの中身を理解するのには値を入れて1行ずつ追ってみるのが

有効だと思います。


(例)

period : 15

High[0] : 13330

High[1] : 13450

Low[0] : 13120

Low[1] : 13200


結果(ADX) : ???


【実装】オシレータ法

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


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

Input : ShortDayRange(10), LongDayRange(40);


Value1 = Ma(C, ShortDayRange) - Ma(C, LongDayRange);


IF Value1[0] > Value1[1] Then {
Buy("買", Atmarket);
}


IF Value1[0] < Value1[1] Then {
Sell("売", Atmarket);
}

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


終値の移動平均を利用しています。

ShortDayRangeの移動平均からLongDayRangeの移動平均を引いた値で、

当日の値>前日の値

で取引を行っています。

【実装】高値・安値の平均値

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


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

Input : DayRange(15);


If Close[0] > Average((High + Low) / 2, DayRange) Then {
Buy("買", Atmarket);
}

If Close[0] < Average((High + Low) / 2, DayRange) Then {
Sell("売", Atmarket);
}


IF (MarketPosition == 1) then {
ExitLong("買決済", OnClose);
}


IF (MarketPosition == -1) then {
ExitShort("売決済", OnClose);
}

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


高値・安値の平均なので足して2で割っています。

それをもとにDayRangeの期間の平均をだしています。


【実装】DRV利食い法

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


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

Input : period(10), DRVBuyRange(0.4), DRVSellRange(0.6);
Var : DRV(0);


//DRV=(本日終値-前日終値)の10日指数平均の絶対値
//  ÷ (本日終値-前日終値)の絶対値の10日指数平均
Value1 = Abs(Ema(C[0] - C[1], period));
Value2 = Ema(Abs(C[0] - C[1]) , period);

DRV = Value1 / Value2;


//本日DRVが-0.40を上抜いたとき買い
If CrossUp(DRV, DRVBuyRange) then {
Buy("SW1701新規買", AtMarket);
}


//本日DRVが+0.40を下抜いたとき売り
If CrossDown(DRV, DRVSellRange) then {
Sell("SW1701新規売", AtMarket);
}

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


指数移動平均にはEma()関数を用いています。マニュアルに記載されています。

Abs()関数は絶対値を返しています。

どういう考えで考案された売買アイデアなのかはわかりませんが、

実装という観点では1つ1つ丁寧に解釈すれば難しくはないかと思います。

【実装】過去N日間の平均レンジに基づくトレード

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


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

Input : period(10), rangeFilter(50);


//過去N日間のレンジ
Value1 = High - Low;
Value2 = Average(Value1, period);


//1日のレンジが過去N日間の平均レンジよりも小さく、
//その日が高く引けたときは、
//翌日の寄り付きで買い
If (Value1[0] < Value2 and Open[0] + rangeFilter < Close[0]) Then {
Buy("YB0701新規買", AtMarket);
}


//その日が安く引けたときは、
//翌日の寄り付きで売り
If (Value1[0] < Value2 and Open[0] - rangeFilter > Close[0]) Then {
Sell("YB0701新規売", AtMarket);
}


//大引けで手仕舞い
If (MarketPosition == 1) Then {
ExitLong("YB0701買決済", OnClose);
}
If (MarketPosition == -1) Then {
ExitLong("YB0701売決済", OnClose);
}

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


過去N日間のレンジはAverage(Range, period)でいい気がします。

高く引けた、安く引けたというのを始値・終値の差で見ています。

【実装】ボックスのブレイクアウト逆張り法

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


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

Input : OpenDayRange(10), CloseDayRange(10), PriceRange(60);


If Low[0] == NthLowest(1, Low, OpenDayRange) Then {
Buy("買", Atmarket);
}


If High[0] == NthHighest(1, High, OpenDayRange) Then {
Sell("売", Atmarket);
}


If Close[0] > NthHighest(1, High, CloseDayRange)
- ((NthHighest(1, High, CloseDayRange) - NthLowest(1, Low, CloseDayRange))
* PriceRange / 100 ) Then {
ExitLong("買決済", OnClose);
}


If Close[0] < NthLowest(1, High, CloseDayRange)
+ ((NthHighest(1, High, CloseDayRange) - NthLowest(1, Low, CloseDayRange))
* PriceRange / 100 ) Then {
ExitShort("売決済", OnClose);
}

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


当日安値が過去N日の最安値とイコールのときに仕掛けています。

手仕舞いのロジックは今見ると無駄に複雑ですね。

Range()関数を使うときれいになりそうです。



【実装】最安値からの逆張り

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


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

Input : DayRange(50);


If Low[0] == NthLowest(1 ,Low , DayRange) then {
Buy("買", Atmarket);
}


If High[0] == NthHighest(1 ,High , DayRange) then {
Sell("売", Atmarket);
}


IF (MarketPosition == 1) then {
ExitLong("買決済", OnClose);
}


IF (MarketPosition == -1) then {
ExitShort("売決済", OnClose);
}

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


「過去N日間の最安値を更新」というのを

本日安値=過去N日間の安値という形で表現しています。

NthLowest()関数を使っていますが

Lowest(Low, DayRange)の方がシンプルです。


(YesLangage書き始めの頃の作品ですね)


【実装】移動平均の逆張り

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


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

Input : ShortRange(2), LongRange(5);


IF Ma(Close, ShortRange) > Ma(Close, LongRange) then {
Buy("買", Atmarket);
}


IF (MarketPosition == 1) then {
ExitLong("買決済", OnClose);
}

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


特に説明することはありません。

単純な移動平均 Ma()関数 だけでも

たくさんの戦略がかけてしまうことがわかると思います。


【実装】N日間移動平均に基づくトレード

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


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

Input : DayRange(40);


IF Close[0] >= Ma(Close, DayRange) then {
Buy("買", Atmarket);
}


IF Close[0] < Ma(Close, DayRange) then {
Sell("売", Atmarket);
}


IF (MarketPosition == 1) then {
ExitLong("買決済", OnClose);
}


IF (MarketPosition == -1) then {
ExitShort("売決済", OnClose);
}

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


Ma()関数で抽出されるN日間の単純移動平均を終値が上回っているとき

という条件で買い付けを行っています。


MarketPosition == 1は買いポジションを持っているという意味です。


買い付け時はAtMarket(次の足で発注)、売却時はOnClose(今の足で発注)

とすることで、寄り付きでの買い、引けでの売りを表現しています。


※実運用するときに日足のOnClose注文が通るかはわかりません。

(150959秒に注文を出すことになるので)

場合によっては分足で動かせるようカスタマイズが必要かもしれません。


【実装】14日相対力指数

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


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

Input : period(14), low_Percent(35), High_Percent(65);


If (RSI(period) < low_Percent) Then {
Buy("SW1801新規買", AtMarket);
}


If (RSI(period) > High_Percent) Then {
Sell("SW1801新規売", AtMarket);
}

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


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

からブレイクアウトの考えを除いただけですね。