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); // 不启用射线模式
}
//+------------------------------------------------------------------+