在 MetaTrader 中使用 Telegram。Telegram 频道和机器人
我的自动投注秘诀。动态地段或 Autolot。
在 MetaTrader 中使用 Telegram。Telegram 频道和机器人
我的自动投注秘诀。动态地段或 Autolot。

描述

警报:搜索引擎中最常见的查询和论坛上的热门话题通常包括以下短语。警报系统会帮助你跟踪这些热门话题。

关于这些主题的警报可以帮助您及时了解最新趋势。

  • 警报
  • 警报指标
  • 如何为指标添加声音信号?
  • 帮助我在指标中插入声音信号
  • 如何插入警报和箭头
  • 当指标发出信号时,如何发送消息到邮箱或手机?

在本文中,我将详细描述一种简单的方法,使用可在 Expforex 获取的额外代码,为任何指标添加 警报、邮件、推送和箭头 通知。

  

前言 

要正确安装您的指标中的 警报,您必须拥有指标的开源代码。 

反编译代码是不理想的,因为对于初学者来说,反编译代码 提供的信息极少。很难理解。 

编辑后您可能还会遇到编译问题。 

xCustomEA

如果您正在寻找一种更简单的方法来 自动化您的交易策略,而无需深入复杂的自定义编程,可以考虑 xCustomEA

这款来自 Expforex 的专家顾问旨在与生成箭头信号的指标无缝协作。使用 xCustomEA,您可以轻松自动化任何显示买入或卖出箭头的指标,从而创建强大的自动化策略,而无需开发自定义代码的麻烦。

xCustomEA 使基于指标信号的策略自动化变得非常容易。它允许交易者专注于优化交易,而不是花费时间和资源进行自定义编程。这款专家顾问是雇佣程序员的绝佳替代方案,提供了一个简洁的解决方案,将指标信号转化为交易。

欲了解更多信息,请访问 xCustomEA 页面 或探索 Expforex 的其他专家顾问。

开始工作 插入警报

   首先,您需要确定哪些指标缓冲区提供特定信号,创建警报的目的,以及确定指标信号的条件。 

重要: 只有在变量代码开始时定义的外部缓冲区才能在指标中显示: 

#property indicator_buffers 1

然而,指标还可以包含隐藏的缓冲区,这些缓冲区在 init() 函数中设置并声明为变量:

IndicatorBuffers(7): 我们只需要前几个缓冲区。 

例如,如果您有 1 个外部缓冲区,那么查看变量: 

SetIndexBuffer(0, SarBuffer);
  • 0 是第一个缓冲区
  • 1 是第二个缓冲区

可以通过将鼠标悬停在图表上的特定指标线来识别这些缓冲区或它们的名称。

Value1 – 这是第一个缓冲区或代码索引系统中的 0。  

SetIndexBuffer(0, SarBuffer); // 我们需要的缓冲区名称  

如果这是 SarBuffer,那么我们将使用它。

此外,确定信号将如何触发是一个技术问题;

例如,如果这是从上方(下方)移动下(上)穿过 0 线的交叉点,情况如下:

SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0

指标穿越当前价格或某个柱子,指标的柱子突破,等等:

SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]

如果这是独特水平的交叉点,例如随机指标:

SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75;

SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;

如果您的指标中已经有箭头,则还可能出现以下类型的信号:

DnTrend[1] != EMPTY_VALUE && DnTrend[1] != 0 && UpTrend[2] != EMPTY_VALUE

无论如何,您需要应用逻辑和创造力来正确记录信号。如果遇到任何困难,请写入此线程,附上指标,显示图表上的线,并详细描述您无法完成的内容。发送像“您需要在指标中插入警报”这样的消息,而不解释在哪里以及做什么,也不提供指标本身,是没有帮助的。 

来自 www.expforex.com 的“警报和箭头”代码

向您的指标添加我们的警报的下一步包括几个点:

步骤 1

在专家顾问的 OnCalculate () 函数(start)之前,插入以下代码:

