Example #1
0
def GetKBar(Num,Prod,Kind,DN):
    # 取歷史報價
    Data = GOrder.GetHistoryKBar(Num,Prod,Kind,DN)
    # 刪除換行符號並依逗號分隔
    Data = [ i.strip('\n').split(',') for i in Data ]
    # 將資料改為Talib套件適用的格式
    KBar = {}
    KBar['date'] = np.array([ i[0] for i in Data ])
    KBar['open'] = np.array([ float(i[2]) for i in Data ])
    KBar['high'] = np.array([ float(i[3]) for i in Data ])
    KBar['low'] = np.array([ float(i[4]) for i in Data ])
    KBar['close'] = np.array([ float(i[5]) for i in Data ])
    KBar['volume'] = np.array([ int(i[6]) for i in Data ])
    return KBar
Example #2
0
from haohaninfo import GOrder  # 匯入模組

N = 10  # 設定MA期數
TotalProfit = []  # 用來記錄每筆損益
flag = 0  # 手中部位狀態,0代表空手,1代表持有多單,-1代表持有空單
Data = GOrder.GetHistoryKBar('100', '2330', 'Stock', '1')  # 取歷史報價
Data = [i.strip('\n').split(',') for i in Data]  # 利用列表推導式將資料轉為List格式

lastClose = None  # 昨日收盤價
lastMA = None  # 昨日MA值
for k in range(N, len(Data) - 1):
    price = [float(i[5]) for i in Data[k - N + 1:k + 1]]  # 取近N日的收盤價
    nextDate = Data[k + 1][0]  # 隔日日期
    nextOpen = float(Data[k + 1][2])  # 隔日開盤價
    thisClose = float(Data[k][5])  # 當日收盤價
    thisMA = sum(price) / N  # 當日MA值

    # 第一筆資料無法判斷是否交叉
    if lastClose != None:
        # 收盤價由下往上穿越平均線
        if lastClose <= lastMA and thisClose > thisMA:
            # 多單進場
            if flag == 0:
                flag = 1
                OrderDate = nextDate
                OrderPrice = nextOpen
            # 將空單平倉,並多單進場
            elif flag == -1:
                # 先平倉,並記錄損益
                CoverDate = nextDate
                CoverPrice = nextOpen
 # 該商品近10年的現金股利
 Data3 = [ i[2] for i in Data2 ]
 # 若資料內有NA值則略過這檔股票
 if 'NA' in Data3:
     continue
 # 將股利資訊從 字串型態 轉為 浮點位型態
 Data4 = [ float(i) for i in Data3 ]
 # 近10年發放現金股利的次數
 Num = len([ i for i in Data4 if float(i) > 0 ])
 # 連續10年都有發放現金股利
 if Num >= 10:
     # 每一年發放的現金股利都不低於前一年
     Check = True
     for i in range(1,10):
         if Data3[i] < Data3[i-1]:
             Check = False
             break
     # 印出符合條件的股票代碼及近10年發放的現金股利
     if Check == True:
         # 取該檔股票的歷史日K棒 (K棒數量,商品代碼,商品種類,日夜盤)
         KBar = GOrder.GetHistoryKBar('250', Prod, 'Stock', '1')
         # 目前無法取到上櫃股票的歷史資料
         if KBar != ['']:
             Close = [ i.split(',') for i in KBar ] # 依照逗號分隔欄位
             Close = [ float(i[5]) for i in Close ] # 取出收盤價
             MA250 = round(sum(Close)/250,2)        # 計算年均線(一年約250個交易日)
             TodayClose = Close[-1]                 # 最近一日的收盤價
             # 收盤價 > 年均線
             if TodayClose > MA250:
                 print(Prod,'TodayClose:',TodayClose,'MA250:',MA250)