海龟交易法则的程序化代码及注解

合集下载

第四章:经典量化策略集锦(第六篇:交易系统终结者—海龟交易法则)

第四章:经典量化策略集锦(第六篇:交易系统终结者—海龟交易法则)

第四章:经典量化策略集锦(第六篇:交易系统终结者—海龟交易法则)导语:作为策略锦集第六篇,再向大家介绍非常著名的交易系统—海龟交易法则。

一、策略阐述1.海龟交易法则的由来Riachard Dennis 是七八十年代著名的期货投机商,是一位具有传奇色彩的人物,在多年的投机生涯中,Dennis 出尽风头,给人的感觉是常常可以在最低点买进,然后在最高峰反手卖空。

他相信优秀的交易员是后天培养而非天生的。

在1983 年12 月,他招聘了23 名新人,昵称为海龟,并对这些交易员进行了一个趋势跟踪交易策略培训。

随后给予每个新人 100 万美元的初始资金。

经5 年的运作,大部分“海龟”的业绩非常惊人,其中最好的业绩达到1.72亿美元。

多年后,海龟交易法则公布于世,我们才有幸看到曾名噪一时的完整的海龟交易法则。

2.海龟交易法则介绍A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。

本文以沪深300 指数 ETF 为标的,构建海龟交易法则。

B 、仓位:仓位是海龟交易系统最核心的部分,通过ATR 真实波幅指标来管理仓位。

第一步:计算True Range ,简称TR 。

TR = Max ( H−L , H−P , P−L ) ,其中H 为当日日内最高价,L 为当日日内最低价,P 为前一日收盘价。

第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去 20 天的TR 的平均值,ATR 是 TR 的移动平均值第三步:计算unit (法则的交易单位)Unit = (value * 1% ) / ATR ,其中value*1% 即为总资产的 1%,考虑到国内最小变化量是0.01 元,1 手是 100 股,所以1ATR 即为持1 股股票的资产最大变动,那么买入 1Unit 单位的股票,使得总资产当天震幅不超过 1% 。

----------------------- Page 95-----------------------C.开仓入市海龟交易法则分两个交易系统,两者都为分钟回测,即盘中交易:系统一:I 、若当前价格高于过去 20 日的最高价,则买入一个UnitII 、加仓:若股价在上一次买入的基础上上涨了0.5ATR,则加仓一个 Unit 。

浅谈海龟交易法则

浅谈海龟交易法则

浅谈海龟交易法则要了解海龟交易法则,首先要明白什幺是平均真实波动范围。

平均真实波动范围(Average True Range)简称ATR指标,是由J.Welles Wilder 发明的,ATR指标主要是用来衡量市场波动的强烈度,即为了显示市场变化率的指标。

ATR指标并没有指示价格方向的信息,只有价格变化的强烈程度的信息。

ATR指标的分析为:若ATR指标值越高,则价格趋势逆转的机率就越大;相反若ATR指标值越小,则价格趋势的逆转机率就越小。

ATR指标的具体计算方式为:Step 1、首先要计算出真实的波动(True Range)简称TR的值TR=Max(︱现在最高价-现在最低价或当日最高位-当日最低位︳,︳现在最高价-上一个的收盘价或当日最高位-昨日收市价︳,︳现在最低价-上一个的收盘价或当日最低位-昨日收市价︳)注解:Max即为取括号里的三个绝对值的最大值。

Step 2、接下来我们就可以算出ATR的值ATR=S UM (TR , N ) ÷N但是为了是ATR曲线比较平滑,它的计算公式变为:ATR t=[ATRt-1×(N-1)+ATR t]÷N海龟交易法海龟交易法则发明人William Eckhardt发现可以用移动平均的概念去理解波幅、管理注码和订立止蚀位。

海龟将一个基于波动性的常数百分比(TR或N)用作测算买卖规模的标准。

简单说,就是以股价波动幅度来决定买卖数量的大小,波动剧烈的少量买卖,反之则大量买卖,因为波动大的股票,即使少量买卖,其预期的收益也比买入大量波动小的股票少。

海龟交易法则应用有三个特点:止损机制/控制风险技巧海龟交易系统规定任何一笔交易都不能出现2%或2N(因人而异)以上的风险。

海龟系统止损的好处由于海龟的止损以ATR为基础,因此,它们能够适应市场的波动性。

更不稳定的市场有更宽的止损,但是,每个单位的买卖数量也会更少。

这等于是把风险分散在所有的入市决策上,这样会导致更好的多样化和更为健全的风险管理。

量化交易(2)--《海龟交易法则》

量化交易(2)--《海龟交易法则》

量化交易(2)--《海龟交易法则》前面介绍了如何获取数据,本文将直接介绍一种经典的交易策略,实际上这套方法在市场中大部分情况时有效的,但是在市场沉浮中,每个人都很难严格执行,大部分人都是觉得自己已经掌握了,甚至还有自己的想法,然后灵活的动一些小脑筋,殊不知,大道至简,尔等不过是管中窥豹、自欺欺人罢了,最后被市场教育,得出结论:海龟交易法不靠谱......不要问我的文字为何如此有画面感,我只能“无中生友”了.......1. 什么是海龟交易法则1983年年中,著名的商品投机家理查德.丹尼斯与他的老友比尔.埃克哈特进行了一场辩论,这场辩论是关于伟大的交易员是天生造就还是后天培养的。

理查德相信,他可以教会人们成为伟大的交易员。

比尔则认为遗传和天性才是决定因素。

为了解决这一问题,理查德建议招募并培训一些交易员,给他们提供真实的帐户进行交易,看看两个人中谁是正确的。

他们在《巴伦氏》、《华尔街期刊》和《纽约时报》上刊登了大幅广告,招聘交易学员。

广告中称,在一个短暂的培训会后,新手将被提供一个帐户进行交易。

理查德从报名的人中精选出13个人,1983年12月底,学员被邀请到芝加哥进行两周的培训,到1984年1月初,开始用小帐户进行交易。

到了2月初,在学员证明了自己的能力之后,丹尼斯给其中的大多数人提供了50万至200万美元的资金帐户。

“学员们被称为'海龟’, 海龟成为交易史上最著名的实验,因为在随后的四年中这些海龟交易员取得了年均复利80%的收益。

里克证明了交易可以被传授。

他证明了用一套简单的法则,他可以使仅有很少或根本没有交易经验的人成为优秀的交易员。

而这个交易法则被后世称为“海龟交易法则”。

2. 具体内容海龟交易法则属于趋势交易,首先建立唐奇安通道,即确定上突破线和下突破线,如果价格突破上线,则做多,如果价格突破下线就平仓或做空。

唐奇安通道,作为一个通道必定有上线和下线,上线就是前N1日内的最高价,下线就是前N2日内的最低价,一般来说N1=20,N2=10;然后,价格上穿就买,下穿就卖,就是这么简单。

[转载]改进版海龟交易法则代码(MCTS)

[转载]改进版海龟交易法则代码(MCTS)

