1:海龟是交易史上最著名的实验,因为在随后的四年中学员取得了年均复利80%的收益。
2:海龟们(理查德•丹尼斯将学员们称为’海龟’)商定在他们议定的10年保密协议于1993年终止后不泄露海龟法则,但个别海龟在网站上出售海龟交易系统获取利润
3:柯蒂斯.菲爵(最成功的海龟之一,年化收益率超过100% )为阻止个别海龟对知识产权的偷窃和岀售海龟法则而赚钱的行为,决定在网站上将海龟交易法则免费公之于众。这也是海龟交易法则的出处
4:柯蒂斯•菲斯总结了海龟交易系统本身、海龟的训练过程、海龟的交易历程以及海龟交易系统成功的本质(心理管理和仓位控制),即贯彻海龟交易系统的能力,完成了被称为有史以来最优秀的的5本交易著作之一《海龟交易法》
成功的交易系统 具有统一性和完整性
1 :良好的交易系统可以自动运行整个交易程序。对于交易员在交易中必须遵守的每项决策,系统都会给出答案。该系统使交易员更容易进行一致性的交易,因为有一套明确说明应该做什么的法则。交易的机械化就是不留给交易员自己进行思考与判断。
2:优秀的交易系统包括 选择-买卖什么;头寸规模->买卖多少;入市->何时买卖;止损->何时退出亏损的头寸;离市->何时退出赢利的头寸;策略->如何买卖(现价交易(时间优先) ,限价交易(价格优先))。
3:良好的交易系统应经过详细的回测,以明确其盈利和亏损的概率以及盈利时的收益与亏损时的损失,这有利于建立投资的信心并保证交易者对纪律的遵守。并且经过长时间实盘验证
海龟交易系统的成功原因
•海龟交易系统有较高的概率,并且在盈利时设置较高的仓位,保证了较高的胜率。
•海龟交易系统是一个完整的交易系统。其法则覆盖了交易的各个方面,并且不给交易员留下一点主观想象决策的余地。它具备一个完整交易系统的所有成分。
•纪律性 在亏损时按照系统信号进行交易 而不是按照交易员的判断。
一 :买卖什么 流动性要好
二: 何时买卖 唐安奇通道突破
三 买卖多少 -头寸管理 unit
四 止损 跌破最后一次买入时价格的2*ATR
五 止盈跌破 上升中 跌破下轨
海龟交易系统是一个完整交易系统 虽然现在用它可能赚不到钱 但是他的交易思想和策略是值得我们学习的
以下是代码回测
import numpy as np
import pandas as pd
import talib as ta
import datetime
start = '2015-01-01' # 回测起始时间
end = '2015-06-01' # 回测结束时间
universe = DynamicUniverse('A') # 证券池,支持股票、基金、期货、指数四种资产
benchmark = 'HS300' # 策略参考标准
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
# 配置账户信息,支持多资产多账户
accounts = {
'fantasy_account': AccountConfig(account_type='security', capital_base=10000000)
}
Max_position_per = 0.1
Max_history_window = 250
Max_time_range = 30
limit_unit = 4
atrlength = 20 #计算真实波幅考虑的周期数
DC_range = 20 #计算DC通道的周期
trade_percent = 0.01 #每次交易占比 基础值
record = pd.DataFrame({'symbol':[],'add_time':[],'last_buy_price':[] })
def initialize(context):
pass
def handle_data(context):
timing_turtle(context)
def calcUnit(portfolio_value,ATR):
value = portfolio_value * trade_percent
return int((value/ATR)/100)*100
def timing_turtle(context):
global record
account = context.get_account('fantasy_account')
current_universe = context.get_universe(exclude_halt=True)
security_position = account.get_positions()
history = context.history(current_universe,['closePrice','lowPrice','highPrice'],Max_time_range,rtype= 'array')
cash = account.cash
for sec in current_universe:
close = history[sec]['closePrice']
low = history[sec]['lowPrice']
high = history[sec]['highPrice']
current_price = context.current_price(sec)
#计算atr
atr = ta.ATR(high,low,close,atrlength) [-1]
#入场 突破唐奇安通道 上轨 买入一个UNIT
if current_price>high[-DC_range:-1].max() and sec not in security_position:
unit = calcUnit(account.portfolio_value,atr)
account.order_to(sec,unit)
if len(record) !=0:
record = record[record['symbol']!=sec] #清空不符合要求记录
record = record.append(pd.DataFrame({'symbol':[sec],'add_time':[1],'last_buy_price':[current_price] }))
continue
elif sec in security_position:
last_price = float(record[record['symbol']==sec]['last_buy_price'])
add_price = last_price + 0.5*atr
add_unit = float(record[record['symbol']==sec]['add_time'])
if current_price > add_price and add_unit <limit_unit:
unit = calcUnit(account.portfolio_value,atr)
account.order_to(sec,unit)
record.loc[record['symbol'] ==sec ,'add_time'] =record[record['symbol']==sec]['add_time']+1
record.loc[record['symbol'] ==sec ,'last_buy_price'] =current_price
elif current_price <low[-int(DC_range/2) :-1].min or current_price< (last_buy_price -2*atr):
account.order_to(sec,0)
record = record[ record['symbol']!=sec]
看了一下15年前半年的收益 比较一般 没跑赢大盘 回撤较小还可以
因为我用的是免费版 优矿 内存不足了 今天主要是学习一下 一个完整交易系统应该具备哪些思路 后面准备学习一下常用的CTA策略和机器学习tensorflow 读研时候的东西又要捡起来了