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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 请问为什么没有交易信号,如何改进?

   

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


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

主题:请问为什么没有交易信号,如何改进?

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


加好友 发短信
等级:新手上路 帖子:37 积分:0 威望:0 精华:0 注册:2016/11/10 10:48:19
请问为什么没有交易信号,如何改进?  发帖心情 Post By:2018/5/16 11:16:46    Post IP:59.63.206.208[只看该作者]

使用双均线的交叉来识别一波潜在的趋势,直到上升趋势或下降趋势确定后才发出买入或卖出信号。

系统通过设置在移动数目的K线内有效的买入/卖出条件单来确定趋势。

进场策略:

买入:移动快速均线上穿慢速均线,系统把最近12根K线的高点加上3%的位置设置为“买入突破线”,如果价格突破

“买入突破线”时则发出买入指令,突破指令在12根K线内有效,即如果12根K线内未突破则取消本次交易。

卖出:移动快速均线下穿慢速均线,系统把最近12根K线的低点减去3%的位置设置为“卖出突破线”,如果价格突破

“卖出突破线”时则发出卖出指令,突破指令在12根K线内有效,即如果12根K线内未突破则取消本次交易。

最近多少根K线的高点以及超过多少百分比作为策略参数输入,允许使用者灵活测试和优化。

出场策略:

反手出场:上述的买入或卖出指令也是反手指令,即:如果持有多头而触发了卖出指令,将先平掉多单头寸然后开立空头头寸,反之亦然。

周期出场:

持有多头头寸时,价格跌破最近8根K线的低点,多头平仓;

持有空头头寸时,价格跌破最近8根K线的高点,空头平仓。

再进场策略:

上述的出场策略有时会导致提前出场并导致系统措施大的利润,再进场策略可以在趋势继续是重建原来的头寸。多头出场后,记下出场时最近10根K线的高点,如果出场后15根K线内价格达到最近10根K线的高点重新做多;

空头出场后,记下出场时最近10根K线的低点,如果出场后15根K线内价格达到最近10根K线的低点重新做空。

INPUT : FastLen(9,1,200,2) ;   //快速均线周期;
INPUT : SlowLen(18,10,300,2) ;   //快速均线周期;
INPUT : T10(10,10,300,2) ;
INPUT : ChLen(12,1,100,2);    //通道突破的周期;
INPUT : ExtraPercentage(300,1,500,2); //通道突破的幅度(万分比),如300=3%;
INPUT : T8(8,1,100,2);   //多少根bar的最低价作为跟踪止损价;
INPUT : InitialLots(1,0,100,1);   //初始进场头寸;
INPUT : ReBars(15,1,100,2);    //再次进场必须在出场后多少根bar内;
INPUT : ReEntryChLen(10,1,100,2);  //再次进场通道突破的周期数;
INPUT : ReEntryLots(1,0,100,1);   //再次进场头寸;

FastMA:MA(CLOSE,FastLen),COLORRED;
SlowMA:MA(CLOSE,SlowLen),COLORYELLOW;


 

VARIABLE : LEntryPrice = 0 ;   //开多的突破价格;
VARIABLE : SEntryPrice = 0 ;   //开空的突破价格;
VARIABLE : TrailStopPrice = 0 ;   //跟踪止损的止损价格
VARIABLE : ReEntryPrice = 0 ;   //再进场突破开仓的价格

VARIABLE : LCount = 0 ;     //均线金叉后记录Bar序号;
VARIABLE : SCount = 0 ;     //均线死叉后记录Bar序号;
VARIABLE : ReEntryCOUNT = 0 ;   //跟踪止损后记录Bar序号;
VARIABLE : CurrentBar = 0 ;    //信号发生时Bar序号;

VARIABLE : POSITION=0 ;   //仓位状态

VARIABLE : ChLenHI=CLOSE ;   

VARIABLE : ChLenLO=CLOSE ;   

VARIABLE : T12HI=CLOSE ;   
VARIABLE : T12LO=CLOSE ;   

VARIABLE : T10HI=CLOSE ;   
VARIABLE : T10LO=CLOSE ;   

VARIABLE : T8HI=CLOSE ;   
VARIABLE : T8LO=CLOSE ;  

//准备需要计算的变量
ChLenHI := REF(HHV(H,ChLen),1) ;
ChLenLO := REF(LLV(L,ChLen),1) ;

T12HI := REF(HHV(H,T12),1) ;
T12LO := REF(LLV(L,T12),1) ;

