可实现自动交易的海归法则公式Word文件下载.docx
《可实现自动交易的海归法则公式Word文件下载.docx》由会员分享,可在线阅读,更多相关《可实现自动交易的海归法则公式Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
//离市周期TrailingExitLength
BoolLastProfitableTradeFilter(True);
//使用入市过滤条件
Vars
NumericN;
//N值
NumericTotalEquity;
//按最新收盘价计算出的总资产
NumericTurtleUnits;
//交易单位
NumericSeriesDonchianHi;
//唐奇安通道上轨,延后1个Bar
NumericSeriesDonchianLo;
//唐奇安通道下轨,延后1个Bar
NumericSeriesfsDonchianHi;
//唐奇安通道上轨,延后1个Bar,长周期
NumericSeriesfsDonchianLo;
//唐奇安通道下轨,延后1个Bar,长周期
NumericExitHighestPrice;
//离市时判断需要的N周期最高价
NumericExitLowestPrice;
//离市时判断需要的N周期最低价
NumericmyEntryPrice;
//开仓价格
NumericmyExitPrice;
//平仓价格
BoolIsEntryThisBar(False);
//当前Bar开过仓
BoolIsAddThisBar(False);
//当前Bar有过增仓
BoolLastBreakoutWin(False);
//最后一次突破是否盈利
NumericpreEntryPrice;
//前一次开仓的价格,存放到全局变量0号位置
NumericpreBreakoutType(0);
//前一次突破的方向,1-LONG,-1-SHORT初始值为0,存放到全局变量1号位置
NumericpreBreakOutPrice;
//前一次突破的价格,存放到全局变量2号位置
Begin
If(BarStatus==0)
{
SetGlobalVar(0,InvalidNumeric);
SetGlobalVar(1,0);
SetGlobalVar(2,InvalidNumeric);
}Else
preBreakoutType=GetGlobalVar
(1);
preBreakOutPrice=GetGlobalVar
(2);
}
N=AverageFC(TrueRange,ATRLength);
TotalEquity=CurrentCapital()+Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio());
TurtleUnits=(TotalEquity*RiskRatio/100)/(N*ContractUnit()*BigPointValue());
TurtleUnits=IntPart(TurtleUnits);
//对小数取整
DonchianHi=HighestFC(Close[1],boLength);
DonchianLo=LowestFC(Close[1],boLength);
//判断最后一次突破是否盈利
If(preBreakoutType==1)
If(Close>
PreBreakOutPrice)
LastBreakoutWin=True;
}ElseIf(preBreakoutType==-1)
If(Close<
//当不使用过滤条件,或者使用过滤条件并且条件为False进行后续操作
If((NotLastProfitableTradeFilter)Or(NOTLastBreakoutWin))
//突破开仓
If(CrossOver(High,DonchianHi)&
&
TurtleUnits>
=1)
//开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
preBreakoutType=1;
preBreakOutPrice=Donchianhi;
SetGlobalVar(1,preBreakoutType);
SetGlobalVar(2,preBreakOutPrice);
myEntryPrice=min(high,DonchianHi+PriceScale*MinMove);
myEntryPrice=IIF(myEntryPrice<
Open,Open,myEntryPrice);
//大跳空的时候用开盘价代替
If(Buy(TurtleUnits,myEntryPrice))
IsEntryThisBar=True;
SetGlobalVar(0,myEntryPrice);
//保存第一次开仓的价格
If(CrossUnder(Low,DonchianLo)&
//开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
preBreakoutType=-1;
preBreakOutPrice=DonchianLo;
myEntryPrice=max(low,DonchianLo-PriceScale*MinMove);
myEntryPrice=IIF(myEntryPrice>
If(SellShort(TurtleUnits,myEntryPrice))
//长周期突破开仓FailsafeBreakoutpoint
If(MarketPosition==0)
fsDonchianHi=HighestFC(Close[1],fsLength);
fsDonchianLo=LowestFC(Close[1],fsLength);
If(CrossOver(High,fsDonchianHi)&
myEntryPrice=min(high,fsDonchianHi+PriceScale*MinMove);
If(CrossUnder(Low,fsDonchianLo)&
myEntryPrice=max(low,fsDonchianLo-PriceScale*MinMove);
If(MarketPosition==1)//有多仓的情况
//求出持多仓时离市的条件比较值
ExitLowestPrice=LowestFC(Low[1],teLength);
If(Low<
ExitLowestPrice)
myExitPrice=max(Low,ExitLowestPrice-PriceScale()*MinMove());
Sell(0,myExitPrice);
//数量用0的情况下将全部平仓
}ElseIf(IsEntryThisBar)
//当前Bar开过仓的情况,如果Close比myEntryPrice大于1/2N.用收盘价加仓。
=myEntryPrice+0.5*N&
myEntryPrice=myEntryPrice+0.5*N;
//保存最后一次开仓的价格
//加上止损指令
=MyEntryPrice-2*N)
myExitPrice=MyEntryPrice-2*N;
preEntryPrice=GetGlobalVar(0);
//取出上一次开仓的价格
If(preEntryPrice!
=InvalidNumeric&
If(Open>
=preEntryPrice+0.5*N)//如果开盘就超过设定的1/2N,则直接用开盘价增仓。
myEntryPrice=Open;
preEntryPrice=myEntryPrice;
IsAddThisBar=True;
SetGlobalVar(0,preEntryPrice);
while(High>
=preEntryPrice+0.5*N)//以最高价为标准,判断能进行几次增仓
myEntryPrice=preEntryPrice+0.5*N;
//止损指令
If(IsAddThisBar)
//当前Bar有过增仓,此时不能直接按Low来判断是否止损,因为不能确定Bar的价格的走势,只按收盘价进行止损判断。
=preEntryPrice-2*N)
myExitPrice=preEntryPrice-2*N;
}ElseIf(MarketPosition==-1)//有空仓的情况
//求出持空仓时离市的条件比较值
ExitHighestPrice=HighestFC(High[1],teLength);
If(High>
ExitHighestPrice)
myExitPrice=Min(High,ExitHighestPrice+PriceScale()*MinMove());
BuyToCover(0,ExitHighestPrice);
//当前Bar开过仓的情况,如果Close比myEntryPrice小于1/2N.用收盘价加仓。
=myEntryPrice-0.5*N&
myEntryPrice=myEntryPrice-0.5*N;
=MyEntryPrice+2*N)
myExitPrice=MyEntryPrice+2*N;
BuyToCover(0,myExitPrice);
If(Open<
=preEntryPrice-0.5*N)//如果开盘就超过设定的1/2N,则直接用开盘价增仓。
while(Low<
=preEntryPrice-0.5*N)//以最低价为标准,判断能进行几次增仓
myEntryPrice=preEntryPrice-0.5*N;
//当前Bar有过增仓,此时不能直接按High来判断是否止损,因为不能确定Bar的价格的走势,只按收盘价进行止损判断。
=preEntryPrice+2*N)
myExitPrice=preEntryPrice+2*N;
End
分析家:
VARIABLE:
dayCount=1,PositionCount=1,SellSign=0;
EntAndExitSign=1,EntPoint=0,ExitPoint=0;
True=1,False=0,N=0;
TR:
=MAX(HIGH,CLOSE[1])-MIN(LOW,CLOSE[1]);
IFBARPOS>
=20THENBEGIN
IFBARPOS=20THEN
N:
=MA(TR,20);
IFDayCount=5ORBARPOS=20THENBEGIN{5天调整N值}
=(19*N+TR)/20;
{计算N值}
DayCount:
=1;
END
=DayCount+1;
EntPoint:
=ENTERBARS+1;
IFEntPoint=EntAndExitSignTHENBEGIN{说明STOP指令买进头寸成功}
PositionCount:
=PositionCount+1;
{头寸计数}
SellSign:
=True;
{开始以STOP卖出,如果达到指定的价格}
IFPositionCount=1THENBEGIN{第一头寸}
HOW:
=CASH*0.01/N;
{波动性百分比决定头寸规模}
BUY(HOW,STOP,HHV(H,20));
{在20日新高STOP指令买进}
IFPositionCount=2THENBEGIN{如到第二头寸}
BUY(HOW,STOP,ENTERPRICE+0.5*N);
{在上头寸(即第一头寸)+0.5个N以STOP指令买进}
IFPositionCount=3THENBEGIN{如到第三头寸}
{在上头寸(即第二头寸)+0.5个N以STOP指令买进}
IFPositionCount=4THENBEGIN
IFSellSign=TrueTHENBEGIN
ExitPoint:
=EXITBARS+1;
IFExitPoint=EntAndExitSignTHENBEGIN{说明卖出成功}
{头寸计算复原}
=False;
IFENTERPRICE-2*N<
LLV(L,10)THEN
SELL(100%,STOP,LLV(L,10));
{退出离盈利头寸}
ELSE
SELL(100%,STOP,ENTERPRICE-2*N);
{退出亏损头寸}
END;