Exemple #1
0
 def HistoryWeiTuo(self):
     key = 'HistoryChengJiao'
     key = self._genKey(key)
     if self.is_dirty():
         df = TcAccount.HistoryWeiTuo(self)
         myredis.set_obj(key, df)
     else:
         return myredis.get_obj(key)
     return df
Exemple #2
0
def SendOrder(bSell, code, price, num):
    #用wm_copydata
    hwnd = FindMainWindow()
    cds = COPYDATASTRUCT()
    cds.dwData = 0
    s = "Order|" + str(bSell) + "|" + str(code) + "|" + str(price) + "|" + str(
        num) + "|"
    cds.cbData = ctypes.sizeof(ctypes.create_string_buffer(s))
    cds.lpData = ctypes.c_char_p(s)
    print s
    SendMessage(hwnd, win32con.WM_COPYDATA, 0, ctypes.byref(cds))
    myredis.set_obj('TCAccountCache_dirty', True)
Exemple #3
0
def PostTask(fn, t, reset=False):
    """每隔t秒执行一次fn
    主要是防止交易接口被短期内多次调用, 造成系统异常
    """
    key = 'posttask_'+fn.func_name
    cur_t = agl.curTime()
    if reset:
	myredis.delkey(key)
    pre_t = myredis.get_obj(key)
    if pre_t == None:
	pre_t = cur_t - datetime.timedelta(seconds=t+1)
    
    if cur_t - pre_t > datetime.timedelta(seconds=t):
	fn()
	myredis.set_obj(key, cur_t)
Exemple #4
0
 def Run(self):
     self.pd_task.index = range(len(self.pd_task))
     print self.pd_task
     #保存任务表
     myredis.set_obj('multi', self.pd_task)
     cmd = sys.executable
     cmd += ' ' + getMainDir() + '\\MultiSubProcess_exec.py'
     process = []
     for i in range(len(self.pd_task)):
         cur_cmd = cmd + ' ' + str(i)
         #print cur_cmd
         p = subprocess.Popen(cur_cmd)
         process.append(p)
     for p in process:
         p.wait()
Exemple #5
0
 def Report(self):
     import time, dateutil, datetime
     self._ReadData()
     for code, group in self.df_chengjiao.groupby('stock_code'):
         if code in myenum.allow_traded_codes:
             print code, stock.GetCodeName(code)
             df = self.df_chengjiao[self.df_chengjiao['stock_code'] == code]
             df = df.loc[:, ['price', 'num', 'is_sell', 'stock_code', 't']]
             df.columns = ['price', 'num', 'flag', 'code',
                           'd']  #匹配web接口里使用的字段
             print df
             df['d'] = df.index.astype(str)
             df['d'] = df['d'].map(lambda x: str(dateutil.parser.parse(x) + \
                                          datetime.timedelta(minutes=5)))
             myredis.set_obj('backtest_trade', df)
             os.system('start http://localhost/training')
             time.sleep(5)
