def OnTickSpread(self,Tick): if self.tsData.has_key(str(Tick.Codes[0])): self.tsData[str(Tick.Codes[0])].append(Tick.Data[0][0]) print tsData for i in range(len(self.tradingOrder)): if self.tsData[self.tradingOrder[i][0]]!=[] and self.tsData[self.tradingOrder[i][1]]!=[]: if self.tsData[self.tradingOrder[i][0]][-1]-self.tsData[self.tradingOrder[i][1]][-1]*self.tradingOrder[i][2]>self.tradingOrder[i][4] or self.tsData[self.tradingOrder[i][0]][-1]-self.tsData[self.tradingOrder[i][1]][-1]*self.tradingOrder[i][2]<self.tradingOrder[i][3]: #定义买单下单参数,并下单 print'it is trading spread order between %s and %s'%(self.tradingOrder[i][0],self.tradingOrder[i][1]) instrument_id=self.tradingOrder[i][0] direction='buy' limitPrice=w.wsq(instrument_id,'rt_last').Data[0] volume=1 logonid=2 w.torder(instrument_id,direction,limitPrice,volume,logonid=logonid) #定义卖单下单参数,并下单 instrument_id=self.tradingOrder[i][1] direction='short' limitPrice=w.wsq(instrument_id,'rt_last').Data[0] volume=self.tradingOrder[i][2] logonid=2 w.torder(instrument_id,direction,limitPrice,volume,logonid=logonid)
def Monitor(self): print("Sugar SKEW", self.atCode, self.outCode, datetime.now()) try: atIVX = w.wsq(self.atCode, "rt_imp_volatility").Data[0][0] # the real time ivx of wind outIVX = w.wsq( self.outCode, "rt_imp_volatility").Data[0][0] # the real time ivx of wind except IndexError: pass if atIVX != 0: skewnow = outIVX / atIVX else: return if self.Expire(): return print("skew: ", skewnow) # open a position if skewnow > self.per21 and self.position == 'flat': print('NOTICE! buy one' + str(self.atCode) + ',short two ' + str(self.outCode)) elif skewnow < self.per24 and self.position == 'flat': print('NOTICE! short one' + str(self.atCode) + ',buy two ' + str(self.outCode)) # close a position if skewnow < self.per22 and self.position == 'buy': print('COVER OPTIONS! short one' + str(self.atCode) + ',buy two' + str(self.outCode)) elif skewnow > self.per23 and self.position == 'short': print('COVER OPTIONS! buy one' + str(self.atCode) + ',short two ' + str(self.outCode))
def start(self): w.start() w.wsq( self.code, "rt_date,rt_time,rt_pre_close,rt_open,rt_high,rt_low,rt_last,rt_last_amt,rt_last_vol,rt_ask1,rt_bid1", func=self.tradeSignalCallback) while 1: self.positionDetail() print('持仓列表更新') time.sleep(np.random.randint(5, 30))
def mail_index_pct(): """ 发送今日指数临近收盘价数据,用来基金定投 """ data = w.wsq("000300.SH,000905.SH,CI005165.WI,CI005166.WI", "rt_pct_chg,rt_date,rt_pe_ttm,rt_pb_lf") data = pd.DataFrame(data.Data, index=data.Fields, columns=data.Codes).T data['NAME'] = ["沪深300", "中证500", "中信证券二级行业指数", "中信保险二级行业指数"] string_total = "" for i in range(len(data)): string = str( data.ix[i, "RT_DATE"].astype(int)) + "日, " + data.ix[i, "NAME"] string += "现在涨幅为" + str(np.round(data.ix[i, "RT_PCT_CHG"] * 100, 2)) + '%, ' string += "PB_LF为" + str(data.ix[i, "RT_PB_LF"].round(2)) + ', ' string += "PE_TTM为" + str(data.ix[i, "RT_PE_TTM"].round(1)) + '.' + '<br>' print(string) string_total += string sender_mail_name = '*****@*****.**' receivers_mail_name = ['*****@*****.**', '*****@*****.**'] acc_mail_name = [] subject_header = "今日指数涨跌幅" email = EmailSender() email.attach_html(string_total) email.send_mail_qq(sender_mail_name, receivers_mail_name, acc_mail_name, subject_header)
def get_wsq(universe, if_convert=False): ''' 实时行情快照. Parameters ----------- universe list,标的代码 if_convert 是否将代码转换成万德格式 Returns -------- Series index 万德代码, name 快照时间. ''' if if_convert: universe_wind = code_2_wind_symbol(universe) universe_wind = ','.join(universe_wind) else: universe_wind = ','.join(universe) data = w.wsq(universe_wind, 'rt_last') data = pd.DataFrame(data.Data, index=data.Times, columns=data.Codes).T return data[data.columns[0]]
def get_data(cnt,start,end,end2): if intrade==True: w_data=w.wsd(cnt,'close,low,high',start,end) data=np.array(w_data.Data).T fields=list(map(lambda x:x.lower(),w_data.Fields)) df=pd.DataFrame(data,index=w_data.Times,columns=fields) df.dropna(inplace=True) w_data=w.wsq(cnt,'rt_latest,rt_low,rt_high') ti=dt.datetime.now() if ti.hour>20: Times=pd.to_datetime(w_data.Times[0]).date()+dt.timedelta(days=1) else: Times=pd.to_datetime(w_data.Times[0]).date() Data=w_data.Data rn=pd.DataFrame(Data,columns=[Times]) rn=rn.T rn.columns=df.columns df=df.append(rn) # u'模拟下交易日数据' nextday=pd.to_datetime(Times).date()+dt.timedelta(days=1) nextdata=pd.DataFrame(list(df.iloc[-1]),index=df.columns,columns=[nextday]).T df=df.append(nextdata) else: w_data=w.wsd(cnt,'close,low,high',start,end2) data=np.array(w_data.Data).T fields=list(map(lambda x:x.lower(),w_data.Fields)) df=pd.DataFrame(data,index=w_data.Times,columns=fields) df.dropna(inplace=True) nextday=pd.to_datetime(end2).date()+dt.timedelta(days=1) nextdata=pd.DataFrame(list(df.iloc[-1]),index=df.columns,columns=[nextday]).T df=df.append(nextdata) return df
def onTick(): # 计算K线 """读取行情数据""" wdata = w.wsq("GBPUSD.FX", "rt_date,rt_time,rt_open,rt_high,rt_low,rt_last,rt_last_amt,rt_last_vol,rt_latest,rt_vol,rt_amt,rt_bid1,rt_ask1") tick = pd.DataFrame(wdata.Data,index=wdata.Fields,columns=wdata.Times) tick = tick.T tickMinute = tick.index[0].minute print (u'bar minute:', bar['Minute']) if tickMinute != bar['Minute']: if bar['Minute']: print ('start strategy') # 执行策略 runstrategy(bar) bar['open'] = tick['RT_LAST'][0] bar['high'] = tick['RT_LAST'][0] bar['low'] = tick['RT_LAST'][0] bar['close'] = tick['RT_LAST'][0] bar['date'] = tick.index[0].date() bar['time'] = tick.index[0].time() bar['datetime'] = tick.index[0] # K线的时间设为第一个Tick的时间 bar['Minute'] = tickMinute # 更新当前的分钟 else: # 否则继续累加新的K线 bar['high'] = max(bar['high'], tick['RT_LAST'][0]) bar['low'] = min(bar['low'], tick['RT_LAST'][0]) bar['close'] = tick['RT_LAST'][0] bar['ask1'] = tick['RT_ASK1'][0] bar['bid1'] = tick['RT_BID1'][0]
def __init__(self, options, etf=0, unit=10000, eps_diff=0.01): self.etf = float(etf) # 是否买入ETF的标识,买入为正数,卖出为负数,单位为ETF的份数(100份为一手) super().__init__(options, unit, eps_diff) w.start() self.ql_options, self.date_end, self.strike_list = self._set_ql_option( ) self.etf_now = w.wsq('510050.SH', "rt_latest").Data[0][0] print(self.etf_now)
def _get_cost(self): cost = 0 for option in self.ql_options: _, volume = self.ql_options[option] if volume >= 0: # 表示买入 ask_price = w.wsq(option, "rt_ask1").Data[0][0] cost += ask_price * volume else: # 表示卖出 bid_price = w.wsq(option, "rt_bid1").Data[0][0] cost += bid_price * volume if self.etf >= 0: ask_price = w.wsq('510050.SH', "rt_ask1").Data[0][0] cost += ask_price * self.etf else: bid_price = w.wsq('510050.SH', "rt_bid1").Data[0][0] cost += bid_price * self.etf cost /= self.unit return cost
def wsq(tickers, fields): if isinstance(tickers,str): tickers = tickers.replace(',','').split() if isinstance(fields,str): fields = fields.replace(',','').split() tmp = w.wsq(tickers, fields) return pd.DataFrame(dict(zip(tmp.Fields, tmp.Data)),index = tmp.Codes, columns= tmp.Fields)
def post(self): """ json str:{"codes": "600008.SH,600010.SH,600017.SH", "fields": "rt_open,rt_low_limit", "options": ""} :return: 返回万得返回数据dict """ args = receive_wsq_parser.parse_args() logger.info('/wsq/ args:%s', args) # codes = args['codes'] # fields = args['fields'] # options = args['options'] if args['options'] == "": args['options'] = None if not w.isconnected(): w.start() ret_data = None for nth in range(2): ret_data = w.wsq(**args) error_code = ret_data.ErrorCode if error_code != 0: if nth == 0 and error_code == -40521010: w.stop() w.start() logger.warning('尝试重新登陆成功,再次调用函数') continue msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "") logger.error('wsq(%s) ErrorCode=%d %s' % args) raise RequestError(msg, None, error_code) else: break else: if ret_data is None: msg = 'wst(%s) ret_data is None' % args logger.error(msg) raise RequestError(msg, None, 0) # 将 Data数据中所有 datetime date 类型的数据转换为 string data_len = len(ret_data.Data) logger.debug('ret_data.Data len:%d', data_len) logger.debug('ret_data.Codes : %s', ret_data.Codes) for n_data in range(data_len): data = ret_data.Data[n_data] data_len2 = len(data) if data_len2 > 0: if type(data[0]) in (datetime, date): ret_data.Data[n_data] = [ format_2_date_str(dt) for dt in data ] logger.info('%d column["%s"] date to str', n_data, ret_data.Fields[n_data]) # print('ret_data.Data:\n', ret_data.Data) # 组成 DataFrame ret_df = pd.DataFrame(ret_data.Data, index=ret_data.Fields, columns=ret_data.Codes) ret_dic = ret_df.to_dict() # print('ret_dic:\n', ret_dic) return ret_dic
def rtLast(stocklists): data = w.wsq( stocklists, "rt_last,rt_pct_chg,rt_activenetin_amt,rt_activeinvol_prop,rt_mf_ratio,rt_mf_ratio_5d,rt_mf_ratio_10d,rt_mf_ratio_20d,rt_mf_ratio_60d,rt_mf_days_5d,rt_mf_days_10d,rt_mf_days_20d,rt_mf_days_60d" ) df = pd.DataFrame(data=data.Data, index=data.Fields, columns=data.Codes).T df = df.sort_values(by='RT_MF_RATIO_10D', ascending=False) print(" real last price stock num : {}".format(len(df))) return df
def getorderbook(self, sec): reqid=None try: # print('loading %s' %(underlying)) data=w.wsq(sec.code, "rt_ask1,rt_bid1,rt_asize1,rt_bsize1,rt_open,rt_pre_close, rt_last", func=sec.onoderbookcallback) reqid=data.RequestID except: print('查找期权时异常') return reqid
def wsq(tickers, fields): if isinstance(tickers, str): tickers = tickers.replace(',', '').split() if isinstance(fields, str): fields = fields.replace(',', '').split() tmp = w.wsq(tickers, fields) return pd.DataFrame(dict(zip(tmp.Fields, tmp.Data)), index=tmp.Codes, columns=tmp.Fields)
def rtdprice(self): #实时价格获取 wd = w.wsq([self.cnt1, self.cnt2], "rt_latest") ti = dt.datetime.now() if ti.hour > 20: Times = pd.to_datetime(wd.Times[0]).date() + dt.timedelta(days=1) else: Times = pd.to_datetime(wd.Times[0]).date() return pd.DataFrame(np.array(wd.Data[0]), columns=[Times], index=['cnt1', 'cnt2']).T
def OnTickSpread(self, Tick): if self.tsData.has_key(str(Tick.Codes[0])): self.tsData[str(Tick.Codes[0])].append(Tick.Data[0][0]) print tsData for i in range(len(self.tradingOrder)): if self.tsData[self.tradingOrder[i][0]] != [] and self.tsData[ self.tradingOrder[i][1]] != []: if self.tsData[self.tradingOrder[i][0]][-1] - self.tsData[ self.tradingOrder[i] [1]][-1] * self.tradingOrder[i][2] > self.tradingOrder[i][ 4] or self.tsData[self.tradingOrder[i][0]][ -1] - self.tsData[self.tradingOrder[i] [1]][-1] * self.tradingOrder[i][ 2] < self.tradingOrder[i][3]: #定义买单下单参数,并下单 print 'it is trading spread order between %s and %s' % ( self.tradingOrder[i][0], self.tradingOrder[i][1]) instrument_id = self.tradingOrder[i][0] direction = 'buy' limitPrice = w.wsq(instrument_id, 'rt_last').Data[0] volume = 1 logonid = 2 w.torder(instrument_id, direction, limitPrice, volume, logonid=logonid) #定义卖单下单参数,并下单 instrument_id = self.tradingOrder[i][1] direction = 'short' limitPrice = w.wsq(instrument_id, 'rt_last').Data[0] volume = self.tradingOrder[i][2] logonid = 2 w.torder(instrument_id, direction, limitPrice, volume, logonid=logonid)
def run(self): future1 = MyTable.future1+".CFE" future2 = MyTable.future2+".CFE" future3 = MyTable.future3+".CFE" future4 = MyTable.future4+".CFE" future5 = MyTable.future5+".CFE" future6 = MyTable.future6+".CFE" while True: cnt1 = w.wsq(future1, "rt_bid1,rt_bsize1,rt_ask1,rt_asize1,rt_latest,rt_last,rt_vol") cnt2 = w.wsq(future2, "rt_bid1,rt_bsize1,rt_ask1,rt_asize1,rt_latest,rt_last,rt_vol") cnt3 = w.wsq(future3, "rt_bid1,rt_bsize1,rt_ask1,rt_asize1,rt_latest,rt_last,rt_vol") cnt4 = w.wsq(future4, "rt_bid1,rt_bsize1,rt_ask1,rt_asize1,rt_latest,rt_last,rt_vol") cnt5 = w.wsq(future5, "rt_bid1,rt_bsize1,rt_ask1,rt_asize1,rt_latest,rt_last,rt_vol") cnt6 = w.wsq(future6, "rt_bid1,rt_bsize1,rt_ask1,rt_asize1,rt_latest,rt_last,rt_vol") cnt = str(cnt1.Data[0][0])+"\n"+str(int(cnt1.Data[1][0]))+"\n"+str(cnt1.Data[2][0])+"\n"+str(int(cnt1.Data[3][0]))+"\n"+str(cnt1.Data[4][0])+"\n"+str(cnt1.Data[5][0])+"\n"+str(int(cnt1.Data[6][0]))+"\n"+\ str(cnt2.Data[0][0])+"\n"+str(int(cnt2.Data[1][0]))+"\n"+str(cnt2.Data[2][0])+"\n"+str(int(cnt2.Data[3][0]))+"\n"+str(cnt2.Data[4][0])+"\n"+str(cnt2.Data[5][0])+"\n"+str(int(cnt2.Data[6][0]))+"\n"+\ str(cnt3.Data[0][0])+"\n"+str(int(cnt3.Data[1][0]))+"\n"+str(cnt3.Data[2][0])+"\n"+str(int(cnt3.Data[3][0]))+"\n"+str(cnt3.Data[4][0])+"\n"+str(cnt3.Data[5][0])+"\n"+str(int(cnt3.Data[6][0]))+"\n"+\ str(cnt4.Data[0][0])+"\n"+str(int(cnt4.Data[1][0]))+"\n"+str(cnt4.Data[2][0])+"\n"+str(int(cnt4.Data[3][0]))+"\n"+str(cnt4.Data[4][0])+"\n"+str(cnt4.Data[5][0])+"\n"+str(int(cnt4.Data[6][0]))+"\n"+\ str(cnt5.Data[0][0])+"\n"+str(int(cnt5.Data[1][0]))+"\n"+str(cnt5.Data[2][0])+"\n"+str(int(cnt5.Data[3][0]))+"\n"+str(cnt5.Data[4][0])+"\n"+str(cnt5.Data[5][0])+"\n"+str(int(cnt5.Data[6][0]))+"\n"+\ str(cnt6.Data[0][0])+"\n"+str(int(cnt6.Data[1][0]))+"\n"+str(cnt6.Data[2][0])+"\n"+str(int(cnt6.Data[3][0]))+"\n"+str(cnt6.Data[4][0])+"\n"+str(cnt6.Data[5][0])+"\n"+str(int(cnt6.Data[6][0]))#这些是把所有的信息都发送了 self.update_date.emit(cnt) time.sleep(1)
def get_wind(): data = [] date_str = str(datetime.date.today()) #sw = w.wss( # "801010.SI,801020.SI,801030.SI,801040.SI,801050.SI,801080.SI,801110.SI,801120.SI,801130.SI,801140.SI,801150.SI,801160.SI,801170.SI,801180.SI,801200.SI,801210.SI,801230.SI,801710.SI,801720.SI,801730.SI,801740.SI,801750.SI,801760.SI,801770.SI,801780.SI,801790.SI,801880.SI,801890.SI", # "sec_name,pct_chg", "tradeDate=" + date_str + ";cycle=D", usedf = True)[1] sw = w.wsq( "801010.SI,801020.SI,801030.SI,801040.SI,801050.SI,801080.SI,801110.SI,801120.SI,801130.SI,801140.SI,801150.SI,801160.SI,801170.SI,801180.SI,801200.SI,801210.SI,801230.SI,801710.SI,801720.SI,801730.SI,801740.SI,801750.SI,801760.SI,801770.SI,801780.SI,801790.SI,801880.SI,801890.SI", "rt_pct_chg_1min", usedf=True)[1] name = ['农林牧渔(申万)', '采掘(申万)', '化工(申万)', '钢铁(申万)', '有色金属(申万)', '电子(申万)', '家用电器(申万)', '食品饮料(申万)', '纺织服装(申万)', '轻工制造(申万)', '医药生物(申万)', '公用事业(申万)', '交通运输(申万)', '房地产(申万)', '商业贸易(申万)', '休闲服务(申万)', '综合(申万)', '建筑材料(申万)', '建筑装饰(申万)', '电气设备(申万)', '国防军工(申万)', '计算机(申万)', '传媒(申万)', '通信(申万)', '银行(申万)', '非银金融(申万)', '汽车(申万)', '机械设备(申万)'] for i, j in zip(name, sw.RT_PCT_CHG_1MIN.tolist()): data.append({'name': i, 'value': j+1}) return data
def refreshref(): w.start() exchange,contract=GetUnderling.Getunderling() numex=exchange.shape[0] for i in range(numex): numcon=len(contract[i]['contract']) for ii in range(numcon): concode=contract[i]['contract'][ii] excode=exchange.exchange[i] combine=concode+'.'+excode[:3] winddata=w.wsq(combine, "rt_last") pricedata=str(winddata.Data[0][0]) done=ChangeParamData.Writeparamdata('f_ref',pricedata,excode,concode) print(done)
def FindData(date, mkt=False, industry=False, df_sh=pd.DataFrame(), df_sz=pd.DataFrame()): # shdata = w.wset("shstockholdings", "date={}".format(date)).Data if shdata != []: wind_code_sh = shdata[0] hold_stocks_sh = shdata[2] df_sh = pd.DataFrame(hold_stocks_sh, index=wind_code_sh, columns=['stock_holding']) # szdata = w.wset("szstockholdings", "date={}".format(date)).Data if szdata != []: wind_code_sz = szdata[0] hold_stocks_sz = szdata[2] df_sz = pd.DataFrame(hold_stocks_sz, index=wind_code_sz, columns=['stock_holding']) # if shdata != [] or szdata != []: df = pd.concat([df_sh, df_sz], axis=0) symbol = df.index.values c = symbol[0] for i in range(1, len(symbol)): if isinstance(symbol[i], str): c = c + ',' + symbol[i] # price = w.wsq(c, "rt_pre_close").Data[0] # df['price'] = price df['market_value'] = df['price'] * df['stock_holding'] if mkt == True: mkt = w.wss(c, "mkt").Data[0] df['mkt'] = mkt return df[['mkt', 'market_value']] if industry == True: industry = w.wss( c, "industry_citic", "tradeDate={}; industryType=1".format(date)).Data[0] df['industry'] = industry return df[['industry', 'market_value']] else: return None
def post(self): """ json str:{"codes": "600008.SH,600010.SH,600017.SH", "fields": "rt_open,rt_low_limit", "options": ""} :return: 返回万得返回数据dict """ data_dic = request.json logger.info('/wsq/ data_dic:%s', data_dic) codes = data_dic['codes'] fields = data_dic['fields'] options = data_dic['options'] if not w.isconnected(): w.start() if options == "": options = None ret_data = w.wsq(codes, fields, options) error_code = ret_data.ErrorCode if error_code != 0: msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "") logger.error('wsq("%s", "%s", "%s") ErrorCode=%d %s' % (codes, fields, options, error_code, msg)) return {'error_code': ret_data.ErrorCode, 'message': msg}, 404 # 将 Data数据中所有 datetime date 类型的数据转换为 string data_len = len(ret_data.Data) logger.debug('ret_data.Data len:%d', data_len) logger.debug('ret_data.Codes : %s', ret_data.Codes) for n_data in range(data_len): data = ret_data.Data[n_data] data_len2 = len(data) if data_len2 > 0: if type(data[0]) in (datetime, date): ret_data.Data[n_data] = [ format_2_date_str(dt) for dt in data ] logger.info('%d column["%s"] date to str', n_data, ret_data.Fields[n_data]) # print('ret_data.Data:\n', ret_data.Data) # 组成 DataFrame ret_df = pd.DataFrame(ret_data.Data, index=ret_data.Fields, columns=ret_data.Codes) ret_dic = ret_df.to_dict() # print('ret_dic:\n', ret_dic) return ret_dic
def load_trade_status_today(self): """ 下载股票交易状态 超过9:15 就用今天的数据 不超过9:15 就用昨天的数据 """ today = datetime.today() today_str = Date.change_to_str(today) before_date = Date().get_trade_date_offset(today, -1) out_path = os.path.join(self.data_path_static, "trade_status") out_file = os.path.join(out_path, 'trade_status_' + today_str + '.csv') code_list = self.get_all_stock_code_now() code_list_str = ','.join(code_list) if today.time() > time(9, 15): print("######### Loading Trade Status At %s #########" % today_str) trade_status = w.wsq(code_list_str, "rt_trade_status") trade_status_pd = pd.DataFrame(trade_status.Data, index=['Trade_Status'], columns=trade_status.Codes).T trade_status_pd = trade_status_pd[(trade_status_pd['Trade_Status'] != 1.0) & (trade_status_pd['Trade_Status'] != 4.0)] if len(trade_status_pd) > 1000: trade_status = w.wss(code_list_str, "trade_status", "tradeDate=" + today_str) trade_status_pd = pd.DataFrame(trade_status.Data, index=['Trade_Status'], columns=trade_status.Codes).T trade_status_pd = trade_status_pd[trade_status_pd['Trade_Status'] != "交易"] trade_status_pd.to_csv(out_file) else: trade_status_pd.to_csv(out_file) else: print("######### Loading Trade Status At %s #########" % before_date) trade_status = w.wss(code_list_str, "trade_status", "tradeDate=" + before_date) trade_status_pd = pd.DataFrame(trade_status.Data, index=['Trade_Status'], columns=trade_status.Codes).T trade_status_pd = trade_status_pd[trade_status_pd['Trade_Status'] != "交易"] trade_status_pd.to_csv(out_file)
def mail_index_pct(): data = w.wsq("000300.SH,000905.SH,CI005165.WI,CI005166.WI", "rt_pct_chg,rt_date,rt_pe_ttm,rt_pb_lf") data = pd.DataFrame(data.Data, index=data.Fields, columns=data.Codes).T data['NAME'] = ["沪深300", "中证500", "中信证券二级行业指数", "中信保险二级行业指数"] string_total = "" for i in range(len(data)): string = str( data.ix[i, "RT_DATE"].astype(int)) + "日, " + data.ix[i, "NAME"] string += "现在涨幅为" + str(data.ix[i, "RT_PCT_CHG"] * 100) + '%, ' string += "PB_LF为" + str(data.ix[i, "RT_PB_LF"].round(2)) + ', ' string += "PE_TTM为" + str(data.ix[i, "RT_PE_TTM"].round(1)) + '.' + '\n' print(string) string_total += string send_mail_qq('*****@*****.**', 'bxfiljzifsaggdea', '今日指数涨跌幅', string_total, '*****@*****.**') send_mail_qq('*****@*****.**', 'bxfiljzifsaggdea', '今日指数涨跌幅', string_total, '*****@*****.**')
def subscribeBond(self): fieldsMap = { 'rt_last_cp': 'windCleanPrice', 'rt_last_dp': 'windDirtyPrice', 'rt_last_ytm': 'windYield', 'rt_bid1': 'bidPrice', 'rt_bid_price1ytm': 'bidYield', 'rt_bsize1': 'bidVolumn', 'rt_ask1': 'askPrice', 'rt_ask_price1ytm': 'askYield', 'rt_asize1': 'askVolumn', 'rt_mac_duration': 'maclayDuration', 'rt_pre_close': 'last' } def windCallBack(data): print(data) for i, wBondCode in enumerate(data.Codes): binfo = {'priceTime': data.Times} for j, field in enumerate(data.Fields): bInfoField = fieldsMap[field.lower()] binfo[bInfoField] = data.Data[j][i] codeId = self.bondCode.index(wBondCode) self.deliveryBondList[codeId].updatePrice(binfo) for item in self.subBondHandle: try: item(data) except: print('handle' + item + '错误') bsub = w.wsq(self.bondCode, "rt_last_cp,rt_last_dp,rt_last_ytm,\ rt_bid1,rt_bid_price1ytm,rt_bsize1,rt_ask1,rt_ask_price1ytm,rt_asize1,\ rt_mac_duration,rt_pre_close", func=windCallBack) self.requestId.append(bsub.RequestID) return
def subscribeBdf(self): fieldsMap = { 'rt_latest': 'lastPrice', 'rt_bid1': 'bidPrice', 'rt_bsize1': 'bidVolumn', 'rt_ask1': 'askPrice', 'rt_asize1': 'askVolumn' } def windCallBack(data): print(data) for i, wBdfCode in enumerate(data.Codes): cinfo = {'priceTime': data.Times[0]} for j, field in enumerate(data.Fields): # 确定更新的信息 cInfoField = fieldsMap[field.lower()] cinfo[cInfoField] = data.Data[j][i] # 'midPrice':data.Data[0][i],# 合约最新价 # 'bidPrice':data.Data[1][i], # 'bidVolumn':data.Data[2][i], # 'askPrice':data.Data[3][i], # 'askVolumn':data.Data[4][i] # 确定获取标债代码 codeId = self.bdfCode.index(wBdfCode) self.contractList[codeId].updateInfo(cinfo) for item in self.subBdfHandle: try: item(data) except: print('handle' + item + '错误') bsub = w.wsq(self.bdfCode,"rt_latest,rt_bid1,rt_bsize1,rt_ask1,rt_asize1",\ func=windCallBack) self.requestId.append(bsub.RequestID) return
def ReadTradeInfo(codelist): naturedict = { 1: '空开', 2: '空平', 3: '空换', 4: '多开', 5: '多平', 6: '多换', 7: '双开', 8: '双平' } tradedata = {} code = ','.join(codelist) tradeinfo = w.wsq( code, "rt_date,rt_time,rt_last,rt_last_vol,rt_oi_change,rt_nature").Data print(tradeinfo) if tradeinfo != []: datelist = tradeinfo[0] timelist = tradeinfo[1] lastlist = tradeinfo[2] vollist = tradeinfo[3] oilist = tradeinfo[4] naturelist = tradeinfo[5] for i in range(len(codelist)): #tradecode = codelist[i] tradedate = str(datelist[i]).split('.')[0] tradetime = str(timelist[i]).split('.')[0] tradelast = lastlist[i] tradevol = vollist[i] tradeoi = oilist[i] tradenature = int(naturelist[i]) #print(tradedate,tradetime,tradelast,tradevol,tradeoi,tradenature) tradedata[i] = [ tradedate, tradetime, tradelast, tradevol, tradeoi, tradenature ] return tradedata
t = time.localtime() if (t[3] > 9 and t[4] > 30): i = 1 while i <= 7200: print("\n读秒", i) time.sleep(1) i += 1 time1 = time.time() print("时间:", time1) mo = w.tquery("Capital").Data[1][0] print("现有资金:", "%.2f" % mo) pr = w.wsq("600536.SH", "rt_latest,rt_ma_10d").Data print("现价:", "%.2f" % pr[0][0], ";月均价:", "%.2f" % pr[1][0]) vo = int(m / pr[0][0] // 100) print("可以购买:", vo, "手。") print(time.clock()) # if p[0][0] > p[1][0]: # # direction = "Buy" # volume = "500" # w.torder(stock, direction, "43","500","OrderType=LMT") # print("下单成功!", time1, "买入" + volume) # po = w.tquery("Position").Data # print("现有持仓:","\n",positions[0][0],"\n", po[1][0],"\n",po[2][0],"\n", # po[10][0],"\n",po[11][0],"\n",po[12][0],"\n",po[13][0])
return rtn.Data[0][0] return None def getOptionDirType(self, code): return self.__getBaseInfo(code, 'exe_mode') def getStrikePrice(self, code): return self.__getBaseInfo(code, 'exe_price') def getLastTradingDate(self, code): return self.__getBaseInfo(code, 'lasttradingdate') def getOptionRemainingDays(self, code): return self.__getBaseInfo(code, 'ptmday') ########################################################### if __name__ == '__main__': TODAY_DATE = DT.datetime.today().strftime(r'%Y-%m-%d') indata = w.wsq("10000183.SH", "rt_latest") basedata = w.wsd("510050.SH", """us_code,us_name, us_type,exe_mode,exe_type,exe_price, exe_ratio,ptmday,totaltm,startdate, lasttradingdate,exe_startdate,exe_enddate""", TODAY_DATE, TODAY_DATE, "Fill=Previous") rtn = w.wsd("10000419.SH", "exe_ratio", TODAY_DATE, TODAY_DATE, "Fill=Previous") a = 1
def fetch(conf_file): config = get_fetch_config(conf_file) # rt_time,rt_low,rt_last,rt_last,rt_last_vol,rt_upward_vol,rt_downward_vol #data = w.wsq('000001.SZ','rt_last,rt_last_vol,rt_upward_vol,rt_downward_vol',func=democb) data = w.wsq(config['codes'],config['fields'],func=context(config,'tick')) return data
def getLastPrice(self, code): rtn = w.wsq(str(code), "rt_latest") if rtn.ErrorCode == 0: return rtn.Data[0][0] return None
def cal_ipo_sell(): out_path = 'E:\\3_Data\\7_other_data\\4_cal_ipo_sell\\' new_days = 60 today = datetime.today().strftime("%Y%m%d") Date().load_trade_date_series("D") # MfcData().load_ftp_daily(date=today) # MfcData().change_ftp_file(date=today) before_trade_data = Date().get_trade_date_offset(today, -1) data = MfcData().get_fund_security(before_trade_data) data = data.dropna(subset=['基金名称']) data = data[['基金名称', '证券代码', '持仓', '证券类别']] data.columns = ['FundName', 'StockCode', 'Holding', 'Type'] data = data[data.Type == '股票'] data.StockCode = data.StockCode.map(stock_code_add_postfix) data["Market"] = data.StockCode.map(get_stcok_market) Stock().load_all_stock_code_now() Stock().load_ipo_date() stock = Stock().get_ipo_date() stock.columns = ['IpoDate', 'DelistDate'] stock['StockCode'] = stock.index stock['IpoDate'] = stock['IpoDate'].map(lambda x: str(int(x))) new_stock_date = datetime.today() - timedelta(days=new_days) new_stock_date = new_stock_date.strftime("%Y%m%d") all_data = pd.merge(data, stock, on=['StockCode'], how="left") all_data = all_data[all_data.IpoDate > new_stock_date] code_list = list(set(all_data.StockCode.values)) code_str = ','.join(code_list) pct = w.wsq(code_str, "rt_pct_chg,rt_vol") pct = pd.DataFrame(pct.Data, columns=pct.Codes, index=['Pct', 'Vol']).T pct['StockCode'] = pct.index new_data = pd.merge(all_data, pct, on=['StockCode'], how="left") new_data = new_data[new_data['Vol'] > 0] new_data = new_data[new_data['Pct'] < 0.09] fund_list = list(set(data['FundName'])) for i_fund in range(len(fund_list)): fund_name = fund_list[i_fund] fund_data = new_data[new_data.FundName == fund_name] out_sub_path = os.path.join(out_path, today) if not os.path.exists(out_sub_path): os.mkdir(out_sub_path) print(" Make Folder At ", today) if len(fund_data) > 0: warnings.filterwarnings("ignore") fund_data_out = fund_data[['StockCode', 'Holding', 'Market']] fund_data_out.columns = ['Ticker', 'Shares', 'Market'] fund_data_out['Direction'] = 2 fund_data_out['Price'] = 0 fund_data_out['Market Code'] = fund_data_out['Market'].map( lambda x: 1 if x == 'SH' else 2) fund_data_out['Price Model'] = 4 fund_data_out['Ticker'] = fund_data_out['Ticker'].map( lambda x: x[0:6]) fund_data_out = fund_data_out[[ 'Ticker', 'Direction', 'Shares', 'Price', 'Price Model', 'Market Code' ]] file = fund_name + '.xls' out_file = os.path.join(out_sub_path, file) print(out_file) fund_data_out.to_excel(out_file, index=None) ftp = MyFtp() ftp.connect() ftp_file = os.path.join("\\ipo_stock\\", today, file) ftp.upload_file(ftp_file, out_file) ftp.close()
def getDailyLowPrice(self, code): rtn = w.wsq(str(code), 'rt_low') if rtn.ErrorCode == 0: return rtn.Data[0][0] return None
w.start() start_date = '2018-12-10 14:29:00' end_date = '2018-12-12 15:00:01' i = '000002.SZ' # w_data = w.wsi(i, "open,high,low,close", start_date, end_date,"unit=1;currencyType=") pf = open('C:\\codes\\NEW\\pywsqdataif.data', 'w') def myCallback(indata): if indata.ErrorCode != 0: print('error code:' + str(indata.ErrorCode) + '\n') return () global begintime lastvalue = "" for k in range(0, len(indata.Fields)): if (indata.Fields[k] == "RT_TIME"): begintime = indata.Data[k][0] if (indata.Fields[k] == "RT_LAST"): lastvalue = str(indata.Data[k][0]) string = str(begintime) + " " + lastvalue + "\n" pf.writelines(string) print(string) w.wsq("600000.SH", "rt_low,rt_last_vol", func=myCallback)
import numpy as np import matplotlib.pyplot as plt from WindPy import w w.start() plt.axis([0, 100, 97.2, 97.22]) plt.ion() rtPrice = w.wsq("USDX.FX", "rt_last") for i in range(100): plt.scatter(i, rtPrice.Data[0][0]) plt.pause(1)
from WindPy import w from datetime import datetime w.start(showmenu=False) sum = 0 count = 10 for i in range(count): time1 = datetime.now() data = w.wsq("P1701.DCE", "rt_latest,rt_ask1,rt_bid1") time2 = datetime.now() print('avg=', (time2 - time1) / count)
datas00 = Tools.GetDatas2(if0, sampleCount+2, sampleCount) datas11 = Tools.GetDatas2(if1, sampleCount+2, sampleCount) print datas00 print datas11 bullLs, bearLs = Arbitrage.CalculateD1D2(Ls, 0.4, a, b, sigmaEpsilon, muC, sigmaC, deltaT, datas00, datas11) figure = pylab.figure() pi = figure.add_subplot(211) _dt = {} line, = pi.plot( [], [], 'k-') def OnTick(d): if not d.Codes[0] in _dt: _dt[d.Codes[0]] = [] datas = _dt[d.Codes[0]] datas.append(d.Data[0][0]) line.set_data(range(datas),datas) w.start() data = w.wsq("IF1406.CFE", "rt_last", func=OnTick) pylab.show() time.sleep(10) Tools.ShowLinearAndPricesDelta(b, a, datas0, datas1)
print'it is trading spread order between %s and %s'%(self.tradingOrder[i][0],self.tradingOrder[i][1]) instrument_id=self.tradingOrder[i][0] direction='buy' limitPrice=w.wsq(instrument_id,'rt_last').Data[0] volume=1 logonid=2 w.torder(instrument_id,direction,limitPrice,volume,logonid=logonid) #定义卖单下单参数,并下单 instrument_id=self.tradingOrder[i][1] direction='short' limitPrice=w.wsq(instrument_id,'rt_last').Data[0] volume=self.tradingOrder[i][2] logonid=2 w.torder(instrument_id,direction,limitPrice,volume,logonid=logonid) #定义交易对象,此对象来自于计算机器结果 tradingOrder=[['RU1401.SHF', 'FG401.CZC', 36.011767364126612, -28373.745064529503, -33208.077687938567], ['ZN1401.SHF', 'TA401.CZC', 1.2126731163504074, 5500.6030064563192, 4893.9256643498748], ['RU1401.SHF', 'J1401.DCE', 17.642695764706176, -6310.4765649161745, -8590.0412593592864], ['RU1401.SHF', 'TA401.CZC', 7.6723619297322729, -38316.284059386315, -42628.309323957808], ['CU1401.SHF', 'RU1401.SHF', 1.0815425178390803, 31978.191774908541, 29644.633609589815], ['AG1312.SHF', 'AU1312.SHF', 30.191027322441442, -3600.9750756256853, -3970.7648976048631]] TSNames=list(set([str(x[0]) for x in tradingOrder]+[str(x[1]) for x in tradingOrder])) #登陆下单 TD=w.tlogon('0000',0,['W675324301','W675324302'],'000000',['sh','cfe']) print TD #启动OnTickSpread交易策略 #print w.wsq("000001.sz","rt_last") data=w.wsq("000001.sz","rt_last",func=Trading(TD,tradingOrder).OnTickSpread) print data while True: time.sleep(1)
option_month = 9 if option_month == 7: option_month = 1 option_year = option_year + 1 if option_month == 11: option_month = 5 option_year = option_year + 1 return option_year, option_month w_wset_data = pd.DataFrame( w.wset('SectorConstituent', u'date=20171009;sector=白糖期权').Data) w_wset_data = w_wset_data.T if __name__ == '__main__': etf = w.wsq("SR801.CZC", "rt_last") a = np.array(etf.Data[0])[0] OPC2 = optionchoose2(a, date) price = OPC2.mround() option_at_call = "" + str(format(price)) option_at_put = "" + str(format(price)) option_out_call = "" + str(format(price + 100)) option_out_put = "" + str(format(price - 100)) option_out2_call = "" + str(format(price + 200)) option_out2_put = "" + str(format(price - 200)) position = 'flat' # flat long-short buy-sell '''监控开始''' timeInterval = 1 def delayrun():
def ipo_sell(self, today=datetime.today().strftime("%Y%m%d")): """ 计算所有基金新股是否打开 """ before_trade_data = Date().get_trade_date_offset(today, -1) # get holding data data = MfcData().get_group_security(before_trade_data) data = data.dropna(subset=['基金名称']) data = data[['基金名称', '基金编号', '组合名称', '组合编号', '证券代码', '持仓', '证券类别']] data.columns = [['基金名称', '基金编号(序号)', '组合名称', '组合编号', '证券代码', '指令数量', '证券类别']] data = data[data['证券类别'] == '股票'] data['证券代码'] = data['证券代码'].map(CodeFormat().stock_code_add_postfix) data["交易市场内部编号"] = data['证券代码'].map(CodeFormat().get_stcok_market) fund_info = MfcData().get_mfc_fund_info() fund_info = fund_info.dropna(subset=['FundId']) fund_info['FundId'] = fund_info['FundId'].map(CodeFormat.stock_code_add_postfix) fund_info['FundId'] = fund_info['FundId'].map(lambda x: x[0:6]) # get ipo data Stock().load_all_stock_code_now() Stock().load_ipo_date() stock = Stock().get_ipo_date() stock.columns = ['IpoDate', 'DelistDate'] stock['证券代码'] = stock.index stock['IpoDate'] = stock['IpoDate'].map(lambda x: str(int(x))) # get New Stock new_stock_date = datetime.today() - timedelta(days=self.new_days) new_stock_date = new_stock_date.strftime("%Y%m%d") all_data = pd.merge(data, stock, on=['证券代码'], how="left") all_data = all_data[all_data.IpoDate > new_stock_date] # get Vol and Pct of New Stock code_list = list(set(all_data['证券代码'].values)) code_str = ','.join(code_list) pct = w.wsq(code_str, "rt_pct_chg,rt_vol") pct = pd.DataFrame(pct.Data, columns=pct.Codes, index=['Pct', 'Vol']).T pct['证券代码'] = pct.index # filter multi_factor new_data = pd.merge(all_data, pct, on=['证券代码'], how="left") new_data = new_data[new_data['Vol'] > 0] new_data = new_data[new_data['Pct'] < 0.09] # New Local Folder out_sub_path = os.path.join(self.data_path, today) if not os.path.exists(out_sub_path): os.mkdir(out_sub_path) # New FTP Folder ftp = MyFtp() ftp.connect() ftp_folder = os.path.join(self.ftp_path, today) ftp.upload_folder(ftp_folder) ftp.close() # manager data manager_data = MfcData().get_manager_fund() for i_manager in range(len(manager_data.columns)): manager_name = manager_data.columns[i_manager] manager_fund = manager_data[manager_name] manager_fund = manager_fund.dropna() fund_data = new_data[new_data['基金名称'].map(lambda x: x in manager_fund.values)] if len(fund_data) > 0: warnings.filterwarnings("ignore") fund_data_out = fund_data[['证券代码', '指令数量', '交易市场内部编号', '基金编号(序号)', '基金名称', '组合编号']] fund_data_out['委托方向'] = 2 fund_data_out['指令价格'] = 0 fund_data_out['交易市场内部编号'] = fund_data_out['交易市场内部编号'].map(lambda x: 1 if x == 'SH' else 2) fund_data_out['价格模式'] = "" fund_data_out['当前指令市值/净值(%)'] = "" fund_data_out['目标市值/净值(%)'] = "" fund_data_out['基金名称'] = "" fund_data_out['证券代码'] = fund_data_out['证券代码'].map(lambda x: x[0:6]) fund_data_out = fund_data_out[['证券代码', '委托方向', '指令数量', '指令价格', '价格模式', '交易市场内部编号', '当前指令市值/净值(%)', '目标市值/净值(%)', '基金编号(序号)', '基金名称', '组合编号']] file = manager_name + '.xls' out_file = os.path.join(out_sub_path, file) print(out_file) fund_data_out.to_excel(out_file, index=None) ftp = MyFtp() ftp.connect() ftp_file = os.path.join(self.ftp_path, today, file) ftp.upload_file(ftp_file, out_file) ftp.close()
self.dtColumnIndex = {"USDCAD.FX":0,"EURUSD.FX":1} sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.grid, 1, wx.EXPAND, 5) panel.SetSizer(sizer) def SetAccount(self,USDCAD,EURUSD): self.grid.SetCellValue(0, 0, str(USDCAD)) self.grid.SetCellValue(0,1,str(EURUSD)) def SetPrice(self,code,price): ci = self.dtColumnIndex[code] self.grid.SetCellValue(0, ci, str(price)) def DemoWSQCallback(Tick): USDCAD=Tick.Data[0][0] EURUSD=Tick.Codes[0] #form.SetAccount(USDCAD,EURUSD) form.SetPrice(Tick.Codes[0], Tick.Data[0][0]) if not g_dt.has_key(Tick.Codes[0]): g_dt[Tick.Codes[0]] = [] g_dt[Tick.Codes[0]].append(Tick.Data[0][0]) g_dt={} # Run the program if __name__ == "__main__": w.start() app = wx.PySimpleApp() form = MyForm() data=w.wsq(["USDCAD.FX","EURUSD.FX"],"rt_last",func=DemoWSQCallback) frame = form.Show() app.MainLoop() print g_dt