欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 求助跟踪止盈止损问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4608人关注过本帖树形打印复制链接

主题:求助跟踪止盈止损问题

帅哥哟,离线,有人找我吗?
jinniu1058
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
求助跟踪止盈止损问题  发帖心情 Post By:2018/5/7 11:22:22    Post IP:59.63.206.208[显示全部帖子]

跟踪止盈止损策略设计要求:

1、跟踪止盈止损有很多种方式,本次程序的规则是:当盈利达到30跳后启动第一级跟踪止损,止损回撤值为20跳;

2、当盈利达到60跳后启动第二级跟踪止损,止损回撤值为10跳。

3、原始止损条件为回撤50跳。

INPUT : TrailingStart1 (30,1,500,1);       //跟踪止损启动设置1,设置第一级跟踪止损启动值,盈利30跳后开始;

INPUT : TrailingStart2 (60,1,500,1);      //跟踪止损启动设置2,设置第二级跟踪止损启动值,盈利60跳后开始;

INPUT : TrailingStop1 (20,1,500,1);       //跟踪止损设置1,设置第一级跟踪止损目标值,回撤20跳后止损;

INPUT : TrailingStop2 (10,1,500,1);       //跟踪止损设置2,设置第二级跟踪止损目标值,回撤10跳后止损;

INPUT : StopLossSet(50,1,500,1);           //止损设置,没有盈利情况下设置开仓原始跟踪止损值50跳;

 

//声明变量

VARIABLE : BarsSinceEntry =0 ;             //从第一根条件满足为零开始

 

VARIABLE : HighestAfterEntry =CLOSE ;      //开仓后出现的最高价;

VARIABLE : LowestAfterEntry  =CLOSE ;     //开仓后出现的最低价;

 

MinPoint = MinMove * PriceScale;              //最小变动单位赋值=最小移动乘上价格;

MYENTRYPRICE = AVGENTERPRICE;

 

//以多仓为例:

 

IF BARPOS=1 THEN BEGIN

       POSITION := 0 ;

END; //IF

 

BarsSinceEntry(Position ! = 0 );

 

//2 记录开仓以来最高最低价格

If BarsSinceEntry = =0 THEN BEGIN 

       HighestAfterEntry = close;//赋初始值

       LowestAfterEntry = close;//赋初始值

       If Position < > 0 THEN BEGIN//

              HighestAfterEntry = MAX(HighestAfterEntry,MYENTRYPRICE); //开仓Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry;

              LowestAfterEntry = MIN(LowestAfterEntry,MYENTRYPRICE);  //开仓Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry;

       END

END      

ELSE //非开仓Bar时进行以下运算

              LowestAfterEntry = MIN(LowestAfterEntry,LOW);            //记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断;

              HighestAfterEntry = MAX(HighestAfterEntry,HIGH);       //记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断;

 

 

Commentary ("HighestAfterEntry =" +Text (HighestAfterEntry));

Commentary ("LowestAfterEntry =" +Text (LowestAfterEntry));

 

MinPoint = MinMove * PriceScale;//最小变动单位赋值=最小移动乘上价格;

MYENTRYPRICE = AVGENTERPRICE;

 

//多单跟踪止盈止损

       IF ( Position = 1 and BarsSinceEntry >=1 AND H>L ) THEN BEGIN  //有多仓的情况;

       //第二级跟踪止损的条件表达式;

              IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart2 * MINDIFF THEN BEGIN  //开仓后开始监控止损条件;

                     IF LOW <= HighestAfterEntry [1] - TrailingStop2 * MINDIFF THEN BEGIN

                            MyExitPrice = HighestAfterEntry [1] - TrailingStop2 * MINDIFF;                  //如果该Bar开盘价跳空,则用开盘价代替;

                            MyExitPrice = IF(OPEN < MyExitPrice,OPEN,MyExitPrice);

                            SELL( _DEBUG ,0,LIMITR,MyExitPrice);

                            POSITION := 0 ;

                            TURTLEUNITS := 0 ;

                     END

              END

              ELSE IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart1 * MINDIFF THEN BEGIN //第一级跟踪止损的条件表达式;

                     IF LOW <= HighestAfterEntry [1] - TrailingStop1 * MINDIFF THEN BEGIN

                            MyExitPrice = HighestAfterEntry [1] - TrailingStop1 * MINDIFF;

                            MyExitPrice = IF(OPEN<MyExitPrice,OPEN,MyExitPrice );

                            SELL( _DEBUG ,0,LIMITR,MyExitPrice);

                            POSITION := 0 ;

                            TURTLEUNITS := 0 ;

                     End

              End

       END

 

