低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,
        )

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

      +24.87%
  • 夏普值

      1.7
  • 最大虧損

      -12.96%
  • 勝率

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

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,
            )

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

      +23.59%
  • 夏普值

      2.1
  • 最大虧損

      -11.22%
  • 勝率

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

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

      +24.85%
  • 夏普值

      1.2
  • 最大虧損

      -23.44%
  • 勝率

      +49.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,
        )

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

      +28.51%
  • 夏普值

      1.8
  • 最大虧損

      -13.50%
  • 勝率

      +52.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,
        )



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

      +11.64%
  • 夏普值

      1.0
  • 最大虧損

      -19.75%
  • 勝率

      +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
                )

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

      +17.92%
  • 夏普值

      1.6
  • 最大虧損

      -19.60%
  • 勝率

      +54.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.16%
  • 夏普值

      1.1
  • 最大虧損

      -16.54%
  • 勝率

      +55.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  )






















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

      +21.88%
  • 夏普值

      1.7
  • 最大虧損

      -10.61%
  • 勝率

      +64.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,
        )

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

      +11.66%
  • 夏普值

      0.8
  • 最大虧損

      -16.29%
  • 勝率

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

投信加碼買入策略

										
												
# 一、近10天,收盤價下跌10%
# 二、投信比例相比昨日增加 0.1%
# 三、投信持股張數 > X張
# 四、收盤價> Y
# 五、股持為上市 剔除KY
# 六、以上為進場條件,出場條件為:投信比例創10日低點
# 七、移動止損為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=500
y=20
z=15
a=3
b=100

BM='0050'
adjclose = msmp.日_K.adj_Close
adjhigh = msmp.日_K.adj_High
adjlow = msmp.日_K.adj_Low
Open =msmp.日_K.Open
Close = msmp.日_K.Close
投信持股成本 =msmp.日_三大法人.投信持股成本.ffill()
投信買賣超張數 = msmp.日_三大法人.投信買賣超張數.fillna(0)
投信持股張數 = msmp.日_三大法人.持股張數_投信.ffill()
總張數 = msmp.日_三大法人.發行總張數.ffill()
投信比例 = 100*投信持股張數/總張數

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)])

qty = np.floor(b*10000/(Open*1000))*1000
con1 = adjclose.shift(1)< adjclose.shift(10)*0.9
con2 = 投信比例.diff()>0.1
con3 = 投信持股張數>x
con4 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
con5 = Close >y 

long = con1 &con2 &con3 &con4 &con5 &(qty!=0)
long = long.loc[:,long.columns.isin(pool)]
long = long.mask(long==False)

longout = 投信比例<投信比例.shift(1).rolling(10).min()
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', 
        moveloss= z,
        force_exit= msmp.list['delist'],
        benchmark= benchmark ,
        fee = 0.0001425*a  )


















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

      +16.89%
  • 夏普值

      1.2
  • 最大虧損

      -14.77%
  • 勝率

      +44.0%
籌碼面
看更多

基本面防守小型股

										
												
# 策略說明:基本面及技術面多因子選股策略,以下是策略的主要條件:
# 一、市值 < X億
# 二、還原收盤價 < 30日前還原收盤價 *Y
# 三、近4季EPS > Z元
# 四、營收年成長 > 0
# 五、股池為上市、排除KY
# 六、移動止盈為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=50
y=0.8
z=1
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']
marketvalue=msmp.日_K.市值_百萬
eps= msmp.季財報_損益表_千.eps
營收年成長= msmp.月_營收.YoY

#股數
qty = np.floor(c*10000/(Open*1000))*1000
#3e
con1=marketvalue< x*100
#跌一段
con2=adjclose<adjclose.shift(30)*(y)
#eps》1
con3=eps.rolling(4).sum()>z
#營收年成長>0 連續三期
con4=營收年成長>0
# 隔天沒有鎖漲停
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.mask(buy == False)
#轉換回測格式
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 = b*0.0001425,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        moveloss=a,
        )  



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

      +11.22%
  • 夏普值

      0.6
  • 最大虧損

      -30.85%
  • 勝率

      +51.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)






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

      +13.57%
  • 夏普值

      1.1
  • 最大虧損

      -16.73%
  • 勝率

      +51.0%
技術面
看更多

股價大跌首次長紅K

										
												
