金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4674|回复: 24

大神帮忙解决,跨周期引用信号闪烁,信号消失

[复制链接]

26

主题

117

帖子

117

积分

等级: 免费版

注册:
2023-11-16
曾用名:
发表于 2024-2-28 08:57 | 显示全部楼层 |阅读模式

//声明参数
INPUT : LOTS(1,1,20,1) ;//手数
INPUT : N(10,1,300,1); //止损参数

////////////////////////

BUYORDERTHISBAR := 0 ;               
VARIABLE : MYENTRYPRICE =0 ;         
VARIABLE : MYEXITPRICE =0 ;            
VARIABLE : _DEBUG = 1 ;                    
VARIABLE : _TDEBUG = 1 ;               
VARIABLE : _DEBUGOUT = 0 ;   
VARIABLE : TURTLEUNITS=0 ;            
VARIABLE : POSITION=0 ;            


//准备需要计算的变量
ZRC:callstock(stklabel,vtclose,6,-1);
JKP:callstock(stklabel,vtopen,6,0);
MA1:=MA(OPEN,5);
RMA1:STKINDIEX('','MA.MA1',0,6,0,100);
TJ1:=REF(C,1)=ZRC;

//如果当前是没有持仓的状态
IF POSITION=0  AND TJ1 AND TOTALDAYTRADE=0 THEN BEGIN   
    //多头进场
    IF JKP>ZRC AND ZRC>RMA1 THEN BEGIN
               
        BUY( ZRC>RMA1,LOTS,LIMITR,JKP);
        POSITION := 1 ;
        TURTLEUNITS := 1 ;
        BUYORDERTHISBAR := 1;

    END //IF
//////   
    //空头进场
    IF JKP<ZRC AND ZRC<RMA1 THEN BEGIN                    
        BUYSHORT( ZRC<RMA1,LOTS,LIMITR,JKP),IGNORECHECKPRICE;
        POSITION := -1 ;
        TURTLEUNITS := 1 ;
        BUYORDERTHISBAR := 1;

    END   
   
END  //IF


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

IF POSITION=1 THEN BEGIN

   
   
    WHILE (HIGH>JKP+30*MINDIFF) AND TURTLEUNITS<2 DO BEGIN
        
        BUY( _DEBUG, LOTS, LIMITR, JKP+30*MINDIFF);
        TURTLEUNITS := TURTLEUNITS+1 ;
        BUYORDERTHISBAR := 1;

    END
////   
    IF LOW<=JKP+MINDIFF AND BUYORDERTHISBAR=0 AND HOLDING>LOTS  THEN BEGIN
        MYEXITPRICE := IF(OPEN<JKP+MINDIFF ,OPEN ,JKP+MINDIFF ) ;            
        SELL( _DEBUG ,0,LIMITR,MYEXITPRICE);//相反
        POSITION := 0 ;
        TURTLEUNITS := 0 ;
    END

    //多头止损


    IF LOW<JKP-N*MINDIFF AND POSITION=1 AND BUYORDERTHISBAR=0 AND HOLDING=LOTS THEN BEGIN
        MYEXITPRICE := IF(OPEN<JKP-N*MINDIFF ,OPEN ,JKP-N*MINDIFF ) ;        
        //MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF ;   
        SELL(LOW<JKP-N*MINDIFF ,0,LIMITR,MYEXITPRICE);
        POSITION := 0 ;
        TURTLEUNITS := 0 ;
    END


END  //IF


//持有空头

IF POSITION = -1  THEN BEGIN

   
   
    WHILE (LOW<JKP-30*MINDIFF) AND TURTLEUNITS<2 DO BEGIN
        
        BUYSHORT( _DEBUG,LOTS, LIMITR,JKP-30*MINDIFF);
        TURTLEUNITS := TURTLEUNITS+1 ;
        BUYORDERTHISBAR := 1;
    END     



    IF H>=JKP-MINDIFF AND BUYORDERTHISBAR=0 AND TURTLEUNITS=2 THEN BEGIN
        MYEXITPRICE := IF(OPEN>JKP-MINDIFF ,OPEN ,JKP-MINDIFF ) ;            
        SELLSHORT( _DEBUG,0,LIMITR,MYEXITPRICE);//不一样
        POSITION := 0 ;
        TURTLEUNITS := 0 ;
    END

    //空头止损


    IF H>=JKP+N*MINDIFF AND POSITION = -1 AND BUYORDERTHISBAR=0 AND TURTLEUNITS=1 THEN BEGIN
        MYEXITPRICE := IF(OPEN>JKP+N*MINDIFF ,OPEN ,JKP+N*MINDIFF) ;            
    //    MYEXITPRICE := CEILING(MYEXITPRICE/MINDIFF)*MINDIFF ;   
        SELLSHORT( H>=JKP+N*MINDIFF,0,LIMITR,MYEXITPRICE);
        POSITION := 0 ;
        TURTLEUNITS := 0 ;
    END