Exemple #6
0
    def Report(self, end_day, is_detail=False):
        if sys.version > '3':
            print('python 3 can not execute')
            return
        import stock, myredis, mysql, agl
        #成交记录
        df = self.df_ChengJiao.loc[:, ['成交价格', '成交数量', '买卖标志', '证券代码']]
        #print df
        #输出交易记录到json,供iChat访问
        df.columns = ['price', 'num', 'flag', 'code']

        df['d'] = df.index.astype(str)
        df['d'] = df['d'].map(lambda x: str(dateutil.parser.parse(x) + \
                                            datetime.timedelta(minutes=5)))
        myredis.set_obj('backtest_trade', df)
        #原有的php需要使用json, 现在使用django, 可以废弃
        #f = open('E:/Apache/Apache/htdocs/stock/trade_training/trade.json','w')
        #json.dump(np.array(df).tolist(),f)
        #f.close()
        if is_detail:
            agl.print_df(df)

        #计算股票市值, 暂时只能处理一只股票的情况
        shizhi = 0
        close = 0
        if len(self.df_stock) > 0:
            code = self.df_stock.iloc[0]['证券代码']
            close = stock.getHisdatDataFrameFromRedis(code, '',
                                                      end_day).iloc[-1]['c']
            num = self.df_stock.iloc[0]['库存数量']
            shizhi += float(close) * int(num)
        print(self.df_zhijing.tail(n=1))
        print('市值:%f,总资产:%f' % (shizhi, self.money + shizhi))
        #如果持股不动,现在的资金
        #取第一次交易后的可用资金
        if len(self.df_zhijing) > 1:
            money = self.df_zhijing.iloc[1]['可用']
        else:
            money = self.df_zhijing.iloc[0]['可用']
        #第一次股票数量到现在的市值
        num = 0
        if len(self.df_ChengJiao) > 0:
            num = self.df_ChengJiao.iloc[0]['成交数量']
        shizhi = num * close
        print('如果持股不动 市值:%f,总资产:%f' % (shizhi, money + shizhi))
Exemple #7
0
def main(args):
    os.chdir(getMainDir())
    i = int(args[0])
    #print 'arg=',i
    pd_task = myredis.get_obj('multi')
    if 0: pd_task = pd.DataFrame
    #print pd_task.iloc[i]
    v = tuple(pd_task.iloc[i].tolist()[1:])  #去掉task_id
    #print v
    v += (i, )  #加上task_id
    s = 'import %s\n' % (v[0])
    #module.fn
    s += 'r = %s.%s(%s, %d)' % v
    #print s
    exec s
    #print 'result=',r
    #保存结果
    myredis.set_obj(MultiSubProcess.getResultName(i), r)
Exemple #8
0
    def WeiTuoList(self):
        """历史成交加当日委托
	主要用状态说明这个字段来判断, 通过枚举值来判断委托状态
	操作日期|委托时间|股东代码|深0沪1|证券代码|证券名称|买0卖1|买卖标志|委托价格|委托数量|委托编号|成交数量|成交金额|撤单数量|状态说明|撤单标志|委托日期|备注|
	return : df"""
        key = 'WeiTuoList'
        key = self._genKey(key)
        if self.is_dirty():
            df = self.HistoryWeiTuo()
            df2 = TcAccount.WeiTuoList(self)
            df = pd.concat([df2, df])
            #对报单时间排序
            df.index = pd.DatetimeIndex(df['操作日期'] + ' ' + df['委托时间'])
            df = df.sort()
            myredis.set_obj(key, df)
            self.setDirty(False)
            return df
        else:
            return myredis.get_obj(key)
Exemple #9
0
 def _getUserStrategy(self, downloadStrategyInterval=60):
     """按固定的时间间隔下载用户代码
     downloadStrategyInterval: int default=60 秒
     return: df"""
     k = "SignForWebUser_preLoadTime"
     preLoadTime = myredis.get_obj(k)
     if preLoadTime is None:
         preLoadTime = datetime.datetime(2015, 10, 19, 15, 33, 47, 53000)	#上一次下载的时间
     #判断时间
     if (agl.curTime() - preLoadTime).total_seconds() > downloadStrategyInterval:
         url = "http://stocksign.sinaapp.com/query?cmd=query_strategy"
         result = Http().get(url)
         df_source = pd.read_json(result)
         df_source.columns = ['id', 'user_id', 'title', 'code']
         preLoadTime = agl.curTime()
         myredis.set_obj(k, preLoadTime)
         myredis.set_obj('mysource', df_source)
     else:
         df_source = myredis.get_obj('mysource')
         if df_source is None:
             df_source = pd.DataFrame([])
     return df_source	
Exemple #10
0
 def setDirty(self, is_dirty):
     key = self._genKey('dirty')
     myredis.set_obj(key, is_dirty)