[转载]改进版海龟交易法则代码(MCTS)input: InitialBalance(500000),loss(2),win(4);vars: N(0),StopLoss(0),DV(0),AccountBalance(0),system(0),DollarRisk(0),AvgEtyPrice(0),LTT(0),Tracker(0),LastTrade(-1),myprofit(0),HBP(0),LBP(0),Ndays(20);array:EtyPrice_L1[3](0),EtyPrice_S1[3](0),EtyPrice_L2[3](0),Ety Price_S2[3](0);/// Turtle 20-Day Breakout //////////////////////////////////////if marketposition=0 thenbeginN = ATR(Ndays);DV = N*BigPointValue;AccountBalance = InitialBalance + netprofit;DollarRisk = AccountBalance * 0.01;LTT = IntPortion(DollarRisk/DV);StopLoss = 2 * DV * LTT;HBP=0;LBP=0;if LastTrade = -1 then beginbuy("b-20-1") LTT shares next bar highest(h,20) or higher;EtyPrice_L1[0]= highest(h,20);buy("b-20-2") LTT shares next bar highest(h,20) + (0.5*N) or higher;EtyPrice_L1[1]= highest(h,20) + (0.5*N);buy("b-20-3") LTT shares next bar highest(h,20) + (1.0*N) or higher;EtyPrice_L1[2]= highest(h,20) + (1.0*N);buy("b-20-4") LTT shares next bar highest(h,20) + (1.5*N) or higher;EtyPrice_L1[3]= highest(h,20) + (1.5*N);sellshort("s-20-1") LTT shares next bar lowest(l,20) or lower;EtyPrice_S1[0]= lowest(l,20);sellshort("s-20-2") LTT shares next bar lowest(l,20) - (0.5*N) or lower;EtyPrice_S1[1]= lowest(l,20) - (0.5*N);sellshort("s-20-3") LTT shares next bar lowest(l,20) - (1.0*N) or lower;EtyPrice_S1[2]= lowest(l,20) - (1.0*N);sellshort("s-20-4") LTT shares next bar lowest(l,20) - (1.5*N) or lower;EtyPrice_S1[3]= lowest(l,20) - (1.5*N);system=1;end;if LastTrade = 1 then beginbuy("b-55-1") LTT shares next bar highest(h,55) or higher;EtyPrice_L2[0]= highest(h,55);buy("b-55-2") LTT shares next bar highest(h,55) + (0.5*N) orhigher;EtyPrice_L2[1]= highest(h,55)+ (0.5*N);buy("b-55-3") LTT shares next bar highest(h,55) + (1.0*N) or higher;EtyPrice_L2[2]= highest(h,55)+ (1.0*N);buy("b-55-4") LTT shares next bar highest(h,55) + (1.5*N) or higher;EtyPrice_L2[3]= highest(h,55)+ (1.5*N);sellshort("s-55-1") LTT shares next bar lowest(l,55) or lower;EtyPrice_S2[0]= lowest(l,55);sellshort("s-55-2") LTT shares next bar lowest(l,55) - (0.5*N) or lower;EtyPrice_S2[1]= lowest(l,55)- (0.5*N) ;sellshort("s-55-3") LTT shares next bar lowest(l,55) - (1.0*N) or lower;EtyPrice_S2[2]= lowest(l,55)- (1.0*N) ;sellshort("s-55-4") LTT shares next bar lowest(l,55) - (1.5*N) or lower;EtyPrice_S2[3]= lowest(l,55)- (1.5*N) ;system=2;end;end;// PREVIOUS TRADE TRACKERif HBP = 0 and LBP=0 and h > highest(h,19)[1] then begin Tracker = 1;HBP = h;LBP = 0;end;if HBP=0 and LBP = 0 and l < lowest(l,19)[1] then begin Tracker = -1;LBP = l ;HBP = 0;end;if Tracker = 1 then beginif l < HBP - (loss*N) then LastTrade = -1;if h > HBP + (win*N) then LastTrade = 1;end;if Tracker = -1 then beginif h > LBP + (loss*N) then LastTrade = -1;if l < LBP - (win*N) then LastTrade = 1;end;////jia cang system 1if LastTrade=-1 and marketposition=1 then beginif currentshares=LTT then beginbuy("b-20-2.") LTT shares next bar EtyPrice_L1[1] or higher; buy("b-20-3.") LTT shares next bar EtyPrice_L1[2] or higher; buy("b-20-4.") LTT shares next bar EtyPrice_L1[3] or higher; end;if currentshares=2*LTT then beginbuy("b-20-3..") LTT shares next bar EtyPrice_L1[2] or higher; buy("b-20-4..") LTT shares next bar EtyPrice_L1[3] or higher; end;if currentshares=3*LTT thenbuy("b-20-4...") LTT shares next bar EtyPrice_L1[3] or higher; end;if LastTrade=-1 and marketposition=-1 then beginif currentshares=LTT then beginsellshort("s-20-2.") LTT shares next bar EtyPrice_S1[1] stop;sellshort("s-20-3.") LTT shares next bar EtyPrice_S1[2] stop;sellshort("s-20-4.") LTT shares next bar EtyPrice_S1[3] stop;end;if currentshares=2*LTT then beginsellshort("s-20-3..") LTT shares next bar EtyPrice_S1[2] stop;sellshort("s-20-4..") LTT shares next bar EtyPrice_S1[3] stop;end;if currentshares=3*LTT thensellshort("s-20-4...") LTT shares next bar EtyPrice_S1[3] stop;end;////jia cang system 2if LastTrade=1 and marketposition=1 then beginif currentshares=LTT then beginbuy("b-55-2.") LTT shares next bar EtyPrice_L2[1] stop;buy("b-55-3.") LTT shares next bar EtyPrice_L2[2] stop;buy("b-55-4.") LTT shares next bar EtyPrice_L2[3] stop;end;if currentshares=2*LTT then beginbuy("b-55-3..") LTT shares next bar EtyPrice_L2[2] stop;buy("b-55-4..") LTT shares next bar EtyPrice_L2[3] stop;end;if currentshares=3*LTT thenbuy("b-55-4...") LTT shares next bar EtyPrice_L2[3] stop;end;if LastTrade=1 and marketposition=-1 then beginif currentshares=LTT then beginsellshort("s-55-2.") LTT shares next bar EtyPrice_S2[1] stop;sellshort("s-55-3.") LTT shares next bar EtyPrice_S2[2] stop;sellshort("s-55-4.") LTT shares next bar EtyPrice_S2[3] stop;end;if currentshares=2*LTT then beginsellshort("s-55-3..") LTT shares next bar EtyPrice_S2[2] stop;sellshort("s-55-4..") LTT shares next bar EtyPrice_S2[3] stop;end;if currentshares=3*LTT thensellshort("s-55-4...") LTT shares next bar EtyPrice_S2[3] stop;end;// STOPSif currentshares = LTT then StopLoss = 2.0* DV * LTT ;if currentshares = (2 * LTT) then StopLoss = 3.5* DV * LTT ;if currentshares = (3 * LTT) then StopLoss = 4.5* DV * LTT ;if currentshares = (4 * LTT) then StopLoss = 5.0* DV * LTT ;setstoploss (stoploss);print(date,"LTT:",LTT,"shares:",currentshares,"stop:",StopLoss, "DV:",DV);//out systemif system=1 then beginif marketposition=1 then sell("20_L-exit") next bar Lowest(l,10) stop;if marketposition=-1 then buytocover("20_S-exit") next bar Highest(h,10) stop;end;if system=2 then beginif marketposition=1 then sell("55_L-exit") next bar Lowest(l,20) stop;if marketposition=-1 then buytocover("55_S-exit")next bar Highest(h,20) stop;end;。

海龟交易法则python代码复现

海龟交易法则python代码复现

海龟交易法则1. 简介海龟交易法则(Turtle Trading System)是由著名的商品交易大师理查德·丹尼斯(Richard Dennis)和威廉·艾克哈特(William Eckhardt)所提出的一种交易策略。

这个交易系统以其简单、可执行和高度规则化而著称,被广泛应用于期货和股票市场。

海龟交易法则的核心思想是趋势跟踪,即在趋势开始时进场,趋势结束时退出。

这个策略的基本原理是,市场走势是有规律可循的,而且趋势会延续一段时间。

通过捕捉到趋势的起点,利用适当的止损和止盈策略,可以获得较高的盈利概率。

2. 策略规则海龟交易法则的策略规则非常简单明了,主要包括以下几个方面:2.1 入场规则•以20日突破为基础的短期入场规则:当价格突破过去20日的最高价时,买入;当价格突破过去20日的最低价时,卖空。

