0050成分股營收虧轉盈

										
												

# 一、股池為0050成分股。
# 二、yoy為月營收年成長,對應日期為下個月10號的最近交易日。
# 三、近Y月至少發生一次 ,yoy > 0 且 上期yoy < 0
# 四、選擇滿足條件YOY較大的X檔股票
# 五、止損為Z% ,各個股票張數金額不超過A萬

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

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

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

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


x=8
y=3
z=15
a=100
BM='0050'

table=api.Data.get('ETF持股清單','0050')
ls = table[table.標的類型=='股票'].股票代號.tolist()
dic={}
for symbol in ls:
    table1=api.Data.get('日K/技術指標/價量資料-個股多期',symbol)
    df1=table1.set_index('日期')[['開盤價','收盤價','最高價','最低價','成交量']]
    df1.columns=['Open','Close','High','Low','Volume']
    table2 = api.Data.get('還原日K(個股、ETF、大盤)-單股單期',symbol)
    df2 = table2.set_index('日期')[['開盤價','收盤價','最高價','最低價']]
    df2.columns=['adjopen','adjclose','adjhigh','adjlow']
    dic[symbol]= df1.sort_index().join(df2, how='inner')

def convert_to_datetime(date_str):
    year, month = map(int, date_str.split('-M'))
    day = 10
    if month == 12:
        year += 1
        month = 1
    else:
        month += 1
    return pd.Timestamp(year, month, day)

_yoy={}
for symbol in ls:
    table = api.Data.get('月營收/月增率/年增率-個股多期',symbol)
    df= table.set_index('年月')['單月合併營收年成長(%)']
    _yoy[symbol]=df
yoy = pd.DataFrame(_yoy)
yoy.index = [convert_to_datetime(idx) for idx in yoy.index]
benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']

index_ls = yoy.index
loaded_indices = benchmark.index
insert_indices = np.searchsorted(loaded_indices, index_ls)
yoy.index  = [   loaded_indices[insert_indices[i]] if loaded_indices.min() <= index_ls[i] <= loaded_indices.max()
                else index_ls[i]    for i in range(len(index_ls))]

con = (yoy>0) & (yoy.shift(1)<0)
pos = con.rolling(y).sum()>=1
pos = pos*yoy
map_yoy = pos.where(pos > 0).rank(axis=1, ascending=False, method='first') <= x

dicX = {}
for stockid in dic.keys():
    df = dic[stockid].copy()
    df['sig'] = df.index.map(map_yoy[stockid])
    df['qty'] = np.floor(a*10000/(df.Open*1000))*1000 
    if df.sig.any()!=True:
        continue
    dicX[stockid] = df.reset_index()
    
rp = api.backtest(data=dicX ,
            date='日期',
            sig_value='adjclose',
            open_value='adjopen',    open_shift=True,
            close_value='adjopen',   close_shift=True, 
            qty='qty',
            longsig='sig',
            loss= z,
            benchmark=benchmark,
            )

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

      +22.87%
  • 夏普值

      2.0
  • 最大虧損

      -10.02%
  • 勝率

      +63.0%
技術面
看更多

低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:連線至測試環境;False:連線至正式環境
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,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +23.63%
  • 夏普值

      1.8
  • 最大虧損

      -17.96%
  • 勝率

      +55.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:連線至測試環境;False:連線至正式環境
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,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +16.34%
  • 夏普值

      1.0
  • 最大虧損

      -25.53%
  • 勝率

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

金融類股多因子排名選股策略

										
												
#一、篩選產業為金融類股
#二、計算YoY、日殖利率、股價净值比、本益比的rank排名越大分越高
#三、依據參數權重 X * YoY + Y * 殖利率 + Z * PB + A * PE 計算綜合分數score
#四、選擇滿足以上條件 ,score前B大的,在每個月營收最後公告日進行換股
#五、手續費為 C 折 ,每支股票最大開倉金額不超過 D 萬

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

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

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

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


x=1
y=-1
z=-1
a=-1
b=10
c=3
d=100
BM='0050'

Open = msmp.日_K.Open
季股利 = msmp.季股利資訊.股票股利_季.fillna(0) +msmp.季股利資訊.現金股利_季.fillna(0)
日殖利率= 100*季股利.rolling(4).sum() /msmp.日_K.Close
yoy = msmp.月_營收.YoY
股價淨值比 = msmp.日_指標.股價淨值比
本益比 = msmp.日_指標.本益比
info=api.Data.get('台股產業對照表')
finance_list =  info[info.產業名稱.str.contains('金融',na=False)].股票代號.to_list()

