以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 求助跟踪止盈止损问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=163261) |
-- 作者:jinniu1058 -- 发布时间:2018/5/7 11:22:22 -- 求助跟踪止盈止损问题 跟踪止盈止损策略设计要求: 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 -- 发布时间:2018/5/7 11:29:30 -- MYENTRYPRICE = ***GENTERPRICE; 系统显示问题,源码是开仓均价:MYENTRYPRICE = AVGENTERPRICE; [此贴子已经被作者于2018/5/7 11:30:11编辑过]
|
-- 作者:jinniu1058 -- 发布时间:2018/5/7 11:30:55 -- 当前持有品种的平均持仓成本——最近空仓以来计 用法:AVGENTERPRICE [此贴子已经被作者于2018/5/7 11:32:52编辑过]
|
-- 作者:jinniu1058 -- 发布时间:2018/5/7 11:36:20 -- 程序中MinPoint因为编译不通过,已经用MINDIFF替换, |
-- 作者:FireScript -- 发布时间:2018/5/7 13:41:48 -- 赋值不要用“=” 用 “:=”,你全部用的是= |
-- 作者:jinniu1058 -- 发布时间:2018/5/7 14:44:40 -- 加了”:“后已经编译通过,但是为什么没有止盈信号 |
-- 作者:FireScript -- 发布时间:2018/5/7 15:31:03 -- HighestAfterEntry [1] 这个你的本意是取什么值? |
-- 作者:jinniu1058 -- 发布时间:2018/5/7 18:14:47 -- HighestAfterEntry [1] 当前最高值为HighestAfterEntry [0] |
-- 作者:jinniu1058 -- 发布时间:2018/5/7 18:20:39 -- 公式设计的初衷是: 记录建仓以来最高最低价格。跟踪止损条件采用这个最高最低价格和止损点之间进行比较判断。 |
-- 作者:jinniu1058 -- 发布时间:2018/5/7 18:21:09 -- 公式设计的初衷是: 记录建仓以来最高最低价格。跟踪止损条件采用这个最高最低价格和止损点之间进行比较判断。 [此贴子已经被作者于2018/5/7 18:21:52编辑过]
|