# 載入必要模組 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" :
def orderPaser(order_line): ''' param: one string of every single order return: one Order object containing record and all info ''' use_line = order_line.split(' ', 4) #取订单,切分 #print (use_line[4]) #去除无用字符,仅保留4 p1 = r"(?<=is\":\[).+?(?=\],\"inf)" searchObj = re.compile(p1).search(use_line[4]) if searchObj: record_set = re.compile(p1).search(use_line[4]).group(0) #提取一个订单中的所有记录 else: return None p_order = r"(?<=\"info\":\{).+?(?=\}\},\"type\":)" order = re.compile(p_order).search(use_line[4]).group(0) #提取一个订单中的信息 #print (order) #提取并转换订单中的时间 p_time = re.compile(r"20[0-9][0-9]\..+?:[0-9][0-9]:[0-9][0-9]") time_str = p_time.findall(order) order = p_time.sub(' ', order) #删除字符串中的时间,方便后续对字符串处理 time_set = [] for time_s in time_str: time_set.append(time.strptime(time_s, "%Y.%m.%d %H:%M:%S")) #提取并转换订单中的 carTypeNo p_carTypeNo = re.compile(r"(?<=carTypeNo\":).+?(?=,\")") carTypeNo = p_carTypeNo.findall(order)[0].replace('\"', '') #print(carTypeNo) carTypeNo = carTypeNo order = p_carTypeNo.sub('" "', order) #print(order) #将订单信息转换为字典 order_peice = order.replace('\"', '').split(',') order_dict = {} #print(order_peice) for order_info in order_peice: order_info = order_info.split(':') #print(order_info) order_dict[order_info[0]] = order_info[1] #格式化时间 if time_set[0] < time_set[1]: order_dict['timeStart'] = time_set[0] order_dict['timeEnd'] = time_set[1] else: order_dict['timeStart'] = time_set[1] order_dict['timeEnd'] = time_set[0] order_dict['cts'] = order_dict['cts'] order_dict['ctl'] = order_dict['ctl'] #插入carTypeNo order_dict['carTypeNo'] = carTypeNo #print(order_dict) #生成order对象 order_temp = Order(order_dict) ''' 下面为记录的处理 ''' p2 = r"\[.+?\]" matcher2 = re.compile(p2).findall(record_set) #将记录集转为List record_idx = 0 #取第一条记录 #print (matcher2[record_idx]) pattern3 = re.compile(r"(?<=\[).+?(?=\])") record_list = [] #将一条记录分片 for record in matcher2: peice = pattern3.search(record).group(0).replace('\"', '').split(',') #print (peice) #将一条记录保存为Record对象 r_temp = Record(float(peice[0])*0.001,float(peice[1]),float(peice[2]),\ float(peice[3]),float(peice[7])) #print(r_temp.soc) record_list.append(r_temp) #print(record_list) order_temp.record_list = record_list return order_temp