•以55日突破为基础的长期入场规则:当价格突破过去55日的最高价时,买入;当价格突破过去55日的最低价时,卖空。

2.2 止损规则•短期止损:当价格跌破过去10日的最低价时,卖出;当价格涨破过去10日的最高价时,买入。

•长期止损:当价格跌破过去20日的最低价时,卖出;当价格涨破过去20日的最高价时,买入。

2.3 止盈规则•短期止盈:当价格跌破过去10日的最低价的2倍时,卖出;当价格涨破过去10日的最高价的2倍时,买入。

•长期止盈:当价格跌破过去20日的最低价的2倍时,卖出;当价格涨破过去20日的最高价的2倍时,买入。

3. Python代码实现下面是使用Python实现海龟交易法则的示例代码:import numpy as npdef turtle_trading_strategy(data, short_period=20, long_period=55, stop_loss_s hort=10, stop_loss_long=20, take_profit_short=2, take_profit_long=2): # 计算最高价和最低价的移动平均线data['highest_short'] = data['high'].rolling(window=short_period).max()data['lowest_short'] = data['low'].rolling(window=short_period).min()data['highest_long'] = data['high'].rolling(window=long_period).max()data['lowest_long'] = data['low'].rolling(window=long_period).min()# 短期入场规则data['short_entry'] = np.where(data['close'] > data['highest_short'].shift (1), 1, 0)data['short_exit'] = np.where(data['close'] < data['lowest_short'].shift (1), -1, 0)# 长期入场规则data['long_entry'] = np.where(data['close'] > data['highest_long'].shift (1), 1, 0)data['long_exit'] = np.where(data['close'] < data['lowest_long'].shift(1), -1, 0)# 止损规则data['short_stop_loss'] = data['lowest_short'].rolling(window=stop_loss_sh ort).min()data['long_stop_loss'] = data['lowest_long'].rolling(window=stop_loss_lon g).min()# 止盈规则data['short_take_profit'] = data['highest_short'].rolling(window=stop_loss _short).max()data['long_take_profit'] = data['highest_long'].rolling(window=stop_loss_l ong).max()# 生成交易信号data['signal'] = 0data.loc[data['short_entry'] == 1, 'signal'] = 1data.loc[data['short_exit'] == -1, 'signal'] = -1data.loc[data['long_entry'] == 1, 'signal'] = 1data.loc[data['long_exit'] == -1, 'signal'] = -1# 计算持仓情况data['position'] = data['signal'].cumsum()return data4. 示例应用下面是一个使用海龟交易法则的示例应用:import pandas as pdimport matplotlib.pyplot as plt# 读取数据data = pd.read_csv('data.csv')# 调用海龟交易法则策略函数result = turtle_trading_strategy(data)# 绘制持仓情况图plt.plot(result['position'])plt.xlabel('Date')plt.ylabel('Position')plt.title('Turtle Trading Strategy')plt.show()在上述示例中,我们首先读取了包含股票数据的CSV文件,然后调用了海龟交易法则策略函数来生成交易信号和持仓情况。

海龟交易法则与matlab程序代码

海龟交易法则与matlab程序代码

海龟交易法则与matlab程序代码字号:大中小%%%5%% Turtle.M% 海龟交易法则(多品种、多市场)% 主要包括:% ? 市场----买卖什么,根据SVR强弱觉得买卖优先顺序% ? 头寸规模----买卖多少,根据ATR以及不对称相关性风险矩阵进行寸风险管理% ? 入市----何时买卖,根据突破信号辨别方法,辨别真假信号,并受账户资金水平限制其头寸,这里没有考虑到快速变化行情的滑点。

% ? 止损----何时退出亏损的头寸,根据A TR和固定损失水平设定。

这里没有考虑到快速变化行情的滑点。

% ? 离市----何时退出赢利的头寸,根据特定参数回归。

% ? 策略----如何买卖,此处只考虑了4种策略,但如何更细致的执行改策略我们没有考虑到。

如:如何利用其他指标辅助,如何优化组合资产配置等。

% 说明:% 为了明晰化思路,一些循环被拆成若干个子循环,影响了速度,但不妨碍我们学习和分析。

% 为了更为精确的服务高频数据,这里设定所得数据为1分钟数据。

所以,这里特别要注意的是,程序目前只能处理同样交易时间的市场品种。

% 那么,郑州和大连(9:00-10:15 10:30-11:30 1:30-3:00),上海(9:00-10:15 10:30-11:30 1:30-2:10 2:20-3:00),证券市场(9:30-11:30 1:00-3:00)就被割裂开来了。

% 因为无法控制非对称时间窗口内的风险,策略和程序暂时不向此扩展和修改。

不过,如果用天数据,则不存在任何问题了。

% 讨论:% 这里我没有写出强弱讨论程序,因为我觉得我的思路还不完全清晰。

我的初步想法是,根据相关性水平,如果上涨相关性水平高情形下,% 如果上涨击穿压力线,则买入最强的SVR,卖出最弱的;理论根据是journal of Finance 2002, Andrew , and% Journal of Finance 2005, Patton% written by:% Jemnbo Cai% jemnbo@% The copyright belongs to me. The codes exchanged only for study.% For your own application, load your data into the matrix "data", and change the% "controls" listed below%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% Controls %function turtle()clear all;close all;clc;global EMA;global Repeatglobal Margin;global Size;global Account;global Str1global Str2global CorrLevglobal PosLimglobal FreqFreq= 240; % 市场交易长度(分钟):大连、郑州=225 ,上海=215,证券=240STRA TEGY=2; % 选择的交易策略,1 策略1;2 策略2;3 强弱套利;dEMA=20; % 计算指数平均的周期数dRepeat=1; % 多久时间重新算一次ATR DMargin=[0.05 0.05 0.07 1]; % 所交易品种的保证金率1×i , i 资产数量,股票为1Size= [5 5 8 1]; % 所交易品种的合约规模1×i, 股票为1Account=[100000000]; % 初始账户资金DStr1_in=20; % 策略一进场周期参数dStr2_in=55; % 策略二进场周期参数dStr1_out=10; % 策略一出场周期参数dStr2_out=20; % 策略二出场周期参数dP_RSV= 30*Freq; % 相对强弱指标CorrAdj=30*Freq; % 市场相关性调查时间窗口长度,考虑到市场相关性的不对称性,买入考察下跌相关性,卖出考虑上涨相关性CorrLev=[0.3 0.7]; % 相关性水平识别,高于它为高度相关性市场,低于它为低度相关市场。

海龟交易系统R代码

海龟交易系统R代码

海龟交易系统R代码著名的商品投机家理查德·丹尼斯想弄清楚伟大的交易员是天生造就的还是后天培养的。

为此,在1983年他招募了13个人,教授给他们期货交易的基本概念,以及他自己的交易方法和原则。

“学员们被称为…海龟‟(丹尼斯先生说这项计划开始时他刚刚从亚洲回来,他解释了自己向别人说过的话,…我们正在成长为交易员,就象在新加坡他们正在成长为海龟一样‟)。

”海龟成为交易史上最著名的实验,因为在随后的四年中海龟们取得了年均复利80%的收益。

丹尼斯证明用一套简单的系统和法则,可以使仅有很少或根本没有交易经验的人成为优秀的交易员。

当时,海龟们认为应对理查德·丹尼斯负责,商定甚至在他们议定的10年保密协定于1993年终止后也不泄露这些法则。

但是,有个别海龟在网站上出售海龟交易法则而谋取钱财。

两个原版海龟科蒂斯·费思和阿瑟·马多克,为了阻止个别海龟对知识产权的偷窃和出售海龟交易法则而赚钱的行为,决定在网站上将海龟交易法则免费公之于众。

我们现在能看到的海龟交易法则,既是由此所得。

