示例#1
0
def getReturn(data):
    if os.path.exists("data.csv"):
        data = pd.read_csv("data.csv", index_col="code")
        return data
    start = "2017-01-01"
    end = "2020-07-31"
    codes = data.index
    names = fromCodeToName(data, codes)
    codes = [str(x) for x in codes]
    #    print(codes)
    #    print(names)
    # 在数据中增加一列计算年化收益率
    data["ar"] = 0.0
    t = 0
    cash = 100000
    for code in data.index:
        test = backtest.BackTest(FactorStrategy,
                                 start,
                                 end, [str(code)], [names[t]],
                                 cash,
                                 bDraw=False)
        result = test.run()
        print("第{}次回测,股票代码{},回测年化收益率{}。".format(t + 1, code, result.年化收益率))
        data.loc[code, ["ar"]] = result.年化收益率
        t += 1
    data.to_csv("data.csv")
    return data
示例#2
0
文件: facts.py 项目: yjy-1999/MyQuant
def doBacktest(factors, strategy, a1, a2, a3, a4, a5, start, end, cash):
    score = scale(factors, a1, a2, a3, a4, a5)
    codes = score[-10:].index
    name = fromCodeToName(factors, codes)
    code = [str(x) for x in codes]
    opttest = backtest.BackTest(strategy, start, end, code, name, cash, bDraw = False)
    result = opttest.run()
    return result, code
示例#3
0
    def plot(self):
        print u'WF组合收益图'
        self.all_sample_factor = np.vstack([self.policy_record[1].is_factor, self.policy_record[1].oos_factor])
        returns = np.vstack([self.is_resample_return[1], self.oos_resample_return[1]])
        dates = np.append(self.is_resample_dates[1], self.oos_resample_dates[1])
        is_oos_arr = np.append(np.zeros_like(self.policy_record[1].is_factor), np.ones_like(self.policy_record[1].oos_factor))
        for i in np.sort(self.config.WF_dates.keys())[1:]:
            self.all_sample_factor = np.vstack([self.all_sample_factor, self.policy_record[i].oos_factor])
            returns = np.vstack([returns, self.oos_resample_return[i]])
            dates = np.append(dates, self.oos_resample_dates[i])
            is_oos_arr = np.append(is_oos_arr, i * np.ones_like(self.policy_record[i].oos_factor))

        #print factor.shape, returns.shape, dates.shape
        #print is_oos_arr.shape
        #print factor
        bt = backtest.BackTest(self.all_sample_factor, returns, dates)
        bt.run()
        bt.stats_info()
        bt.two_in_one()
        bt.ts_plot()
         #is_oos_arr=is_oos_arr,
                      #title='WF train:%s predict:%s' %(self.config.train_bars, self.config.predict_bars))
                      #output='/home/dev/FalconPolicy/WalkForward/' + self.config.policy_path.split('/')[-1].split('.py')[0] + '_WF_train_%s_predict_%s.png' %(self.config.train_bars, self.config.predict_bars))

        print u'样本外收益图'
        self.oos_sample_factor = self.policy_record[1].oos_factor
        returns = self.oos_resample_return[1]
        dates = self.oos_resample_dates[1]
        is_oos_arr = np.ones_like(self.policy_record[1].oos_factor)
        for i in np.sort(self.config.WF_dates.keys())[1:]:
            self.oos_sample_factor = np.vstack([self.oos_sample_factor, self.policy_record[i].oos_factor])
            returns = np.vstack([returns, self.oos_resample_return[i]])
            dates = np.append(dates, self.oos_resample_dates[i])
            is_oos_arr = np.append(is_oos_arr, i * np.ones_like(self.policy_record[1].oos_factor))

        bt = backtest.BackTest(self.oos_sample_factor, returns, dates)
        bt.run()
        bt.stats_info()
        bt.two_in_one()
        bt.ts_plot()
示例#4
0
文件: facts.py 项目: yjy-1999/MyQuant
def getReturn(data):
    if os.path.exists("data.csv"):
        data = pd.read_csv("data.csv")
        codes = data.code
        codes = ["%06d" % x for x in codes]
        data.code = codes
        return data
    start = "2017-01-01"
    end = "2020-07-31"
    codes = data.code
    codes = ["%06d" % x for x in codes]
    data.code = codes
    # names = fromCodeToName(data, codes)
    # print(names)
    # print(len(codes), len(names))
    # codes = [str(x) for x in codes]

    # print(codes)
    #    print(codes)
    #    print(names)
    # 在数据中增加一列计算年化收益率
    data["ar"] = 0.0
    t = 0
    cash = 100000
    # codes.remove("000029")
    names = data.name.values.tolist()
    # names.remove("深深房A")
    ar = []
    for code in codes:
        test = backtest.BackTest(FactorStrategy,
                                 start,
                                 end, [code], [names[t]],
                                 cash,
                                 bDraw=False)
        result = test.run()
        print("第{}次回测,股票代码{},回测年化收益率{}。".format(t + 1, code, result.年化收益率))
        ar.append(result.年化收益率)
        # data.loc[t, "ar"] = result.年化收益率
        # print(data.info())
        t += 1

    print(data.shape, len(ar))
    data["ar"] = ar
    print(data.info())
    data.to_csv("data.csv")
    return data
