幅度和分钟自定义预警设置
Vars
    Plot plt;  // 补全你原代码中的绘图对象,无任何修改
    Global String fd("幅度报警");
    Global String fd_min("预警分钟数");    // 单独的分钟数事件
    Global String fd_fudu("预警幅度%");   // 单独的幅度事件
    Global Numeric custom_minutes(5); // 自定义分钟数(默认5分钟,可输入修改)
    Global Numeric custom_fudu(0.5); // 自定义预警幅度(默认0.5%,可输入修改)
    Global Bool fdkg(False);//幅度报警开关
    Global Integer fz(-1);//分钟
    Global Integer curr1m(-1); // 补全依赖的curr1m变量(原代码中存在,确保Range作用域有效)
    Global Integer zld1(-1);
    Global Integer zlm1(-1);
    Global Integer czld1(-1);
    Global Integer czlm1(-1);
    Global Integer curr1d(-1);

Events
    OnInit()
    {
        zld1 = SubscribeBar(MainSymbol, "1d", 8000);
        zlm1 = SubscribeBar(MainSymbol, "1m", 8000);
    
        curr1d = zld1;
        curr1m = zlm1;
        SubscribeEvent(fd);
        SubscribeEvent(fd_min);  // 订阅分钟数事件
        SubscribeEvent(fd_fudu); // 订阅幅度事件
        Data[zld1].Hide;
        Data[0].Hide;
        Data[curr1d].Hide;
    }
    
    OnReady()
    {
    
    
        Range[curr1m:curr1m]
        {
            Data[curr1d].Hide;
            plt.toolBar(fd_min, "分钟", text(custom_minutes), "input");
            plt.toolBar(fd_fudu, "幅度", text(custom_fudu), "input");
            plt.toolBar(fd, "波幅预警", "开启/关闭", "button");
            plt.setOption("分钟", "fix-width", 100);
            plt.setOption("幅度", "fix-width", 100);
    
        }
    }
    
    OnEvent(StringRef evtName, MapRef<String, String> evtValue)
    {
        if(evtName == fd)
        {
            fdkg = !fdkg;
    
            Numeric show_min = custom_minutes;
            Numeric show_fud = custom_fudu;
            PushStatusMsg(IIFString(fdkg, "涨速报警开(" + text(show_min) + "分钟/" + text(show_fud) + "%)", "涨速报警关"));
        }
    
        // 独立处理:分钟数输入(只改分钟数,幅度不变)
        if(evtName == fd_min)
        {
            Numeric input_min = Value(evtValue["分钟"]);
    
    
            custom_minutes = input_min;
    
            PushStatusMsg("预警分钟数:" + text(custom_minutes) + "分钟");
        }
    
        // 独立处理:幅度输入(只改幅度,分钟数不变)
        if(evtName == fd_fudu)
        {
            Numeric input_fud = Value(evtValue["幅度"]);
            // 双重判断:非NA + 合法值(≥0),否则保留原有值
    
            custom_fudu = input_fud;
    
            PushStatusMsg("预警幅度:" + text(custom_fudu) + "%");
        }
    }
    
    OnBar(ArrayRef<Integer> indexs)
    {
    
        integer sjsj = Hour * 60 + Minute;
        if( BarStatus == 2 And sjsj != fz)
    
        {
    
            Numeric custom_bar = custom_minutes; // 自定义分钟数(对应K线根数,1分钟K线即n分钟对应n根Bar)
            Numeric target_fudu = custom_fudu; // 自定义预警幅度(%)
    
            // 替换原有固定的5和0.5,使用自定义变量
            if((Max(C , C[custom_bar]) - Min(C, C[custom_bar])) / Min(C, C[custom_bar]) * 100 >= target_fudu And fdkg == True)
            {
                Alert(SymbolName + IIFString(C > C[custom_bar], "涨速", "跌速") + Text((Max(C , C[custom_bar]) - Min(C, C[custom_bar])) / Min(C, C[custom_bar]) * 100, 2) + "%" );
                fz = sjsj;
            }
    
        }
    }

分享给需要的朋友