海龟交易系统是一个完整的交易系统,它包括:市场―买卖什么头寸规模―买卖多少入市―何时买卖止损―何时退出亏损的头寸离市―何时退出赢利的头寸策略―如何买卖R代码(来自Blotter包)如下:# - 海龟系统#1# 载入所需的库require(quantmod)require(TTR)require(blotter)# 清理R环境,如果该demo程序之前运行过try(rm("account.turtles","portfolio.turtles",pos=.blotter),silent=TRUE)try(rm("portfolio","account","N","symbol","symbols","ClosePrice","CurrentDate","equity","Units","maxUnits","size","Stop","equity","TxnPrice","initDate","initEq","Posn","verbose"),silent=TRUE)# 设定初始值initDate="2008-01-01"initEq=100000print("Initializing portfolio and account structure")# 构建一个带三只股票的小型组合symbols = c("XLF", "XLP", "XLE")#, "XLY", "XLV", "XLI", "XLB", "XLK", "XLU") currency("USD")for(symbol in symbols){stock(symbol, currency="USD",multiplier=1)}#创建函数保存过程值updateStrat <- function(Portfolio, Symbol, TxnDate,PosUnitsQty, UnitSize, StopPrice, TxnPrice, TxnN){ # @作者Peter Carl# 描述:# 添加交易事务相关数据到STRATEGY时间序列# 输入:# TxnDate: 以ISO 8106格式的交易日期,例如:'2008-09-01'# PosUnitsQty: 总交易数量(股数)# StopPrice: 交易完成价格# TxnPrice: 最后交易价格# TxnN: 为最后交易结算N# 输出:# 没有输出。

唐奇安通道指标(附源码)!海龟交易法则精髓!

唐奇安通道指标(附源码)!海龟交易法则精髓!

妇产科主治医师(专业实践能力)模拟试卷8(题后含答案及解析) 题型有:1. 案例分析题患者李××,女性,34岁。

G1P0。

因“停经30周,发现羊水过多2周,憋闷不能平卧1日”入院。

患者平素体健,无重大病史可载。

既往月经规律,未行常规产前检查。

2周前超声检查示:“单胎头位,:BPD:7.9cm,胎盘位于子宫前壁,下缘距宫颈内口9cm,胎盘I级,AFI:25。

”口服吲哚美辛,效果不佳。

近一日腹胀,憋闷不能平卧就诊。

入院查体:T:36.6℃,P:96次/分,R:22次/分,BP:135/80mmHg。

神志清。

心肺(一),腹部膨隆,宫高34cm,腹围96cm,子宫张力大,胎位扪诊不清。

胎心遥远,150次/分。

水肿+。

复查B 超:AFI:29。

1.患者入院诊断为羊水过多,根据现有临床资料,在病因学上尚需要进一步排除的异常情况不包括A.甲亢B.慢性肾病C.系统性红斑狼疮D.宫内发育迟缓E.重度胎儿水肿正确答案:A,B,C,D解析:胎儿畸形是羊水过多的最主要的病因,占18%~40%。

以中枢神经系统及消化系统畸形为主,也见于脐膨出、膈疝及多发性畸形。

本例产科超声检查未见明显异常,尚需行胎儿心脏及大血管超声检查排除发育异常,必要时脐血穿刺产前诊断排除染色体异常性疾病。

双胎妊娠、巨大儿也是常见病因,已经排除。

胎盘脐带因素产前不易明确诊断。

母体合并症主要为C、D、E、F。

此外还有30%无明显原因,为特发性羊水过多。

2.患者入院常规检查发现:空腹血糖6.4mmol/L。

追问病史,其母亲患有2型糖尿病10+年,口服降糖药治疗。

为了进一步明确诊断GDM,最合理的方法首选为A.GCTB.OGTTC.复查空腹血糖D.糖化血红蛋白E.尿糖正确答案:C3.复查空腹血糖5.0mmol/L,进一步的诊断方法首选A.GCTB.OGTTC.复查空腹血糖D.糖化血红蛋白E.尿糖正确答案:B4.患者诊断为妊娠期糖尿病,以下治疗措施正确的是A.运动疗法B.饮食控制C.应用胰岛素治疗D.监测血糖谱E.加强胎儿监护正确答案:B,D,E5.患者经对症处理,羊水过多的症状有所缓解。

my海龟交易法则-my

my海龟交易法则-my
海龟交易法则-MY
市场:买卖什么
头寸规模:买卖多少
入市:什么时候买卖
止损:什么时候放弃亏损
完整的交易 系统
止盈:什么时候退出盈利
战术:怎么买卖
市场:海龟们的选择
海龟们都是期货交易者 海龟们只选择流动性最高的市场
头寸规模
根据一个市场的绝对波动幅度来调整头寸规模,等于将头寸的绝对波动幅度 标准化了。
低度相关市场
对于低度相关市场,在一个特定方向上最大可以有10个单位。低度相关市场 包括:黄金和铜 白银和铜 以及谷物组合
调整交易规模
每当帐户亏损10%时,其交易的帐户规模减小20%, 如果某个100万美圆帐户的海龟曾经亏损10%即10 万美圆,那么,他下次能交易的规模就只有80万 美圆 如果再亏损10%,(80万的10%是8万美圆,总亏 损为18万美圆)那下次可以交易的帐户规模为64 万美圆


要想坚持一个交易系统的法则,建立对系统的信心是非 常重要的。无论是海龟系统,类似系统还是其他完全不 同的系统,你必须亲自用历史交易数据检验你的系统。 别人说一个系统有效是没用的,其他人的研究结果也不 代表什么,你必须自己完成这个任务。
几种对交易行为有影响的认知偏差
损失厌恶症
对避免损失有一种强烈的偏好
原理
如果一个市场的合约价值波动性较强,那么这个市场中的合约持有量就少一些 如果一个市场的合约价值波动性较弱,那么这个市场中的合约持有量就大一些 市场的波动性与头寸的规模是相互抵消的。
波动性:N的含义
海龟们用N来衡量一个市场的潜在波动性。 TR=Max (H-L,H-PDC,PDC-L) 其中:TR=真实波幅 H=当日最高价 L=当日最低价 PDC=前一日收盘价 N的计算公式如下: N=(19*PDN+TR)/20 其中:PDN=前一日N值 TR=当日的真实波动幅度 公式中需要前一日的N值,在首次计算N的时候不能用这个 公式,只能计算真实波动幅度的20日简单平均值

【手把手教你】用Python量化海龟交易法则

【手把手教你】用Python量化海龟交易法则

【手把手教你】用Python量化海龟交易法则趋势追踪——唐奇安通道海龟交易法则利用唐奇安通道的突破点作为买卖信号指导交易,简单而言唐奇安通道是由一条上轨线、中线和下线组成,上轨线由N1日内最高价构成,下轨线由N2日内最低价计算,当价格冲破上轨是可能的买入信号,反之,冲破下轨时是可能的卖出信号。

买卖单位及首次建仓海龟交易系统本质上是一个趋势跟随的系统,但是最值得学习的是资金管理尤其是分批建仓及动态止损的部分。

书中提到了N值仓位管理法,其中N值与技术指标平均真实波幅 ATR计算类似。

ATR是真实波幅TR的20日平均值,而TR是当前交易日最高价和最低价之差、前一交易日收盘价与当前交易日最高价之差、前一交易日收盘价与当前交易日最低价之差三者中的最大值,用公式表示为:TR=Max(High−Low,abs(High−PreClose),abs(PreClose−Low)),技术指标库TA-Lib提供了直接计算ATR的函数。

建仓单位:Unit=(1%∗账户总资金)/N 首次建仓的时候,当捕捉到趋势,即价格突破唐奇安上轨时,买入1个unit。

其意义就是,让一个N值的波动与你总资金1%的波动对应,如果买入1unit单位的资产,当天震幅使得总资产的变化不超过1%。

