//------------------------------------------------------------------------
// 简称: MRJS_TurtleTrader
// 名称: 海龟交易策略--完整版
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------
Params
Numeric RiskRatio(1); // % Risk Per N ( 0 - 100)
Numeric boLength(20); // 短周期 BreakOut Length,系统1进入条件参数
Numeric teLength(10);
Numeric ATRLength(20); // ATr
Numeric ChuSHiZiJin(1000000);//初始资金
Numeric ChangZhouQiLen(55);//长周期长度
Numeric ChangZhouQiTuiChu(20);//长周期退出
Vars
Numeric MinPoint; // 最小变动单位
NumericSeries AvgTR; // ATR
Numeric N; // N 值
Numeric TotalEquity; // 按最新收盘价计算出的总资产
Numeric TurtleUnits; // 交易单位
NumericSeries DonchianHi; // 唐奇安通道上轨,延后1个Bar,系统1
NumericSeries DonchianLo; // 唐奇安通道下轨,延后1个Bar,系统1
Numeric ExitHighestPrice; // 离市时判断需要的N周期最高价
Numeric ExitLowestPrice; // 离市时判断需要的N周期最低价
NumericSeries StopHPrice; // 20日新高止损价 2*N
NumericSeries StopLPrice; // 20日新低止损价 2*N
NumericSeries DonchianHi2; // 唐奇安通道上轨,延后1个Bar,系统1
NumericSeries DonchianLo2; // 唐奇安通道下轨,延后1个Bar,系统1
Numeric ExitHighestPrice2; // 离市时判断需要的55周期最高价
Numeric ExitLowestPrice2; // 离市时判断需要的55周期最低价
Numeric JiaCangCiShu(4); //加仓次数
NumericSeries DangQianJiaCangCiShu(1);//当前加仓次数
NumericSeries MoNiJiaCangCiShu(1);//模拟加仓次数 是否有效突破时用
Numeric myEntryPrice; // 开仓价格
Numeric myExitPrice; // 平仓价格
NumericSeries preEntryPrice(0); // 前一次开仓的价格
NumericSeries KeYongZiJin(0); // 可用资金
NumericSeries KaiCangShiYingKui(0);//开仓时盈亏
NumericSeries preTPEntryPrice(0); // 前一次突破的价格
Bool SendOrderThisBar(False); // 当前Bar有过交易
BoolSeries PreBreakoutFailure(false); // 前一次突破是否失败
BoolSeries ChangZhouQiZhiSun(false); //长周期止损 true ,短周期止损false
//NumericSeries preEntryPriceH(0); // 前一次20日新高价格
//NumericSeries preEntryPriceL(9999999); // 前一次20日新低价格
Begin
If(BarStatus == 0)
{
preEntryPrice = InvalidNumeric;
PreBreakoutFailure = false;//前一次是否有效突破
KeYongZiJin=ChuSHiZiJin;
StopHPrice=0;
StopLPrice=99999;
SetGlobalVar(60,0);//创20日新高新低标记 1 高 -1 为低
}
SendOrderThisBar =false;
MinPoint = MinMove*PriceScale;
AvgTR = XAverage(TrueRange,ATRLength);
N =AvgTR[1];
TotalEquity =KeYongZiJin; //Portfolio_CurrentCapital() + Portfolio_UsedMargin();//
TurtleUnits = (TotalEquityRiskRatio/100) /(AvgTR[1] ContractUnit()*BigPointValue());
TurtleUnits = IntPart(TurtleUnits); // 对小数取整
If(TurtleUnitsboLength) //PreBreakoutFailure==false &&
{
If(High>DonchianHi) //创20日新高
{
StopLPrice=999999;
/*
if(StopHPrice1) //首次突破
{
preTPEntryPrice=DonchianHi;
StopHPrice=preTPEntryPrice-2*N;
MoNiJiaCangCiShu=1;
}
SetGlobalVar(60,1);
}
If(GetGlobalVar(60) == 1) // 有多仓的情况
{
If(Open >= preTPEntryPrice + 0.5N && MoNiJiaCangCiShu= preTPEntryPrice + 0.5N && MoNiJiaCangCiShuLow+2*N)
{
StopLPrice =Low+2N; // SetGlobalVar(21,Low+2N);
}
*/
If(getglobalvar(60)-1) //首次突破
{
preTPEntryPrice=Low;
StopLPrice =Low+2*N;
MoNiJiaCangCiShu=1;
}
SetGlobalVar(60,-1);
}
If(GetGlobalVar(60) ==-1) // 有模拟空仓的情况
{
If(Open StopLPrice) //有效突破 回撤到2*atr
{
If(preTPEntryPrice-StopLPrice ExitHighestPrice )
{
If(preTPEntryPrice-ExitHighestPrice DonchianHi && PreBreakoutFailure)
{
// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
myEntryPrice = min(high,DonchianHi + MinPoint);
myEntryPrice = IIF(myEntryPrice Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
preEntryPrice = myEntryPrice;
SendOrderThisBar = True;
SellShort(TurtleUnits,myEntryPrice);
SendOrderThisBar = True;
KaiCangShiYingKui=Portfolio_TotalProfit;
DangQianJiaCangCiShu=1;
//PlotString("top","jkc20",Portfolio_TotalProfit);
ChangZhouQiZhiSun=false;
}
}
// 触发长周期突破
If(MarketPosition == 0 )
{
// 突破开仓
If(High > DonchianHi2 )
{
// 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
myEntryPrice = min(high,DonchianHi2 + MinPoint);
myEntryPrice = IIF(myEntryPrice Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
preEntryPrice = myEntryPrice;
SendOrderThisBar = True;
SellShort(TurtleUnits,myEntryPrice);
SendOrderThisBar = True;
KaiCangShiYingKui=Portfolio_TotalProfit;
DangQianJiaCangCiShu=1;
//PlotString("top","jkc20",Portfolio_TotalProfit);
}
}
//是否创长周期新高
If(MarketPosition==1)
{
If(High>DonchianHi2)
{
ChangZhouQiZhiSun=True;
}
}
If(MarketPosition==-1)
{
If(Low Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
Sell(0,myExitPrice); // 将系统1持有多仓平仓
KeYongZiJin=KeYongZiJin[1]+2*(Portfolio_TotalProfit-KaiCangShiYingKui);
If(KeYongZiJin>ChuSHiZiJin+Portfolio_TotalProfit)
{
KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;
}
}
//长周期止损
If(Low Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
Sell(0,myExitPrice); // 将系统1持有多仓平仓
KeYongZiJin=KeYongZiJin[1]+2*(Portfolio_TotalProfit-KaiCangShiYingKui);
If(KeYongZiJin>ChuSHiZiJin+Portfolio_TotalProfit)
{
KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;
}
}
If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1 )
{
If(Open >= preEntryPrice + 0.5N && DangQianJiaCangCiShu= preEntryPrice + 0.5N && DangQianJiaCangCiShuChuSHiZiJin+Portfolio_TotalProfit)
{
KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;
}
}
}Else If(MarketPosition ==-1) // 有空仓的情况
{
// 求出持空仓时离市的条件比较值
//Commentary("ExitHighestPrice="+Text(ExitHighestPrice));
If(High > ExitHighestPrice && ChangZhouQiZhiSun==false)//
{
myExitPrice = Min(High,ExitHighestPrice + MinPoint);
myExitPrice = IIF(myExitPrice ChuSHiZiJin+Portfolio_TotalProfit)
{
KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;
}
}
//长周期止损
If(High > ExitHighestPrice2 && ChangZhouQiZhiSun)
{
myExitPrice = Min(High,ExitHighestPrice2 + MinPoint);
myExitPrice = IIF(myExitPrice ChuSHiZiJin+Portfolio_TotalProfit)
{
KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;
}
}
If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
{
If(Open = preEntryPrice + 2 * N && SendOrderThisBar == false) // 加仓Bar不止损 && SendOrderThisBar == false
{
myExitPrice = preEntryPrice + 2 * N;
BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓
KeYongZiJin=KeYongZiJin[1]+2*(Portfolio_TotalProfit-KaiCangShiYingKui);
If(KeYongZiJin>ChuSHiZiJin+Portfolio_TotalProfit)
{
KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;
}
}
}
PlotNumeric("PL",Portfolio_TotalProfit);
//PlotNumeric("PL2",KeYongZiJin);
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2013/03/14 14:05
// 版权所有 ljh7607
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
交易技术, 交易策略, 源码