# loop-type: date-only
//==============================
require "TIlib"
require "Utility"
//==============================
// 【買いルール】
// EMA5が、EMA20、EMA40、EMA120、EMA240より上に位置した
//
// 【手仕舞いルール】
// 利食い:EMA5とEMA40がクロスした
// ロスカット:2ATR(終値より2%の損失)
codes = CodeList
if $code_num && $code_num != Length(codes)
Print("前回と異なる銘柄リストでは実行できません。")
Dummy
end
$code_num = Length(codes)
//グローバル変数を初期化
if !$__INIT__
$budgetIni = 10000000
$budget = $budgetIni // 投資総額 (1000万円)
$buyUnit = 1000000 // 1回の購入資金 (100万円)
$MaxHoldDay = 41 // 最大保有日数
$Interest = 0 // 無制限(0) / 単利(1) / 複利(2)
//------------------------------------------------
$set = [$code_num]
$buy = [$code_num]
$hold = [$code_num]
//------------------------------------------------
$EMA5 = [$code_num]
$EMA20 = [$code_num]
$EMA40 = [$code_num]
$EMA120 = [$code_num]
$EMA240 = [$code_num]
$EMA5_1 = [$code_num]
$EMA20_1 = [$code_num]
$EMA40_1 = [$code_num]
$EMA120_1 = [$code_num]
$EMA240_1 = [$code_num]
// 値上がり銘柄のカウント ------------------------
$buyflag = [$code_num]
$sellflag = [$code_num]
$__INIT__ = 1
end
def Main(i)
//==================================================
// 条件(買条件, 売条件共通部分)
//==================================================
//まだ上場していない銘柄は株価データがないためnullが返る
if (Index == null)
return
end
if ! ($EMA5[i] && $EMA20[i] && $EMA40[i] && $EMA120[i] && $EMA240[i])
//銘柄ごとのグローバル変数を初期化する
$EMA5[i] = EMA_new(5)
$EMA20[i] = EMA_new(20)
$EMA40[i] = EMA_new(40)
$EMA120[i] = EMA_new(120)
$EMA240[i] = EMA_new(240)
$EMA5_1[i] = {-1}EMA_new(5)
$EMA20_1[i] = {-1}EMA_new(20)
$EMA40_1[i] = {-1}EMA_new(40)
$EMA120_1[i] = {-1}EMA_new(120)
$EMA240_1[i] = {-1}EMA_new(240)
$hold[i] = 0
return
end
//指標の計算を1日進める
EMA_next($EMA5[i])
EMA_next($EMA20[i])
EMA_next($EMA40[i])
EMA_next($EMA120[i])
EMA_next($EMA240[i])
EMA_next($EMA5_1[i])
EMA_next($EMA20_1[i])
EMA_next($EMA40_1[i])
EMA_next($EMA120_1[i])
EMA_next($EMA240_1[i])
// ここまで ========================================
if 1==PricedataExistCheck(Close)
return
end
//==================================================
// 保有してない→購入
//==================================================
if (! $hold[i])
ema5 = EMA_value($EMA5[i])
ema20 = EMA_value($EMA20[i])
ema40 = EMA_value($EMA40[i])
ema120 = EMA_value($EMA120[i])
ema240 = EMA_value($EMA240[i])
ema5_1 = EMA_value($EMA5_1[i])
ema20_1 = EMA_value($EMA20_1[i])
ema40_1 = EMA_value($EMA40_1[i])
ema120_1 = EMA_value($EMA120_1[i])
ema240_1 = EMA_value($EMA240_1[i])
if ! (ema5 && ema20 && ema40 && ema120 && ema240 && ema5_1 && ema20_1 && ema40_1 && ema120_1 && ema240_1)
return
end
if (ema5 > ema20 && ema5 > ema40 && ema5 > ema120 && ema5 > ema240)
if (ema5_1 <= ema20_1 || ema5_1 <= ema40_1 || ema5_1 <= ema120_1 || ema5_1 <= ema240_1)
$long = 0
$long = Num($buyUnit,Close)
$buyflag[i] = 1
end
end
//==================================================
// 保有している→売却
//==================================================
elsif $hold[i]
if $set[i] < 1
$set[i] = 1
return
end
$set[i] = $set[i] + 1
ema5 = EMA_value($EMA5[i])
ema40 = EMA_value($EMA40[i])
//==================================================
// 売買(売り)
//==================================================
// 1) 利食い:EMA5とEMA40がクロスした
if (ema5 <= ema40)
PrintLog("利食い")
$sellflag[i] = 1
$set[i] = 0
// 2) 損切り:2%のマイナス
elsif (0.98 * $buy[i] >= Close)
$sellflag[i] = 1
$set[i] = 0
end
end
end
//====================
// 売買関数
//====================
def BuySell(j)
if PricedataExistCheck(Close)
return
end
if $buyflag[j]
$long = 0
$long = Num($buyUnit,Close)
Buying(j)
$buyflag[j] = 0
elsif $sellflag[j]
Selling(j)
$sellflag[j] = 0
end
end
//====================
// 銘柄コードを変えながらMain関数,BuySell関数を実行
//====================
i = -1
j = -1
while i + 1 < $code_num
i = i + 1
{codes[i]}Main(i)
end
while j + 1 < $code_num
j = j + 1
{codes[j]}BuySell(j)
end