可实现自动交易的海归法则公式Word文件下载.docx

上传人:b****5 文档编号:19677424 上传时间:2023-01-08 格式:DOCX 页数:8 大小:17.58KB
下载 相关 举报
可实现自动交易的海归法则公式Word文件下载.docx_第1页
第1页 / 共8页
可实现自动交易的海归法则公式Word文件下载.docx_第2页
第2页 / 共8页
可实现自动交易的海归法则公式Word文件下载.docx_第3页
第3页 / 共8页
可实现自动交易的海归法则公式Word文件下载.docx_第4页
第4页 / 共8页
可实现自动交易的海归法则公式Word文件下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

可实现自动交易的海归法则公式Word文件下载.docx

《可实现自动交易的海归法则公式Word文件下载.docx》由会员分享,可在线阅读,更多相关《可实现自动交易的海归法则公式Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。

可实现自动交易的海归法则公式Word文件下载.docx

//离市周期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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1