例如:现在你有1万元资金,1%波动就是100元。

假如某股票的N(ATR)值为0.1元,100÷0.1元=1000股。

也就是说,你的第一笔仓位应该是在其突破上轨(假设为3元)时立刻买入1000股,耗资3000元。

动态止损或清仓条件当股价跌破10日唐奇安通道下沿,清空头寸结束本次交易。

当价格比最后一次买入价格下跌2N时,则卖出全部头寸止损。

接上面的例子,最后一次加仓价格为3.2。

假如此时N值0.2元。

当价格下跌到3.2 - 2*0.2 = 2.8元时,清仓。

持仓成本为(3+3.1+3.2)*1000/3000 = 3.1元。

此时亏损(3.1-2.8)*3000 = 900元,对于1万来说这波亏损9%。

海龟交易法则的程序化代码及注解

海龟交易法则的程序化代码及注解

海龟交易法则的程序化代码及注解//————————————————————————// 简称: TurtleTrader// 名称: 海龟交易系统// 类别: 公式应用// 类型: 内建应用//————————————————————————ParamsNumeric RiskRatio(1); // % Risk Per N ( 0 – 100)Numeric ATRLength(20); // 平均波动周期 ATR LengthNumeric boLength(20); // 短周期 BreakOut LengthNumeric fsLength(55); // 长周期 FailSafe LengthNumeric teLength(10); // 离市周期 Trailing Exit LengthBool LastProfitableTradeFilter(True); // 使用入市过滤条件VarsNumeric MinPoint; // 最小变动单位NumericSeries AvgTR; // ATRNumeric N; // N 值Numeric TotalEquity; // 按最新收盘价计算出的总资产Numeric TurtleUnits; // 交易单位NumericSeries DonchianHi; // 唐奇安通道上轨,延后1个BarNumericSeries DonchianLo; // 唐奇安通道下轨,延后1个BarNumericSeries fsDonchianHi; // 唐奇安通道上轨,延后1个Bar,长周期 NumericSeries fsDonchianLo; // 唐奇安通道下轨,延后1个Bar,长周期 Numeric ExitHighestPrice; // 离市时判断需要的N周期最高价Numeric ExitLowestPrice; // 离市时判断需要的N周期最低价Numeric myEntryPrice; // 开仓价格Numeric myExitPrice; // 平仓价格Bool SendOrderThisBar(False); // 当前Bar有过交易NumericSeries preEntryPrice(0); // 前一次开仓的价格BoolSeries PreBreakoutFailure(false); // 前一次突破是否失败BeginIf(BarStatus == 0){preEntryPrice = InvalidNumeric;PreBreakoutFailure = false;}MinPoint = MinMove*PriceScale;AvgTR = XAverage(TrueRange,ATRLength);N = AvgTR[1];TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());TurtleUnits = IntPart(TurtleUnits); // 对小数取整DonchianHi = HighestFC(High[1],boLength);DonchianLo = LowestFC(Low[1],boLength);fsDonchianHi = HighestFC(High[1],fsLength);fsDonchianLo = LowestFC(Low[1],fsLength);ExitLowestPrice = LowestFC(Low[1],teLength);ExitHighestPrice = HighestFC(High[1],teLength);Commentary(“N=”+Text(N));Commentary(“preEntryPrice=”+Text(preEntryPrice));Commentary(“PreBreakoutFailure=”+IIFString(PreBreakoutFailure,”True”,”False”));// 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作 If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure))){// 突破开仓If(High > DonchianHi && TurtleUnits >= 1){// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = min(high,DonchianHi + MinPoint);myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}If(Low < DonchianLo && TurtleUnits >= 1){// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = max(low,DonchianLo – MinPoint);myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;SendOrderThisBar = True;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}}// 长周期突破开仓 Failsafe Breakout pointIf(MarketPosition == 0){Commentary(“fsDonchianHi=”+Text(fsDonchianHi));If(High > fsDonchianHi && TurtleUnits >= 1){// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = min(high,fsDonchianHi + MinPoint);myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice);// 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}Commentary(“fsDonchianLo=”+Text(fsDonchianLo));If(Low < fsDonchianLo && TurtleUnits >= 1){// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = max(low,fsDonchianLo – MinPoint);myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice);// 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}}If(MarketPosition == 1) // 有多仓的情况{Commentary(“ExitLowestPrice=”+Text(ExitLowestPrice));If(Low < ExitLowestPrice){myExitPrice = max(Low,ExitLowestPrice – MinPoint);myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替Sell(0,myExitPrice); // 数量用0的情况下将全部平仓}Else{If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1){If(Open >= preEntryPrice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。

一文看懂海龟交易法则

一文看懂海龟交易法则

交易中,实现稳定盈利的前提是形成适合自己的交易系统,这里将柯蒂斯《海龟交易法则》中交易系统的部分总结出来,与大家共勉。

一个完整交易系统包括:资金管理、买入、止盈和止损四个部分。

(一)资金管理海龟将总资金分为一个个单位,每个单位即称为头寸,划分的标准主要是参考标的的波动性。

波动性用一个指标量化即真实波动幅度均值(ATR)。

真实波动幅度均值(ATR)是当前交易日前20交易日真实波动幅度的移动平均值。

真实波动幅度是取最高价与最低价、最高价与前一日收盘价、最低价与前一日收盘价的最大值。

结合交易时点已经形成的当天最高、最低和上一交易日的收盘价,可以计算出交易时点当天的真实波动幅度,用TR表示。

计算真是波动幅度均值公式为:ATR=(19*PDN+TR)/20。

大家不要这串公式干懵,其实你只要理解力真实波动幅度的概念,这个公式很好理解。

ATR相当于考虑了21天的真实波动幅度,前20天真实波动幅度的平均值就是公式里的PDN,结合交易当日(第21天)的真实波动幅度(TR),弄一起平均下就成了真实波动幅度均值。

啰嗦一句,这个概念很重要,如果没看明白,停下来回去多读几次。

波动性我们计算出来了,就是真实波动幅度均值(ATR),这时我们用这个波动性来将总资金分成一个个单位(头寸),核心就一句话:价格波动1个ATR,总仓位资金变化1%。

加下来我们推个公式:假设当前价格是P,我们会买入1头寸元的该标的,所以:1头寸/P*ATR=总仓位资金*1%。

啰嗦一下,ATR是单只标的资产的价格波动,乘以我们持有的数量(我们拿了1头寸资金买该标的,买的数量就是1头寸/价格P)就是我们的盈亏幅度,这个盈亏幅度即为总仓位资金的1%。

公式变形(小学生问题):1头寸单位=总仓位资金*1%*P/ATR至此我们每次交易的金额就是1头寸单位元,上面就是公式。

ATR这个数据不用自己算,股票交易软件有这个指标,举个例子(2022年2月22日11点36分):假设你有10万元,以平安银行(000001为例),某软件截图如下:按公式先计算当天的ATR=(19*0.47+0.35)/20=0.464元(注:下图中3的位置为前一个交易日的ATR,即为公式中的PDN)1头寸单位=100000*1%*16.20/0.464=34914元,即每次买入卖出都是这么多钱。

【策略篇】海龟交易系统使用方法和源码

【策略篇】海龟交易系统使用方法和源码

【策略篇】海龟交易系统使用方法和源码今天徐湿妹周末相亲去了,由我高菲特代班写VIP投资报告。

我主要是以研究策略为主的,至于策略好不好还是大家说了算。

下面开始正文。

啰嗦几句。

技术分析是一种方法,它解决的是我们平常买卖股票时机选择的问题。

技术分析会给出一个定义,该什么时候买,该什么时候卖。

投机不会把把都赢,如果自我心态控制不好,即使你有最精妙的剑法,你也会败于自己之手。

人的贪婪和恐惧始终都会导致自我失控。