qty = np.floor(d*10000/(Open*1000))*1000
div_score = 日殖利率.loc[:,日殖利率.columns.isin(finance_list)].rank(pct=True).fillna(0)
yoy_score = yoy.loc[:,yoy.columns.isin(finance_list)].rank(pct=True).fillna(0)
pb_score = 股價淨值比.loc[:,股價淨值比.columns.isin(finance_list)].rank(pct=True ,ascending=True).fillna(0)
pe_score = 本益比.loc[:,本益比.columns.isin(finance_list)].rank(pct=True ,ascending=True).fillna(0)
score = x*yoy_score +y*div_score +z*pb_score +a*pe_score

pos = (qty!=0)*score +100
pos = pos.apply(lambda row: row[row > 0].nlargest(b), axis=1).notna().ne(0)
index = msmp.INDEX['M']
pos = pos.loc[pos.index.isin(index)]
dic =msmp_to_dic(['qty' ,'pos'],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 = 'pos', 
        benchmark= benchmark,
        fee = 0.0001425*c  )






















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

      +22.3%
  • 夏普值

      1.7
  • 最大虧損

      -12.57%
  • 勝率

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

財務價值型成長策略

										
												
# 策略說明:基本面選股策略,以下是策略的主要條件:
# 一、股價淨值比低於 X
# 二、月營收年增率YOY > Y
# 三、資本支出佔營收比 < Z
# 四、連續三季,近一年總和eps >A元
# 五、近一年營運現金流 > 1億元
# 六、股池為上市、排除KY
# 七、選擇滿足條件下:股價淨值比較大的B個 
# 八、在每個月的最後營收公告截止日換股。
# 九、手續費為C折 ,各個股票張數金額不超過D萬

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

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

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

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


x=0.9
y=5
z=-0.2
a=0.5
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']
eps= msmp.季財報_損益表_千.eps
營收年成長 = msmp.月_營收.YoY
資本支出 = msmp.季財報_現金流表_千.資本支出
股價淨值比 = msmp.日_指標.股價淨值比
營運現金流 = msmp.季財報_現金流表_千.營運現金流

#股數
qty = np.floor(d*10000/(Open*1000))*1000
con1=股價淨值比<x
con2=營收年成長>y
con3=(資本支出/營運現金流)< z
con4=(eps.rolling(4).sum()>a).rolling(3).sum()==3
con5=營運現金流.rolling(4).sum()*1000>100*1000000
# 隔天沒有鎖漲停
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 )]]
buy=(buy*股價淨值比).apply(lambda x : x[x>0].nlargest(b) , axis=1).notna().ne(0)
setday=營收年成長.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,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )



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

      +12.51%
  • 夏普值

      1.1
  • 最大虧損

      -19.62%
  • 勝率

      +60.0%
基本面
看更多

0050成分股破底翻策略

										
												
# 一、破底翻策略, 股池為0050成分股
# 二、定義bottom:為近 X 期內還原收盤價的 Y% 分位數,此值可作為近期的支撐線參考
# 三、還原最高價 > bottom ,還原最低價 < bottom
# 四、止盈為Z%,止損為A%。以信號隔天的開盤價,開倉及平倉
# 五、各個股票張數金額不超過B萬

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

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

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

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


table=api.Data.get('ETF持股清單','0050')
ls = table[table.標的類型=='股票'].股票代號.tolist()
dic={}
for symbol in ls:
    table1=api.Data.get('日K/技術指標/價量資料-個股多期',symbol)
    df1=table1.set_index('日期')[['開盤價','收盤價','最高價','最低價','成交量']]
    df1.columns=['Open','Close','High','Low','Volume']
    table2 = api.Data.get('還原日K(個股、ETF、大盤)-單股單期',symbol)
    df2 = table2.set_index('日期')[['開盤價','收盤價','最高價','最低價']]
    df2.columns=['adjopen','adjclose','adjhigh','adjlow']
    dic[symbol]= df1.sort_index().join(df2, how='inner')

x=60
y=3
z=60
a=15
b=70
BM='0050'

dicX={}
for stock_id in dic.keys():
    df = dic[stock_id].copy()
    df['bottom'] =df['adjclose'].rolling(x).apply(lambda data : np.percentile(data, y))
    
    #計算股數
    df['qty'] = np.floor(b*10000/(df.Open*1000))*1000  
    
    con1 = df['adjhigh'] > df['bottom']
    con2 = df['adjlow']  < df['bottom']
    con3 = df['qty']!=0
    con4 = df['Volume'] !=0
    position = con1&con2&con3&con4
    
    df.loc[position[position==True].index,'sig']=True
    if position.any()!= True:
        continue
    dicX[stock_id]=df.reset_index()  

