前言
随着回测系统的数据量越来越大,为了解放个人电脑,决定将回测系统部署到云服务器。
_
_
Episode Sp. 回测系统的优化与云服务器部署
之前说到个人回测系统建立出来后为了有效和一些云回测平台划清优势,我做了一个参数的调优循环:
def complex_test():
n=0
complex_count=1
complex_pralist=[]
current_list=[]
for i in tl.complex_prdict.values():
complex_count=len(i)*complex_count
print('\r处理进度:0.00% (0/'+str(complex_count)+')',end="", flush=True)
for i in tl.complex_prdict.values():
complex_pralist.append(i)
for i in product(*complex_pralist):
current_list.append(list(i))
f=open('complex_result_'+str(symbol[0:3])+'.csv', 'w')
f.write('{0},{1},{2},{3},{4}\n'.format('param', 'period_rate', 'year_rate', 'moving_loss', 'max_profit'))
f.close
begin_time = time.time()
for i in current_list:
lc=0
for k in tl.complex_prdict.keys():
tl.param_dict[k]=i[lc]
lc +=1
period_rate,year_rate,minr,maxr=main()
f=open('complex_result_'+str(symbol[0:3])+'.csv', 'a')
f.write('"{0}",{1},{2},{3},{4}\n'.format(str(tl.param_dict), period_rate, year_rate, minr, maxr))
f.close
n=n+1
now_time = time.time()
print('\r处理进度:'+str(cutpoint(n/complex_count*100,2))+'% ('+str(n)+'/'+str(complex_count)+') 预计剩余时间:'+str(int((now_time-begin_time)/n*(complex_count-n)/60))+'分钟',end="", flush=True)
print('save '+str(symbol)+'complex result csv success!!!')
return
其实就是把参数列表化后,用排列组合的方式代入进回测系统并生成移动回撤、年化、最大收益的报告csv再进行人工筛选。
这样省去了非常多需要试错的工作量,非常适合找到最优解。
而一旦开始往这个方向发展之后,就发现排列组合是所有参数的len乘积,运算虽然不需要太大性能(毕竟我的策略从不涉及深度学习之类的),但需要的时间是几何增长的,所以我做了两件事:
1、删减字典的不用键值,if简单筛选不需要运算的步骤,减少运算量
2、个人电脑不再能胜任这个时间的运算量,需要部署到云上
在第2点其实踩了一次雷
之前在阿里云用过服务器做简单的数据收发中转站所以一直以为跑个python突发性实例完全可以胜任
当我高高兴兴的把一个3000次回测的组合上云美美的睡了一觉之后看到的结果是…
处理进度:(150/3250) 预计耗时:12000分钟
很快就发现了问题
我的cpu积分几个小时就被消耗完了,cpu性能骤降到 20%的基线
于是二话不说薅了tx的服务器羊毛总算正常了。终于可以愉快的跑回测了~
写下这篇博文的时候btc的价格已经一路起飞到了34000美元
说些个人看法吧
我从来不会回应别人觉得btc是骗局之类的观点,宏观来看其实有货币或者说任何有金融属性的东西都是在一段时间里发挥他们的价值的,而抛开时间和功能谈它是不是骗局个人认为完全没有意义。我内心也知道btc总会在科技或者说文明发展到某个阶段的时候变的一文不值,但这对于现在的我来说又有什么重要的呢?
不参与的人认为它是骗局,参与的人对他深信不疑,其实都是两个错误的极端。
泡沫总有一天会破灭的,但真正厉害的是预测到时间点的人,而不是一直叫嚣早晚有一天都会破灭的跟风者。毕竟认定一笔投资成不成功的只有回报,而不是口水。
最后记录一下部署云的无脑参数:
系统 :ubuntu18.04 腾讯云
配置:1cpu2G 100%cpu
sudo apt install screen
#screen或nohup是一个挂载小插件,可以让你退出后台后程序依然运行,非常重要
#screen 相关操作
screen -S name
#创建名为name的分后台
screen -ls
#查看所有后台
screen -r name
#进入名为name的分后台,ctrl+a+d退出后台,ctrl+d删除后台
sudo apt install pip3
pip3 install numpy
pip3 install pandas
pip3 install ccxt
pip3 install matplotlib