# 策略說明:股票的波段交易策略,其中包括三個條件。
# 一、近X日内下跌至少Y%。
# 二、今日漲跌幅 >Z%。
# 三、昨日漲跌幅 <A%。
# 四、收盤價 >B
# 五、股池為上市 且 剔除KY
# 六、止盈為40%止損為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=30
y=25
z=5
a=-5
b=30
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['stc']
list_KY  = msmp.list['KY']

#股數
qty = np.floor(d*10000/(Open*1000))*1000
#period期内,下跌至少v%    
con1= adjclose.shift(1)<adjclose.shift(x)*(1-0.01*y)
#今日漲幅>p%          
con2= adjclose>adjclose.shift(1)*(1+0.01*z)
#昨日漲跌幅 < p%      
con3= adjclose.shift(1)<adjclose.shift(2)*(1+0.01*a)
#收盤價》30       
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',
        fee = c*0.0001425,
        earn=40,loss=15,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +9.14%
  • 夏普值

      0.7
  • 最大虧損

      -20.32%
  • 勝率

      +75.0%
技術面
看更多

透視指標篩選轉強股

										
												
# 策略說明:在投資市場中,找到適合的投資標的並掌握其轉強的時機,是獲利的關鍵。以下是策略的主要條件:
# 一、elder透視指標轉強。
# 二、收盤創 X日新高。
# 三、市值 < Y 億。
# 四、近5日平均成交金額 > Z億。
# 五、近A日乖離率< B%  
# 六、大盤站在5日均綫之上  
# 七、股池為上市 且 剔除KY
# 八、止盈為30%止損為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=10
y=250
z=0.6
a=20
b=11
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']

def EMA(window=14 ):
    data = (msmp.日_K.adj_High +msmp.日_K.adj_Low +2*msmp.日_K.adj_Close)/4 
    ema = data.ewm(span=window, adjust=False).mean()
    return ema

def BIAS(window=6 ):
    Close = msmp.日_K.adj_Close 
    bias= 100*(Close-Close.rolling(window).mean())/Close.rolling(window).mean()
    return bias

#股數
qty = np.floor(d*10000/(Open*1000))*1000
#elder透視指標轉強
elder= msmp.日_K.adj_Low - EMA(5)
con1= (elder>elder.shift(1))&(elder<0)
#收盤創k2日新高        
con2= adjclose>adjclose.rolling(x).max().shift(1)
#Marketvalue < e億    
Marketvalue= msmp.日_K.市值_百萬/100        
con3= Marketvalue < y
#p日平均成交 > e億   
成交金額= msmp.日_K.成交額_百萬/100 
con4= 成交金額.rolling(5).mean() > z
#n日乖離率<P%      
bias = BIAS(a)
con5= bias<0.01*b
#大盤站在n日均綫之上   
stc = msmp.TSE.adj_Close
con6= stc>stc.rolling(5).mean().shift(1)
# 隔天沒有鎖漲停
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=buy[buy.columns[~buy.columns.isin(list_KY)]]
#出場
buy=buy.mask(buy == False)
#轉換回測格式
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',
        earn=30,loss=15,
        fee = c*0.0001425,
        force_exit= msmp.list['delist'],
        benchmark=benchmark,
        )

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

      +10.91%
  • 夏普值

      0.8
  • 最大虧損

      -16.01%
  • 勝率

      +50.0%
技術面
看更多

股價大跌後主力進場

										
												
# 策略說明:股票的波段交易策略。以下是策略的主要條件:
# 一、10日以來,首次突破X日均。
# 二、近Y日以來,下跌至少Z%。
# 三、主力買超佔交易量 > A%。
# 四、股池為上市 且 剔除KY
# 五、止盈為30%止損為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=10
y=30
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']

#股數
qty = np.floor(c*10000/(Open*1000))*1000
#10日以來,第一次突破p均   
p= adjclose>adjclose.rolling(x).mean().shift(1)                 
con1= p.rolling(10).sum()==1
#period期内,下跌至少p%        
con2=adjclose.shift(1)<adjclose.shift(y)*(1-0.01*z)
#主力買超佔交易量 > p%
主力= msmp.日_三大法人.主力買賣超張數
Volume = msmp.日_K.adj_Volume
con3= 主力/Volume > 0.01*a
# 隔天沒有鎖漲停
con4 = ~((adjlow.shift(-1)>adjclose*1.0947)&(adjhigh.shift(-1)==adjlow.shift(-1)))
position= con1&con2&con3&con4&(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,
        )

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

      +9.06%
  • 夏普值

      0.8
  • 最大虧損

      -13.85%
  • 勝率

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

使用聲明

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

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

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