设为首页 收藏本站 切换语言
| 发表于 2025-6-28 14:54:39 | 显示全部楼层 |复制链接
指标名称:价格警报[color=rgba(0, 0, 0, 0.9)]
版本:MT4  ver. 1.06

价格警报,快捷方便价格提示,不管是手动交易还是程序化交易,都适合!
image.png
image.png
价格触发有三种类型:NormalAskBid(正常Ask/Bid价)、AskOnly(仅Ask价)和BidOnly(仅Bid价)。它们的逻辑和区别如下:
  • NormalAskBid(正常Ask/Bid价)

    • 这是默认的触发方式。它会根据市场上的Ask价格(买入价格)和Bid价格(卖出价格)来判断。
    • 触发条件是当AskBid价格超过或低于设定的警报价格时,警报会触发。
    • 用途:适用于大多数交易场景,因为它考虑了市场的买卖价格。
  • AskOnly(仅Ask价)

    • 仅在Ask价格超过或低于设定的警报价格时,才会触发警报。
    • 用途:这种模式通常用于关注买入价格的情况,比如在进行多头交易时关注市场的买入价格,或希望只对买入价格敏感的用户。
  • BidOnly(仅Bid价)

    • 仅在Bid价格超过或低于设定的警报价格时,才会触发警报。
    • 用途:这种模式通常用于关注卖出价格的情况,比如在进行空头交易时关注市场的卖出价格,或希望只对卖出价格敏感的用户。
  • NormalAskBid:触发条件是基于市场上的AskBid价格。
  • AskOnly:触发条件仅基于Ask价格。
  • BidOnly:触发条件仅基于Bid价格。
这三种触发方式根据交易者的需求和策略不同,适合不同的场景。例如,进行多头交易时,可能更关注Ask价格,而进行空头交易时,可能更关注Bid价格。
这三个按钮分别对应的是三种不同的价格触发类型,具体的逻辑和区别如下:
  • 上方价格(Above price)

    • 这个按钮设置的触发条件是当市场的价格高于设定的价格时,触发警报。
    • 例如,设定一个价格PriceAbove,当当前市场价格(可以是AskBid价格)高于这个价格时,就会触发警报,提醒交易者价格突破了设定的上方警戒线。
    • 用途:适用于想要在价格突破某一上方阻力位时获得通知的场景。
  • 下方价格(Below price)

    • 这个按钮设置的触发条件是当市场的价格低于设定的价格时,触发警报。
    • 例如,设定一个价格PriceBelow,当当前市场价格低于这个价格时,就会触发警报,提醒交易者价格跌破了设定的下方支撑位。
    • 用途:适用于想要在价格突破某一下方支撑位时获得通知的场景。
  • 精确价格(Exactly price)

    • 这个按钮设置的触发条件是当市场的价格精确匹配设定的价格时,触发警报。
    • 例如,设定一个价格PriceExactly,当当前市场价格(可以是AskBid价格)正好等于这个设定的价格时,就会触发警报,提醒交易者价格达到了设定的精确水平。
    • 用途:适用于想要在价格到达某一精确点位时获得通知的场景。
  • 上方价格:当市场价格超过设定价格时触发警报。
  • 下方价格:当市场价格低于设定价格时触发警报。
  • 精确价格:当市场价格等于设定价格时触发警报。
这三种触发方式可以帮助用户根据不同的市场情形设置不同的警报,以便更好地掌控交易时机。
  • 本地警报:当价格达到设定时,会触发本地警报并禁用该警报设置。
  • 邮件警报:当价格达到设定时,会发送邮件提醒并禁用该警报设置。
  • 推送通知警报:当价格达到设定时,会发送推送手机通知提醒并禁用该警报设置。

