欢迎访问

价格触及线时发出警报

author emer | 32 人阅读 | 0 人评论 |
  1. SignalLINES 指标 描述翻译 SignalLINES 指标会在价格触及交易者自行绘制的线时发出警报。 线的名称必须在指标的“NaneLine”参数中输入。如果需要同时对多条线发出信号, 可以设置多个指标实例,并为每个实例指定不同的线。线可以是任意类型,包括趋势线或水平线。 当价格与线交叉时,指标会发出信号并显示线的名称。你的任务是根据这个信号做出决策并进入市场。 有一个类似的智能交易系统(EA),它会在价格交叉相应线时直接从市场开单。 功能分析 输入参数:需要一个参数 NaneLine 来指定线的名称。 信号触发:当价格触及或穿过指定线时,发出警报(Alert)。 多线支持:通过多个指标实例支持多条线。 2. cm SignalLines L 指标 描述翻译 cm SignalLines L 指标会在当前价格上下方立即构建两条趋势线。你可以将这些线调整到想要的位置。当价格穿过线时,指标会将整个工具窗口重绘为参数中指定的颜色。这样,你可以同时查看多个工具的情况。如果账户中有未平仓交易,窗口颜色会变为绿色。所有颜色都可以在参数中选择。 功能分析 自动绘制:在当前价格上下方生成两条趋势线。 手动调整:交易者可拖动线到所需位置。 交叉信号:价格穿过线时,改变窗口颜色。 交易状态:检测是否有未平仓订单,窗口颜色变为绿色。 自定义颜色:支持参数设置颜色。 输出:显示交叉线的名称。 cpp //+------------------------------------------------------------------+ //| 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.gifSigna
还没有人打赏,支持一下