以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  策略编写求助区  (http://weistock.com/bbs/list.asp?boardid=11)
----  这是一个基于交易开拓者的交易系统,请问哪位大神能帮忙改写成金字塔的??  (http://weistock.com/bbs/dispbbs.asp?boardid=11&id=154093)

--  作者:太极熊猫
--  发布时间:2017/5/25 6:49:27
--  这是一个基于交易开拓者的交易系统,请问哪位大神能帮忙改写成金字塔的??
//----------------------------------------------------------------------//
// 策略说明:
// 本策略基于价格与均线建立了一套可变的支撑线阻力线系统, 通过价格与支撑线阻力线的关系进行交易
//  
// 系统要素:
// 均线与价格组成的支撑线阻力线系统
// 1. 当价格死叉均线时, 上根k线的低点为支撑线初始化, 当价格金叉均线时, 上根k线的高点为阻力线初始化
// 2. 当价格低于均线时不断更新支撑线, 当价格高于均线时不断更新阻力线
// 3. 当价格金叉均线又死叉均线时记录上根阻力线作为做多的价格线, 当价格死叉均线又金叉均线时记录上根支撑线作为做空的价格线
// 入场条件:
// 1. 当价格高于做多的价格线时做多
// 2. 当价格低于做空的价格线时做空
// 出场条件: 
// 1. 基于ATR的保护性止损
// 2. 基于ATR的跟踪止损
//
// 注: 当前策略仅为做多系统, 如需做空, 请参见CL_Moving_Average_Sup_and_Res_S
//----------------------------------------------------------------------//

Params
    Numeric MALength(10); //均线值
    Numeric ATRLength(10); //ATR的值
Numeric ProtectStopATRMulti(0.5); //保护性止损的ATR乘数
Numeric TrailStopATRMulti(2.5); //跟踪止损的ATR乘数
Vars
NumericSeries MA(0); //均线
NumericSeries ATR(0); //ATR
NumericSeries SupportLine(-9999999); //支撑线
NumericSeries ResistanceLine(9999999); //阻力线
BoolSeries CrossFlagForL(False); //收盘价与均线交叉的状态记录L
BoolSeries CrossFlagForS(False); //收盘价与均线交叉的状态记录S

BoolSeries SupportFlag(False); //支撑线为真的标志
BoolSeries ResistanceFlag(False); //阻力线为真的标志
NumericSeries EntryPriceL(0); //开仓入场价
NumericSeries HighAfterEntry; //持仓期间最高点的记录

NumericSeries ProtectStopL; //基于ATR的保护性止损
Numeric TrailStopL; //基于ATR的跟踪止损

NumericSeries MP; //MarketPosition状态记录
Begin

// 集合竞价和小节休息过滤
If(!CallAuctionFilter()) Return;

//系统设置
//均线与ATR计算
MA = AverageFC(C,MALength);
ATR = AvgTrueRange(ATRLength);
//计算入场线
// 1. 当价格死叉均线时, 上根k线的低点为支撑线初始化, 当价格金叉均线时, 上根k线的高点为阻力线初始化
// 2. 当价格低于均线时不断更新支撑线, 当价格高于均线时不断更新阻力线
// 3. 当价格金叉均线又死叉均线时记录上根阻力线作为做多的价格线
CrossFlagForL = CrossUnder(C,MA);
CrossFlagForS = CrossOver(C,MA);
If(CrossFlagForL == True)
{
If(ResistanceFlag[1] == True)
{
EntryPriceL = ResistanceLine[1];
ResistanceFlag = False;
}
SupportFlag = True;
SupportLine = Low;
}

If(CrossFlagForS == True)
{
If(SupportFlag[1] == True)
{
SupportFlag = False;
}
ResistanceFlag = True;
ResistanceLine = High;
}
//PlotNumeric("MA",MA);
//PlotNumeric("EntryPriceL",EntryPriceL);

//更新支撑与阻力线
If( C > MA )
{
If(High > ResistanceLine[1]) ResistanceLine = High;
}
Else If(C < MA)
{
If(Low < SupportLine[1]) SupportLine = Low;
}
//PlotNumeric("ResistanceLine",ResistanceLine);
//PlotNumeric("SupportLine",SupportLine);
//系统入场
//当上根K线的收盘价格金叉多头入场价格线后, 在本根K线开盘价做多
If(MarketPosition <> 1 and EntryPriceL[1] <> 0 and EntryPriceL[2] <> 0)
{
If(Close[2] < EntryPriceL[2] and Close[1] >= EntryPriceL[1] And Vol > 0)
{
Buy(0,Open);
//基于ATR的保护性止损
ProtectStopL = Low[1] - ProtectStopATRMulti * ATR[1];
}
}
//系统出场

If(BarsSinceEntry == 0)
HighAfterEntry = High;
Else
HighAfterEntry = Max(HighAfterEntry[1],High);

//基于ATR的跟踪止损
TrailStopL = HighAfterEntry[1] - TrailStopATRMulti * ATR[1];
If(MarketPosition == 1 and mp[1] == 1 And Vol > 0)
{
//基于ATR的保护性止损
if(L <= ProtectStopL[1] and ProtectStopL[1] >= TrailStopL)
{
Sell(0,Min(Open, ProtectStopL[1]));
}
//基于ATR的跟踪止损
Else if(L<=TrailStopL)
{
Sell(0,Min(Open, TrailStopL));
}
}
//PlotNumeric("ProtectStopL",ProtectStopL);
//PlotNumeric("TrailStopL",TrailStopL);
MP = MarketPosition;
End


--  作者:小不点
--  发布时间:2017/6/9 22:06:36
--  
这代码是开拓者TB上写的