参数:设置展示颜色和宽度等设置
部分代码展示:

  1. //+------------------------------------------------------------------+//|                                                    价格警报.mq4 |//|                                Copyright © 2009-2024, www.QChaos.com |//|                                          https://www.qchaos.com/ |//+------------------------------------------------------------------+#property version   "1.06"string    Version = "1.06";#property strict#property indicator_plots 0#property description "根据价格变动发出多种警报。"#property description "需要在平台中配置电子邮件SMTP服务器设置。"#property description "需要通过MetaTrader设置MetaQuotes ID以接收推送通知。"
  2. #property indicator_chart_window// 指标显示在图表窗口中。#include <Controls\Dialog.mqh>// 引入对话框控件库。#include <Controls\CheckBox.mqh>// 引入复选框控件库。#include <Controls\Label.mqh>// 引入标签控件库。#include <Controls\Button.mqh>// 引入按钮控件库。
  3. //#define CONTROLS_BUTTON_COLOR_PRESSED  C'200,200,200'#define CONTROLS_BUTTON_COLOR_PRESSED  clrRed// 定义按钮按下时的背景颜色(灰色)。enum ENUM_ALERT_ON_PRICE// 枚举:定义警报触发的价格基准类型。  {   NormalAskBid, // 正常Ask/Bid价   AskOnly,      // 仅Ask价   BidOnly,      // 仅Bid价   PreviousClose // 前一根K线收盘价  };
  4. //input group "Main"// 输入参数组:"Main"(主要设置)double PriceGoesAbove = 0;// 输入参数:上方触发价格,默认值为0。double PriceGoesBelow = 0;// 输入参数:下方触发价格,默认值为0。double PriceIsExactly = 0;// 输入参数:精确触发价格,默认值为0。bool NativeAlert = false;// 输入参数:是否启用原生弹窗警报,默认值为false。bool SendEmail = false;// 输入参数:是否发送电子邮件通知,默认值为false。bool SendPush = false;// 输入参数:是否发送推送通知,默认值为false。ENUM_ALERT_ON_PRICE AlertOnPrice = NormalAskBid;// 输入参数:警报触发的价格基准类型,默认值为NormalAskBid。bool PanelOnTopOfChart = true;// 输入参数:是否将面板绘制在图表上方,默认值为true。
  5. //input group "Lines"// 输入参数组:"Lines"(线条设置)input color above_line_color = clrGreen;// 输入参数:上方触发线的颜色,默认值为绿色。input color below_line_color = clrRed;// 输入参数:下方触发线的颜色,默认值为红色。input color exactly_line_color = clrYellow;// 输入参数:精确触发线的颜色,默认值为黄色。input ENUM_LINE_STYLE above_line_style = STYLE_SOLID;// 输入参数:上方触发线的样式,默认值为实线。input ENUM_LINE_STYLE below_line_style = STYLE_SOLID;// 输入参数:下方触发线的样式,默认值为实线。input ENUM_LINE_STYLE exactly_line_style = STYLE_SOLID;// 输入参数:精确触发线的样式,默认值为实线。input uint above_line_width = 3;// 输入参数:上方触发线的宽度,默认值为3。input uint below_line_width = 3;// 输入参数:下方触发线的宽度,默认值为3。input uint exactly_line_width = 3;// 输入参数:精确触发线的宽度,默认值为3。
  6. //input group "Position"// 输入参数组:"Position"(面板位置设置)int DefaultPanelPositionX = 0;// 输入参数:面板的X坐标,默认值为0。int DefaultPanelPositionY = 15;// 输入参数:面板的Y坐标,默认值为15。ENUM_BASE_CORNER DefaultPanelPositionCorner = CORNER_LEFT_UPPER;// 输入参数:面板的定位角,默认值为左上角。
  7. struct Settings// 结构体:用于存储用户设置。  {   double            PriceAbove;       // 上方触发价格   double            PriceBelow;       // 下方触发价格   double            PriceExactly;     // 精确触发价格   bool              AlertNative;      // 是否启用原生弹窗警报   bool              AlertEmail;       // 是否发送电子邮件通知   bool              AlertPush;        // 是否发送推送通知   ENUM_ALERT_ON_PRICE AlertOnPrice;   // 警报触发的价格基准类型  } sets;
  8. //+------------------------------------------------------------------+//|                                                                  |//+------------------------------------------------------------------+class CPriceAlertPanel : public CAppDialog// 类:价格警报面板,继承自CAppDialog。  {private:   CCheckBox         m_ChkEmail, m_ChkPush, m_ChkNative, m_ChkUseCandleClose;   // 复选框控件:电子邮件、推送、原生警报、使用收盘价。   CEdit             m_EdtAbove, m_EdtBelow, m_EdtExactly;   // 编辑框控件:上方、下方、精确价格。   CButton           m_BtnAlertOnPrice, m_BtnAbove, m_BtnBelow, m_BtnExactly;   // 按钮控件:价格基准类型、上方、下方、精确价格。   CLabel            m_LblAlertOnPrice, m_LblURL;   // 标签控件:价格基准类型标签、URL标签。   string            m_FileName;   // 文件名:用于保存设置的文件名。   double            m_DPIScale;   // DPI缩放比例:用于适配不同分辨率的屏幕。   bool              NoPanelMaximization;   // 防止面板在初始化时最大化。
  9. public:                     CPriceAlertPanel(void);   // 构造函数。                    ~CPriceAlertPanel(void) {};   // 析构函数。
  10.    virtual bool      Create(const long chart, const string name, const int subwin, const int x1, const int y1);   // 创建面板。   virtual bool      OnEvent(const int id, const long& lparam, const double& dparam, const string& sparam);   // 事件处理函数。   virtual void      RefreshValues();   // 刷新面板中的值。   virtual bool      SaveSettingsOnDisk();   // 将设置保存到磁盘。   virtual bool      LoadSettingsFromDisk();   // 从磁盘加载设置。   virtual bool      DeleteSettingsFile();   // 删除设置文件。   virtual bool      Run()     {      SeekAndDestroyDuplicatePanels();      // 查找并销毁重复的面板。      return(CAppDialog::Run());     }   virtual void      IniFileLoad()     {      CAppDialog::IniFileLoad();      // 加载INI文件设置。      InitObjects();      // 初始化面板控件。     }   virtual void      HideShowMaximize(bool max);   // 隐藏/显示/最大化面板。   string            IniFileName(void) const;   // 获取INI文件名。   virtual void      FixatePanelPosition()     {      if(!m_minimized)         m_norm_rect.SetBound(m_rect);      // 固定面板位置。      else         m_min_rect.SetBound(m_rect);     }
  11.    // 记住面板的位置,以便在最小化和最大化时保持一致。   int               remember_top, remember_left;
  12. private:   virtual bool      InitObjects();   // 初始化面板控件。   virtual bool      CreateObjects();   // 创建面板控件。   virtual bool      DisplayValues();   // 显示面板中的值。   virtual void      SeekAndDestroyDuplicatePanels();   // 查找并销毁重复的面板。
  13.    virtual bool      ButtonCreate(CButton&    Btn, int X1, int Y1, int X2, int Y2, string Name, string Text);   // 创建按钮控件。   virtual bool      CheckBoxCreate(CCheckBox&  Chk, int X1, int Y1, int X2, int Y2, string Name, string Text);   // 创建复选框控件。   virtual bool      EditCreate(CEdit&      Edt, int X1, int Y1, int X2, int Y2, string Name, string Text);   // 创建编辑框控件。   virtual bool      LabelCreate(CLabel&     Lbl, int X1, int Y1, int X2, int Y2, string Name, string Text);   // 创建标签控件。   virtual void      Maximize();   // 最大化面板。   virtual void      Minimize();   // 最小化面板。
  14.    // 事件处理函数   void              OnClickBtnAlertOnPrice();   // 点击价格基准类型按钮。   void              OnClickBtnAbove();   // 点击上方价格按钮。   void              OnClickBtnBelow();   // 点击下方价格按钮。   void              OnClickBtnExactly();   // 点击精确价格按钮。   void              OnEndEditEdtAbove();   // 编辑上方价格编辑框完成。   void              OnEndEditEdtBelow();   // 编辑下方价格编辑框完成。   void              OnEndEditEdtExactly();   // 编辑精确价格编辑框完成。   void              OnChangeChkEmail();   // 更改电子邮件复选框状态。   void              OnChangeChkPush();   // 更改推送复选框状态。   void              OnChangeChkNative();   // 更改原生警报复选框状态。  };
  15. CPriceAlertPanel Panel;// 全局变量:价格警报面板实例。
  16. // 全局变量:string PanelCaption = "";// 面板标题。bool Dont_Move_the_Panel_to_Default_Corner_X_Y;// 是否将面板移动到默认位置。bool Uninitialized = true;// 是否未初始化。//+------------------------------------------------------------------+//| Custom indicator initialization function                         |//+------------------------------------------------------------------+int OnInit()  {   MathSrand(GetTickCount() + 937029); // Used by CreateInstanceId() in Dialog.mqh (standard library). Keep the second number unique across other panel indicators/EAs.
  17.    Dont_Move_the_Panel_to_Default_Corner_X_Y = true;
  18. // Prevent attachment of second panel if it is not a timeframe/parameters change.   if(GlobalVariableGet("PA-" + IntegerToString(ChartID()) + "-Flag") > 0)     {      GlobalVariableDel("PA-" + IntegerToString(ChartID()) + "-Flag");     }   else     {      int indicators_total = ChartIndicatorsTotal(0, 0);      for(int i = 0; i < indicators_total; i++)        {         if(ChartIndicatorName(0, 0, i) == "价格警报" + IntegerToString(ChartID()))           {            Print("价格警报 panel is already attached.");            return(INIT_FAILED);           }        }     }
  19.    IndicatorSetString(INDICATOR_SHORTNAME, "价格警报" + IntegerToString(ChartID()));   PanelCaption = "价格警报 (ver. " + Version + ")";
  20.    if(!Panel.LoadSettingsFromDisk())     {      sets.PriceAbove = PriceGoesAbove;      sets.PriceBelow = PriceGoesBelow;      sets.PriceExactly = PriceIsExactly;      sets.AlertNative = NativeAlert;      sets.AlertEmail = SendEmail;      sets.AlertPush = SendPush;      sets.AlertOnPrice = AlertOnPrice;     }
  21.    if(!Panel.Create(0, PanelCaption, 0, DefaultPanelPositionX, DefaultPanelPositionY))      return(-1);
  22.    string filename = Panel.IniFileName() + Panel.IniFileExt();// No ini file - move the panel according to the inputs.   if(!FileIsExist(filename))      Dont_Move_the_Panel_to_Default_Corner_X_Y = false;
  23.    Panel.IniFileLoad();
  24.    Panel.Run();
  25.    Initialization();
  26. // Brings panel on top of other objects without actual maximization of the panel.   Panel.HideShowMaximize(false);
  27.    if(!Dont_Move_the_Panel_to_Default_Corner_X_Y)     {      int new_x = DefaultPanelPositionX, new_y = DefaultPanelPositionY;      int chart_width = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);      int chart_height = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);      int panel_width = Panel.Width();      int panel_height = Panel.Height();
  28.       // Invert coordinate if necessary.      if(DefaultPanelPositionCorner == CORNER_LEFT_LOWER)        {         new_y = chart_height - panel_height - new_y;        }      else         if(DefaultPanelPositionCorner == CORNER_RIGHT_UPPER)           {            new_x = chart_width - panel_width - new_x;           }         else            if(DefaultPanelPositionCorner == CORNER_RIGHT_LOWER)              {               new_x = chart_width - panel_width - new_x;               new_y = chart_height - panel_height - new_y;              }      Panel.remember_left = new_x;      Panel.remember_top = new_y;      Panel.Move(new_x, new_y);      Panel.FixatePanelPosition(); // Remember the panel's new position for the INI file.     }
  29.    return(INIT_SUCCEEDED);  }
复制代码

价格警报.ex4

167.06 KB, 下载次数: 3, 下载积分: 活跃度 -5  [下载]

评分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN    参与人数:0    我的评分:未评 下载时遇到问题?
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论1

jxj600
DD
| 发表于 2025-6-29 07:06:24 | 显示全部楼层
这个没啥用吧
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)