tft每日頭條

 > 生活

 > 海龜交易法則免費電子版

海龜交易法則免費電子版

生活 更新时间:2024-06-17 00:00:53
海龜交易法則海龜交易法則簡介什麼是海龜交易法則?

海龜交易法則免費電子版(海龜交易法則)1

1983年年中,著名的商品投機家理查德.丹尼斯與他的老友比爾.埃克哈特進行了一場辯論,這場辯論是關于偉大的交易員是天生造就還是後天培養的。理查德相信,他可以教會人們成為偉大的交易員。比爾則認為遺傳和天性才是決定因素。

為了解決這一問題,理查德建議招募并培訓一些交易員,給他們提供真實的帳戶進行交易,看看兩個人中誰是正确的。

他們在《巴倫氏》、《華爾街期刊》和《紐約時報》上刊登了大幅廣告,招聘交易學員。廣告中稱,在一個短暫的培訓會後,新手将被提供一個帳戶進行交易。

理查德從報名的人中精選出13個人,1983年12月底,學員被邀請到芝加哥進行兩周的培訓,到1984年1月初,開始用小帳戶進行交易。到了2月初,在學員證明了自己的能力之後,丹尼斯給其中的大多數人提供了50萬至200萬美元的資金帳戶。

“學員們被稱為‘海龜’(丹尼斯先生說這項計劃開始時他剛剛從亞洲回來,他解釋了自己向别人說過的話,‘我們正在成長為交易員,就象在新加坡他們正在成長為海龜一樣’)。”----斯坦利.W.安格瑞斯特,《華爾街期刊》,1989年9月5日

海龜成為交易史上最著名的實驗,因為在随後的四年中這些海龜交易員取得了年均複利80%的收益。

是的,裡克證明了交易可以被傳授。他證明了用一套簡單的法則,他可以使僅有很少或根本沒有交易經驗的人成為優秀的交易員。而這個交易法則被後世稱為“海龜交易法則”。

海龜交易法則具體内容

**海龜交易法則:**海龜交易法則屬于趨勢交易,首先建立唐奇安通道(下文會具體解釋),即确定上突破線和下突破線,如果價格突破上線,則做多,如果價格突破下線就平倉或做空。

唐奇安通道與開倉

唐奇安通道,作為一個通道必定有上線和下線,上線就是前N1日内的最高價,下線就是前N2日内的最低價,一般來說N1=20,N2=10;然後,價格上穿就買,下穿就賣,就是這麼簡單。

但是僅僅隻用唐奇安通道進行買賣,其實效果跟MACD線等其他趨勢策略的效果差不多,并沒有更優

ATR與倉位管理

海龜交易法則最核心的部分,在于倉位的控制,這種止損會讓你基準的虧損不超過總資金的n%,所以這部分的思想是需要我們學習的。

當日的真實波幅TR(true range)

計算當日真實波幅公式

TR1=Max(H1−L1,H1−C0,C0−L1)TR1=Max(H1−L1,H1−C0,C0−L1)

其中,下表1代表當日,下表0代表昨日,C0C0是昨日開盤價close,H是最高價high,L是最低價low。

平均波幅ATR(Average true range)

一般取前20日的平均TR。

ATR20=mean(TR1,TR2…TR19,TR20)ATR20=mean(TR1,TR2…TR19,TR20)

其中,公式 mean(X1,X2)mean(X1,X2) 代表求 X1X1 和 X2X2 的平均數。

這時候我們已經求出ATR,這個數字可以當做衡量今天的價格波幅的基準,為1單位,比如現在價格是100元,基準波幅ATR=4元,代表今天基準波幅在98-102元,如果是2倍ATR,波幅就在96-104元。

倉位管理

在僅讨論多頭的情況下:

1、如果标的價格跌破"持倉均價-0.5(1、1.5、2)倍的ATR",則平倉至原始倉位的75%(50%,25%,0%)。

2、如果标的價格跌破唐奇安通道下軌,則全平倉。

海龜交易法則策略實現(基于掘金量化平台)策略思想
  • 當價格上穿唐奇安通道且短MA在長MA上方時開多倉;當價格下穿唐奇安通道且短MA在長MA下方時開空倉(8手)
  • 若有多倉則在價格跌破唐奇安平倉通道下軌的時候全平倉位,否則根據跌破持倉均價 - x(x=0.5,1,1.5,2)倍ATR把倉位平至6/4/2/0手
  • 若有空倉則在價格漲破唐奇安平倉通道上軌的時候全平倉位,否則根據漲破持倉均價 x(x=0.5,1,1.5,2)倍ATR把倉位平至6/4/2/0手