示例#5
0
def doTest(codes, method):
    names = fromCodeToName(data, codes)
    codes = [str(x) for x in codes]
    start = "2010-01-01"
    end = "2020-07-01"
    cash = 1000000
    opttest = backtest.BackTest(FactorStrategy,
                                start,
                                end,
                                codes,
                                names,
                                cash,
                                bDraw=False)
    result = opttest.run()
    result["选股方法"] = method
    result["股票代码"] = codes
    print(result)
    return result
示例#6
0
def testMultiRegress(data):
    model = joblib.load("LineRegress.m")
    pred_return = model.predict(data.iloc[:, 3:21])
    # print(pred_return)
    data["pred_ar"] = pred_return
    # print(data)
    # 排序
    data = data.sort_values(by = "pred_ar", ascending = False)
    # print(data)
    # 取前十个股票作为投资标的
    codes = data.index[0:10].values
    # print(codes)
    names = fromCodeToName(data, codes)
    codes = [str(x) for x in codes]
    start = "2010-01-01"
    end = "2020-07-01"
    cash = 1000000
    opttest = backtest.BackTest(FactorStrategy, start, end, codes, names, cash, bDraw = True)
    result = opttest.run()
    print("多元线性回归的回测结果:")
    print(result)
示例#7
0
文件: facts.py 项目: yjy-1999/MyQuant
def checkResult(strategy, codes, names, start, end, cash = 1000000):
    opttest = backtest.BackTest(strategy, start, end, codes, names, cash)
    result = opttest.run()
    print("回测结果")
    print(result)
示例#8
0
文件: trade.py 项目: chanche/quant
            df_stock['date']=pd.to_datetime(df_stock['time_key'])        
            df_stock.to_csv(path + filename) 
        df_stock.index = pd.to_datetime(df_stock.date)
        df_stock['openinterest']=0
        df_stock = df_stock[['open','high','low','close','volume','openinterest']]
        df.update({stock:df_stock})

    return df

if __name__ == "__main__":
    
    start = '2017-01-09'
    end = '2020-09-05'
    code = ['HK.00700']
    name = code
    
    df_stock = get_stockdata(code,start,end) 
    df_cn = pd.read_csv('to_cn.csv',index_col=0)
    df_stock = get_stockdata(code,start,end)
    backtest = backtest.BackTest(Tech_roll, start, end, code, name,500000,bDraw = True)
    
    
    result = backtest.run()
    #result = backtest.run()
    #result = backtest.optRun(myperiod = range(50,150,20))
    #print(result)
  
    print(result)
    #maxindex = ret[ret == ret.max()].index
    #bestResult = result.loc[maxindex,:]
    #print(bestResult.loc[:, ["夏普比率", "参数名", "参数值",  "年化收益率"]])
示例#9
0
文件: trade.py 项目: yjy-1999/MyQuant
            tradeBar = self.df_record.loc[date.strftime("%Y-%m-%d"), :]
            # print("bar数据", date, data._name)
            if len(tradeBar) != 0:
                for i in range(len(tradeBar)):
                    name = tradeBar.iloc[i].证券名称
                    price = tradeBar.iloc[i].成交均价
                    stock = tradeBar.iloc[i].成交量
                    commit = tradeBar.iloc[i].手续费
                    # 进行交易
                    self.__doTrade(data, name, price, stock, commit, orderType)

    def next(self):
        if self.order:
            return
        self.doTrade()

    def stop(self):
        self.log("最大回撤:-%.2f%%" % self.stats.drawdown.maxdrawdown[-1],
                 doprint=True)


if __name__ == "__main__":
    # 加载数据,建立数据源
    start = "2018-01-01"
    end = "2020-07-05"
    name = ["300ETF", "nasETF"]
    code = ["510300", "513100"]
    backtest = backtest.BackTest(TradeStrategy, start, end, code, name)
    backtest.run()
    backtest.output()