T10HI := REF(HHV(H,T10),1) ;
T10LO := REF(LLV(L,T10),1) ;

T8HI := REF(HHV(H,T8),1) ;
T8LO := REF(LLV(L,T8),1) ;

//交易条件

ConCrossOver := CROSS(FastMA , SlowMA);  //金叉
ConCrossUnder := CROSS(SlowMA ,FastMA ); //死叉;

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

 //建立多头进场条件
IF POSITION = 0 AND ConCrossOver = 1 THEN BEGIN //开多条件进场判断
    ReEntryCOUNT := 1;
    CurrentBar :=1;
END
LCount := BARSLAST(CurrentBar=1);   //记录Bar序号以控制只在金叉后ChLen根Bar内进场否则放弃本次交易

LEntryPrice := T12HI * (1+ ExtraPercentage * 0.0001);

 //开仓  
 IF POSITION=0 AND  ChLen > LCount  AND VOL >0 AND  H>L THEN BEGIN
       IF HIGH >= LEntryPrice  THEN BEGIN//
       MYENTRYPRICE := IF(OPEN>LEntryPrice,OPEN,LEntryPrice);//进场价格计算;
       BUY( 1,InitialLots,LIMITR,MYENTRYPRICE);//发初次开多单交易指令;
       POSITION := 1 ;
       LCount := -999;
       END //IF
 END

//判断趋势是否反转;

IF ConCrossUnder THEN BEGIN
    ReEntryCOUNT := 1;
    CurrentBar :=1;
END

SCount := ENTERBARS;//记录Bar序号以控制只在金叉后ChLen根Bar内进场否则放弃本次交易

 IF SCount >= (ChLen - 1) THEN BEGIN
     SEntryPrice := T12LO * (1- ExtraPercentage * 0.0001);
  END

//反向突破  
 IF POSITION=1 AND  SCount > 0 AND Chlen < SCount THEN BEGIN//
    IF LOW <= SEntryPrice THEN BEGIN
     MYEXITPRICE := IF(OPEN<SEntryPrice,OPEN,SEntryPrice);//进场价格计算;
      SELL( 1 ,0,LIMITR,MYEXITPRICE);//平多单

     POSITION := 0;
     LCount := -999;
   
    //反向开空仓
   MYENTRYPRICE := IF(OPEN < SEntryPrice,OPEN,SEntryPrice);//进场价格计算;
   BUYSHORT( _DEBUG,InitialLots,LIMITR,MYENTRYPRICE);//开空单;
   POSITION := -1 ;
   SCount := -999;
  END
 END //IF


//跟踪止损出场
//计算止损位
//STrailStopPrice := T8LO;

IF POSITION=1 AND ENTERBARS>0 THEN BEGIN
  IF LOW < STrailStopPrice  THEN BEGIN
     MYEXITPRICE := IF(OPEN<STrailStopPrice ,OPEN,STrailStopPrice );
     SELL( 1,0,LIMITR,MYEXITPRICE);
     POSITION := 0 ;
     LCount := -999;
     ReEntryCount := 1;  
   END
END

ReEntryCOUNT := BARSLAST(EXITBARS);//记录Bar序号以控制只在金叉后ChLen根Bar内进场否则放弃本次交易
ReEntryPrice := T10HI;
//出场后在ReBar根bar内,价格突破再进场突破价格进场
IF POSITION = 0 AND  ReEntryCOUNT > 0  AND ReEntryCOUNT < ReBars  THEN BEGIN
   IF HIGH > ReEntryPrice THEN BEGIN
        MYENTRYPRICE := IF(OPEN>ReEntryPrice,OPEN,ReEntryPrice);//进场价格计算;
        BUY( 1,ReEntryLots,LIMITR,MYENTRYPRICE);//发开多单交易指令;
        POSITION := 1 ;
    END
END

 

编译后没有信号,请问老师我自己编写的程序问题出在哪里了?如何解决?

 

另外如何记录信号发生后开始的K线数量,这个我还不是很理解,查函数表后用BARSLAST、EXITBARS和ENTERBARS不知道是否是这样用法,有没有更好的方法记录K线位置或者用什么函数更好?


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/5/16 11:25:27    Post IP:180.169.30.6[只看该作者]

 这种只能你自行调试代码中的变量输出了。直接在图表上输出你的开平仓条件。上次开仓位置这种需求你用那几个函数是没问题的。应该是内部一些逻辑上问题,通过输出关键变量的值应该是可以排查出来了。


命数如织,当如磐石。
 回到顶部