低PEG短期營收增長策略

										
												
# 一、短期均營收(X月) > 長期均營收(Y月)*(1+Z%)
# 二、本月營收/上月營收 > A 
# 三、股池為上市,排除KY
# 四、選擇滿足條件下:peg較小的前B個,peg為 本益比/營業利益成長率
# 五、在每個月的最後營收公告截止日換股。
# 六、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=3
y=12
z=10
a=0.9
b=10
c=3
d=20
BM='0050'

adjclose =msmp.日_K.adj_Close
adjopen =msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open   = msmp.日_K.Open
rev=  msmp.月_營收.金額_千
peg =msmp.日_指標.本益比 / msmp.季財報_財務指標.營業利益成長率
list_STC = msmp.list['tse']
list_KY = msmp.list['KY']

#股數
qty = np.floor(d*10000/(Open*1000))*1000
con1= rev.rolling(x).mean()/rev.rolling(y).mean()>(1+0.01*z)
con2= rev/rev.shift()> a
# 隔天沒有鎖漲停
con3 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
position= con1 &con2 &con3 &(qty!=0)

position=position[position.columns[position.columns.isin(list_STC)]]
position=position[position.columns[~position.columns.isin(list_KY)]]
#換股
position=position*peg
position=position.apply(lambda row: row[row>0].nsmallest(b), axis=1).notna().ne(0)
#周期
setday=rev.index_str_to_date().index
position=position[position.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , position)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +18.52%
  • 夏普值

      1.3
  • 最大虧損

      -26.94%
  • 勝率

      +51.0%
基本面 技術面
看更多

營收成長與PEG低波動篩選策略

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、近一季月營收均值 > 近一年月營收均值*(1+X%)
# 二、這月營收 > 上月營收*(1+X%)
# 三、融資使用率 < Y%
# 四、entry_volatility < Z% ,entry_volatility = atr/adjclose
# 五、業外營收/營業收入 占比 < A%
# 六、選擇滿足條件下:peg較大的B個,peg =pe/營業利益成長率 。
# 七、在每個月的最後營收公告截止日換股。
# 八、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=10
y=80
z=10
a=50
b=10
c=3
d=20
BM='0050'

adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open = msmp.日_K.Open
list_STC = msmp.list['tse']
rev = msmp.月_營收.金額_千
融資使用率 =msmp.日_融資券.融資使用率

def calculate(window=14 ,high=None, low=None, close=None):
    high = msmp.日_K.adj_High if high is None else high
    low = msmp.日_K.adj_Low if low is None else low
    close = msmp.日_K.adj_Close if close is None else close    
    plus_dm = high.diff()
    minus_dm = low.diff()
    plus_dm = plus_dm.where((plus_dm > minus_dm) & (plus_dm > 0), 0)
    minus_dm = minus_dm.where((minus_dm > plus_dm) & (minus_dm > 0), 0)
    tr = np.maximum.reduce([high - low, abs(high - close.shift()), abs(low - close.shift())])
    tr = pd.DataFrame(tr,columns=adjclose.columns ,index = adjclose.index)
    atr = tr.rolling(window=window).mean()
    plus_di = 100 * (plus_dm.rolling(window=window).mean() / atr)
    minus_di = 100 * (minus_dm.rolling(window=window).mean() / atr)
    dx = 100 * abs(plus_di - minus_di) / (plus_di + minus_di)
    adx = dx.rolling(window=window).mean()
    plus_di.name = "DMI"  
    minus_di.name = "Minus DI"
    return atr ,adx ,plus_di ,minus_di

atr= calculate(10)[0]
entry_volatility = atr/adjclose
業外收支營收率= msmp.季財報_財務指標.業外收支營收率
pe= msmp.日_指標.本益比
營業利益成長率 = msmp.季財報_財務指標.營業利益成長率
peg =pe/營業利益成長率 
setday=rev.index_str_to_date().index

#股數
qty = np.floor(d*10000/(Open*1000))*1000
con1 = rev.rolling(3).mean()/rev.rolling(12).mean()> (1+0.01*x)
con2 = rev/rev.shift(1) > (1+0.01*x)
con3 = 融資使用率<= y
con4 = entry_volatility <= 0.01*z
con5 = 業外收支營收率< a
# 隔天沒有鎖漲停
con6 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy=con1&con2&con3&con4&con5&con6&(qty!=0)

