设为首页收藏本站

 找回密码
 注册
查看: 803|回复: 2
打印 上一主题 下一主题

咨询如何控制alert次数问题。 [复制链接]

Rank: 1

精华
0
UID
162091
积分
15
帖子
12
主题
3
阅读权限
10
注册时间
2013-7-12
最后登录
2019-9-7
跳转到指定楼层
1#
发表于 2019-6-14 06:24:53 |只看该作者 |倒序浏览

Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
                Numeric N_number(5);
Vars
        NumericSeries MACDValue1;
        NumericSeries MACDValue3;
        NumericSeries MACDValue5;
        NumericSeries MACDValue15;  
        NumericSeries MACDValue30;
        Numeric AvgMACD1;
        Numeric AvgMACD3;
        Numeric AvgMACD5;
        Numeric AvgMACD15;
        Numeric AvgMACD30;
        Numeric MACDDiff1;
        Numeric MACDDiff3;
        Numeric MACDDiff5;
        Numeric MACDDiff15;
        Numeric MACDDiff30;
                numeric Bartime_r;
        Bool LongEntryCon;
        Bool ShortEntryCon;
        Bool LongExitCon;
        Bool ShortExitCon;
               
Begin
        MACDValue1 = XAverage( Close, FastLength ) - XAverage( Close, SlowLength );        
        //AvgMACD1 = XAverage(MACDValue1,MACDLength);
        //MACDDiff1 = MACDValue1 - AvgMACD1;

        //MACDValue3 = MinsXAverage(3, Close, FastLength ) - MinsXAverage(3, Close, SlowLength );        
        //AvgMACD3 = MinsXAverage(3,MACDValue3,MACDLength);
        //MACDDiff3 = MACDValue3 - AvgMACD3;
        
        MACDValue5 = MinsXAverage(N_number, Close, FastLength ) - MinsXAverage(N_number, Close, SlowLength ); //5分钟图MACD值      
        //AvgMACD5 = MinsXAverage(5,MACDValue5,MACDLength);
        //MACDDiff5 = MACDValue5 - AvgMACD5;
        
        //MACDValue15 = MinsXAverage(15, Close, FastLength ) - MinsXAverage(15, Close, SlowLength );        
       // AvgMACD15 = MinsXAverage(15,MACDValue15,MACDLength);
        //MACDDiff15 = MACDValue15 - AvgMACD15;
        
        //MACDValue30 = MinsXAverage(30, Close, FastLength ) - MinsXAverage(30, Close, SlowLength );        
        //AvgMACD30 = MinsXAverage(30,MACDValue30,MACDLength);
       // MACDDiff30 = MACDValue30 - AvgMACD30;

        LongEntryCon = CrossOver(MACDValue1[1],0)&&  MACDValue5[1]> 0 ;//&& MACDValue15[1] > 0 && MACDValue30[1] > 0;  //开多条件
        ShortEntryCon = CrossUnder(MACDValue1[1],0) && MACDValue5[1] < 0 ;//&& MACDValue15[1] < 0 && MACDValue30[1] < 0; //开空条件
        
        LongExitCon = CrossUnder(MACDValue1[1],0)||MACDValue5[1] < 0;   //平多条件
        ShortExitCon = CrossOver(MACDValue1[1],0)||MACDValue5[1]> 0;  //平空条件
        
        //Commentary("MACDDiff1="+Text(MACDDiff1));
        //Commentary("MACDDiff3="+Text(MACDDiff3));
       // Commentary("MACDDiff5="+Text(MACDDiff5));
       // Commentary("MACDDiff15="+Text(MACDDiff15));  
        //Commentary("MACDDiff30="+Text(MACDDiff30));
                //SetGlobalVar(0,0);
               
               
                Bartime_r=Second();
               
        
        If(MarketPosition == 0)   //MarketPosition为0,代表空仓。
        {
                If(LongEntryCon&&Bartime_r<2)  //符合开多条件,开多
                {
                        Buy(1,Open);
                                                PlotString("开多","开多",high,Red);
                                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"5分钟图趋势向上,1分钟图出现战机,注意观察,如果第5根K线还是保持信号,则在第5根K线的收盘价附近入场。");
                                               
                                               
                }Else if(ShortEntryCon&&Bartime_r<2)  //符合开空条件,开空
                {
                        SellShort(1,Open);
                                                PlotString("开空","开空",Low,Green);
                                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"5分钟图趋势向下,1分钟图出现战机,注意观察,如果第5根K线还是保持信号,则在第5根K线的收盘价附近入场。");

                }               
        }Else If(MarketPosition == 1 && LongExitCon&&Bartime_r<2)//MarketPosition为1,代表多仓。
        {
                Sell(0,Open);
                                PlotString("平多","平多",High,Red);
                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"大小图都给出平多信号,坚决离场"+Text(MarketPosition));
                                //SetGlobalVar(0,GetGlobalVar(0)+1);
        }Else if(MarketPosition == -1 && ShortExitCon&&Bartime_r<2)//MarketPosition为-1,代表空仓。
        {
                BuyToCover(0,Open);
                                PlotString("平空","平空",low,Green);
                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"大小图都给出平空信号,坚决离场"+Text(MarketPosition));
                                //SetGlobalVar(0,GetGlobalVar(0)+1);
        }
        
        If(Time >= 0.1459) //Time为浮点型,0.1459就是代表14:59.在收盘前清空仓位。
        {
                //Sell(1,Open);
                //BuyToCover(1,Open);
        }