//+==+//+ www.expforex.com 编辑 AlertArrow +//+==+
extern string Alerts="来自 www.expforex.com 的警报和箭头";
extern bool AlerT=true; // 向屏幕发出警报
extern bool Mail=true; // 发送消息
extern bool Push=true; // 发送推送到手机
extern bool Arrow=true; // 在信号上放置箭头
extern int shift=1; // 在哪个柱子上计算信号 0 - 当前的,1 - 已关闭的
int timeee;
// 内部变量
string nameInd;
void SetArrow(int cd, color cl, string nm="", datetime t1=0, double p1=0, int sz=3)
{
  if(nm=="")
    nm=DoubleToStr(Time[0], 0);
  if(t1 <= 0)
    t1=Time[0];
  if(p1 <= 0)
    p1=Bid;
  nameInd=WindowExpertName();
  int wind=WindowFind(nameInd);
  wind=0;
  if(ObjectFind(nm) < 0)
    ObjectCreate(nm, OBJ_ARROW, wind, 0, 0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_WIDTH, sz);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Expforex_AlertArrow(string text="", int arrowdir=0, bool history=false, int i=0)
{
  nameInd=WindowExpertName();
  int wind=WindowFind(nameInd);
  if(wind==-1)
    wind=0;
  ObjectCreate("Originalalert", OBJ_LABEL, wind, 0, 0);
  ObjectSetText("Originalalert", "修改 AlertArrow www.expforex.com", 10, "Arial Bold", Red);
  ObjectSet("Originalalert", OBJPROP_CORNER, 2);
  ObjectSet("Originalalert", OBJPROP_XDISTANCE, 200);
  ObjectSet("Originalalert", OBJPROP_YDISTANCE, 10);
  if(!history)
  {
    if(AlerT)
      Alert(text);
    if(Arrow)
      if(arrowdir==1)
        SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift], 0), Time[shift], Low[shift]);
    if(Arrow)
      if(arrowdir==2)
        SetArrow(242, Red, nameInd + DoubleToStr(Time[shift], 0), Time[shift], High[shift]);
    if(!IsTesting())
      if(Mail)
        SendMail(text, text);
    if(!IsTesting())
      if(Push)
        SendNotification(text);
  }
  if(history)
  {
    if(Arrow)
      if(arrowdir==1)
        SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], Low[shift + i2]);
    if(Arrow)
      if(arrowdir==2)
        SetArrow(242, Red, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], High[shift + i2]);
  }
}//+==+//+ www.expforex.com 编辑 AlertArrow +//+==+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  for(int i=ObjectsTotal(); i>=0; i--)
  {
    if(StringFind(ObjectName(i), nameInd)!=-1)
      ObjectDelete(ObjectName(i));
  }
}
//+------------------------------------------------------------------+

步骤 2

 在关闭 OnCalculate () 函数之前,插入以下代码:

return(rates_total); }

粘贴以下代码:

//+==+//+ www.expforex.com 编辑 AlertArrow +//+==+

nameInd=WindowExpertName();

if(timeee != Time[0] && SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75)
{
  Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP", 1);
  timeee=Time[0];
}
if(timeee != Time[0] && SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25)
{
  Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN", 2);
  timeee=Time[0];
}//+==+//+ www.expforex.com 编辑 AlertArrow +//+==+

步骤 3

这段代码将作为我们的信号。

当然,您需要用您自己的代码替换部分代码。 

以下代码作为警报的信号:

1. 从上方(下方)移动下(上)穿过 0 线的交叉点,情况如下:

SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0

2. 指标穿越当前价格或某个柱子,指标的柱子突破,等等:

SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]

3. 如果这是独特水平的交叉点,例如随机指标:

SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75;

SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;

使用后

要向指标添加声音信号,请按照以下步骤操作:

  • 1. 打开指标的设置。
  • 2. 查找 “警报” 或 “箭头” 部分。
  • 3. 选择添加声音警报的选项。
  • 4. 选择您想用作警报的声音文件。
  • 5. 保存更改。

通过向指标插入声音信号,您可以在满足某些条件时接收听觉通知,这可以帮助您做出更好的交易决策。

如果您需要历史上的箭头,那么您需要执行以下操作:

在上述代码之后,添加以下内容:

//+==+//+ www.expforex.com 编辑 AlertArrow +//+==+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
if(counted_bars > 0)
   counted_bars--;
int limit2 = Bars - counted_bars;
for(int i2 = 0; i2 < limit2; i2++) {
    nameInd = WindowExpertName();
    if(SarBuffer[shift+1+i2] <= 75 && SarBuffer[shift+i2] > 75)
    {
        Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP" + i2, 1, true, i2);
    }
    if(SarBuffer[shift+1+i2] >= 25 && SarBuffer[shift+i2] < 25)
    {
        Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN" + i2, 2, true, i2);
    }
}
//+==+//+ www.expforex.com 编辑 AlertArrow +//+==+

示例

这些示例取自我们论坛的相应部分。我根据上述原则修改了指标。 

结论

在本文中,我以最详细和易懂的方式解释了为指标创建信号的过程。

上述代码可在任何指标上无限制使用。在向指标添加代码时,切勿更改作者的名称。 

如果您喜欢本文并发现这种插入信号的方法有用,请留下您的评论并评价这些主题。 

信号柱:这是需要知道的重要事项

有问题吗?

如果您有任何问题,请提出。我们不会卖弄花招。

此外,我们的每个产品在购买前都可以进行测试。

我们感谢您对我们产品的兴趣和支持,并努力保持高质量标准。

感谢您与我们同在!

您有问题吗?

Leave a Reply

Your email address will not be published. Required fields are marked *

This post is also available in: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어


     

    风险警告:


    过去的交易业绩并不保证未来的结果。

    保证金外汇交易具有高风险,可能不适合所有投资者。

    请注意,使用交易机器人涉及巨大风险,您的损失可能超过初始投资。

    请谨慎行事,仔细评估自己的财务状况,并考虑向合格的专业人士寻求建议。

    免责声明

    本网站使用Cookie以提升您的体验。通过使用本网站,您同意我们的 数据保护政策免责声明
    阅读更多