普乐智能

查看: 165|回复: 0

在按钮按下时绘制黄线并在按钮关闭时删除黄线的功能

[复制链接]

338

主题

424

帖子

1670

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1670
发表于 2025-3-6 14:12:27 | 显示全部楼层 |阅读模式
  1. //挂单开仓条件

  2. 按钮("开仓价<",285,55,65,20,CORNER_LEFT_LOWER,clrAliceBlue,clrBlack);
  3. 文本框("开仓价<-2",""+Ask+"",350,55,55,20,CORNER_LEFT_LOWER,clrWhite,clrBlack);

  4. // 处理"开仓价<"按钮的黄线
  5. if(ObjectGetInteger(0,"开仓价<",OBJPROP_STATE)==1)
  6. {
  7.     double price = StrToDouble(ObjectGetString(0,"开仓价<-2",OBJPROP_TEXT));
  8.     string lineName = "开仓价<线";
  9.    
  10.     // 创建或更新黄线
  11.     if(ObjectFind(0, lineName) < 0)
  12.     {
  13.         ObjectCreate(0, lineName, OBJ_HLINE, 0, 0, price);
  14.         ObjectSetInteger(0, lineName, OBJPROP_COLOR, clrYellow);
  15.         ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_SOLID);
  16.         ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 2);
  17.     }
  18.     else
  19.     {
  20.         ObjectMove(0, lineName, 0, 0, price);
  21.     }
  22.    
  23.     if(DoubleToStr(Bid,Digits) <= price)
  24.     {
  25.         if(平仓次数<1 && 编号>0 && 震荡运行开关)
  26.         {
  27.             zhendang_Checkopen();
  28.             if(CalculateCurrentOrders_b(Symbol())>0){zhendang_Checkopen();}
  29.         }
  30.         if(平仓次数<1 && 编号>0 && 盈利加仓运行开关)
  31.         {  
  32.             winadd_Checkopen();
  33.             if(CalculateCurrentOrders(Symbol())>0){winadd_Checkopen();}
  34.         }
  35.     }
  36. }
  37. else
  38. {
  39.     // 删除黄线
  40.     string lineName = "开仓价<线";
  41.     if(ObjectFind(0, lineName) >= 0)
  42.     {
  43.         ObjectDelete(0, lineName);
  44.     }
  45. }

  46. 按钮("开仓价>",410,55,65,20,CORNER_LEFT_LOWER,clrAliceBlue,clrBlack);
  47. 文本框("开仓价>-2",""+Ask+"",470,55,55,20,CORNER_LEFT_LOWER,clrWhite,clrBlack);

  48. // 处理"开仓价>"按钮的黄线
  49. if(ObjectGetInteger(0,"开仓价>",OBJPROP_STATE)==1)
  50. {
  51.     double price = StrToDouble(ObjectGetString(0,"开仓价>-2",OBJPROP_TEXT));
  52.     string lineName = "开仓价>线";
  53.    
  54.     // 创建或更新黄线
  55.     if(ObjectFind(0, lineName) < 0)
  56.     {
  57.         ObjectCreate(0, lineName, OBJ_HLINE, 0, 0, price);
  58.         ObjectSetInteger(0, lineName, OBJPROP_COLOR, clrYellow);
  59.         ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_SOLID);
  60.         ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 2);
  61.     }
  62.     else
  63.     {
  64.         ObjectMove(0, lineName, 0, 0, price);
  65.     }
  66.    
  67.     if(DoubleToStr(Ask,Digits) >= price)
  68.     {
  69.         if(平仓次数<1 && 编号>0 && 震荡运行开关)
  70.         {
  71.             zhendang_Checkopen();
  72.             if(CalculateCurrentOrders_b(Symbol())>0){zhendang_Checkopen();}
  73.         }
  74.         if(平仓次数<1 && 编号>0 && 盈利加仓运行开关)
  75.         {  
  76.             winadd_Checkopen();
  77.             if(CalculateCurrentOrders(Symbol())>0){winadd_Checkopen();}
  78.         }
  79.     }
  80. }
  81. else
  82. {
  83.     // 删除黄线
  84.     string lineName = "开仓价>线";
  85.     if(ObjectFind(0, lineName) >= 0)
  86.     {
  87.         ObjectDelete(0, lineName);
  88.     }
  89. }
复制代码
[size=16.002px]主要修改说明:
  • 黄线管理逻辑

    • 为每个按钮分别创建唯一命名的水平线对象("开仓价<线" 和 "开仓价>线")
    • 当按钮按下时:
      • 检查是否存在对应黄线,不存在则创建新黄线
      • 如果已存在则更新黄线位置到最新价格
      • 设置黄线属性(黄色、实线、2像素宽度)

    • 当按钮弹起时:
      • 自动删除对应的黄线


  • 价格动态更新
    • 使用ObjectMove()函数实现黄线位置的实时更新,当文本框中的价格改变时,黄线会自动跟随移动
    • 价格数据来自对应文本框的实时内容(ObjectGetString()获取)

  • 对象管理优化
    • 使用ObjectFind()检查对象存在性,避免重复创建
    • 使用ObjectDelete()进行对象清理,确保按钮弹起时及时移除黄线


[size=16.002px]注意事项:
  • 黄线宽度设置为2像素以便观察,可根据需要调整OBJPROP_WIDTH参数
  • 如果遇到画线不更新问题,请检查文本框内容是否为有效数字格式
  • 确保没有其他代码删除图表对象,避免冲突
  • 黄线颜色clrYellow可根据需要替换为其他颜色常量


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|11wo.com

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4( 备案号:桂ICP备18000909号-1 )QQ

快速回复 返回顶部 返回列表