基本原理
- 滚动复利,顾名思义,用利润滚动利润,简称:驴打滚.这种方法适用于大资金在起步建仓期,又或者在打净值安全垫期。利用极少一部分仓位将安全垫做出,这种方法比较适用于震荡市. 主要体现在灵活的仓位控制上,方法运用的过程中类似抗日战争时期八路军的"打游击”,在已既定选好股票池的基础上,以不恋战为原则,快进快出.
策略实现
-
初始资金100万,时间段为:2016-01-01~2018-05-01
-
选择市盈率在0~20的市值最大的前n只股票
-
平均分给每只股票现金相同,五步建仓,相当于若选50只股票的话,一只股票初始资金5万,分五次一万出来;
-
个股5%止损和15%止盈
-
购买条件:连续五日下跌的以及价格高于5日或10日均线20%的股票不操作
-
每日对现金进行重新分配,对于每支股票,最多只能买入五次,不过每次买入的金额可能会不同,(之前是用每次买入的金额一致,见图二),下文代码使用的是对同一支每次买入金额可能不同的情况,即图一。每次买入金额相同即意味着第一次买入某支股票时,便把金额存储起来,每日剩余现金流减去这部分金额,再均分下去
-
运行截图:
-
图1:
-
图2:
代码实现
# coding: utf-8
# @author: lin
# @date: 2018/11/14
import QUANTAXIS as QA
import pandas as pd
import time
import matplotlib.pyplot as plt
pd.set_option('max_colwidth', 5000)
pd.set_option('display.max_columns', 5000)
pd.set_option('display.max_rows', 5000)
class RollingProfitStrategy:
def __init__(self, start_time, stop_time, n=20, ascending=False, stock_init_cash=1000000):
self.Account = QA.QA_Account() # 初始化账户
self.Account.reset_assets(stock_init_cash) # 初始化账户
self.Broker = QA.QA_BacktestBroker()
self.time_quantum_list = ['-12-31', '-09-30', '-06-30', '-03-31']
self.start_time = start_time
self.stop_time = stop_time
self.stock_pool = []
self.cash_n = 5
self.bought_price = {} # 入场的价格
self.last_price = {} # 上一天的价格
self.init_cash = {} # 入场的现金分配
self.bought_stock = {} # 每种股票是否已入场, boolean
self.init_strategy(n, ascending)
def init_strategy(self, n, ascending):
self.get_stock_pool_price(n, ascending) # 获取股票和初始价格
for stock_code in self.stock_pool:
self.init_cash[stock_code] = [1 for i in range(self.cash_n)] # 五等分
self.bought_stock[stock_code] = False
def get_financial_time(self):
"""
得到此日期前一个财务数据的日期
:return:
"