END  //IF
T2:=TIME=165900;
收盘平多:SELL(T2 AND HOLDING>0,0,MARKETR) ;
收盘平空:SELLSHORT(T2 AND HOLDING<0,0,MARKETR) ;
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-2-28 09:05 | 显示全部楼层
本帖最后由 技术009 于 2024-2-28 09:10 编辑

你这里调用日线级别的均线了呀。 你小引大了,当然会可能闪烁的。

rma1:stkindiex('','ma.ma1',0,6,0,100);

其他地方没仔细看,但是这个小引大是很可能造成闪烁的。
你可以考虑改成:
rma1:stkindiex('','ma.ma1',0,6,-1,100);

但是需要注意,这种是避免了小引大带来的闪烁不假,但是本质上也影响到了策略逻辑。


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

26

主题

117

帖子

117

积分

等级: 免费版

注册:
2023-11-16
曾用名:
 楼主| 发表于 2024-2-28 09:10 | 显示全部楼层
技术009 发表于 2024-2-28 09:05
你这里调用日线级别的均线了呀。 你小引大了,当然会可能闪烁的。

rma1:stkindiex('','ma.ma1',0,6,0,10 ...

那么想这个策略,怎么能解决
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-2-28 09:14 | 显示全部楼层
你这样:
//rma1:stkindiex('','ma.ma1',0,6,0,100);

ma1:="ma.ma1##day"(4);
rma1:(c+ma1*4)/5;


用下面这个组合的方式来模拟小周期上实时调用到的日线均线。这种方式不闪烁,比较稳定。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

26

主题

117

帖子

117

积分

等级: 免费版

注册:
2023-11-16
曾用名:
 楼主| 发表于 2024-2-28 09:28 | 显示全部楼层
技术009 发表于 2024-2-28 09:14
你这样:
//rma1:stkindiex('','ma.ma1',0,6,0,100);

这个均线的价格就不对了
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-2-28 09:36 | 显示全部楼层
本帖最后由 技术009 于 2024-2-28 09:37 编辑

这是对的。你在最新K上看 结果都是是一样的。在历史K,我这个计算的结果则是当时的日线均价。
我这个算法是那小周期的价格 和历史的 N-1个日线在一起算,实际就是模拟小周期当时的日线均价。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

26

主题

117

帖子

117

积分

等级: 免费版

注册:
2023-11-16
曾用名:
 楼主| 发表于 2024-2-28 10:13 | 显示全部楼层
技术009 发表于 2024-2-28 09:36
这是对的。你在最新K上看 结果都是是一样的。在历史K,我这个计算的结果则是当时的日线均价。
我这个算法 ...

嗯,现在是收盘平仓,能不能给加个止盈呢?到达点位止盈
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-2-28 10:30 | 显示全部楼层
//多止盈
if c-avgenterprice>50*mindiff then begin
sell(1,holding,market);
end

//空止盈
if avgenterprice-c>50*mindiff then begin
sellshort(1,holding,market);
end

点数你自己调整即可。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

26

主题

117

帖子

117

积分

等级: 免费版

注册:
2023-11-16
曾用名:
 楼主| 发表于 2024-2-28 10:38 | 显示全部楼层
技术009 发表于 2024-2-28 10:30
//多止盈
if c-avgenterprice>50*mindiff then begin
sell(1,holding,market);

程序是按照当日开盘价计算持仓,止盈后,会有开盘价加加仓点位再次开仓,如何解决呢
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-2-28 11:00 | 显示全部楼层
啥意思,没明白。上面那个止盈是按照持仓均价的。你加仓的话,那也是按照2次开仓的均价算止盈的。中间就算全平了也不影响这个 止盈的计算。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-8-4 22:01 , Processed in 0.134811 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表