# loop-type: date-only
//==============================
require "TIlib"
require "Utility"
require "TrendCheck"
// ======================================
// cosisinのノー前日比ブレイクアウト手法
// ======================================
//
//【基本設定】
//1) 株価の低い場合はランキングしない[50]円以下
//2) 売買代金の少ない場合はランキングしない(売買代金の[5]日間平均が[5]千万円以下の場合)
//3) 単利利用、通年
//4) 全ての銘柄対象
//
//【ランキング条件(デイトレ逆張りサンプル)】
//1) [出来高上昇率]が[50]より[小さい]
//2) [期間高値(高値)(2)]が[期間安値(安値)(2)(+1.00%)]より[大きい(同じものを含む)]
//3) [終値]が[期間高値(高値)(5)(1日前)]より[小さい]
//
//【仕掛けのルール】
//1) [出来高(順位)]が[30]より[小さい(同じ含む)]
//2) [翌日逆指値(終日)][期間高値(高値)(6)(+1Tick)]で[買い]を仕掛ける
//
//【手仕舞いのルール】
//1) [Stop高(高値)]が[1]と[同じ]
// 1.1) [当日指定値][高値]で手仕舞いする
//2) [保有日数]が[1]より[大きい(同じ含む)]
// 2.1) [当日引け]で手仕舞いする
//
//【優先順設定】
//1) 移動平均乖離率(終値)(75) 小さい順
codes = CodeList
if ($code_num && $code_num != Length(codes))
Print("前回と異なる銘柄リストでは実行できません。")
Dummy
end
$code_num = Length(codes)
//グローバル変数を初期化
if (!$__INIT__)
$budgetIni = 3000000
$buyUnit = 500000 // 1回の購入資金 (50万円)
$MaxHoldDay = 0 // 最大保有日数
$shortSelling = 0 // 空売り戦略 Yes(1)/No(0)
$Interest = 1 // 無制限(0) / 単利(1) / 複利(2)
$reverse = 0 // 購入順序 昇順(0) / 降順(1)
$udcount = 0 // 騰落レシオ利用数
Init()
//------------------------------------------------
$HL2 = [$code_num]
$HL5 = [$code_num]
$HL6 = [$code_num]
//------------------------------------------------
InitDone() // 騰落レシオ初期化
$__INIT__ = 1
end
def Main(i)
//==================================================
// 条件(買条件, 売条件共通部分)
//==================================================
//まだ上場していない銘柄は株価データがないためnullが返る
if (Index == null)
return
end
if ($order[(int)Code] == -1)
$order[(int)Code] = i
end
if ! ($HL2[i])
//Tilibのオブジェクト生成
$HL2[i] = HighLow_new(2)
$HL5[i] = HighLow_new(5)
$HL6[i] = HighLow_new(6)
//銘柄ごとのグローバル変数を初期化する
$hold[i] = 0
return
end
//指標の計算を1日進める
HighLow_next($HL2[i])
HighLow_next($HL5[i])
HighLow_next($HL6[i])
//==================================================
// 保有してない→購入
//==================================================
if (! $hold[i])
if ! (Close && {-1}Close && {-2}Close && {-3}Close && {-4}Close && _
Volume && {-1}Volume && {-2}Volume && {-3}Volume && {-4}Volume)
return
end
if ! ($HL2[i] && $HL5[i] && $HL6[i])
return
end
high2 = HighLow_high($HL2[i])
low2 = HighLow_low($HL2[i])
high5 = {-1}HighLow_high($HL5[i])
high6 = {-1}HighLow_high($HL6[i])
if ! (high2 && low2 && high5 && high6)
return
end
//==================================================
// 選定
//==================================================
// 1) 株価の低い場合はランキングしない[50]円以下
if (Close <= 50)
return
end
// 2) 売買代金の少ない場合はランキングしない(売買代金の[5]日間平均が[5]千万円以下の場合)
if ((SalesValue() + {-1}SalesValue() + {-2}SalesValue() + {-3}SalesValue() + _
{-4}SalesValue())/3 <= 50000)
return
end
//==================================================
// 売買(買い)
//==================================================
// 1) [出来高上昇率]が[50]より[小さい]
flag1 = 50 > {-1}Volume / Volume
// 2) [期間高値(高値)(2)]が[期間安値(安値)(2)(+1.00%)]より[大きい(同じものを含む)]
flag2 = high2 >= low2 * 1.01
// 3) [終値]が[期間高値(高値)(5)(1日前)]より[小さい]
flag3 = Close < high5
if (flag1 && flag2 && flag3)
$buyflag[i][0] = Yobine(high6, 0)// [期間高値(高値)(6)(+1Tick)]
$buyflag[i][1] = Volume // 1) [出来高(順位)]
$buyflag[i][2] = 1 // 売却額
$buyCnt = $buyCnt + 1
end
//==================================================
// 保有している→売却
//==================================================
elsif ($hold[i])
if ($set[i] < 1)
$set[i] = 1
return
end
$set[i] = $set[i] + 1
//==================================================
// 売買(売り)
//==================================================
if ($set[i] >= $MaxHoldDay)
PrintLog("利益確定")
$sellflag[i] = 1
$set[i] = 0
end
end
end
//==================================================
// 翌日逆指値チェック
//==================================================
def CheckHighLow2(t)
if ! ({1}High > t && t > {1}Low)
return 0
end
if ({1}Open > t)
return {1}Open
else
return t
end
end
//==================================================
// 買い
// 2) [翌日逆指値(終日)][期間高値(高値)(6)(+1Tick)]で[買い]を仕掛ける
//==================================================
def Buying2(i)
if (HasPricedata({1}Open) && HasPricedata(Close))
t = 0
if ($buyflag[i][0])
t = CheckHighLow2($buyflag[i][0])
end
if (t)
BuyingLimitedPrice(i, 1, t)
end
end
end
//====================
// 買い処理
//====================
def SortBuy()
PrintLog("購入予定")
if ! (HasPricedata(Close))
return
end
$long = 0
$long = Num($buyUnit, Close)
codeset = $order[(int)Code]
Buying2(codeset)
end
//====================
// 売り処理(デイトレ模倣)
//====================
def Sell_(i)
if (HasPricedata(Open))
if ($sellflag[i])
if ({-1}Close)
SellingLimitedPrice(i, 0, {-1}Close)
else
PrintLog("売れない")
end
$sellflag[i] = 0
$buyflag[i][2] = 0
end
// 使用した$buyflag 配列を初期化
if ($buyflag[i][0])
$buyflag[i][0] = 0
$buyflag[i][1] = 0
end
end
end
//====================
// 銘柄コードを変えながらMain関数,BuySell関数を実行
//====================
Print("-------------------------------------------------")
Print("日付 = "+ Year + "/" + Month + "/" + Day)
$buyCnt = 0 // 購入数初期化
i = -1
while (i + 1 < $code_num)
i = i + 1
{codes[i]}Main(i)
end
i = 0
if ($buyCnt)
// 1) [出来高(順位)]が[30]より[小さい(同じ含む)]
sortList = SelectionSort(30, 0)
cnt = $buyCnt
if ($buyCnt > 30)
cnt = 30
end
while i < cnt
{sortList[i]}SortBuy()
i = i + 1
end
end
//----------------------------------------------
i = -1
while (i + 1 < $code_num)
i = i + 1
{codes[i]}Sell_(i)
end