benchmark= api.Data.get('還原日K(個股、ETF、大盤)-單股單期' ,BM).set_index('日期')['收盤價']
rp = api.backtest(data=dicX ,
                date='日期',
                sig_value='adjclose',
                open_value='adjopen',    open_shift=True,
                close_value='adjopen',   close_shift=True, 
                qty='qty',
                longsig='sig',
                earn = z, loss= a,
                benchmark=benchmark,
                messages =False
                )

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

      +19.94%
  • 夏普值

      1.9
  • 最大虧損

      -15.07%
  • 勝率

      +59.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:連線至測試環境;False:連線至正式環境
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',
    force_exit= msmp.list['delist'],
    benchmark=benchmark,    fee=0.0001425 * b)






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

      +14.29%
  • 夏普值

      1.2
  • 最大虧損

      -16.44%
  • 勝率

      +52.0%
技術面
看更多

營收高成長低本益比策略

										
												
# 一、 近三個月年增率 >X%
# 二. 本益比< Y
# 三. 近一年EPS為正
# 四. 取滿足條件中,本意比較小的Z個
# 五. 手續費為A折,各個股票張數金額不超過B萬

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

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

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

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


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

adjclose = msmp.日_K.adj_Close
adjhigh = msmp.日_K.adj_High
adjlow = msmp.日_K.adj_Low
Open = msmp.日_K.Open
eps = msmp.季財報_損益表_千.eps
本益比 = msmp.日_指標.本益比
pool = msmp.list['tse'] 

qty = np.floor(b*10000/(Open*1000))*1000
yoy = msmp.月_營收.YoY
yoy_3mean = yoy.rolling(3).mean()
con1 =  yoy_3mean > x
con2 = 本益比<y
con3 = eps.rolling(4).sum() >0
con4 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))

long = con1 &con2 &con3 &con4 &(qty!=0)
long = long.loc[:, long.columns.isin(pool)]
long = long * 本益比
long = long.apply(lambda row: row[row > 0].nsmallest(z), axis=1).notna().ne(0)
M_index = msmp.INDEX['M']
long = long.loc[long.index.isin(M_index)]

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




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

      +23.83%
  • 夏普值

      1.1
  • 最大虧損

      -16.84%
  • 勝率

      +59.0%
基本面
看更多

持股結構與營收增長策略

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、con1 為0~1,由持股50張以上比例的排名。
# 二、con2 為(True 1、False 0),還原收盤價 > X日均。
# 三、con3 為0~1,由營收相比上月增長的排名。
# 四、con4 為0~1,由營收相比去年增長的排名。
# 五、積分為score =  con1*con2 + con3 +con4
# 六、股池為上市、排除KY
# 七、第一次篩選,score*月營收MoM 前Y大。
# 八、第二次篩選,股價净值比 前Z大。
# 九、第三次篩選,大股東增減 前A小。
# 十、在每個月的最後營收公告截止日換股。
# 十一、移動止損為 B%,手續費為C折 ,各個股票張數金額不超過D萬

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

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

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

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


x=100
y=50
z=20
a=10
b=20
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']
interest = 1/msmp.日_指標.股價淨值比
grow = msmp.月_營收.MoM
rev = msmp.月_營收.金額_千

ratio = msmp.週_大小股東持股.張數50到100_比例.fillna(0) +\
        msmp.週_大小股東持股.張數100到200_比例.fillna(0)+\
        msmp.週_大小股東持股.張數200到400_比例.fillna(0)+\
        msmp.週_大小股東持股.張數400到600_比例.fillna(0) +\
        msmp.週_大小股東持股.張數600到800_比例.fillna(0) +\
        msmp.週_大小股東持股.張數800到1000_比例.fillna(0) +\
        msmp.週_大小股東持股.張數1000張以上_比例.fillna(0)
#股數
qty = np.floor(d*10000/(Open*1000))*1000
con1 = ratio.rank(axis=1, pct=True)
con2 = adjclose>adjclose.rolling(x).mean()
con3= (rev / rev.shift()).rank(axis=1, pct=True)
con4= (rev.rolling(2).mean() / rev.rolling(2).mean().shift(12)).rank(axis=1, pct=True)
position=con1*con2+con3+con4

position=position[position.columns[position.columns.isin(list_STC)]]
position=position[position.columns[~position.columns.isin(list_KY)]]

# 隔天沒有鎖漲停
sig = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
position= position*(sig&(qty!=0))