buy=buy[buy.columns[buy.columns.isin(list_STC)]]
buy=(buy*peg).fillna(0).apply(lambda row: row[row > 0].nsmallest(b), axis=1).notna().ne(0)
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'] ,qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +22.48%
  • 夏普值

      1.3
  • 最大虧損

      -15.47%
  • 勝率

      +50.0%
基本面 技術面
看更多

多週期股價創高營收成長

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、今日股價創X日新高
# 二、近Y日發生股價創Y日新高
# 三、近Z日發生股價創Z日新高
# 四、近3月平均營收大於A月平均營收
# 五、近5日平均成交量大於近20日平均成交量
# 六、股池為上市 且 剔除KY
# 七、選擇滿足條件下:成交量較大的B個。
# 八、在每個月的最後營收公告截止日換股。
# 九、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=20
y=60
z=120
a=12
b=10
c=3
d=20

BM='0050'
adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY  = msmp.list['KY']
rev = msmp.月_營收.金額_千
vol = msmp.日_K.Volume

#股數
qty = np.floor(d*10000/(Open*1000))*1000
# 近一日收盤價創近20日新高
con1 = adjclose == adjclose.rolling(x).max()
# 近一季度創最高點的股票
con2 = (adjclose==adjclose.rolling(y).max()).rolling(y).sum()>0
# 近半創最高點的股票
con3 = (adjclose==adjclose.rolling(z).max()).rolling(z).sum()>0
#近3月平均營收大於12月平均營收
con4 = rev.rolling(3).mean() > rev.rolling(a).mean()
# 近5日平均成交量大於近20日平均成交量
con5 = vol.rolling(5).mean() > vol.rolling(20).mean()
# 隔天沒有鎖漲停
con6 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy=con1&con2&con3&con4&con5&con6& (qty!=0)

#標的範圍
buy=buy[buy.columns[buy.columns.isin(list_STC)]]
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]
#取10大
buy=buy*vol
buy=buy.apply(lambda row: row[row!=0].nlargest(b), axis=1).notna().ne(0)
# 回測周期
setday=rev.index_str_to_date().index
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +17.96%
  • 夏普值

      0.9
  • 最大虧損

      -22.34%
  • 勝率

      +49.0%
基本面 技術面
看更多

股價創近120日新高

										
												
# 一、近5日發生,還原收盤價創X日新高
# 二、還原收盤價低於中位數
# 三、收盤價 < Y
# 四、交易量的5日均 > Z
# 五、股池為上市、排除KY、排除金融股
# 六、選擇滿足條件下:收盤價較小的A個 
# 七、再每月第一個交易日換股
# 八、手續費為B折 ,各個股票張數金額不超過C萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=120
y=100
z=500
a=10
b=3
c=20

BM='0050'
adjclose = msmp.日_K.adj_Close
adjopen = msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open   =  msmp.日_K.Open
Close =  msmp.日_K.Close
vol = msmp.日_K.adj_Volume
list_STC = msmp.list['tse']
list_KY = msmp.list['KY']
listFinance = msmp.INFO[msmp.INFO.產業名稱.str.contains('金融', na=False)].股票代號.tolist()

#股數
qty = np.floor(c*10000/(Open*1000))*1000
con1= (adjclose == adjclose.rolling(x).max()).rolling(5).sum()>=1
con2= adjclose.apply(lambda row : row<row.quantile(0.5) ,axis=0)
con3 =Close <= y
con4= vol.rolling(5).mean()> z
# 隔天沒有鎖漲停
con5 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy=con1&con2&con3&con4&con5&(qty!=0)

buy=buy[buy.columns[buy.columns.isin(list_STC)]]    
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]   
buy=buy[buy.columns[~buy.columns.isin(listFinance)]]   
#數量
buy=buy*Close
buy=buy.apply(lambda row: row[row > 0].nsmallest(a), axis=1).notna().ne(0)
setday=buy.groupby([buy.index.year, buy.index.month]).apply(lambda x: x.index[0]).tolist()
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        benchmark=benchmark,
        fee = b*0.0001425,
        )


										
									
加入我的收藏 複製程式
  • 年化報酬

      +27.36%
  • 夏普值

      2.1
  • 最大虧損

      -12.87%
  • 勝率

      +51.0%
技術面
看更多

基本面優良小型成長股

										
												# 策略說明:基本面多因子選股策略,以下是策略的主要條件:
# 一、市值 < X億
# 二、自由現金流 > 0
# 三、股東權益報酬率 > 0
# 四、營業利益成長率 > 0
# 五、交易量 > Z張
# 六、選擇滿足條件下:以A為周期的rsv,選擇rsv較大的B個。
# 七、在每個月的最後營收公告截止日換股。
# 八、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=50
z=300
a=60
b=10
c=3
d=20
BM='0050'

adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY  = msmp.list['KY']
自由現金流 = msmp.季財報_現金流表_千.自由現金流
股東權益報酬率 = msmp.季財報_財務指標.ROE_稅後權益報酬率
營業利益成長率 = msmp.季財報_財務指標.營業利益成長率

#股數
qty = np.floor(d*10000/(Open*1000))*1000
#市值<p
市值 = msmp.日_K.市值_百萬/100  
con1 = 市值 < x
#自由現金流>0
con2 = 自由現金流 > 0
#股東權益報酬率 > 0
con3 = 股東權益報酬率 > 0
#營業利益成長率 > 0
con4 = 營業利益成長率 > 0
#交易量 > p
vol = msmp.日_K.adj_Volume
con5 =vol > z
# 隔天沒有鎖漲停
con6 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy=con1&con2&con3&con4&con5&con6&(qty!=0)

buy=buy[buy.columns[buy.columns.isin(list_STC)]]
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]
rsv = (adjclose  - adjclose .rolling(a).min()) / (adjclose .rolling(a).max() - adjclose .rolling(a).min())
buy=buy*rsv
buy=buy.apply(lambda row: row[row > 0].nlargest(b), axis=1).notna().ne(0)
rev = msmp.月_營收.金額_千
setday=rev.index_str_to_date().index
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +14.98%
  • 夏普值

      0.6
  • 最大虧損

      -32.62%
  • 勝率

      +40.0%
基本面
看更多

財報多因子計分篩選策略

										
												
# 策略說明:基本面數據計分,以下是策略的主要條件:
# 一、ROE 排名劃分0-X
# 二、營業毛利率 排名劃分0-Y
# 三、稅前淨利成長率 排名劃分0-Z
# 四、應收帳款週轉率 排名劃分0-A
# 五、負債比率 排名劃分0-B
# 六、將分數加總 ,選出>20
# 七、股池為上市、排除KY
# 八、選擇滿足條件下:還原收盤價較小的10個 
# 九、再每周第一個交易日換股
# 十、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=10
y=10
z=10
a=10
b=10
c=3
d=20

BM='0050'
adjclose = msmp.日_K.adj_Close
adjopen =msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open   = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY = msmp.list['KY']
營業收入= msmp.季財報_損益表_千.營業收入
總應收帳款= msmp.季財報_資產負債表_千.總應收帳款
應收帳款週轉率 = 營業收入/總應收帳款.rolling(2).mean()

#股數
qty = np.floor(d*10000/(Open*1000))*1000
roe_score= msmp.季財報_財務指標.ROE_稅後權益報酬率.rank(axis=1, pct=True, ascending=True).mul(x).apply(np.ceil)
營業毛利率_score =  msmp.季財報_財務指標.營業毛利率.rank(axis=1, pct=True, ascending=True).mul(y).apply(np.ceil)
稅前淨利年增率_score =  msmp.季財報_財務指標.稅前淨利成長率.rank(axis=1, pct=True, ascending=True).mul(z).apply(np.ceil)
負債比率_score=  msmp.季財報_財務指標.負債比率.rank(axis=1, pct=True, ascending=False).mul(a).apply(np.ceil)
應收帳款週轉率_score =應收帳款週轉率.rank(axis=1, pct=True, ascending=True).mul(b).apply(np.ceil)
all_score = roe_score.fillna(0) + 營業毛利率_score.fillna(0)+ 稅前淨利年增率_score.fillna(0) + 應收帳款週轉率_score.fillna(0) + 負債比率_score.fillna(0)
buy=all_score>=20
# 隔天沒有鎖漲停
sig = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy= buy &sig &(qty!=0)

buy=buy[buy.columns[buy.columns.isin(list_STC)]]
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]
buy=buy.index_str_to_date().reindex(adjclose.index).fillna(method='ffill')
buy=buy*adjclose
buy=buy.astype(float).apply(lambda row: row[row > 0].nsmallest(10), axis=1).notna().ne(0)

setday=buy.groupby([buy.index.year, buy.index.isocalendar().week]).apply(lambda x: x.index[0]).tolist()
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        benchmark=benchmark,
        fee = c*0.0001425,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +15.3%
  • 夏普值

      1.2
  • 最大虧損

      -15.63%
  • 勝率

      +54.0%
基本面 技術面
看更多

