价格触及线时发出警报

创始人2025-03-14 16:32 38 浏览
点赞 收藏

‌1. SignalLINES 指标

描述翻译

SignalLINES 指标会在价格触及交易者自行绘制的线时发出警报。

线的名称必须在指标的“NaneLine”参数中输入。如果需要同时对多条线发出信号,

可以设置多个指标实例,并为每个实例指定不同的线。线可以是任意类型,包括趋势线或水平线。


当价格与线交叉时,指标会发出信号并显示线的名称。你的任务是根据这个信号做出决策并进入市场。


有一个类似的智能交易系统(EA),它会在价格交叉相应线时直接从市场开单。


功能分析

输入参数:需要一个参数 NaneLine 来指定线的名称。

信号触发:当价格触及或穿过指定线时,发出警报(Alert)。

多线支持:通过多个指标实例支持多条线。

2. cm SignalLines L 指标

描述翻译

cm SignalLines L 指标会在当前价格上下方立即构建两条趋势线。你可以将这些线调整到想要的位置。当价格穿过线时,指标会将整个工具窗口重绘为参数中指定的颜色。这样,你可以同时查看多个工具的情况。如果账户中有未平仓交易,窗口颜色会变为绿色。所有颜色都可以在参数中选择。


功能分析

自动绘制:在当前价格上下方生成两条趋势线。

手动调整:交易者可拖动线到所需位置。

交叉信号:价格穿过线时,改变窗口颜色。

交易状态:检测是否有未平仓订单,窗口颜色变为绿色。

自定义颜色:支持参数设置颜色。

输出:显示交叉线的名称。

//+------------------------------------------------------------------+

//|                                                    AlertLine.mq4 |

//|                               Copyright © 2024,eawalk.com |

//|                                         http://eawalk.com |

//| 如果价格触及线,则发出信号                                       |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2024 eawalk.com"

#property link      "http://eawalk.com"

#property indicator_chart_window


//+------------------------------------------------------------------+

extern string 线名称 = "Line"; // 线的名称

//+------------------------------------------------------------------+

int start()

{

   double 价格;

   string 提示文本;


   // 检查是否存在指定名称的线

   if (ObjectFind(线名称) == -1) 

   {

      提示文本 = StringConcatenate("未找到线 ", 线名称, "n请使用 MT 的工具绘制趋势线并将其命名为 ", 线名称);

   }

   else 

   {

      // 获取当前线的价格

      价格 = NormalizeDouble(ObjectGetValueByShift(线名称, 0), Digits);


      // 判断当前价格是否触及线

      if (NormalizeDouble(Bid, Digits) == 价格) 

      {

         提示文本 = StringConcatenate("价格触及线 ", 线名称, " 在 ", TimeToStr(TimeCurrent(), TIME_DATE | TIME_SECONDS));

         Alert(提示文本); // 发出警报

      }

      else 

      {

         提示文本 = StringConcatenate(提示文本, "距离线 '", 线名称, "' 还有 ", DoubleToStr(MathAbs((Bid - 价格) / Point), 0), " 点n");

      }

   }


   // 在图表上显示提示信息

   Comment(提示文本);

   return(0);

}

//+------------------------------------------------------------------+

第二个

//+------------------------------------------------------------------+

//|                                                 signallength.mq4 |

//|                             支撑与阻力线信号指标                 |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2024, eawalk.com"

#property link      "eawalk.com"


extern color 背景颜色 = clrNONE;             // 图表背景颜色

extern color 阻力线颜色 = clrOrange;         // 阻力线颜色

extern color 阻力背景颜色 = clrBisque;       // 阻力线触及时的背景颜色

extern color 支撑线颜色 = clrAqua;           // 支撑线颜色

extern color 支撑背景颜色 = clrLightCyan;    // 支撑线触及时的背景颜色

extern color 订单颜色 = clrLime;             // 有订单时的背景颜色

extern int 偏移设置 = 10;                    // 线与价格的偏移设置(单位:倍数)


int 当前周期;                                // 当前图表周期

#property indicator_chart_window


int 未使用计数 = 0;                          // 未使用的计数变量


//+------------------------------------------------------------------+

//| 指标初始化函数                                                   |

//+------------------------------------------------------------------+

int OnInit(void)

{

   // 如果指定了背景颜色,则应用到图表

   if (背景颜色 != clrNONE) 

      ChartSetInteger(0, CHART_COLOR_BACKGROUND, 背景颜色);

   背景颜色 = ChartGetInteger(0, CHART_COLOR_BACKGROUND); // 获取当前背景颜色

   当前周期 = Period();                           // 获取当前图表周期

   return(INIT_SUCCEEDED);

}


