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