Loading ...

增强版唐奇安通道策略

Author: Hukybo, Date: 2019-11-28 12:24:20
Tags:

前言

提起唐奇安通道,很多人都会联想到海龟交易法则,这也许是有史以来最成功的交易员培训课程。海龟们用神奇的交易系统赚了成百上千万美元,直到1983年海龟交易法则解密,人们才发现这个神奇的交易系统用的是修正版的唐奇安通道。但时过境迁,现在的市场环境已经发生了很大的变化,这导致唐奇安通道策略变得低效,那么今天我们试着改进,看看增强版的唐奇安通道策略效果如何。 点击阅读更多内容



# 定义全局变量
mp = 0  												# 用于控制虚拟持仓

def onTick():
    _C(exchange.SetContractType, "rb000")  				# 订阅期货品种
    bar_arr = _C(exchange.GetRecords)  				# 获取K线数组
    if len(bar_arr) < 60:
        return
    close_new = bar_arr[-1]['Close']	# 获取最新价格(卖价)
    close_last = bar_arr[-2]['Close']	# 上根K线收盘价
    bar_arr.pop()									# 删除数组最后一个数据
    # 计算唐奇安上轨
    on_line = TA.Highest(bar_arr, 55, 'High') * 0.999
    # 计算唐奇安下轨
    under_line = TA.Lowest(bar_arr, 55, 'Low') * 1.001
    # 计算唐奇安中轨
    middle_line = (on_line + under_line) / 2
    global mp 								# 引入全局变量
    # 如果持多单,并且价格小于下轨
    if mp > 0 and close_last < middle_line:
        exchange.SetDirection("closebuy")  	# 设置交易方向和类型
        exchange.Sell(close_new - 1, 1)  	# 平多单
        mp = 0  								# 设置虚拟持仓的值,即空仓
    # 如果持空单,并且价格大于上轨
    if mp < 0 and close_last > middle_line:
        exchange.SetDirection("closesell")	# 设置交易方向和类型
        exchange.Buy(close_new, 1)  			# 平空单
        mp = 0  								# 设置虚拟持仓的值,即空仓
    if mp == 0:  							# 如果当前无持仓
        if close_last > on_line:  			# 如果价格大于上轨
            exchange.SetDirection("buy")  	# 设置交易方向和类型
            exchange.Buy(close_new, 1)  		# 开多单
            mp = 1  							# 设置虚拟持仓的值,即有多单
        elif close_last < under_line:  		# 如果价格小于下轨
            exchange.SetDirection("sell")  	# 设置交易方向和类型
            exchange.Sell(close_new - 1, 1) 	# 开空单
            mp = -1  							# 设置虚拟持仓的值,即有空单
        
# 程序入口      
def main():
    while True:								# 进入无线循环模式
        onTick()								# 执行策略主函数
        Sleep(1000)  							# 休眠1秒

More