End

以上是我写的代码。我想实现。例如满足开仓条件后,3秒内会发出alert,并转发邮件。因为一直发alert消息太多了。但是实测过程中发现。用了这个Bartime_r参数,还是满足开仓条件下的每个tick都会发alert。请问如何改进?或者比如说满足条件后3个tick内发alert也可以。总之不要一直发都行。

高级操盘手

「你若能信,在信之人,凡事皆能。」

Rank: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
2#
发表于 2019-6-14 12:55:58 |只看该作者
因为TB机制是每个tick都执行一次公式,所有不加控制肯定会每个tick都发的。

用全局变量控制次数,具体参考公式开发指南里全局变量控制A函数下单这部分的例子代码


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 1

精华
0
UID
162091
积分
15
帖子
12
主题
3
阅读权限
10
注册时间
2013-7-12
最后登录
2019-9-7
3#
发表于 2019-6-14 15:21:10 |只看该作者
superwin 发表于 2019-6-14 12:55
因为TB机制是每个tick都执行一次公式,所有不加控制肯定会每个tick都发的。

用全局变量控制次数,具体参考 ...

Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
                Numeric N_number(5);
Vars
        NumericSeries MACDValue1;
        NumericSeries MACDValue3;
        NumericSeries MACDValue5;
        NumericSeries MACDValue15;  
        NumericSeries MACDValue30;
        Numeric AvgMACD1;
        Numeric AvgMACD3;
        Numeric AvgMACD5;
        Numeric AvgMACD15;
        Numeric AvgMACD30;
        Numeric MACDDiff1;
        Numeric MACDDiff3;
        Numeric MACDDiff5;
        Numeric MACDDiff15;
        Numeric MACDDiff30;
                numeric Bartime_r;
        Bool LongEntryCon;
        Bool ShortEntryCon;
        Bool LongExitCon;
        Bool ShortExitCon;
               