上櫃營收短期動能換股策略

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、近5日内,有發生過還原收盤價創X日新高
# 二、近Y日内高低點振幅在30%以上
# 三、收盤價低於quantile的80%*1.9
# 四、還原收盤價< Z元
# 五、5日均交易量 > A張
# 六、波動率 < B
# 七、營收短期動能大於長期動能
# 八、股池為非上市、非KY、非金融股  
# 九、選擇滿足條件下:價格較低的10檔
# 十、在每個月的最後營收公告截止日換股
# 十一、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=102
y=75
z=100
a=500
b=12
c=3
d=20
BM='0050'

Close= msmp.日_K.Close
adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
vol=msmp.日_K.Volume
Wadjclose = msmp.週_K.adj_Close

Open   = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY = msmp.list['KY']
info= msmp.INFO
list_金融= info[info.產業名稱.str.contains('金融', na=False)].股票代號
rev= msmp.月_營收.金額_千

bullish_candle = adjclose.diff() >=0
#如果漲
bullish_volatility = abs(adjclose.shift() - adjopen) + abs(adjopen- adjlow) + abs(adjlow - adjhigh) + abs(adjhigh - adjclose)
#如果跌
bearish_volatility = abs(adjclose.shift() - adjopen) + abs(adjopen - adjhigh) + abs(adjhigh -adjlow) + abs(adjlow - adjclose)
#創表格
candle_volatility = adjclose[adjclose<0]
candle_volatility[bullish_candle] = bullish_volatility
candle_volatility[~bullish_candle] = bearish_volatility

if Wadjclose.index[-1].dayofweek==4:
    setday = Wadjclose.index
else:
    setday = Wadjclose.index[:-1]

#股數
qty = np.floor(d*10000/(Open*1000))*1000
# 收盤價近5日至少有1日創收盤價近100日創新
con1 = (adjclose == adjclose.rolling(x).max()).rolling(5).sum()>=1
# 近60日股價高低區間在30%內
con2 = adjlow.rolling(y).min()*1.3 < adjhigh.rolling(y).max()
# 收盤價低於整體市場分級的90%
標準價= Wadjclose.rolling(1000,min_periods=1).quantile(0.8)
con3= adjclose <標準價*1.9
# 收盤價低於100元
con4 = adjclose <= z
# 5日均大於500張
con5 = vol.rolling(5).mean() > a
# k線波動率濾網
volatility = candle_volatility.rolling(20).mean() / adjclose.rolling(20).mean() * 100
con6 = volatility <= b
# 營收短期動能大於長期動能
con7 = rev.rolling(2).mean() > rev.rolling(12).mean()
# 隔天沒有鎖漲停
con8 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy = con1&con2&con3&con4&con5&con6&con7&con8&(qty!=0)


#清單
buy=buy[buy.columns[~buy.columns.isin(list_STC)]]
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]
buy=buy[buy.columns[~buy.columns.isin(list_金融)]]
#換股
buy=buy*adjclose
buy=buy.apply(lambda row: row[row > 0].nsmallest(10), axis=1).notna().ne(0)
#轉換回測格式
buy=buy[buy.index.isin(setday)]
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        benchmark=benchmark,
        fee = c*0.0001425,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +28.12%
  • 夏普值

      1.5
  • 最大虧損

      -18.96%
  • 勝率

      +44.0%
基本面 技術面
看更多

高速填息股策略

										
												
# 一、連續Y年,填權息天數 <=X天
# 二、現金殖利率 > Z
# 三、股池為上市 但剔除ETF,換股日期為最後財報公告日
# 四、滿足以上條件,選擇現金殖利率較小的A檔股票
# 五、手續費為 B 折 ,股票最大開倉金額不超過 C 萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=30
y=3
z=5.5
a=10
b=3
c=20
BM='0050'

填權息天數 = msmp.季股利資訊.填權息天數.index_str_to_date()[:-1]  #年資料
adjclose = msmp.日_K.adj_Close
adjhigh =msmp.日_K.adj_High
adjlow  = msmp.日_K.adj_Low
現金股利 = msmp.季股利資訊.現金股利_季.rolling(4,min_periods=1).sum()
現金殖利率 = 100*現金股利.fillna(0)/adjclose
現金殖利率  = 現金殖利率.reindex(adjclose.index, method='ffill')
Open= msmp.日_K.Open
info =msmp.INFO
pool =info[(~info.股票代號.str.startswith('00')) &(info.上市上櫃.isin([1]))].股票代號.tolist()
index = msmp.INDEX['Q']