以上代码输入后编译不通过,请问如何改写正确?


 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 11:29:30    Post IP:59.63.206.208[显示全部帖子]

MYENTRYPRICE = ***GENTERPRICE;

系统显示问题,源码是开仓均价: 

MYENTRYPRICE =  AVGENTERPRICE;

[此贴子已经被作者于2018/5/7 11:30:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 11:30:55    Post IP:59.63.206.208[显示全部帖子]

当前持有品种的平均持仓成本——最近空仓以来计

用法:AVGENTERPRICE

[此贴子已经被作者于2018/5/7 11:32:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 11:36:20    Post IP:59.63.206.208[显示全部帖子]

程序中MinPoint因为编译不通过,已经用MINDIFF替换,


 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 14:44:40    Post IP:59.63.206.208[显示全部帖子]

加了”:“后已经编译通过,但是为什么没有止盈信号


 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 18:14:47    Post IP:59.63.206.208[显示全部帖子]

HighestAfterEntry [1]
表示第二个最高值,即前一个最高值

当前最高值为HighestAfterEntry [0]


 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 18:20:39    Post IP:59.63.206.208[显示全部帖子]

公式设计的初衷是:

记录建仓以来最高最低价格。跟踪止损条件采用这个最高最低价格和止损点之间进行比较判断。
以多仓为例,需要记录开仓以来最高价格,适用序列变量 HighestAfterEntry 保存此值,在开仓Bar上,比较开仓价和最新价格,记录较大的值;其他 Bar上,比较该Bar的HIGN和HighestAfterEntry的值,记录较大值。空仓反之,记录开仓以来的最低价格。


 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 18:21:09    Post IP:59.63.206.208[显示全部帖子]

公式设计的初衷是:

记录建仓以来最高最低价格。跟踪止损条件采用这个最高最低价格和止损点之间进行比较判断。
以多仓为例,需要记录开仓以来最高价格,使用序列变量 HighestAfterEntry 保存此值,在开仓Bar上,比较开仓价和最新价格,记录较大的值;其他 Bar上,比较该Bar的HIGN和HighestAfterEntry的值,记录较大值。空仓反之,记录开仓以来的最低价格。

[此贴子已经被作者于2018/5/7 18:21:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 19:59:46    Post IP:59.63.206.208[显示全部帖子]

 

源代码

公式设计的源码来源于《程序化交易策略开发与应用》中国经济出版社,2015.3 P121 

ISBN 978—7—5136—3525—7




 

源代码如下:


 

vars


 

Numeric MinPoint ;

Numeric MyEntryPrice ;


 

Numeric  TrailingStart1 (50) ;      

Numeric  TrailingStart2 (80) ;     

Numeric  TrailingStop1 (30) ;      

Numeric  TrailingStop2 (20) ;      

Numeric  StopLossSet(50) ;          

Numeric  MyExitPrice ;


 

NumericSeries  HighestAfterEntry ;

NumericSeries  LowestAfterEntry ;


 

If  BarsSinceEntry = = 0 

       HighestAfterEntry = Close ;

       LowestAfterEntry = Close;


 

       If MarketPosition < > 0 THEN BEGIN//仓位不等于0;//有持仓时执行以下代码,源程序;

              HighestAfterEntry = MAX(HighestAfterEntry,MYENTRYPRICE);

//开仓Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry;

              LowestAfterEntry = MIN(LowestAfterEntry,MYENTRYPRICE); 

//开仓Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry;

ELSE             //非开仓Bar时进行以下运算(注意语句上下顺序颠倒过来写);

              LowestAfterEntry = MIN(LowestAfterEntry,LOW);           

//记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断;(源程序是先写最低价)

              HighestAfterEntry = MAX(HighestAfterEntry,HIGH);      

//记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断;(源程序是再写最高价)



 

Commentary ("HighestAfterEntry =" +Text (HighestAfterEntry));

Commentary ("LowestAfterEntry =" +Text (LowestAfterEntry));


 

MinPoint = MinMove * PriceScale ;

MYENTRYPRICE = AVGENTERPRICE;


 

IF (MarketPosition = = 1 and BarsSinceEntry >=1      //有多仓的情况;

       //第二级跟踪止损的条件表达式;

              IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart2 * MinPoint    //开仓后开始监控止损条件;

                     IF LOW <= HighestAfterEntry [1] - TrailingStop2 * MinPoint  

                            MyExitPrice = HighestAfterEntry [1] - TrailingStop2 * MinPoint;                 //如果该Bar开盘价跳空,则用开盘价代替;

                            IF (OPEN < MyExitPrice)  MyExitPrice = Open;

                         SELL ( 0, MyExitPrice);

             

              ELSE IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart1 * MinPoint //第一级跟踪止损的条件表达式;

                     IF LOW <= HighestAfterEntry [1] - TrailingStop1 * MinPoint

                            MyExitPrice = HighestAfterEntry [1] - TrailingStop1 * MinPoint;

                            IF (OPEN < MyExitPrice)  MyExitPrice = Open;

                            SELL ( 0, MyExitPrice) ;


 


 回到顶部
帅哥哟,离线,有人找我吗?
jinniu1058
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
  发帖心情 Post By:2018/5/7 20:00:15    Post IP:59.63.206.208[显示全部帖子]

 

源代码

公式设计的源码来源于《程序化交易策略开发与应用》中国经济出版社,2015.3 P121 

ISBN 978—7—5136—3525—7




源代码如下:


vars


Numeric MinPoint ;

Numeric MyEntryPrice ;


Numeric  TrailingStart1 (50) ;      

Numeric  TrailingStart2 (80) ;     

Numeric  TrailingStop1 (30) ;      

Numeric  TrailingStop2 (20) ;      

Numeric  StopLossSet(50) ;          

Numeric  MyExitPrice ;


NumericSeries  HighestAfterEntry ;

NumericSeries  LowestAfterEntry ;


If  BarsSinceEntry = = 0 

       HighestAfterEntry = Close ;

       LowestAfterEntry = Close;


       If MarketPosition < > 0 THEN BEGIN//仓位不等于0;//有持仓时执行以下代码,源程序;

              HighestAfterEntry = MAX(HighestAfterEntry,MYENTRYPRICE);

//开仓Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry;

              LowestAfterEntry = MIN(LowestAfterEntry,MYENTRYPRICE); 

//开仓Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry;

ELSE             //非开仓Bar时进行以下运算(注意语句上下顺序颠倒过来写);

              LowestAfterEntry = MIN(LowestAfterEntry,LOW);           

//记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断;(源程序是先写最低价)

              HighestAfterEntry = MAX(HighestAfterEntry,HIGH);      

//记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断;(源程序是再写最高价)



Commentary ("HighestAfterEntry =" +Text (HighestAfterEntry));

Commentary ("LowestAfterEntry =" +Text (LowestAfterEntry));


MinPoint = MinMove * PriceScale ;

MYENTRYPRICE = AVGENTERPRICE;


IF (MarketPosition = = 1 and BarsSinceEntry >=1      //有多仓的情况;

       //第二级跟踪止损的条件表达式;

              IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart2 * MinPoint    //开仓后开始监控止损条件;

                     IF LOW <= HighestAfterEntry [1] - TrailingStop2 * MinPoint  

                            MyExitPrice = HighestAfterEntry [1] - TrailingStop2 * MinPoint;                 //如果该Bar开盘价跳空,则用开盘价代替;

                            IF (OPEN < MyExitPrice)  MyExitPrice = Open;

                         SELL ( 0, MyExitPrice);

             

              ELSE IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart1 * MinPoint //第一级跟踪止损的条件表达式;

                     IF LOW <= HighestAfterEntry [1] - TrailingStop1 * MinPoint

                            MyExitPrice = HighestAfterEntry [1] - TrailingStop1 * MinPoint;

                            IF (OPEN < MyExitPrice)  MyExitPrice = Open;

                            SELL ( 0, MyExitPrice) ;



 回到顶部
总数 14 1 2 下一页