量化思路1——震荡量化法

2017-10-13  本文已影响0人  比特韭菜罗

本方法以数字货币为落地标的,股市、基金以此类推。

任何资本市场都伴随着震荡和波动,类似于潮起潮落,潮起潮落后会留下能,而震荡前后可以留下利润,困难的地方在于什么时候是潮起,什么时候是潮落,真实的潮水分辨较为简单,能够看到低点和高点,但是低点和高点是相对与潮整体来说的,或者说整个潮水波浪面的中界面,如果高于这个中界面为潮起,低于这个中界面为潮落。对于数字货币来说,关键是在找到中界面。

潮向上动时会升,潮向下动时会降,我们需要在潮向上的时候买,在潮向下的时候卖。具体的思路为:每个时间整点收集比特币的价格,当当前价格超过前五个时间点的价格时,我们认为现在处于潮水向上涌阶段,进入上升通道,买;当当前价格低于前五个时间点的价格时,我们认为现在处于潮水向下泄阶段,进入下降通道,卖。

接下来开始代码学习阶段,是的,很枯燥,很无聊,我也是,但是要坚持,不然就只能拿着方法吹牛,而不能拿着方法赚钱。

PARAMS = {

                       "start_time": "2017-06-01 00:00:00",          # 回测起始时间

                       "end_time": "2017-07-01 00:00:00",          # 回测结束时间

                       "commission": 0.002,                                   # 此处设置交易佣金

                      "slippage": 0.001,                                          # 此处设置交易滑点

                      "account_initial": {"xxx_cny_cash": 10000,"xxx_cny_btc": 0},    #xxx平台的账户初始情况,初始人民币为10000,初始比特币为0。

}

以上为定义部分,基本上就是进行回测的起始时间、结束时间、交易佣金、滑点和账户初始情况,接下来我们需要对市场数据进行读取,具体程序如下所示:

def initialize(context):                                                   #定义初始函数

                    context.frequency = "30m"                      # 以30分频率进行回测

                    context.benchmark = "xxx_cny_btc"      # 用于计算xxx平台上的收益

                    context.security = "xxx_cny_btc"            # 策略指定xxx平台上的的交易品种

接下来为策略的执行函数,最关键、最难也是最枯燥的部分。

def handle_data(context):

              hist = context.data.get_price(context.security, count=5, frequency=context.frequency)       # context.data.get_price()为获取最近历史价格的函数,context.security为获取的对象,count为获取的数量,frequency为数据调用的频率。本句意思为获取最近5个频率周期的历史数据

ma = hist["close"].rolling(window=5).mean()[-1]               # 计算最近5个收盘价的均价,这个函数可能比较难以理解,查阅半天也没有得到一个比较好的答案,hist["close"]我猜是hist得到一个数字序列,close的意思是从头读到尾,rooling_mean是计算窗口的平均值,5代表五个窗口,也就是五个数字。[-1]不知道啥意思。

current_price = context.data.get_current_price(context.security)  # 获取当前价格

if current_price > ma and context.account.xxx_cny_cash >= XXX_CNY_BTC_MIN_ORDER_CASH_AMOUNT: # 当前价格大于均价时,全仓买入

context.order.buy(context.security, cash_amount=str(context.account.huobi_cny_cash))

elif current_price < ma and context.account.huobi_cny_btc >= XXX_CNY_BTC_MIN_ORDER_QUANTITY: # 当前价格小于均价时,全仓卖出

context.order.sell(context.security, quantity=str(context.account.xxx_cny_btc))

而买卖的效果如何呢,具体如下图所示:

由此可见,量化很难学,量化的效果也并不如我们想象中的那么显著,但是好在较为稳健,量化是一种较好的投资方法。

上一篇下一篇

猜你喜欢

热点阅读