con1 = ((填權息天數 <=x)&(填權息天數 >0)).rolling(y).sum()==y
con1 = con1.reindex(adjclose.index, method='ffill')
con2 = 現金殖利率 >z
con3 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
qty = np.floor(c * 10000 / (Open * 1000)) * 1000
long =con1 &con2 &con3 &(qty!=0) 

long = long*現金殖利率
long = long.loc[long.index.isin(index) ,long.columns.isin(pool) ]
pos = long.apply(lambda row : row[row>0].nsmallest(a) ,axis=1).notna().ne(0)
dic = msmp_to_dic(['qty', 'long' ], qty, pos )

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp = api.backtest(dic ,
        symbol='id',date='date',qty='qty', sig_value='adjclose',
        open_value='adjopen', open_shift=True,
        close_value='adjopen', close_shift=True,
        longsig='long',
        benchmark=benchmark,    fee=0.0001425 * b)


















										
									
加入我的收藏 複製程式
  • 年化報酬

      +18.63%
  • 夏普值

      1.3
  • 最大虧損

      -15.68%
  • 勝率

      +68.0%
基本面
看更多

帶量突破均線低價股

										
												
# 策略說明:透過均線指標和量能分析,找尋有機會成長的股票。以下是策略的主要條件:
# 一、近一日漲幅 > X%。
# 二、收盤價突破Y日均綫。
# 三、成交量 > Z日均量 *A倍 。
# 四、收盤價 < B元。
# 五、股池為上市 且 剔除KY
# 六、止盈為45%止損為15%,以發生信號的隔天開盤價,開倉及平倉。
# 七、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=5
y=60
z=5
a=4
b=20
c=3
d=20
BM='0050'

Close=msmp.日_K.Close
adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY  = msmp.list['KY']

#股數
qty = np.floor(d*10000/(Open*1000))*1000
#近一日漲幅 > p%         
con1= adjclose>adjclose.shift(1)*(1+0.01*x)
#收盤價突破p日均綫
p = adjclose>adjclose.rolling(y).mean()
con2= p & (p.shift(1)==False)
#交易量 > period均 *n
Volume = msmp.日_K.adj_Volume    
con3= Volume>Volume.rolling(z).mean().shift(1)*(a)
#加入低價條件
con4= Close <b
# 隔天沒有鎖漲停
con5 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
position=con1&con2&con3&con4&con5&(qty!=0)

#清單
position=position[position.columns[position.columns.isin(list_STC)]]
position=position[position.columns[~position.columns.isin(list_KY)]]
#出場
position=position.mask(position==False)
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty ,position)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        earn=45,loss=15,
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +6.27%
  • 夏普值

      0.5
  • 最大虧損

      -22.70%
  • 勝率

      +37.0%
技術面
看更多

股價及平均營收近期創高

										
												
# 策略說明:價量分析及營收增長選股策略,以下是策略的主要條件:
# 一、「平均營收」定義:以近X個月的營收計算均值。
# 二、平均營收創近Y個月營收新高。
# 三、近Z日內至少有2日,股價創200日新高
# 四、近A日平均交易量 > B張
# 五、股池為上市 且 剔除KY
# 六、選擇滿足條件下:月營收年增率較大的10個。
# 七、在每個月的最後營收公告截止日換股。
# 八、手續費為C折 ,各個股票張數金額不超過D萬


import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=2
y=6
z=7
a=5
b=2000
c=3
d=20

BM='0050'
adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY  = msmp.list['KY']

#股數
qty = np.floor(d*10000/(Open*1000))*1000
#近a月平均營收創b月來新高
rev = msmp.月_營收.金額_千
rev_ma= rev.rolling(x).mean()
con1 = rev_ma == rev_ma.rolling(y, min_periods=1).max()
#近n日內至少有2日,股價創200日新高
Close = msmp.日_K.Close
Closeweek=msmp.週_K.Close
N=int(np.ceil(200/7))
con2 = (Close>=Closeweek.rolling(N).max()).rolling(z).sum()>=2
#period日成交均量大於n張
vol = msmp.日_K.adj_Volume
con3 = vol.rolling(a).mean() > b
# 隔天沒有鎖漲停
con4 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy = con1&con2&con3&con4& (qty!=0)

#標的範圍
buy=buy[buy.columns[buy.columns.isin(list_STC)]]
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]
# 符合選股條件的名單中,再選出單月營收年增率前10強,並在營收公告截止日換股。
rev_yoy_growth = msmp.月_營收.YoY
buy=buy*rev_yoy_growth
buy=buy.apply(lambda row: row.nlargest(10), axis=1).notna().ne(0)
setday=rev_yoy_growth.index_str_to_date().index
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +30.15%
  • 夏普值

      1.7
  • 最大虧損

      -18.98%
  • 勝率

      +47.0%