Begin
        MACDValue1 = XAverage( Close, FastLength ) - XAverage( Close, SlowLength );        
        //AvgMACD1 = XAverage(MACDValue1,MACDLength);
        //MACDDiff1 = MACDValue1 - AvgMACD1;

        //MACDValue3 = MinsXAverage(3, Close, FastLength ) - MinsXAverage(3, Close, SlowLength );        
        //AvgMACD3 = MinsXAverage(3,MACDValue3,MACDLength);
        //MACDDiff3 = MACDValue3 - AvgMACD3;
        
        MACDValue5 = MinsXAverage(N_number, Close, FastLength ) - MinsXAverage(N_number, Close, SlowLength ); //5分钟图MACD值      
        //AvgMACD5 = MinsXAverage(5,MACDValue5,MACDLength);
        //MACDDiff5 = MACDValue5 - AvgMACD5;
        
        //MACDValue15 = MinsXAverage(15, Close, FastLength ) - MinsXAverage(15, Close, SlowLength );        
       // AvgMACD15 = MinsXAverage(15,MACDValue15,MACDLength);
        //MACDDiff15 = MACDValue15 - AvgMACD15;
        
        //MACDValue30 = MinsXAverage(30, Close, FastLength ) - MinsXAverage(30, Close, SlowLength );        
        //AvgMACD30 = MinsXAverage(30,MACDValue30,MACDLength);
       // MACDDiff30 = MACDValue30 - AvgMACD30;

        LongEntryCon = CrossOver(MACDValue1[1],0)&&  MACDValue5[1]> 0 ;//&& MACDValue15[1] > 0 && MACDValue30[1] > 0;  //开多条件
        ShortEntryCon = CrossUnder(MACDValue1[1],0) && MACDValue5[1] < 0 ;//&& MACDValue15[1] < 0 && MACDValue30[1] < 0; //开空条件
        
        LongExitCon = CrossUnder(MACDValue1[1],0)||MACDValue5[1] < 0;   //平多条件
        ShortExitCon = CrossOver(MACDValue1[1],0)||MACDValue5[1]> 0;  //平空条件
        
        //Commentary("MACDDiff1="+Text(MACDDiff1));
        //Commentary("MACDDiff3="+Text(MACDDiff3));
       // Commentary("MACDDiff5="+Text(MACDDiff5));
       // Commentary("MACDDiff15="+Text(MACDDiff15));  
        //Commentary("MACDDiff30="+Text(MACDDiff30));
                //SetGlobalVar(0,0);
               
               
                Bartime_r=Second();
                if(GetGlobalVar(1)==InvalidNumeric)        SetGlobalVar(1,0);
                if(GetGlobalVar(2)==InvalidNumeric)        SetGlobalVar(2,0);
                if(GetGlobalVar(3)==InvalidNumeric)        SetGlobalVar(3,0);
                if(GetGlobalVar(4)==InvalidNumeric)        SetGlobalVar(4,0);
               
        
        If(MarketPosition == 0)   //MarketPosition为0,代表空仓。
        {
                If(LongEntryCon&&GetGlobalVar(1)<3)  //符合开多条件,开多
                {
                        Buy(1,Open);        //开多       
                                                SetGlobalVar(2,0);        //设置平多alert标志为0.
                                                PlotString("开多","开多",high,Red);
                                                SetGlobalVar(1,GetGlobalVar(1)+1);
                                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"5分钟图趋势向上,1分钟图出现战机,注意观察,如果第5根K线还是保持信号,则在第5根K线的收盘价附近入场。"+"开多标志:"+Text(GetGlobalVar(1))+";平多标志:"+Text(GetGlobalVar(2)));
                                               
                                               
                }Else if(ShortEntryCon&&GetGlobalVar(3)<3)  //符合开空条件,开空
                {
                        SellShort(1,Open);
                                                SetGlobalVar(4,0);
                                                PlotString("开空","开空",Low,Green);
                                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"5分钟图趋势向下,1分钟图出现战机,注意观察,如果第5根K线还是保持信号,则在第5根K线的收盘价附近入场。"+"开空标志:"+Text(GetGlobalVar(13))+";平空标志:"+Text(GetGlobalVar(4)));
                                                SetGlobalVar(3,GetGlobalVar(3)+1);

                }               
        }Else If(MarketPosition == 1 && LongExitCon&&GetGlobalVar(2)<3)//MarketPosition为1,代表多仓。
        {
                Sell(0,Open);
                                SetGlobalVar(1,0);
                                PlotString("平多","平多",High,Red);
                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"大小图都给出平多信号,坚决离场:"+"开多标志:"+Text(GetGlobalVar(1))+";平多标志:"+Text(GetGlobalVar(2)));       
                                SetGlobalVar(2,GetGlobalVar(2)+1);
        }Else if(MarketPosition == -1 && ShortExitCon&&GetGlobalVar(4)<3)//MarketPosition为-1,代表空仓。
        {
                BuyToCover(0,Open);
                                SetGlobalVar(3,0);
                                PlotString("平空","平空",low,Green);
                                Alert("当前K线时间:"+Text(Date)+" "+Text(Time)+" "+"大小图都给出平空信号,坚决离场:"+"开空标志:"+Text(GetGlobalVar(3))+";平空标志:"+Text(GetGlobalVar(4)));
                                SetGlobalVar(4,GetGlobalVar(4)+1);
        }
        
        If(Time >= 0.1459) //Time为浮点型,0.1459就是代表14:59.在收盘前清空仓位。
        {
                //Sell(1,Open);
                //BuyToCover(1,Open);
        }
End



我写 了一个例子,思路对不对?另外您说的例子在哪里?在帮助文档不知道怎么找。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-19 12:41

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部