//+------------------------------------------------------------------+

//| 指标反初始化函数                                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

   // 当原因不是参数调整、图表切换或重新编译时,删除绘制的线

   if (reason != REASON_PARAMETERS && reason != REASON_CHARTCHANGE && reason != REASON_RECOMPILE)

   {

      ObjectDelete("阻力边界线");

      ObjectDelete("支撑边界线");

   }

}


//+------------------------------------------------------------------+

//| 指标计算函数                                                     |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

{

   int i, 订单数量 = 0;


   // 检查当前货币对的未平仓订单数量

   for (i = 0; i < OrdersTotal(); i++)

      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

         if (OrderSymbol() == Symbol()) 

            订单数量++;


   // 如果有订单,背景颜色设置为订单颜色;否则恢复默认背景颜色

   if (订单数量 > 0) 

      ChartSetInteger(0, CHART_COLOR_BACKGROUND, 订单颜色);

   else 

      ChartSetInteger(0, CHART_COLOR_BACKGROUND, 背景颜色);


   // 如果阻力线不存在,则绘制

   if (ObjectFind("阻力边界线") == -1)

   {

      绘制边界线("阻力边界线", 阻力线颜色, Time[0], Ask + 偏移设置 * 20 * Point, Time[0] + 当前周期 * 600, Ask + 偏移设置 * 20 * Point);

   }


   // 如果支撑线不存在,则绘制

   if (ObjectFind("支撑边界线") == -1)

   {

      绘制边界线("支撑边界线", 支撑线颜色, Time[0], Bid - 偏移设置 * 20 * Point, Time[0] + 当前周期 * 600, Bid - 偏移设置 * 20 * Point);

   }


   // 检查所有对象的触及情况

   int X_1, X_2, X3d;              // 时间坐标

   double Y_1, Y_2, Y3d;          // 价格坐标

   color 当前颜色;                 // 当前线的颜色


   for (int n = ObjectsTotal() - 1; n >= 0; n--) 

   {

      string 对象名称 = ObjectName(n);

      // 只处理名称中包含 "border" 且为趋势线的对象

      if (StringFind(对象名称, "border", 0) != -1 && ObjectType(对象名称) == OBJ_TREND)

      {

         X_1 = ObjectGet(对象名称, OBJPROP_TIME1); 

         X_2 = ObjectGet(对象名称, OBJPROP_TIME2); 

         if (X_1 == X_2) { ObjectDelete(对象名称); continue; } // 如果起点和终点相同,删除对象

         

         Y_1 = ObjectGet(对象名称, OBJPROP_PRICE1);

         Y_2 = ObjectGet(对象名称, OBJPROP_PRICE2);

         当前颜色 = ObjectGet(对象名称, OBJPROP_COLOR);


         // 如果当前时间在线的范围内

         if (X_1 <= Time[0] && X_2 >= Time[0])

         {

            X3d = Time[0];

            Y3d = ObjectGetValueByShift(对象名称, 0); // 获取当前时间点的线价格

            // 如果价格与线的距离小于设定值

            if (MathAbs(Y3d - Bid) / Point < 偏移设置)

            { 

               if (当前颜色 == 阻力线颜色)

               {

                  if (订单数量 == 0) 

                     ChartSetInteger(0, CHART_COLOR_BACKGROUND, 阻力背景颜色);

                  break;

               }

               else 

               {

                  if (订单数量 == 0) 

                     ChartSetInteger(0, CHART_COLOR_BACKGROUND, 支撑背景颜色);

                  break;

               }

            }

         }

      }

   }

   return(rates_total);

}


//+------------------------------------------------------------------+

//| 绘制边界线函数                                                   |

//+------------------------------------------------------------------+

void 绘制边界线(string 名称, color 颜色, int X1, double Y1, int X2, double Y2)

{

   ObjectCreate(名称, OBJ_TREND, 0, X1, Y1, X2, Y2); // 创建趋势线对象

   ObjectSet(名称, OBJPROP_COLOR, 颜色);             // 设置颜色

   ObjectSet(名称, OBJPROP_STYLE, STYLE_SOLID);      // 设置实线样式

   ObjectSet(名称, OBJPROP_WIDTH, 4);                // 设置线宽

   ObjectSet(名称, OBJPROP_BACK, false);             // 不绘制在背景

   ObjectSet(名称, OBJPROP_RAY, false);              // 不启用射线模式

}

//+------------------------------------------------------------------+

cm-SignalLines-L.gifSignalLINES4.gif

下一篇
没有了
评论0评论
游客