阶梯式移动停损停利线程序写法

Discussion in 'Wealth-Lab Developer' started by dregory, Sep 19, 2012.

  1. 买进的起始点位置是当收盘价大于前两日的高点时,以当根的收盘价为初始作多买进点(图中1号球的收盘价),并且以当根K线及其前一天K线两者之最低价中取其低点,做为初始停损点(图中1号球的最低价及其前一天的K线最低价比较),当价格出现创新高之收盘价时,再以创新高之K线最低点及其前一天K线最低点做比较,取其低者,将初始停损位置移动至此(即图中的2~9号球),其中的号码球为创新高之K线,除了要具有收盘价创新高的条件外,重点是还需要具有无遮蔽的特征,随着行情创新高的情形,移动停利点位置,直到有K线收盘价跌破阶梯出场线就执行出场。
      无遮蔽原则说明:如编号3及编号4区间的K线虽有收盘价超过上一次创新高编号3之最高点,但一直被区间内比编号3最高点还高的上影线给遮住,直到编号4的收盘价才一举突破编号3及编号4区间的所有高点,因此阶梯出场线才从编号3的位置移动到编号4。
      (同理可推)做空反向操作亦同,以上所述,可是我始终无法在wealthlab如愿写出阶梯出场线,可否请版主大大帮帮忙,也请各位网友协助。谢 谢!

    [​IMG]
     
  2. 这个我用TradeBlazer写出来了,要吗?
     
  3. //------------------------------------------------------------------------
    // 简称: JTXV1
    // 名称: 阶梯线V1
    // 类别: 公式应用
    // 类型: 用户应用
    // 说明: 用于日线周期
    //------------------------------------------------------------------------

    /*买进的起始点位置是当收盘价大于前两日的高点时,以当根的收盘价为初始作多买进点
    (图中1号球的收盘价),并且以当根K线及其前一天K线两者之最低价中取其低点,做为
    初始停损点(图中1号球的最低价及其前一天的K线最低价比较),当价格出现创新高之
    收盘价时,再以创新高之K线最低点及其前一天K线最低点做比较,取其低者,将初始停损
    位置移动至此(即图中的2~9号球),其中的号码球为创新高之K线,除了要具有收盘价
    创新高的条件外,重点是还需要具有无遮蔽的特征,随着行情创新高的情形,移动停利点
    位置,直到有K线收盘价跌破阶梯出场线就执行出场。
      无遮蔽原则说明:如编号3及编号4区间的K线虽有收盘价超过上一次创新高编号3之
    最高点,但一直被区间内比编号3最高点还高的上影线给遮住,直到编号4的收盘价才一举
    突破编号3及编号4区间的所有高点,因此阶梯出场线才从编号3的位置移动到编号4。
      (同理可推)做空反向操作亦同*/

    Params
    Numeric OpenK(2); //突破开仓的K线个数,2即为收盘价大于前2日的最高价时开多
    Numeric ExitK(2); //突破止损的K线个数,2即为以收盘价跌破开仓K线和之前一根K线的最低价为止损
    Vars
    Numeric BuyLine;
    Numeric ExitBuyLine; //存于GlobalVar(0)
    Numeric SellLine;
    Numeric ExitSellLine; //存于GlobalVar(1)
    Numeric OpenBarIndex;
    Numeric HighestAfterEntry;
    Numeric LowestAfterEntry;
    Begin
    BuyLine = Highest(High[1], OpenK);
    SellLine = Lowest(Low[1], OpenK);
    If(MarketPosition == 0) //空仓状态
    {
    If(Close > BuyLine) //开多
    {
    Buy(0, Close);
    ExitBuyLine = Lowest(Low, ExitK);
    SetGlobalVar(0, ExitBuyLine);
    PlotNumeric("多单退出线", ExitBuyLine, 0, Green);
    OpenBarIndex = CurrentBar;
    SetGlobalVar(2, OpenBarIndex);
    Return;
    }
    Else If(Close < SellLine) //开空
    {
    SellShort(0, Close);
    ExitSellLine = Highest(High, ExitK);
    SetGlobalVar(1, ExitSellLine);
    PlotNumeric("空单退出线", ExitSellLine, 0, Red);
    OpenBarIndex = CurrentBar;
    SetGlobalVar(2, OpenBarIndex);
    Return;
    }
    Else Return; //不满足开仓条件时什么也不做
    }
    If(MarketPosition > 0) //持多
    {
    HighestAfterEntry = Highest(High[1], CurrentBar-GetGlobalVar(2));
    If(Close > HighestAfterEntry) //止损阶梯线上移
    {
    ExitBuyLine = Lowest(Low, ExitK);
    SetGlobalVar(0, ExitBuyLine);
    PlotNumeric("多单退出线", ExitBuyLine, 0, Green);
    Return;
    }
    Else //阶梯线不变
    {
    ExitBuyLine = GetGlobalVar(0);
    PlotNumeric("多单退出线", ExitBuyLine, 0, Green);
    If(Close < ExitBuyLine) //反手开空
    {
    SellShort(0, Close);
    ExitSellLine = Highest(High, ExitK);
    SetGlobalVar(1, ExitSellLine);
    PlotNumeric("空单退出线", ExitSellLine, 0, Red);
    OpenBarIndex = CurrentBar;
    SetGlobalVar(2, OpenBarIndex);
    }
    Return;
    }
    }
    If(MarketPosition < 0) //持空
    {
    LowestAfterEntry = Lowest(Low[1], CurrentBar-GetGlobalVar(2));
    If(Close < LowestAfterEntry) //止损阶梯线下移
    {
    ExitSellLine = Highest(High, ExitK);
    SetGlobalVar(1, ExitSellLine);
    PlotNumeric("空单退出线", ExitSellLine, 0, Red);
    Return;
    }
    Else //阶梯线不变
    {
    ExitSellLine = GetGlobalVar(1);
    PlotNumeric("空单退出线", ExitSellLine, 0, Red);
    If(Close > ExitSellLine) //反手开多
    {
    Buy(0, Close);
    ExitBuyLine = Lowest(Low, ExitK);
    SetGlobalVar(0, ExitBuyLine);
    PlotNumeric("多单退出线", ExitBuyLine, 0, Green);
    OpenBarIndex = CurrentBar;
    SetGlobalVar(2, OpenBarIndex);
    }
    Return;
    }
    }
    End
     
  4. 抱歉昨天中午就出门了,写好的系统不在家里的电脑上,所以今天才能发出来。
     
  5. 发现了一点问题:我的写法是认为停损时必定会满足反手条件,所以直接写的反手。但经观察,停损后不一定会马上反手的。看来开仓平仓要分开写。
     
  6. 感谢您的分享,现在终于有个方向,可以将上述的程式码转成c#再弄到wealth-lab中执行看看