position=position*grow
position=position.astype(float).apply(lambda row: row[row!=0].nlargest(y), axis=1).notna().ne(0)
position=position*interest
position=position.astype(float).apply(lambda row: row[row!=0].nlargest(z), axis=1).notna().ne(0)
position=position*ratio.diff(8)
position=position.astype(float).apply(lambda row: row[row!=0].nlargest(a), 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',
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        fee = c*0.0001425,
        moveloss=b,
        )

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

      +13.5%
  • 夏普值

      1.1
  • 最大虧損

      -17.05%
  • 勝率

      +55.0%
基本面
看更多

低估財務成長策略

										
												
# 策略說明:基本面選股策略,以下是策略的主要條件:
# 一、股價淨值比 < X
# 二、稅後權益報酬率 > Y
# 三、資本支出/營運現金流量 <-0.2
# 四、營運現金流量 > A*百萬
# 五、月營收增長率 > Z
# 六、股池為上市、排除KY
# 七、選擇滿足條件下:震蕩幅度較大的B個 
# 八、在每個月的最後營收公告截止日換股。
# 九、手續費為C折 ,各個股票張數金額不超過D萬

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

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

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

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


x=1.1
y=1
z=0
a=20
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.日_K.adj_High/msmp.日_K.adj_Low
股價淨值比 = msmp.日_指標.股價淨值比
roe = msmp.季財報_財務指標.ROE_稅後權益報酬率
資本支出 =msmp.季財報_現金流表_千.資本支出 #負數
營運現金流量 =msmp.季財報_現金流表_千.營運現金流
mom =msmp.月_營收.MoM

#股數
qty = np.floor(d*10000/(Open*1000))*1000
con1=股價淨值比<=x
con2=roe>y
con3= 資本支出/營運現金流量 <-0.2
con4= 營運現金流量*1000 > a*1000000
con5= mom> 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)]]
buy=(buy*流動性).apply(lambda x : x[x>0].nlargest(b) , axis=1).notna().ne(0)
setday=mom.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,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +12.47%
  • 夏普值

      0.9
  • 最大虧損

      -16.06%
  • 勝率

      +52.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:連線至測試環境;False:連線至正式環境
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,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +27.92%
  • 夏普值

      1.8
  • 最大虧損

      -13.29%
  • 勝率

      +53.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:連線至測試環境;False:連線至正式環境
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',
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        fee = c*0.0001425,
        )

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

      +16.55%
  • 夏普值

      1.3
  • 最大虧損

      -14.28%
  • 勝率

      +60.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:連線至測試環境;False:連線至正式環境
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=api.Data.get('上市櫃/ETF清單(含當沖限制)')
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',
        force_exit= msmp.list['delist'],
        benchmark=benchmark,    fee=0.0001425 * b)


















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

      +21.94%
  • 夏普值

      1.7
  • 最大虧損

      -14.39%
  • 勝率

      +73.0%
基本面
看更多

爆量起漲

										
												
# 策略說明:這是一種專注於捕捉股價剛開始上漲的策略,主要是透過觀察成交量的變化和收盤價的動態,並結合股價的穩定性來進行操作。
# 主要條件如下:
# 一、成交量>= X。
# 二、收盤價創 Y日新高。
# 三、成交量創 Y日新高。
# 四、近 Z日區間振幅 < A%。
# 五、當日低跌破前日低。
# 六、股池為上市 且 剔除KY
# 七、止盈為50%止損為10%,以信號隔天的開盤價,開倉及平倉。
# 八、手續費為B折 ,各個股票張數金額不超過C萬

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

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

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

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


x=3000
y=25
z=10
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
list_STC = msmp.list['tse']
list_KY  = msmp.list['KY']

#股數
qty = np.floor(c*10000/(Open*1000))*1000
#交易量 > n 
volume =msmp.日_K.Volume
con1 = volume > x
#收盤創 period 新高 
Close =msmp.日_K.Close
con2 = Close > Close.rolling(y).max().shift(1)
#交易量創 period 新高
con3 = volume > volume.rolling(y).max().shift(1)
#n日震幅 < p 
con4= adjhigh.rolling(z).max().shift(1) < (1+0.01*a)*adjlow.rolling(z).min().shift(1)
#當日低跌破前日低
con5 = adjlow<adjlow.shift(1)
# 隔天沒有鎖漲停
con6 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
#條件
position = con1&con2&con3&con4&con5&con6&(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=30,loss=10,
        fee = b*0.0001425,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )



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

      +5.23%
  • 夏普值

      0.5
  • 最大虧損

      -18.38%
  • 勝率

      +36.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:連線至測試環境;False:連線至正式環境
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,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +7.38%
  • 夏普值

      0.6
  • 最大虧損

      -22.97%
  • 勝率

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

使用聲明

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

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

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