以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  公式没有变,为什么加载周期数据多了,交易信号会闪动  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=87552)

--  作者:huangrongan
--  发布时间:2015/11/20 10:55:09
--  公式没有变,为什么加载周期数据多了,交易信号会闪动
请教老师,公式没有变,为什么按方向键“↓”加载周期数据多了之后,交易信号会闪动?


--  作者:huangrongan
--  发布时间:2015/11/20 10:57:08
--  
//声明参数
INPUT : T20(20,15,60,1) ;INPUT : T10(20,10,30,1);
//声明变量
POSNUM : =1;  //交易数量设置
VARIABLE : TURTLEUNITS=0 ; //交易次数计数器
VARIABLE : POSITION=0 ; //仓位状态 0表示没有仓位,1表示持有多头, -1表示持有空头

//准备需要计算的变量
T20HI := REF(HHV(H,T20),1) ;T20LO := REF(LLV(L,T20),1) ;
T10HI := REF(HHV(H,T10),1) ;T10LO := REF(LLV(L,T10),1) ;

//开始执行时 初始化数据
IF BARPOS=1 THEN BEGIN
//POSITION := 0 ;
END //IF

//进场条件设置
UZC:REF(L,BARSLAST(H>T20HI)),COLORGREEN,LINETHICK2;
{上支撑价格:H大于昨N日新高时当日的最低价}
DYL:REF(H,BARSLAST(L<T10LO)),COLORMAGENTA,LINETHICK2;
{下压力价格:L小于昨N日新低时当日的最高价}
CUZC:=C>UZC AND REF(C,1)<=REF(UZC,1); //开多平空条件
CDYL:=C<DYL AND REF(C,1)>=REF(DYL,1); //开空平多条件

//如果当前是没有持仓的状态
IF H>L AND BARPOS>60 THEN BEGIN

//多头进场
IF CUZC AND TURTLEUNITS<3 THEN BEGIN
BUY( 1, POSNUM, LIMITR, UZC),IGNORECHECKPRICE;
POSITION: = 1 ;
TURTLEUNITS := TURTLEUNITS + 1 ;
END //IF

//空头进场
IF CDYL AND TURTLEUNITS<3 THEN BEGIN
BUYSHORT( 1, POSNUM, LIMITR, DYL),colorcyan;
POSITION:= -1 ;
TURTLEUNITS := TURTLEUNITS + 1 ;
END
END  //IF

//如果当前持有多头仓位的状态

IF H>L AND POSITION=1 THEN BEGIN
//多头加仓
//多头离场条件
IF CDYL THEN BEGIN
SELL( 1, TURTLEUNITS, MARKET),colorgreen;
TURTLEUNITS := 0 ;
END

GOTO CONTINUELINE ; //GOTO CONTINUELINE ;
END  //IF

//如果当前持有空头仓位的状态

IF H>L AND POSITION=-1 THEN BEGIN
//空头加仓
//空头离场条件
IF CUZC THEN BEGIN
SELLSHORT( 1, TURTLEUNITS, MARKET),colorred; //平仓数量为TURTLEUNITS
TURTLEUNITS := 0 ;
END 

END  //IF

//显示账户状态
CONTINUELINE@ 资产:ASSET,LINETHICK0;
可用现金:CASH(0),LINETHICK0;
POS:HOLDING,LINETHICK0;
交易次数:TOTALDAYTRADE, LINETHICK0 ;

--  作者:huangrongan
--  发布时间:2015/11/20 11:00:11
--  
不知道怎么样上传图片,,,, 按  ”↓“键的时候,信号会闪动变换位置,按”↑“键时候又会闪动恢复……莫名其妙


--  作者:jinzhe
--  发布时间:2015/11/20 11:02:31
--  
这是图表交易的特性,因为数据多了,所以最开始的历史数据信号也一起变了,所以导致了后面的信号跟着之前的历史信号一起变了
--  作者:huangrongan
--  发布时间:2015/11/20 11:27:50
--  
为什么系统自带的交易系统就不会信号闪动?

--  作者:jinzhe
--  发布时间:2015/11/20 11:29:12
--  

原因有很多,比如代码简单,历史数据不论怎么变都不影响,比如用旧图表,没有判断holding的,

所以,请举个具体的例子

[此贴子已经被作者于2015/11/20 11:29:53编辑过]

--  作者:huangrongan
--  发布时间:2015/11/20 11:32:08
--  
公式源码我贴上来了,麻烦老师帮忙标记一下造成信号闪现的 代码段


//声明参数
INPUT : T20(20,15,60,1) ;INPUT : T10(20,10,30,1);
//声明变量
POSNUM : =1;  //交易数量设置
VARIABLE : TURTLEUNITS=0 ; //交易次数计数器
VARIABLE : POSITION=0 ; //仓位状态 0表示没有仓位,1表示持有多头, -1表示持有空头

//准备需要计算的变量
T20HI := REF(HHV(H,T20),1) ;T20LO := REF(LLV(L,T20),1) ;
T10HI := REF(HHV(H,T10),1) ;T10LO := REF(LLV(L,T10),1) ;

//开始执行时 初始化数据
IF BARPOS=1 THEN BEGIN
//POSITION := 0 ;
END //IF

//进场条件设置
UZC:REF(L,BARSLAST(H>T20HI)),COLORGREEN,LINETHICK2;
{上支撑价格:H大于昨N日新高时当日的最低价}
DYL:REF(H,BARSLAST(L<T10LO)),COLORMAGENTA,LINETHICK2;
{下压力价格:L小于昨N日新低时当日的最高价}
CUZC:=C>UZC AND REF(C,1)<=REF(UZC,1); //开多平空条件
CDYL:=C<DYL AND REF(C,1)>=REF(DYL,1); //开空平多条件

//如果当前是没有持仓的状态
IF H>L AND BARPOS>60 THEN BEGIN

//多头进场
IF CUZC AND TURTLEUNITS<3 THEN BEGIN
BUY( 1, POSNUM, LIMITR, UZC),IGNORECHECKPRICE;
POSITION: = 1 ;
TURTLEUNITS := TURTLEUNITS + 1 ;
END //IF

//空头进场
IF CDYL AND TURTLEUNITS<3 THEN BEGIN
BUYSHORT( 1, POSNUM, LIMITR, DYL),colorcyan;
POSITION:= -1 ;
TURTLEUNITS := TURTLEUNITS + 1 ;
END
END  //IF

//如果当前持有多头仓位的状态

IF H>L AND POSITION=1 THEN BEGIN
//多头加仓
//多头离场条件
IF CDYL THEN BEGIN
SELL( 1, TURTLEUNITS, MARKET),colorgreen;
TURTLEUNITS := 0 ;
END

GOTO CONTINUELINE ; //GOTO CONTINUELINE ;
END  //IF

//如果当前持有空头仓位的状态

IF H>L AND POSITION=-1 THEN BEGIN
//空头加仓
//空头离场条件
IF CUZC THEN BEGIN
SELLSHORT( 1, TURTLEUNITS, MARKET),colorred; //平仓数量为TURTLEUNITS
TURTLEUNITS := 0 ;
END 

END  //IF

//显示账户状态
CONTINUELINE@ 资产:ASSET,LINETHICK0;
可用现金:CASH(0),LINETHICK0;
POS:HOLDING,LINETHICK0;
交易次数:TOTALDAYTRADE, LINETHICK0 ;


--  作者:jinzhe
--  发布时间:2015/11/20 13:08:06
--  
这个并不是信号闪烁,而是前面讲的历史数据的改变影响了现在的信号