这是交易者最大的敌人。

今天我主要向大家介绍一个海龟交易系统。

海龟交易法则是一个趋势交易系统。

趋势交易系统主要就是在追主升浪的行情,在主升浪的时候能够获得一大截利润。

而在震荡行情中,趋势交易系统就有可能会经常止损。

因此海龟交易系统也不是在任何时间段用都能获利的,当有行情的时候能够获得较大利润,在没有行情的时候就需要默默忍耐亏损,等待大行情的到来。

我们通过简单的几点就可以了解海龟交易系统了。

一,海龟的核心交易原则:·1:当价格突破50个交易周期最高点的时候入场。

·2:当价格跌破25个交易周期最低点时离场。

附图为近期上证指数60分钟行情。

海龟系统在2938点附近发出买入信号,随后上证指数也强势突破3000点,至于具体出场位置,目前还没有给出。

简单来说,海龟就是白色10日均线大于100日均线,股价突破红线(50个交易周期最高点)买入,跌回蓝色点(25个交易周期最低点)卖出。

二,海龟交易法则的具体运用举个例子,慧球科技。

10日白色均线上穿黄色100日均线,且股价大于红色线买入。

蓝色点位是我们要止损卖出的点位。

后面整个上涨过程,该股都没有触碰到蓝色止损点。

我们只要安心持股即可。

最终慧球科技由3.75上涨至23.56,中间获利高达635%,但实际操作只有一笔。

看到这里,大家也明白海龟模型的原理了吧,就是趋势模型,严格按照技术指标操作即可啦。

当然如果没有行情的话,该模型也会频繁的止损。

同样是慧球科技,我们在2004年10月到2004年12月之间按此规则操作,就需要止损了,但亏损的幅度并不大。

海龟交易法则python代码复现

海龟交易法则python代码复现

海龟交易法则 Python 代码复现1. 背景介绍海龟交易法则是由美国著名期货交易员理查德·丹尼斯(Richard Dennis)在20世纪80年代提出的一套交易策略。

该策略基于一种趋势跟踪系统,通过买入或卖出突破某个时间段内的最高价或最低价来进行交易。

海龟交易法则被广泛应用于股票、期货等金融市场。

本文将使用 Python 编程语言来复现海龟交易法则,并详细介绍其原理和实现过程。

2. 原理介绍海龟交易法则的核心思想是根据市场趋势进行买卖操作。

具体而言,该策略包括以下几个步骤:步骤1:确定市场趋势首先,我们需要确定市场的趋势方向,即判断当前是处于上涨趋势还是下跌趋势。

这可以通过计算一段时间内的移动平均线来实现。

如果价格位于移动平均线之上,则判断为上涨趋势;如果价格位于移动平均线之下,则判断为下跌趋势。

步骤2:确定买入信号一旦确定了市场的趋势方向,我们就可以根据一定的规则来确定买入信号。

海龟交易法则中使用了两个指标来判断买入信号:突破前n天内的最高价和突破前n天内的最低价。

如果当前价格突破了最高价,则发出买入信号;如果当前价格跌破了最低价,则取消买入信号。

步骤3:确定卖出信号与买入信号类似,海龟交易法则中也使用了两个指标来判断卖出信号:突破前n天内的最低价和突破前n天内的最高价。

如果当前价格跌破了最低价,则发出卖出信号;如果当前价格突破了最高价,则取消卖出信号。

步骤4:仓位管理海龟交易法则还强调了仓位管理的重要性。

根据该策略,每次交易时应该控制仓位大小,并设置止损点和止盈点。

当价格达到止损点时,应立即平仓止损;当价格达到止盈点时,应立即平仓获利。

3. Python 代码实现下面是使用 Python 实现海龟交易法则的代码:import pandas as pd# 步骤1:确定市场趋势def determine_trend(data, n):data['MA'] = data['Close'].rolling(window=n).mean()data['Trend'] = data['Close'] > data['MA']return data# 步骤2:确定买入信号def generate_buy_signal(data, n):data['Highest'] = data['High'].rolling(window=n).max()data['Buy Signal'] = (data['Close'] > data['Highest']).shift(1) return data# 步骤3:确定卖出信号def generate_sell_signal(data, n):data['Lowest'] = data['Low'].rolling(window=n).min()data['Sell Signal'] = (data['Close'] < data['Lowest']).shift(1) return data# 步骤4:仓位管理def position_management(data, stop_loss, take_profit):position = 0 # 仓位,0表示空仓,1表示多仓buy_price = 0 # 买入价格for i in range(len(data)):if position == 0 and data.loc[i, 'Buy Signal']:position = 1buy_price = data.loc[i, 'Close']elif position == 1 and (data.loc[i, 'Sell Signal'] or(data.loc[i, 'Close'] <= buy_price * (1 - stop _loss))):position = 0elif position == 1 and (data.loc[i, 'Buy Signal'] or(data.loc[i, 'Close'] >= buy_price * (1 + take _profit))):position = 0return data# 主函数def main():data = pd.read_csv('data.csv') # 读取数据,需包含'Close', 'High', 'Low'等列n = 20 # 移动平均线的窗口大小stop_loss = 0.02 # 止损点take_profit = 0.04 # 止盈点data = determine_trend(data, n)data = generate_buy_signal(data, n)data = generate_sell_signal(data, n)data = position_management(data, stop_loss, take_profit)print(data)if __name__ == '__main__':main()上述代码实现了海龟交易法则的主要功能,包括确定市场趋势、生成买入信号、生成卖出信号和仓位管理。

海龟交易系统源码

海龟交易系统源码

海龟交易系统源码
海龟交易系统简介:
交易信号:海龟的交易信号其实很简单,当价格创20或50天新高就买入,当价格创10天或20天新低就卖出,时间上具体的参数使用者也可以自己调整。

头寸管理和风险控制策略:海龟交易系统由总资金风险百分比和N波动的系数策略来决定交易头寸的多少,用N确定什么时候加仓、加多少,同时用2N来确定头寸的保护性损止。

N每7天调整一次(五个交易日)。

这就是海龟交易系统的交易策略,属于一套完整的交易系统。

下面是我写的海龟交易系统测试版的编程源码。

Buy(BB)是买入的股票的数量(含加码部分总共最多4次),Sell()是卖出全部的股票数量。

总资金以100万为例。

海龟交易系统修正版:
该版本主要的改进之处是在N的算法上直接用语句实现,因为SMA函数首次的N即PDN取值是不海龟交易系统所说的20日简单均线,所以会造成误差,而改进后更符合原意。

我们在这里说的N、PDN等等,对假如没看过海龟法则的投资者而言可能无法理解,所以在了解源码之前可以先看看海龟法则。

以下是修正版的程序:。

WH8的海龟交易法则

WH8的海龟交易法则

WH8的海龟交易法则入场价:价格突破20日新高做多,如N手;止损点:入场点-2倍ATR第一次加仓价:入场价+0.5倍ATR,加N手;止损点:所有头寸(2N)的止损价都为首次入场价-1.5倍ATR第二次加仓价:入场价+1倍ATR,加N手;止损点:所有头寸(3N)的止损价都为首次入场价-1倍ATR第三次加仓家:入场价+1.5倍ATR,加N手,止损点:所有头寸(4N)的止损价都为首次入场价-0.5倍ATR价格突破10日最低值,清空头寸。

