Loading ...

8.15 鳄鱼交易法则策略

Author: Hukybo, Date: 2020-04-16 09:53:53
Tags:

做过交易的人大概会有一种体会,有时候价格波动很有规律,但更多时候它呈现出随机游走的不稳定状态。正是这种不稳定才是市场风险和机会的地方。不稳定也就代表了不可预测,那么如何在不可预测的市场环境中让收益变得更稳定,也是每一位交易者的难题。本篇将介绍鳄鱼交易法则策略,希望对大家有所启发。

点击阅读更多内容


'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

import talib
import numpy as np


# 把K线数组转换成最高价、最低价、收盘价数组,用于转换为numpy.array类型数据
def get_data(bars):
    arr = []
    for i in bars:
        arr.append(i['Close'])
    return arr


# 获取持仓数量
def get_position():
    # 获取持仓
    position = 0  # 赋值持仓数量为0
    position_arr = _C(exchange.GetPosition)  # 获取持仓数组
    if len(position_arr) > 0:  # 如果持仓数组长度大于0
        for i in position_arr:
            if i['ContractType'] == 'rb000':  # 如果持仓品种等于订阅品种
                if i['Type'] % 2 == 0:  # 如果是多单
                    position = i['Amount']  # 赋值持仓数量为正数
                else:
                    position = -i['Amount']  # 赋值持仓数量为负数
    return position
    
    

# 策略主函数
def onTick():
    # 获取数据
    exchange.SetContractType('rb000')   # 订阅期货品种
    bars_arr =exchange.GetRecords()  # 获取K线数组
    if len(bars_arr) < 22:  # 如果K线数量小于22根
        return    
    
    # 计算
    np_arr = np.array(get_data(bars_arr))  # 转换收盘价数组
    sma13 = talib.SMA(np_arr, 130)[-9]  # 下巴
    sma8 = talib.SMA(np_arr, 80)[-6]  # 牙齿
    sma5 = talib.SMA(np_arr, 50)[-4]  # 上唇
    current_price = bars_arr[-1]['Close']  # 最新价格

    position = get_position()
    if position == 0:  # 如果无持仓
        if current_price > sma5:  # 如果当前价格大于上唇
            exchange.SetDirection("buy")  # 设置交易方向和类型
            exchange.Buy(current_price + 1, 1)  # 开多单
        if current_price < sma13:  # 如果当前价格小于下巴
            exchange.SetDirection("sell")  # 设置交易方向和类型
            exchange.Sell(current_price - 1, 1)  # 开空单
        
    if position > 0:  # 如果持有多单
        if current_price < sma8:  # 如果当前价格小于牙齿
            exchange.SetDirection("closebuy")  # 设置交易方向和类型
            exchange.Sell(current_price - 1, 1)  # 平多单

    if position < 0:  # 如果持有空单
        if current_price > sma8:  # 如果当前价格大于牙齿
            exchange.SetDirection("closesell")  # 设置交易方向和类型
            exchange.Buy(current_price + 1, 1)  # 平空单

            
# 程序主函数
def main():
    while True:     # 循环
        onTick()    # 执行策略主函数
        Sleep(1000) # 休眠1秒
        

More