基本面 技術面
看更多

MACD黃金交叉+PB篩選策略

										
												
# 一、以參數X Y Z參數得到macd
# 二、MACD>前日 ,且往上突破 信號線 
# 三、股價淨值比(PB)排名位於前 A 名
# 四、以上為進場條件,股池為上市剔除KY
# 五、出場條件:MACD 向下且死叉
# 六、手續費為 B 折 ,支股票最大開倉金額不超過 C 萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=12
y=26
z=9
a=200
b=3
c=20

BM='0050'
Open = msmp.日_K.Open
adjclose = msmp.日_K.adj_Close
adjhigh = msmp.日_K.adj_High
adjlow = msmp.日_K.adj_Low
ls_stc = msmp.list['tse']  
ls_KY = msmp.list['KY']  
pool = sorted([item for item in (ls_stc) if item not in set(ls_KY)])
index = adjclose.index.to_series()
index = index.groupby(index.dt.to_period('W')).first().tolist()

qty = np.floor(c * 10000 / (Open * 1000)) * 1000
ema12 = adjclose.ewm(span=x).mean()  # 短期EMA
ema26 = adjclose.ewm(span=y).mean()  # 長期EMA
macd = ema12 - ema26
signal_line = macd.ewm(span=z).mean()  # 計算信號線
con1 = macd>signal_line
con2 = macd.shift(1)<signal_line.shift(1)
con3 = macd.diff()>0  
con4 = msmp.日_指標.股價淨值比.rank(axis=1 ,ascending=True) <a
con5 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
long = con1 &con2 &con3 &con4 &con5 &(qty!=0)
long = long.mask(long==False)
long = long.loc[long.index.isin(index) , long.columns.isin(pool)]

out1 = macd<signal_line
out2 = macd.shift(1)>signal_line.shift(1)
out3 = macd.diff()<0
longout = out1 &out2 &out3 
longout = longout.loc[longout.index.isin(index)]

dic = msmp_to_dic(['qty', 'long' ,'longout'], qty, long ,longout)
benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp = api.backtest(dic ,symbol='id',date='date',qty='qty',    
    sig_value='adjclose',
    open_value='adjopen', open_shift=True,
    close_value='adjopen', close_shift=True,
    longsig='long',longout='longout',
    benchmark=benchmark,    fee=0.0001425 * b)






										
									
加入我的收藏 複製程式
  • 年化報酬

      +10.27%
  • 夏普值

      0.9
  • 最大虧損

      -17.48%
  • 勝率

      +48.0%
技術面
看更多

低PB價值股每月換股策略

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、股票還原收盤價 < X元。
# 二、股票還原收盤價 > Y日均
# 三、選擇滿足條件下: 股價净值比較小的Z個。   
# 四、股池為上市 且 剔除KY           
# 五、每個月第一天輪換一次
# 六、手續費為A折 ,各個股票張數金額不超過B萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=50
y=60
z=10
a=3
b=20
BM='0050'

Close= msmp.日_K.Close
adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open   = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY = msmp.list['KY']
股價淨值比= msmp.日_指標.股價淨值比

#股數
qty = np.floor(b*10000/(Open*1000))*1000
con1= (adjclose < x)
con2= adjclose>adjclose.rolling(y).mean()
# 隔天沒有鎖漲停
con3 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy=con1&con2&con3&(qty!=0)

#標的範圍
buy=buy[buy.columns[buy.columns.isin(list_STC)]]
buy=buy[buy.columns[~buy.columns.isin(list_KY)]]
#換股(權重加成)
buy= buy*股價淨值比 *adjclose
buy= buy.apply(lambda row: row[row > 0].nsmallest(z), axis=1).notna().ne(0)
#出場
setday=buy.groupby([buy.index.year, buy.index.month]).apply(lambda x: x.index[0]).tolist()
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = a*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +14.81%
  • 夏普值

      0.9
  • 最大虧損

      -24.89%
  • 勝率

      +42.0%
基本面 技術面
看更多

ETF 均線收斂突破策略

										
												
def max_df(*dfs):
    arr = np.stack([df.values for df in dfs])
    result = np.max(arr, axis=0)
    result_df = pd.DataFrame(result, index=dfs[0].index, columns=dfs[0].columns)
    return msmp.DataFrame(result_df)

