6评论

2收藏

给指标加上显示隐藏按钮的方法

avatar 舍堕 | 674 人阅读 | 6 人评论 | 2024-09-25

实现步骤:

1、定义变量

bool isVisible = true; // 控制指标显示状态的全局变量

2、在 init 函数中创建按钮

int init()
{
   // 设置显示隐藏按钮
   string buttonName = "ShowHideButton";
   ObjectCreate(0, buttonName, OBJ_BUTTON, 0, 0, 0);
   ObjectSetString(0, buttonName, OBJPROP_TEXT, "Hide");  // 按钮文本,默认为显示"Hide"
   ObjectSetInteger(0, buttonName, OBJPROP_CORNER, 0);    // 按钮位置,左上角
   ObjectSetInteger(0, buttonName, OBJPROP_XDISTANCE, 10);
   ObjectSetInteger(0, buttonName, OBJPROP_YDISTANCE, 10);
   ObjectSetInteger(0, buttonName, OBJPROP_WIDTH, 50);    // 按钮宽度
   ObjectSetInteger(0, buttonName, OBJPROP_HEIGHT, 20);   // 按钮高度
   ObjectSetInteger(0, buttonName, OBJPROP_HIDDEN, false); // 确保按钮显示

   // 其它初始化代码...
   SetIndexBuffer(0, ST1u);
   SetIndexBuffer(1, ST1d);
   // 其他初始化代码
   return(0);
}

3、在 OnChartEvent 中捕捉按钮点击事件

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    if(id == CHARTEVENT_OBJECT_CLICK && sparam == "ShowHideButton")
    {
        isVisible = !isVisible;  // 切换显示状态

        // 根据显示状态更新按钮文本
        if(isVisible)
        {
            ObjectSetString(0, "ShowHideButton", OBJPROP_TEXT, "Hide");
            ShowIndicator(true);  // 显示指标
        }
        else
        {
            ObjectSetString(0, "ShowHideButton", OBJPROP_TEXT, "Show");
            ShowIndicator(false); // 隐藏指标
        }
    }
}

4、创建显示或隐藏指标的函数 ShowIndicator

void ShowIndicator(bool show)
{
    for (int i = 0; i < 8; i++) // 控制8个缓冲区(箭头)的显示/隐藏
    {
        if (show)
        {
            PlotIndexSetInteger(i, PLOT_SHOW_DATA, true); // 显示箭头
        }
        else
        {
            PlotIndexSetInteger(i, PLOT_SHOW_DATA, false); // 隐藏箭头
        }
    }
}


5、修改 deinit 函数删除按钮 确保在卸载指标时删除按钮:

int deinit()
{
    ObjectDelete("ShowHideButton");  // 删除按钮
    // 其他清理工作...
    return(0);
}

总结:

通过按钮,用户可以点击来切换指标的显隐。

ShowIndicator 函数用于控制指标缓冲区的显示或隐藏。

使用 OnChartEvent 捕捉按钮点击事件来触发状态切换。

这样,在你的指标窗口左上角就会有一个“Hide”按钮,点击后指标会隐藏,按钮文字变为“Show”。再点击“Show”后,指标重新显示。

""
还没有人打赏,支持一下

评论|共 6 个

道无涯_8348

发表于 2024-9-26 03:02:57 | 显示全部楼层

其实没有那么复杂,你直接用OBJPROP_STATE判断目前按钮的状态,然后用if语句执行后面的操作就好了

WA263222

发表于 2024-9-26 07:34:46 | 显示全部楼层

道无涯_8348 发表于 2024-9-26 03:02
其实没有那么复杂,你直接用OBJPROP_STATE判断目前按钮的状态,然后用if语句执行后面的操作就好了

麻烦大佬给步骤写出来给我们小白研究

御风26500

发表于 2024-9-26 08:43:13 | 显示全部楼层

麻烦大佬发一个源码出来,再结合您的文字,能更好的理解,辛苦大佬

辞忧

发表于 2024-9-26 20:52:42 | 显示全部楼层

77.png    随便写的

期者胜

发表于 2024-9-29 14:14:56 | 显示全部楼层

感谢分享

联系微:yy01xp  看回测 及 策略讲解
4.jpg

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

EA之家评论守则