コード例 #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
コード例 #2
0
# 載入必要模組
from haohaninfo import GOrder
from order import Record
import sys

# 登入帳號密碼(讀者須修正該帳號密碼為自己的,否則無法執行策略)
GOrder.Login('TestAccount','TestPasswd')

# 建立部位管理物件
OrderRecord=Record() 

# 取得回測參數
StartDate=sys.argv[1]
EndDate=sys.argv[2]
# 每日進場標記、高低點判斷
LastOrderDay=''
CeilPrice={}
FloorPrice={}
Spread={}
MoveStopLoss=0.02

# 回測取報價物件
KBar=GOrder.GetTAKBar(StartDate,EndDate,'3008','Stock','1','1')
# 開始回測
for n in range(0,len(KBar['time'])):
    # 將日期取出
    Date=KBar['time'][n].strftime('%Y%m%d')
    # 如果無未平倉部位 並時間為指定的進場時間 則進場
    if OrderRecord.GetOpenInterest()==0 :
        # 在9點15 判斷當日高低點
        if KBar['time'][n].strftime('%H%M') <= "0916" :
コード例 #3
0
# 載入必要模組
from haohaninfo import GOrder
from order import Record
import sys

# 登入帳號密碼(讀者須修正該帳號密碼為自己的,否則無法執行策略)
GOrder.Login('TestAccount', 'TestPasswd')

# 建立部位管理物件
OrderRecord = Record()

# 取得回測參數
StartDate = sys.argv[1]
EndDate = sys.argv[2]
# 每日進場標記、高低點判斷
LastOrderDay = ''
CeilPrice = {}
FloorPrice = {}
Spread = {}
StopLoss = 30
TakeProfit = 70

# 回測取報價物件
KBar = GOrder.GetTAKBar(StartDate, EndDate, 'TXF', 'Future', '1', '1')
# 開始回測
for n in range(0, len(KBar['time'])):
    # 將日期取出
    Date = KBar['time'][n].strftime('%Y%m%d')
    # 如果無未平倉部位 並時間為指定的進場時間 則進場
    if OrderRecord.GetOpenInterest() == 0:
        # 在9點15 判斷當日高低點
コード例 #4
0
# 載入必要模組
from haohaninfo import GOrder
from chart import ChartKBar_MA
import sys

# 取得回測參數
Excgange = sys.argv[1]
Product = sys.argv[2]
StartDate = sys.argv[3]
EndDate = sys.argv[4]
Klen = sys.argv[5]
LongPeriod = int(sys.argv[6])
ShortPeriod = int(sys.argv[7])

# 登入帳號密碼(讀者須修正該帳號密碼為自己的,否則無法執行策略)
GOrder.Login('TestAccount', 'TestPasswd')

# K線物件
KBar = GOrder.GetTAKBar(StartDate, EndDate, Product, Excgange, '0', Klen)

# 繪製K線圖加上MA線圖
ChartKBar_MA(KBar, LongPeriod, ShortPeriod)
コード例 #5
0
ファイル: History_5.py プロジェクト: clifftseng/stock_python
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
コード例 #6
0
ファイル: MA_1.py プロジェクト: clifftseng/stock_python
from haohaninfo import GOrder  # 匯入模組

Broker = 'Simulator'  # Yuanta(元大證券)、Capital(群益證券)、Capital_Future(群益期貨)、Kgi(凱基證券)、Kgi_Future(凱基期貨)、Simulator(虛擬期貨)
Kind = 'match'  # match(成交資訊)、commission(委託資訊)、updn5(上下五檔資訊)
Prod = 'TXFJ9'  # 商品代碼(GOrder內需先訂閱該商品)
lastMinute = None  # 存放上一筆資料的分鐘
Close = []  # 存放每分鐘的收盤價
N = 5  # 定義MA期數

# 串接GOrder即時報價
GO = GOrder.GOQuote()
for i in GO.Describe(Broker, Kind, Prod):
    time = i[0]  # 時間
    minute = time[14:16]  # 分鐘
    price = float(i[2])  # 價格

    if minute == lastMinute:  # 同一分鐘
        Close[-1] = price  # 不斷更新最近一根K棒的收盤價
    else:  # 不同分鐘
        Close.append(price)  # 新增一根K棒的收盤價

    if len(Close) >= N:  # 陣列裡的收盤價數量足夠就可以開始計算MA指標
        MA = sum(Close[-N:]) / N  # 期數為N期的MA指標
        print(i[0], MA)  # 印出當前的時間及MA指標

    lastMinute = minute  # 記錄當前分鐘
コード例 #7
0
from haohaninfo import GOrder  # 匯入模組

Broker = 'Simulator'  # Yuanta(元大證券)、Capital(群益證券)、Capital_Future(群益期貨)、Kgi(凱基證券)、Kgi_Future(凱基期貨)、Simulator(虛擬期貨)
Kind = 'match'  # match(成交資訊)、commission(委託資訊)、updn5(上下五檔資訊)
Prod = 'TXFJ9'  # 商品代碼(GOrder內需先訂閱該商品)
lastTime = None  # 存放上一筆資料的時間
Close = []  # 存放每分鐘的收盤價
MA_List = []  # 存放每分鐘的MA值
MA = None  # 定義MA值
N = 5  # 定義MA期數