策略主要步驟實現訂閱數據

subscribe(symbols=symbols, frequency='1d', count=31, wait_group=True)

訂閱數據需要在定義init函數裡面設置,并調用subscribe函數,這裡注意,我們需要通過計算前三十根bars來作為開平倉的标準,并在當前bar上做出開平倉操作,所以需要獲取31根bar:

  • symbols 需要設置訂閱的标的代碼。
  • frequency需設置訂閱數據的周期級别,這裡設置1d 表示以一天為周期。
  • count需要設置獲取的bar的數量
數據獲取

data = context.data(symbol=symbol, frequency='1d', count=31, fields='close')

訂閱數據之後,需要獲取已經訂閱的數據來進行操作,這時需調用context.data函數:

  • symbols 需要設置訂閱的标的代碼。
  • frequency需設置訂閱數據的周期級别,這裡設置1d表示以一天為周期。
  • count需要設置獲取的bar的數量
  • fields需要設置返回值的種類
獲取持倉信息

position_long = context.account().position(symbol=symbol, side=PositionSide_Long) position_short = context.account().position(symbol=symbol, side=PositionSide_Short)

在判斷平倉條件時,需要獲取持倉信息(包含持倉均價),這就需要調用context.account().position函數:

  • symbols 需要設置訂閱的标的代碼。
  • side需要設置持倉方向,有PositionSide_Long和PositionSide_Short兩個選擇。
策略回測分析回測報告

海龜交易法則免費電子版(海龜交易法則)2

分析

我們選取了2017年6月至2017年12月作為回測周期,“RB1801”與“FG801”作為标的合約,均線長短周期分别為5d,20d,唐奇安通道上下軌計算周期分别為20d,10d,ATR計算周期為20d,可以看出:

  • 勝率(具有盈利的平倉次數與總平倉次數之比)達到了34.48%,因為海龜交易法則為趨勢跟蹤策略,所以勝率不會太高。
  • 卡瑪比率(年化收益率與曆史最大回撤之比)是使用最大回撤率來衡量風險。**采用最大回撤率來衡量風險,關注的是最極端的情況。**卡瑪比率越高表示策略承受每單位最大損失獲得的報酬越高。在這裡卡瑪比率超過了9。
  • 夏普比率(年化收益率減無風險收益率的差收益波動率之比)超過2.5,也即承受1單位的風險,會有超過2.5個單位的收益回報
  • 策略收益曲線整體相對穩定,适合穩定型投資者,最大回撤極小,另外,策略在趨勢行情行情中表現更加。

策略源碼