示例#10
0
            if self.bb.bot > self.datas[0].close:
                cash = self.broker.get_cash()
                stock = math.ceil(cash / self.dataclose / 100) * 100 - 100
                self.order = self.buy(size=stock,
                                      price=self.datas[0].close,
                                      exectype=bt.Order.Market)
        else:
            # 持仓且突破上轨,卖出
            if self.bb.bot < self.datas[0].close:
                self.order = self.close()

    def notify_order(self, order):
        # 有交易提交/被接受,啥也不做
        if order.status in [order.Submitted, order.Accepted]:
            return

        self.order = None


if __name__ == "__main__":
    start = "2018-01-01"
    end = "2020-07-05"
    name = ["nasetf"]
    code = ["513100"]
    backtest = backtest.BackTest(Bolling, start, end, code, name, 10000)
    result = backtest.run()
    # backtest.output()
    print(result)
    result = backtest.optRun(period=range(6, 30))
    print(result)
示例#11
0
        self.bBuy = False
        self.dataclose = self.datas[0].close

    def next(self):
        if self.bBuy == True:
            return
        else:
            cash = self.broker.get_cash()
            stock = math.ceil(cash / self.dataclose / 100) * 100 - 100
            self.order = self.buy(size=stock, price=self.datas[0].close)
            self.bBuy = True

    def stop(self):
        self.order = self.close()


if __name__ == "__main__":
    start = "2018-01-01"
    end = "2020-07-05"
    name = ["nasetf"]
    code = ["513100"]
    backtest = backtest.BackTest(SmaCross, start, end, code, name, 10000)
    result = backtest.run()
    # backtest.output()
    print(result)
    result = backtest.optRun(pslow=range(6, 30))
    print(result.describe())
    plt.figure()
    plt.plot(result.年化收益率)
    plt.savefig("SmaCross参数优化.png")
示例#12
0
                self.comm += order.executed.comm
        elif order.status in [order.Canceled, order.Margin, order.Rejected]:
            self.log("交易失败")
        self.order = None

    # 输出手续费
    def stop(self):
        self.log("手续费:%.2f 成本比例:%.5f" %
                 (self.comm, self.comm / self.broker.getvalue()))


if __name__ == "__main__":
    start = "2018-01-01"
    end = "2020-07-05"
    name = ["300etf"]
    code = ["510300"]
    backtest = backtest.BackTest(TurtleStrategy, start, end, code, name,
                                 100000)
    result = backtest.run()
    # backtest.output()
    print(result)
    result = backtest.optRun(long_period=range(20, 40),
                             short_period=range(5, 15))
    plt.figure()
    plt.plot(result.参数值, result.年化收益率)
    plt.savefig("海龟策略参数优化.png")
    ret = result.loc[:, "年化收益率"]
    maxindex = ret[ret == ret.max()].index
    bestResult = result.loc[maxindex, :]
    print(bestResult.loc[:, ["夏普比率", "参数名", "参数值", "年化收益率"]])
示例#13
0
文件: Grid.py 项目: yjy-1999/MyQuant
                         (order.executed.price, order.executed.value,
                          order.executed.comm))
                self.comm += order.executed.comm
        elif order.status in [order.Canceled, order.Margin, order.Rejected]:
            self.log("交易失败")
        self.order = None

    # 输出手续费
    def stop(self):
        self.log("手续费:%.2f 成本比例:%.5f" %
                 (self.comm, self.comm / self.broker.getvalue()))


if __name__ == "__main__":
    start = "2018-01-01"
    end = "2020-07-05"
    name = ["300etf"]
    code = ["510300"]
    backtest = backtest.BackTest(GridStrategy, start, end, code, name, 100000)
    result = backtest.run()
    # backtest.output()
    print(result)
    # 看选择不同网格宽度的效果
    result = backtest.optRun(gap=np.arange(0.005, 0.055, 0.005))
    plt.figure()
    plt.plot(result.参数值, result.年化收益率)
    plt.savefig("网格策略宽度优化.png")
    ret = result.loc[:, "年化收益率"]
    maxindex = ret[ret == ret.max()].index
    bestResult = result.loc[maxindex, :]
    print(bestResult.loc[:, ["夏普比率", "参数名", "参数值", "年化收益率"]])
示例#14
0
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 31 20:16:35 2018

@author: 46362
"""
from MACDstrategy import MACD
import backtest

path = r"C:\Users\46362\Desktop\OnePy_Old-master"
symbol_list = ['000001', '000002']

engine = backtest.BackTest(path, symbol_list, None)
engine.initStrategy(MACD)
engine.run()