# 串接GOrder即時報價
GO = GOrder.GOQuote()
for i in GO.Describe(Broker, Kind, Prod):
    time = i[0]  # 時間
    minute = time[14:16]  # 分鐘
    price = float(i[2])  # 價格

    if time == lastTime:  # 同一分鐘
        Close[-1] = price  # 不斷更新最近一根K棒的收盤價
    else:  # 不同分鐘
        Close.append(price)  # 新增一根K棒的收盤價

    if len(Close) >= N:  # 陣列裡的收盤價數量足夠就可以開始計算MA指標
        MA = sum(Close[-N:]) / N  # 期數為N期的MA指標

        if time == lastTime:  # 同一分鐘
            MA_List[-1] = MA  # 不斷更新最近一根K棒的MA值
        else:  # 不同分鐘
            MA_List.append(MA)  # 新增一根K棒的MA值
コード例 #8
0
# Yuanta(元大證券)、Capital(群益證券)、Capital_Future(群益期貨)、Kgi(凱基證券)、Kgi_Future(凱基期貨)、Simulator(虛擬期貨)
Broker = 'Masterlink_Future'
PriceOffer = 'Simulator'

# match(成交資訊)、commission(委託資訊)、updn5(上下五檔資訊)
Kind = 'match'

# 取即時報價的商品代碼(GOrder內需先訂閱該商品)
Prod = 'TXFA0'

# 取得當天日期
Date = datetime.datetime.now().strftime("%Y/%m/%d")

# 定義報價指令的物件
GOQ = GOrder.GOQuote()
# 定義下單指令的物件
GOC = GOrder.GOCommand()

endTime = datetime.datetime.strptime('2020/1/3 16:33:10', '%Y/%m/%d %H:%M:%S')
import tick2OHLC

A = tick2OHLC.tick2OHLC()
for row in GOQ.Describe(PriceOffer, Kind, Prod):
    time = datetime.datetime.strptime(row[0], '%Y/%m/%d %H:%M:%S.%f')
    price = float(row[2])
    print(time, price)
    A.put(time, price)

    # if time >= endTime:
    #     GOQ.EndDescribe()
コード例 #9
0
from haohaninfo import GOrder
import datetime
from order_bigdata import OrderMKT

BK = 'Simulator_Stock'
STK = '3481'

T1 = '1023'
T2 = '1022'

GOQ = GOrder.GOQuote()
Index = 0
for row in GOQ.Subscribe(BK, 'match', STK):
    # ['2021/05/27 10:08:24.656481', '2615', '140.5', '10', '88258', '140', '140.5']
    print(row)
    T = datetime.datetime.strptime(row[0], '%Y/%m/%d %H:%M:%S.%f')
    T0 = T.strftime('%H%M')

    if Index == 0:
        print(T0, T1)
        if T0 >= T1:
            Index = 1
            OINFO = OrderMKT(BK, STK, 'B', '1')
            print('進場成功', OINFO)
            break
コード例 #10
0
ファイル: GOrder_WMA2.py プロジェクト: appgod2/test
from haohaninfo import GOrder
import GOrder_GetKBar, datetime

# Yuanta(元大證券)、Capital(群益證券)、Capital_Future(群益期貨)、Kgi(凱基證券)、Kgi_Future(凱基期貨)、Simulator(虛擬期貨)
Broker = 'Simulator'
# match(成交資訊)、commission(委託資訊)、updn5(上下五檔資訊)
Kind = 'match'
# 取即時報價的商品代碼(GOrder內需先訂閱該商品)
Prod = 'TXFH9'
# 取得當天日期
Date = datetime.datetime.now().strftime("%Y/%m/%d")
# 開始判斷時間
StartTime = datetime.datetime.strptime(Date + ' 09:00:00.00',
                                       '%Y/%m/%d %H:%M:%S.%f')
# 定義報價指令的物件
a = GOrder.GOQuote()
# 定義下單指令的物件
b = GOrder.GOCommand()
# 定義K棒物件(1分K)
KBar = GOrder_GetKBar.KBar(Date, 1)
# 固定式停損點數
StopLoss = 20
# 定義WMA快線及慢線期數、
FastN = 5
SlowN = 10
# 定義兩次交叉需間隔的時間
M = 8

# 進場判斷
CrossTime = None
Interval = datetime.timedelta(minutes=M)
コード例 #11
0
 # 該商品近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)
         
コード例 #12
0
from haohaninfo import GOrder

GOC = GOrder.GOCommand()


def OrderMKT(broker, stock, bs, qty):
    OrderNo = GOC.Order(broker, stock, bs, "0", qty, "IOC", "MKT", "A")
    while True:
        OrderRS = GOC.GetAccount(broker, OrderNo)
        OrderInfo = OrderRS[0].split(',')
        print(OrderInfo)
        if OrderInfo[1] == '成交':
            return OrderInfo


# OrderMKT('Simulator_Stock','2615','B','1')
# OrderInfo=OrderMKT('Simulator_Stock','2014','B','1')
# print('成交時間 %s 成交價 %s'%(OrderInfo[7],OrderInfo[4]))

# ['S2021052600045,委託,3481,B,3.7,1000,ROD,2021/05/26 13:16:50,[email protected]']
# ['S2021052600046,成交,3481,B,21.6,1000,IOC,2021/05/26 13:17:19,[email protected]']


# 成交時間 44.05 成交價 2021/05/26 13:25:53
def GetPricebyTick(price, tick):
    StockPriceList = []
    StockPriceList.extend([i / 100 for i in range(1, 1001, 1)])
    StockPriceList.extend([i / 100 for i in range(1005, 5005, 5)])
    StockPriceList.extend([i / 10 for i in range(501, 1001, 1)])
    StockPriceList.extend([i / 10 for i in range(1005, 5005, 5)])
    StockPriceList.extend([i for i in range(501, 1001, 1)])