我根据你的写法,把全部代码写出来了:TR :=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));ATR:=REF(EMA(TR,20),1);N:=INTPART(MONEYTOT*0.01/(ATR*XXX));H>REF(HV(H,20),1)&&BKVOL=0&&SKVOL=0,BK(N);BKVOL=N&&ISLASTBK&&L<BKPRICE-2*ATR,SP(BKVOL);BB:=VALUEWHEN(BKVOL>0&&COUNT(BKVOL>0,BARSLAS T(BKVOL=0)+1)=1,BKPRICE);H>REF(BKPRICE,1)+0.5*ATR&&BKVOL=N&&ISLASTBK,BK(N );BKVOL=2*N&&ISLASTBK&&L<BB-1.5*ATR,SP(BKVOL);H>BB+ATR&&BKVOL=2*N&&ISLASTBK,BK(N);BKVOL=3*N&&ISLASTBK&&L<BB-ATR,SP(BKVOL);H>BB+1.5*ATR&&BKVOL=3*N&&ISLASTBK,BK(N);BKVOL=3*N&&ISLASTBK&&L<BB-0.5*ATR,SP(BKVOL);L<REF(LV(L,10),1)&&BKVOL>0,SP(BKVOL);L<REF(LV(L,20),1)&&SKVOL=0&&BKVOL=0,SK(N);SKVOL=N&&ISLASTSK&&H>SKPRICE+2*ATR,BP(SKVOL);SS:=VALUEWHEN(SKVOL>0&&COUNT(SKVOL>0,BARSLAST (SKVOL=0)+1)=1,SKPRICE);L<REF(SKPRICE,1)-0.5*ATR&&SKVOL=N&&ISLASTSK,SK(N);SKVOL=2*N&&ISLASTSK&&H>SS+1.5*ATR,BP(SKVOL);L<SS-ATR&&SKVOL=2*N&&ISLASTSK,SK(N);SKVOL=3*N&&ISLASTSK&&H>SS+ATR,BP(SKVOL);L<SS-1.5*ATR&&SKVOL=3*N&&ISLASTSK,SK(N);SKVOL=3*N&&ISLASTSK&&H>SS+0.5*ATR,BP(SKVOL);H>REF(HV(H,10),1)&&SKVOL>0,BP(SKVOL);其中:XXX为每个品种的合约单位,如测试股指期货,XXX为300,测试PTA,XXX为5,我没找到合约价值函数,因此用XXX代替,测试不同品种时,手工修改XXX值,不知现在有没有合约价值函数?这样直接写进去就OK了,也便于进行组合测试。

海龟交易法则1

海龟交易法则1

如果再看下图,我们就可以看到如果仅仅看10小时和100小时均线,那么在第二次上攻中就已经金叉了,但因为没有突破前期高点,所以还是不做多。

知道第三次上攻,均线又匹配,然后又有新高,这样的行情就比较有把握了。

当然,这个择时模型本质上是一个趋势跟随的模型,所以它最喜欢的是下图这样一气呵成的走势。

看到过某些回测数据,认为10期均线和100期均线以及50期通道突破主要利润在做多中,极少部分由做空贡献,所以我对这个模型也是仅给出做多的交易规则。

当然在A股这样今年熊市漫漫的市场中,其实用来做空也不错,有兴趣的可以把上面的交易规则颠倒一下,自然可以用。

不过考虑到股市长期是向上的,和商品期货等还是不同,还是建议纯做多。

海龟交易法则的程序化代码及注解

海龟交易法则的程序化代码及注解

海龟交易法则的程序化代码及注解//————————————————————————// 简称: TurtleTrader// 名称: 海龟交易系统// 类别: 公式应用// 类型: 内建应用//————————————————————————ParamsNumeric RiskRatio(1); // % Risk Per N ( 0 – 100)Numeric ATRLength(20); // 平均波动周期 ATR LengthNumeric boLength(20); // 短周期 BreakOut LengthNumeric fsLength(55); // 长周期 FailSafe LengthNumeric teLength(10); // 离市周期 Trailing Exit LengthBool LastProfitableTradeFilter(True); // 使用入市过滤条件VarsNumeric MinPoint; // 最小变动单位NumericSeries AvgTR; // ATRNumeric N; // N 值Numeric TotalEquity; // 按最新收盘价计算出的总资产Numeric TurtleUnits; // 交易单位NumericSeries DonchianHi; // 唐奇安通道上轨,延后1个BarNumericSeries DonchianLo; // 唐奇安通道下轨,延后1个BarNumericSeries fsDonchianHi; // 唐奇安通道上轨,延后1个Bar,长周期 NumericSeries fsDonchianLo; // 唐奇安通道下轨,延后1个Bar,长周期 Numeric ExitHighestPrice; // 离市时判断需要的N周期最高价Numeric ExitLowestPrice; // 离市时判断需要的N周期最低价Numeric myEntryPrice; // 开仓价格Numeric myExitPrice; // 平仓价格Bool SendOrderThisBar(False); // 当前Bar有过交易NumericSeries preEntryPrice(0); // 前一次开仓的价格BoolSeries PreBreakoutFailure(false); // 前一次突破是否失败BeginIf(BarStatus == 0){preEntryPrice = InvalidNumeric;PreBreakoutFailure = false;}MinPoint = MinMove*PriceScale;AvgTR = XAverage(TrueRange,ATRLength);N = AvgTR[1];TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());TurtleUnits = IntPart(TurtleUnits); // 对小数取整DonchianHi = HighestFC(High[1],boLength);DonchianLo = LowestFC(Low[1],boLength);fsDonchianHi = HighestFC(High[1],fsLength);fsDonchianLo = LowestFC(Low[1],fsLength);ExitLowestPrice = LowestFC(Low[1],teLength);ExitHighestPrice = HighestFC(High[1],teLength);Commentary(“N=”+Text(N));Commentary(“preEntryPrice=”+Text(preEntryPrice));Commentary(“PreBreakoutFailure=”+IIFString(PreBreakoutFailure,”True”,”False”));// 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作 If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure))){// 突破开仓If(High > DonchianHi && TurtleUnits >= 1){// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = min(high,DonchianHi + MinPoint);myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}If(Low < DonchianLo && TurtleUnits >= 1){// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = max(low,DonchianLo – MinPoint);myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;SendOrderThisBar = True;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}}// 长周期突破开仓 Failsafe Breakout pointIf(MarketPosition == 0){Commentary(“fsDonchianHi=”+Text(fsDonchianHi));If(High > fsDonchianHi && TurtleUnits >= 1){// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = min(high,fsDonchianHi + MinPoint);myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice);// 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}Commentary(“fsDonchianLo=”+Text(fsDonchianLo));If(Low < fsDonchianLo && TurtleUnits >= 1){// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = max(low,fsDonchianLo – MinPoint);myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice);// 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}}If(MarketPosition == 1) // 有多仓的情况{Commentary(“ExitLowestPrice=”+Text(ExitLowestPrice));If(Low < ExitLowestPrice){myExitPrice = max(Low,ExitLowestPrice – MinPoint);myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替Sell(0,myExitPrice); // 数量用0的情况下将全部平仓}Else{If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1){If(Open >= preEntryPrice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。

c语言海龟交易算法

c语言海龟交易算法

c语言海龟交易算法C语言海龟交易算法引言:海龟交易算法(Turtle Trading)是一种经典的趋势追踪交易策略,广泛应用于金融市场中。

它源于20世纪80年代,由著名的交易员理查德·丹尼斯和威廉·艾克哈特提出。

海龟交易算法通过建立一套严格的交易规则,以捕捉市场的长期趋势,实现较为稳定的收益。

一、海龟交易策略的基本原理海龟交易算法的核心思想是趋势追踪,即在市场上建立和跟踪趋势,并根据趋势的持续性进行交易。

该算法基于以下几个基本原则:1. 价格突破:通过价格突破某一特定时间段内的最高价或最低价来确认市场趋势的变化,从而确定是否进行交易。

2. 多头策略:当价格突破最高价时,采取多头策略,即建立多头头寸,以赚取价格上涨带来的收益。

3. 空头策略:当价格突破最低价时,采取空头策略,即建立空头头寸,以赚取价格下跌带来的收益。

4. 风险控制:在每笔交易中,设定止损点位,以限制亏损的程度。

