价格预警事件


Vars
    Global String zcbj("支撑报警");// 支撑预警事件名
    Global String ylbj("压力报警");// 压力预警事件名
    Global Bool zckg(False);// 支撑报警开关(默认关闭)
    Global Bool ylkg(False);// 压力报警开关(默认关闭)
    Global Numeric zcjg(-1);// 支撑预警价格(默认-1,未设置)
    Global Numeric yljg(-1);// 压力预警价格(默认-1,未设置)
    Global Integer fz(-1);// 分钟标记(防同一分钟重复触发报警)
    Plot plt;
    // ************************ 初始化:订阅预警事件 ************************
Events
    OnInit()
    {
        // 订阅支撑、压力预警事件,让程序响应工具栏操作
        SubscribeEvent(zcbj);
        SubscribeEvent(ylbj);
    }
    
    // ************************ 事件处理:开关切换+价格赋值 ************************
    OnEvent(StringRef evtName, MapRef<String, String> evtValue)
    {
        // 支撑报警:切换开关+获取输入价格+推送状态提示
        if(evtName == zcbj)
        {
            zckg = !zckg;
            zcjg = Value(evtValue["支撑价"]);
            PushStatusMsg(IIFString(zckg, "支撑价" + evtValue["支撑价"] + "报警开", ""));
        }
        // 压力报警:切换开关+获取输入价格+推送状态提示
        if(evtName == ylbj)
        {
            ylkg = !ylkg;
            yljg = Value(evtValue["压力价"]);
            PushStatusMsg(IIFString(ylkg, "压力价" + evtValue["压力价"] + "报警开", ""));
        }
    }
    
    // ************************ 核心逻辑:工具栏创建+价格触及报警触发 ************************
    OnBar(ArrayRef<Integer> indexs)
    {
    
        // 每日首个Bar创建支撑/压力价输入工具栏(默认值为当前收盘价,支持数字输入)
        if(BarsSinceToday() == 0)
        {
            plt.toolBar(zcbj, "支撑价", text(C), "numinput");
            plt.toolBar(ylbj, "压力价", text(C), "numinput");
        }
    
        // 预警触发辅助变量
        integer sjsj = Hour * 60 + Minute; // 当前时间转分钟数(时*60+分)
        Bool ylcf = CrossOver(C,yljg) Or CrossOver(yljg,C); // 现价是否触及压力价
        Bool zccf = CrossOver(C,zcjg) Or CrossOver(zcjg,C); // 现价是否触及支撑价
    
        // 报警触发条件:实时Bar + 当前分钟未触发过报警(防重复)
        if( BarStatus == 2 And sjsj != fz)
        {
            // 支撑价预警:开关开启 + 现价触及支撑价
            if(zckg == True  And zccf)
            {
                Alert(SymbolName+"支撑价格" + Text(zcjg) + "=现价" + Text(C) + IIFString(C > C[5], "涨速", "跌速") + Text((Max(C , C[5]) - Min(C, C[5])) / Min(C, C[5]) * 100, 2) + "%" );
                fz = sjsj; // 标记当前分钟,防止重复报警
            }
            // 压力价预警:开关开启 + 现价触及压力价
            if(ylkg == True  And ylcf)
            {
                Alert(SymbolName+"压力价格" + Text(yljg) + "=现价" + Text(C) + IIFString(C > C[5], "涨速", "跌速") + Text((Max(C , C[5]) - Min(C, C[5])) / Min(C, C[5]) * 100, 2) + "%" );
                fz = sjsj; // 标记当前分钟,防止重复报警
            }

        }
    }

分享给需要的朋友

画线预警
均线 预警
智大领峰增加声音预警和页面预警太好了
均线预警代码
关于信号预警的问题
画线趋势线预警设置
幅度和分钟自定义预警设置
关于开仓预警
简语言的公式预警
智大领峰策略预警的设置问题