接下来就用蒙特卡洛算法分析一下数据吧。老规矩,先新建一个名为MonteCarlo的分支,新建一个名为MonteCarlo.py的文件。先看一下我的数据,平均每7个交易日交易一次,手续费率0.0003(万分之三,不足0.1元收0.1元)。购买300etf和纳指etf两个股票,金额平分。即交易28次,每次交易金额1000元,剩下的,并到下次交易。以上就是模拟的假设。
接下来就是进行交易模拟的函数,比较长,主要是一些细节的计算。
'''执行一次交易模拟
输入的参数
cost 总交易成本
time 交易周期的天数
freq 交易频率,几天交易一次
df_300, df_nas,分别为两个定投的etf的实盘成交数据
返回值为一个DataFrame,包含每个交易日的成本,收益,收益率等数据
'''
def work(cost, time, freq, df_300, df_nad):
#计算交易次数
tradetimes = int(time/freq)
print(tradetimes)
#计算每次交易的金额
money = cost/tradetimes
print(money)
#手续费比率
fee_rate = 0.0003
#把每次交易金额均分为两部分,分别买两个etf,如果钱不够交易,留到下次
money_300 = money/2.0
money_nas = money/2.0
#开始模拟前定义相关变量
cost = [] #投入的总成本
cost3 = [] #买300etf的成本
costN = [] #买纳指etf的成本
m3 = 0.0 #买300etf的钱
mN = 0.0 #买纳指etf的钱
fee = [] #手续费
V3 = [] #300etf股票数量
VN = [] #纳指etf股票数量
Total3 = [] #300etf的当前市值
TotalN = [] #纳指etf的当前市值
Total = [] #当前总市值
Income3 = [] #300etf的收益
IncomeN = [] #nasetf的收益
Income = [] #总收益
Rate3 = [] #300etf收益率
RateN = [] #nasetf收益率
Rate = [] #总收益率
#每次交易剩下的钱
money_300_rem = 0.0
money_nas_rem = 0.0
#开始模拟
j = 0
for i in range(time):
if j ==</