def min_df(*dfs):
    arr = np.stack([df.values for df in dfs])
    result = np.min(arr, axis=0)
    result_df = pd.DataFrame(result, index=dfs[0].index, columns=dfs[0].columns)
    return msmp.DataFrame(result_df)

# 一、股池為所有 ETF
# 二、前一日的五線最大值(含收盤價、10MA、20MA、50MA、60MA) < 五線最小值的 X% 範圍內
# 三、當日收盤價向上突破昨日五線最大值
# 四、淨利/淨值的排名小於等於 Y
# 五、以上為入場條件,出場條件為: 收盤價已連續 Z日未創Z日新高
# 六、手續費為 B 折 ,股票最大開倉金額不超過 A 萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=4
y=50
z=7
a=20
b=3
BM='0050'

info = msmp.INFO
pool = info[info.ETF==1].股票代號.tolist()

Open = msmp.日_K.Open
data = msmp.日_指標.淨利 /msmp.日_指標.淨值
adjclose = msmp.日_K.adj_Close
adjhigh = msmp.日_K.adj_High
adjlow = msmp.日_K.adj_Low
ma1 = adjclose.rolling(10).mean()
ma2 = adjclose.rolling(20).mean()
ma3 = adjclose.rolling(50).mean()
ma4 = adjclose.rolling(60).mean()

df_max = max_df(adjclose ,ma1 ,ma2, ma3 ,ma4)
df_min = min_df(adjclose ,ma1 ,ma2, ma3 ,ma4)

qty = np.floor(a * 10000 / (Open * 1000)) * 1000
con1 = df_max.shift(1) < df_min.shift(1)*(1+0.01*x)
con2 = adjclose >df_max.shift(1)
con3 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
con4 = data.loc[:,data.columns.isin(pool)].rank(axis=1) <= y
pos = con1 &con2&con3&con4&(qty!=0)
pos = pos.mask(pos==False)
pos = pos.loc[: , pos.columns.isin(pool)]

out = (adjclose > adjclose.shift(1).rolling(z).max()).rolling(z).sum()==0

dic = msmp_to_dic(['qty', 'long' ,'longout'], qty, pos ,out)
benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp = api.backtest(dic ,
    symbol='id',date='date',qty='qty', sig_value='adjclose',
    open_value='adjopen', open_shift=True,
    close_value='adjopen', close_shift=True,
    longsig='long', longout='longout',
    benchmark=benchmark,    fee=0.0001425 * b)


										
									
加入我的收藏 複製程式
  • 年化報酬

      +8.17%
  • 夏普值

      1.2
  • 最大虧損

      -8.28%
  • 勝率

      +51.0%
技術面
看更多

營收回升與股價創高

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、股價創X日新高。
# 二、排除月營收連3月衰退10%
# 三、排除近一年月營收增長50%發生8次以上。
# 四、近月營收脫離近年谷底,達連續Y次。
# 五、連續3月近月營收MOM > Z%
# 六、10日均交易量 > A張
# 七、股池為上市
# 八、選擇滿足條件下:10日均交易量較大的B個。
# 九、在每個月的最後營收公告截止日換股。
# 十、手續費為C折 ,各個股票張數金額不超過D萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=60
y=3
z=-40
a=200
b=10
c=3
d=20
BM='0050'

adjclose =msmp.日_K.adj_Close
adjopen =msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open   = msmp.日_K.Open
vol = msmp.日_K.adj_Volume
vol_ma= vol.rolling(10).mean()
rev = msmp.月_營收.金額_千
rev_month_growth = msmp.月_營收.MoM
rev_year_growth = msmp.月_營收.YoY
list_STC = msmp.list['tse']

#股數
qty = np.floor(d*10000/(Open*1000))*1000
# 股價創年新高
con1 = (adjclose == adjclose.rolling(x, min_periods=20).max())
# 排除月營收連3月衰退10%以上&排除近一年漲太多
con2 = ~((rev_year_growth < -10).rolling(3).sum()==3)
con3 = ~((rev_year_growth> 50).rolling(12).sum()>=8)
# 確認營收底部,近月營收脫離近年谷底(連續3月的"單月營收近12月最小值/近月營收" < 0.8)
con4 = ((rev.rolling(12).min()/rev) < 0.8).rolling(y).sum()==y
# 單月營收月增率連續3月大於-40%
con5 = (rev_month_growth > z).rolling(3).sum()==3
# 流動性條件
con6 = vol_ma > a
# 隔天沒有鎖漲停
con7 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
buy = con1 & con2  & con3 & con4 & con5 & con6 & con7 &(qty!=0)

