Пример #1
0
    def Report(self, end_day, is_detail=False):
        import stock,agl
        #成交记录
        df = self.df_ChengJiao.loc[:,['成交价格','成交数量','买卖标志','买0卖1','证券代码']]
        df.columns = ['price','num','flag','flag2','code']

        df['d'] = df.index.astype(str)
        df['d'] = df['d'].map(lambda x: str(dateutil.parser.parse(x) + \
                                            datetime.timedelta(minutes=5)))
        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))
Пример #2
0
 def getTradeDay(d1, d2, dtype=backtest_runner.BackTestPolicy.enum.hisdat_mode):
     """确定是交易日
     return: (d1, d2)"""
     if dtype == backtest_runner.BackTestPolicy.enum.hisdat_mode:
         df = stock.getHisdatDataFrameFromRedis(code, start_day=d1)
     else:
         df = stock.getFenshiDfUseRedis(code, d1, d2)
     d2 = agl.datetime_to_date(df.index[-1])
     if agl.DateTimeCmp(d1, agl.datetime_to_date(df.index[0])) <0:
         d1 =  agl.datetime_to_date(df.index[0])
     return d1, d2
Пример #3
0
def genOne(code):
    #print code
    #先清理5分钟分时redis
    stock.FenshiCodeCache(code).delKey()
    try:
        #通过日线来取最近的5天
        df_hisdat = stock.getHisdatDataFrameFromRedis(code)
        df_hisdat = df_hisdat.tail()
        start_day = agl.datetime_to_date(df_hisdat.index[0])
        end_day = agl.datetime_to_date(df_hisdat.index[-1])

        df_fenshi = stock.getFenshiDfUseRedis(code, start_day,
                                              end_day).dropna()
    except:
        return
    stock.FenshiCodeCache(code).set(df_fenshi)
Пример #4
0
 def getTradeDay(d1, d2, dtype=backtest_runner.BackTestPolicy.enum.hisdat_mode):
     """确定是交易日
     return: (d1, d2)"""
     try:
         if dtype == backtest_runner.BackTestPolicy.enum.hisdat_mode:
             df = stock.getHisdatDataFrameFromRedis(code, d1, d2)
         else:
             df = stock.getFenshiDfUseRedis(code, d1,d2)
         if len(df) == 0:
             #在指定日期内没有数据,应该是新股或次新股
             return d2,d2
         d2 = agl.datetime_to_date(df.index[-1])
         if agl.DateTimeCmp(d1, agl.datetime_to_date(df.index[0])) <0:
             d1 =  agl.datetime_to_date(df.index[0])
     except:
         pass
     return d1, d2
Пример #5
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))
Пример #6
0
    def _test_AsynDrawKline(self):
        code = '300033'
        start_day = '2017-3-1'
        df = stock.getHisdatDataFrameFromRedis(code, start_day)
        df = stock.getFiveHisdatDf(code, start_day='2017-7-20')
        import account
        account = account.LocalAcount(account.BackTesting())
        #随机找三个交易点
        indexs = agl.GenRandomArray(len(df), 3)
        trade_bSell = [0, 1, 0]
        df_trades = df[df.index.map(lambda x: x in df.index[indexs])]
        df_trades = df_trades.copy()
        df_trades[AsynDrawKline.enum.trade_bSell] = trade_bSell

        plt.ion()
        for i in range(10):
            AsynDrawKline.drawKline(df[i * 10:], df_trades)

        plt.ioff()
        plt.show()  #最后停在画面处, 没有的话进程结束
Пример #7
0
 def test_drawKlin(self):
     code = jx.THS
     df = stock.getHisdatDataFrameFromRedis(code)
     drawKline(pl, df, legend2=['成交量'])
Пример #8
0
def test_drawKline():
    code, start_day, end_day = '600100', '', ''
    df = stock.getHisdatDataFrameFromRedis(code, '', '')
    code = stock.getDapanCode(code)
    df_dp = stock.getHisdatDataFrameFromRedis(code, start_day, end_day)
    drawKline(pl, df_code=df, df_dp=df_dp)