同时,设定止盈点位,以保护已获利的部分。

二、具体实施步骤海龟交易算法的实施步骤如下:1. 确定市场:选择适合的市场进行交易,如股票、期货、外汇等。

2. 确定时间周期:选择合适的时间周期,如日线、周线、月线等。

3. 确定突破规则:根据市场的特点和交易者的偏好,确定价格突破的规则,如突破20日最高价或最低价。

4. 建立仓位:根据突破规则,当价格突破最高价时,建立多头头寸;当价格突破最低价时,建立空头头寸。

5. 设定止损点位:在每笔交易中,设定止损点位,以限制亏损的程度。

6. 设定止盈点位:在每笔交易中,设定止盈点位,以保护已获利的部分。

7. 交易管理:定期检查交易头寸的盈亏情况,并根据市场的变化及时调整止损和止盈点位。

三、海龟交易策略的优势和不足海龟交易算法具有以下几个优势:1. 明确的交易规则:海龟交易算法通过明确的交易规则,使交易者能够客观、机械地进行交易,避免了主观判断的干扰。

2. 长期趋势捕捉:海龟交易算法专注于捕捉市场的长期趋势,能够获得较为稳定的收益。

海龟交易法则python代码复现

海龟交易法则python代码复现

海龟交易法则python代码复现海龟交易法则是由Richard Dennis和William Eckhardt开发的一种技术交易系统,该系统依靠趋势跟随策略来进行交易。

在海龟交易法则中,交易者主要关注价格的长期趋势,并采用严格的入场和止损规则来管理风险。

以下是用Python代码实现海龟交易法则的示例:首先,我们需要导入所需的库:```pythonimport pandas as pdimport numpy as npimport talib as ta```然后,我们定义一个函数来生成海龟交易法则的交易信号:```pythondef turtle_trading_signals(data):# 计算移动平均线data['SMA20'] = ta.SMA(data['close'], timeperiod=20)data['SMA50'] = ta.SMA(data['close'], timeperiod=50)# 计算ATR指标data['ATR'] = ta.ATR(data['high'], data['low'], data['close'], timeperiod=14)# 生成交易信号data['long_signal'] = np.where(data['close'] >data['SMA50'].shift(1), 1, 0)data['short_signal'] = np.where(data['close'] <data['SMA50'].shift(1), -1, 0)data['stop_loss'] = data['close'] - 2 * data['ATR']data['stop_loss'] = data['stop_loss'].replace(to_replace=np.nan, method='ffill')data['stop_loss'] = data['stop_loss'].replace(to_replace=np.inf, method='ffill')data['stop_loss'] = data['stop_loss'].replace(to_replace=-np.inf, method='ffill')return data```接下来,我们可以加载历史价格数据,并使用上面定义的函数生成交易信号:```python# 加载历史价格数据data = pd.read_csv('price_data.csv')# 生成交易信号data = turtle_trading_signals(data)```现在,我们可以使用这些交易信号进行回测和交易决策。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

海龟交易法则的程序化代码及注解//————————————————————————// 简称: TurtleTrader// 名称: 海龟交易系统// 类别: 公式应用// 类型: 内建应用//————————————————————————ParamsNumeric RiskRatio(1); // % Risk Per N ( 0 – 100)Numeric ATRLength(20); // 平均波动周期 ATR LengthNumeric boLength(20); // 短周期 BreakOut LengthNumeric fsLength(55); // 长周期 FailSafe LengthNumeric teLength(10); // 离市周期 Trailing Exit LengthBool LastProfitableTradeFilter(True); // 使用入市过滤条件VarsNumeric MinPoint; // 最小变动单位NumericSeries AvgTR; // ATRNumeric N; // N 值Numeric TotalEquity; // 按最新收盘价计算出的总资产Numeric TurtleUnits; // 交易单位NumericSeries DonchianHi; // 唐奇安通道上轨,延后1个BarNumericSeries DonchianLo; // 唐奇安通道下轨,延后1个BarNumericSeries fsDonchianHi; // 唐奇安通道上轨,延后1个Bar,长周期 NumericSeries fsDonchianLo; // 唐奇安通道下轨,延后1个Bar,长周期 Numeric ExitHighestPrice; // 离市时判断需要的N周期最高价Numeric ExitLowestPrice; // 离市时判断需要的N周期最低价Numeric myEntryPrice; // 开仓价格Numeric myExitPrice; // 平仓价格Bool SendOrderThisBar(False); // 当前Bar有过交易NumericSeries preEntryPrice(0); // 前一次开仓的价格BoolSeries PreBreakoutFailure(false); // 前一次突破是否失败BeginIf(BarStatus == 0){preEntryPrice = InvalidNumeric;PreBreakoutFailure = false;}MinPoint = MinMove*PriceScale;AvgTR = XAverage(TrueRange,ATRLength);N = AvgTR[1];TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());TurtleUnits = IntPart(TurtleUnits); // 对小数取整DonchianHi = HighestFC(High[1],boLength);DonchianLo = LowestFC(Low[1],boLength);fsDonchianHi = HighestFC(High[1],fsLength);fsDonchianLo = LowestFC(Low[1],fsLength);ExitLowestPrice = LowestFC(Low[1],teLength);ExitHighestPrice = HighestFC(High[1],teLength);Commentary(“N=”+Text(N));Commentary(“preEntryPrice=”+Text(preEntryPrice));Commentary(“PreBreakoutFailure=”+IIFString(PreBreakoutFailure,”True”,”False”));// 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作 If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure))){// 突破开仓If(High > DonchianHi && TurtleUnits >= 1){// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = min(high,DonchianHi + MinPoint);myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}If(Low < DonchianLo && TurtleUnits >= 1){// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = max(low,DonchianLo – MinPoint);myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;SendOrderThisBar = True;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}}// 长周期突破开仓 Failsafe Breakout pointIf(MarketPosition == 0){Commentary(“fsDonchianHi=”+Text(fsDonchianHi));If(High > fsDonchianHi && TurtleUnits >= 1){// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = min(high,fsDonchianHi + MinPoint);myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice);// 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}Commentary(“fsDonchianLo=”+Text(fsDonchianLo));If(Low < fsDonchianLo && TurtleUnits >= 1){// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice = max(low,fsDonchianLo – MinPoint);myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice);// 大跳空的时候用开盘价代替preEntryPrice = myEntryPrice;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar = True;PreBreakoutFailure = False;}}If(MarketPosition == 1) // 有多仓的情况{Commentary(“ExitLowestPrice=”+Text(ExitLowestPrice));If(Low < ExitLowestPrice){myExitPrice = max(Low,ExitLowestPrice – MinPoint);myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替Sell(0,myExitPrice); // 数量用0的情况下将全部平仓}Else{If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1){If(Open >= preEntryPrice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。

{myEntryPrice = Open;preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;}while(High >= preEntryPrice + 0.5*N)// 以最高价为标准,判断能进行几次增仓 {myEntryPrice = preEntryPrice + 0.5 * N;preEntryPrice = myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar = True;}}// 止损指令If(Low <= preEntryPrice – 2 * N && SendOrderThisBar == false) // 加仓Bar不止损{myExitPrice = preEntryPrice – 2 * N;Sell(0,myExitPrice); // 数量用0的情况下将全部平仓PreBreakoutFailure = True;}}}Else If(MarketPosition ==-1) // 有空仓的情况{// 求出持空仓时离市的条件比较值Commentary(“ExitHighestPrice=”+Text(ExitHighestPrice));If(High > ExitHighestPrice){myExitPrice = Min(High,ExitHighestPrice + MinPoint);myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓}Else{If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1){If(Open <= preEntryPrice – 0.5*N)// 如果开盘就超过设定的1/2N,则直接用开盘价增仓。

相关文档
最新文档