buy=buy[buy.columns[buy.columns.isin(list_STC)]]
#換股
buy = vol_ma*buy
buy = buy.apply(lambda row: row[row > 0].nsmallest(b), axis=1).notna().ne(0)
#周期
setday=rev.index_str_to_date().index
buy=buy[buy.index.isin(setday)]
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , buy)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        fee = c*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +14.49%
  • 夏普值

      0.9
  • 最大虧損

      -22.75%
  • 勝率

      +46.0%
基本面 技術面
看更多

中小型股隨大盤趨勢突破

										
												
# 本策略專門追蹤市場短期下跌趨勢,由以下四種條件組合。
# 一、X億 <市值 < Y億。
# 二、大盤在Z日均綫之上。
# 三、A日區間内平台整理,今日突破。
# 四、股池為上市 且 剔除KY
# 五、止盈為40%止損為15%,以發生信號的隔天開盤價,開倉及平倉。
# 六、手續費為B折 ,各個股票張數金額不超過C萬

import numpy as np
import pandas as pd
import kgisuperpy as kgi

person_id = 'A123456789'
person_pwd = '0000'
#simulation可輸入參數True:連線至測試環境;Fales:連線至正式環境
simulation = True

api = kgi.login(person_id ,person_pwd ,simulation)

msmp = api.MSMP
msmp_to_dic = api.MSMP.msmp_to_dic


x=5
y=20
z=20
a=20
b=3
c=20
BM='0050'

adjclose= msmp.日_K.adj_Close
adjopen= msmp.日_K.adj_Open
adjhigh= msmp.日_K.adj_High
adjlow= msmp.日_K.adj_Low
Open = msmp.日_K.Open
list_STC = msmp.list['tse']
list_KY  = msmp.list['KY']

def period_nhigh(data,period=7,n=1): #期間第n大
        return data.rolling(period).quantile((period-n)/(period-1))

#股數
qty = np.floor(c*10000/(Open*1000))*1000
#市值 <> n億
Marketvalue= msmp.日_K.市值_百萬
con1= Marketvalue >(x*100)
#市值 <> n億
con2= Marketvalue <(y*100)
#大盤在period日均綫之上
stc = msmp.TSE.adj_Close
con3= stc>stc.rolling(z).mean()
# p區間内震蕩,平台整理后突破
high4= period_nhigh(adjhigh,20,4)
low4=  period_nhigh(adjlow,20,4)
p1= adjhigh.rolling(a).max().shift(1)<adjlow.rolling(20).min().shift(1)*(1.1)
p2= adjhigh.rolling(a).max().shift(1)<high4.shift(1)*(1+0.05)
p3= adjlow.rolling(a).min().shift(1)*(1+0.05)>low4.shift(1)
p4= adjclose>adjhigh.rolling(10).max().shift(1)
con4= p1&p2&p3&p4
# 隔天沒有鎖漲停
con5 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
position=con1&con2&con3&con4&con5&(qty!=0)

#清單
position=position[position.columns[position.columns.isin(list_STC)]]
position=position[position.columns[~position.columns.isin(list_KY)]]
#出場
position=position.mask(position==False)
#轉換回測格式
dfX = msmp_to_dic(['qty','sig'],qty , position)

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp=api.backtest(data=dfX,
        symbol='id',
        date='date',
        sig_value='adjclose',
        open_value='adjopen',  open_shift=True,   
        close_value='adjopen', close_shift=True,  
        qty='qty',
        longsig='sig',
        earn=40,loss=15,
        fee = b*0.0001425,
        benchmark=benchmark,
        )

										
									
加入我的收藏 複製程式
  • 年化報酬

      +10.6%
  • 夏普值

      1.2
  • 最大虧損

      -16.02%
  • 勝率

      +53.0%
技術面
看更多
  • 1
  • 2
  • 3
  • 4

使用聲明

1.網站內容係用戶自行操作程式邏輯,統計公開一般性財經數據之結果,所有回測皆為歷史資料模擬教學,不代表未來實際績效,純屬參考性質,請勿視為買賣金融商品或其他投資之建議或邀約。

2.本平台以上資料整理僅供參考僅提供作為輔助參考,不代表標的推薦,使用者不應以此作為投資或交易行為之唯一依據。對於使用者因採用本系統所做之任何投資行為所導致之直接或間接損失,均不負任何損害賠償及法律上之責任。

3. 使用者應知悉任何投資工具及投資行為皆有風險,進行任何投資行為所產生之風險及盈虧,均須自行承擔,並就投資結果自行負責