画线趋势线预警设置
智大上画线预警怎么设置?
智大领峰增加声音预警和页面预警太好了
智大领峰策略预警的设置问题
价格预警事件
自定义合约设置
怎么设置n分钟线
关于1分钟回测数据的长度,和复权设置
画线预警
均线 预警
Vars
    Plot plt;  

    Global String fd_min("预警分钟数");    // 单独的分钟数事件
    Global String fd_fudu("预警幅度%");   // 单独的幅度事件
    Global Numeric custom_minutes(5); // 自定义分钟数(默认5分钟,可输入修改)
    Global Numeric custom_fudu(0.5); // 自定义预警幅度(默认0.5%,可输入修改)
    Global Bool fdkg(False);//幅度报警开关
    Global Integer fz(-1);//分钟
    Global Integer curr1m(-1); // 补全依赖的curr1m变量(原代码中存在,确保Range作用域有效)
    Global Integer zld1(-1);
    Global Integer zlm1(-1);
    Global Integer czld1(-1);
    Global Integer czlm1(-1);
    Global Integer curr1d(-1);

Events
    OnInit()
    {
        zld1 = SubscribeBar(MainSymbol, "1d", 8000);
        zlm1 = SubscribeBar(MainSymbol, "1m", 8000);
    
        curr1d = zld1;
        curr1m = zlm1;
        SubscribeEvent(fd);
        SubscribeEvent(fd_min);  // 订阅分钟数事件
        SubscribeEvent(fd_fudu); // 订阅幅度事件
        Data[zld1].Hide;
        Data[0].Hide;
        Data[curr1d].Hide;
    }
    
    OnReady()
    {
    
    
        Range[curr1m:curr1m]
        {
            Data[curr1d].Hide;
            plt.toolBar(fd_min, "分钟", text(custom_minutes), "input");
            plt.toolBar(fd_fudu, "幅度", text(custom_fudu), "input");

            plt.setOption("分钟", "fix-width", 100);
            plt.setOption("幅度", "fix-width", 100);
    
        }
    }
    
    OnEvent(StringRef evtName, MapRef<String, String> evtValue)
    {
        if(evtName == fd_min)
        {
            Numeric input_min = Value(evtValue["分钟"]);
            // 有效性判断:非NA、≥1(分钟数不能为0或负数)
            if(input_min <> InvalidInteger && input_min >= 1)
            {
                // 输入有效:更新变量+自动开启幅速报警+提示
                custom_minutes = input_min;
                fdkg = true; // 自动开启幅速报警
                PushStatusMsg("预警:" + Text(custom_minutes) + "分钟,"+"幅度:" + Text(custom_fudu, 2)+"幅速报警已自动开启");
            }
            else
            {
                // 输入无效:保留原有值+提示+不改变报警状态
                PushStatusMsg("预警分钟数输入无效(需≥1的数字),保留原有值:" + Text(custom_minutes) + "分钟");PushStatusMsg("预警幅度更新为:" + Text(custom_fudu, 2) + "%,幅速报警已自动开启");
            }
        }
    
    // 独立处理:幅度输入(只改幅度,分钟数不变)
        if(evtName == fd_fudu)
        {
            Numeric input_fud = Value(evtValue["幅度"]);
            // 有效性判断:非NA、≥0(幅度不能为负数)
            if(input_fud <> InvalidInteger && input_fud >= 0)
            {
                // 输入有效:更新变量+自动开启幅速报警+提示
                custom_fudu = input_fud;
                fdkg = true; // 自动开启幅速报警
                PushStatusMsg("预警:" + Text(custom_minutes) + "分钟,"+"幅度:" + Text(custom_fudu, 2)+"幅速报警已自动开启");
            }
            else
            {
                // 输入无效:保留原有值+提示+不改变报警状态
                PushStatusMsg("预警幅度输入无效(需≥0的数字),保留原有值:" + Text(custom_fudu, 2) + "%");
            }
    }
    
    OnBar(ArrayRef<Integer> indexs)
    {
    
        integer sjsj = Hour * 60 + Minute;
        if( BarStatus == 2 And sjsj != fz)
    
        {
    
            Numeric custom_bar = custom_minutes; // 自定义分钟数(对应K线根数,1分钟K线即n分钟对应n根Bar)
            Numeric target_fudu = custom_fudu; // 自定义预警幅度(%)
    
            // 替换原有固定的5和0.5,使用自定义变量
            if((Max(C , C[custom_bar]) - Min(C, C[custom_bar])) / Min(C, C[custom_bar]) * 100 >= target_fudu And fdkg == True)
            {
                Alert(SymbolName + IIFString(C > C[custom_bar], "涨速", "跌速") + Text((Max(C , C[custom_bar]) - Min(C, C[custom_bar])) / Min(C, C[custom_bar]) * 100, 2) + "%" );
                fz = sjsj;
            }
    
        }
    }

这个版本就是去掉单独开关,只要输入有效数,就可以开启,不用单独去点开关