# coding=utf-8 from __future__ import print_function, absolute_import, unicode_literals import sys import numpy as np import pandas as pd try: import talib except: print('請安裝TA-Lib庫') sys.exit(-1) from gm.api import * ''' 本策略通過計算CZCE.FG801和SHFE.rb1801的ATR.唐奇安通道和MA線, 當價格上穿唐奇安通道且短MA在長MA上方時開多倉;當價格下穿唐奇安通道且短MA在長MA下方時開空倉(8手) 若有多倉則在價格跌破唐奇安平倉通道下軌的時候全平倉位,否則根據跌破 持倉均價 - x(x=0.5,1,1.5,2)倍ATR把倉位平至6/4/2/0手 若有空倉則在價格漲破唐奇安平倉通道上軌的時候全平倉位,否則根據漲破 持倉均價 x(x=0.5,1,1.5,2)倍ATR把倉位平至6/4/2/0手 回測數據為:CZCE.FG801和SHFE.rb1801的1min數據 回測時間為:2017-09-15 09:15:00到2017-10-01 15:00:00 ''' def init(context): # context.parameter分别為唐奇安開倉通道.唐奇安平倉通道.短ma.長ma.ATR的參數 context.parameter = [20, 10, 5, 20, 20] context.tar = context.parameter[4] # context.goods交易的品種 context.goods = ['CZCE.FG801', 'SHFE.rb1801'] # 訂閱context.goods裡面的品種, bar頻率為1min subscribe(symbols=context.goods, frequency='1d', count=51) # 止損的比例區間 def on_bar(context, bars): bar = bars[0] symbol = bar['symbol'] recent_data = context.data(symbol=symbol, frequency='1d', count=51, fields='close,high,low') close = recent_data['close'].values[-1] # 計算ATR atr = talib.ATR(recent_data['high'].values, recent_data['low'].values, recent_data['close'].values, timeperiod=context.tar)[-1] # 計算唐奇安開倉和平倉通道 context.don_open = context.parameter[0] 1 upper_band = talib.MAX(recent_data['close'].values[:-1], timeperiod=context.don_open)[-1] context.don_close = context.parameter[1] 1 lower_band = talib.MIN(recent_data['close'].values[:-1], timeperiod=context.don_close)[-1] # 若沒有倉位則開倉 position_long = context.account().position(symbol=symbol, side=PositionSide_Long) position_short = context.account().position(symbol=symbol, side=PositionSide_Short) if not position_long and not position_short: # 計算長短ma線.DIF ma_short = talib.MA(recent_data['close'].values, timeperiod=(context.parameter[2] 1))[-1] ma_long = talib.MA(recent_data['close'].values, timeperiod=(context.parameter[3] 1))[-1] dif = ma_short - ma_long # 獲取當前價格 # 上穿唐奇安通道且短ma在長ma上方則開多倉 if close > upper_band and (dif > 0): order_target_volume(symbol=symbol, volume=80, position_side=PositionSide_Long, order_type=OrderType_Market) print(symbol, '市價單開多倉8手') # 下穿唐奇安通道且短ma在長ma下方則開空倉 if close < lower_band and (dif < 0): order_target_volume(symbol=symbol, volume=80, position_side=PositionSide_Short, order_type=OrderType_Market) print(symbol, '市價單開空倉8手') elif position_long: # 價格跌破唐奇安平倉通道全平倉位止損 if close < lower_band: order_close_all() print(symbol, '市價單全平倉位') else: # 獲取持倉均價 vwap = position_long['vwap'] # 獲取持倉的資金 band = vwap - np.array([200, 2, 1.5, 1, 0.5, -100]) * atr # 計算最新應持倉位 grid_volume = int(pd.cut([close], band, labels=[0, 10, 20, 30, 40])[0]) * 2 order_target_volume(symbol=symbol, volume=grid_volume, position_side=PositionSide_Long, order_type=OrderType_Market) print(symbol, '市價單平多倉到', grid_volume, '手') elif position_short: # 價格漲破唐奇安平倉通道或價格漲破持倉均價加兩倍ATR平空倉 if close > upper_band: order_close_all() print(symbol, '市價單全平倉位') else: # 獲取持倉均價 vwap = position_short['vwap'] # 獲取平倉的區間 band = vwap np.array([-100, 0.5, 1, 1.5, 2, 200]) * atr # 計算最新應持倉位 grid_volume = int(pd.cut([close], band, labels=[0, 10, 20, 30, 40])[0]) * 2 order_target_volume(symbol=symbol, volume=grid_volume, position_side=PositionSide_Short, order_type=OrderType_Market) print(symbol, '市價單平空倉到', grid_volume, '手') if __name__ == '__main__': ''' strategy_id策略ID,由系統生成 filename文件名,請與本文件名保持一緻 mode實時模式:MODE_LIVE回測模式:MODE_BACKTEST token綁定計算機的ID,可在系統設置-密鑰管理中生成 backtest_start_time回測開始時間 backtest_end_time回測結束時間 backtest_adjust股票複權方式不複權:ADJUST_NONE前複權:ADJUST_PREV後複權:ADJUST_POST backtest_initial_cash回測初始資金 backtest_commission_ratio回測傭金比例 backtest_slippage_ratio回測滑點比例 ''' run(strategy_id='dcda6cd6-e139-11e7-9f7c-9cd21ef04ea9', filename='turtal.py', mode=MODE_BACKTEST, token='token', backtest_start_time='2017-06-01 09:15:00', backtest_end_time='2017-12-11 15:00:00', backtest_adjust=ADJUST_PREV, backtest_initial_cash=10000000, backtest_commission_ratio=0.0001, backtest_slippage_ratio=0.0001)

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved