Пример #1
0
 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))
Пример #3
0
 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))
Пример #4
0
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)
Пример #5
0
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]]
Пример #6
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 
Пример #7
0
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]
Пример #8
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)
Пример #9
0
 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
Пример #10
0
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)
Пример #11
0
    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
Пример #12
0
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
Пример #13
0
    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
Пример #14
0
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)
Пример #15
0
 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
Пример #16
0
    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)
Пример #17
0
    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)
Пример #18
0
    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
Пример #19
0
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
Пример #21
0
 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
Пример #22
0
    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)
Пример #23
0
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, '*****@*****.**')
Пример #24
0
    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
Пример #25
0
    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
Пример #26
0
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
Пример #27
0
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
Пример #29
0
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
Пример #31
0
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
Пример #33
0
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)
Пример #34
0
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)
Пример #35
0
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)
Пример #37
0
                    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)
Пример #38
0
                    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():
Пример #39
0
    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()
Пример #40
0
        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