daodan0603 发表于 2025-1-26 23:48:53

来高手写EA

MT5

1.MACD金叉后K线上穿MA60,往下回调后不破0轴,第二次金叉确认后第二跟K线进多。
2.MACD死叉后K线下穿MA60,往上回调后不破0轴,第二次死叉确认后第二跟K线进多。
3.盈亏比任意设置

alonestar 发表于 2025-2-3 21:48:21

//+------------------------------------------------------------------+
//| 自定义交易策略示例                                                   |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property link      "http://yourwebsite.com"
#property version   "1.00"

// 定义全局变量
extern double TakeProfit = 100;   // 止盈点数,可自行设置
extern double StopLoss = 50;    // 止损点数,可自行设置

//+------------------------------------------------------------------+
//| 初始化函数,仅在EA启动时调用一次                                       |
//+------------------------------------------------------------------+
int OnInit()
{
    // 检查是否有足够的历史数据
    if (Bars < 100)
    {
      Print("历史数据不足");
      return INIT_FAILED;
    }
    return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| 每根K线结束时调用的函数                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    // 获取MACD指标数据
    int rates_total = Bars;
    double macdBuffer[];
    double signalBuffer[];
    double histogramBuffer[];
    IndicatorBuffers(3);
    IndicatorSetInteger(INDICATOR_APPLIED_PRICE, PRICE_CLOSE);
    IndicatorSetDouble(INDICATOR_PERIOD_1, 12);
    IndicatorSetDouble(INDICATOR_PERIOD_2, 26);
    IndicatorSetDouble(INDICATOR_PERIOD_SIGNAL, 9);
    CopyBuffer(0, 0, 0, rates_total, macdBuffer);
    CopyBuffer(0, 1, 0, rates_total, signalBuffer);
    CopyBuffer(0, 2, 0, rates_total, histogramBuffer);

    // 获取MA60数据
    double ma60Buffer[];
    int ma60_handle = iMA(_Symbol, _Period, 60, 0, MODE_SMA, PRICE_CLOSE);
    CopyBuffer(ma60_handle, 0, 0, rates_total, ma60Buffer);

    // 做多条件
    if (macdBuffer < signalBuffer && macdBuffer > signalBuffer &&
      Close < ma60Buffer && Close > ma60Buffer &&
      histogramBuffer >= 0 && histogramBuffer >= 0)
    {
      if (OrderSelect(Symbol(), SELECT_BY_SYMBOL | SELECT_BY_POS, MODE_TRADES) == -1)
      {
            int ticket = OrderSend(_Symbol, OP_BUY, LotSize, Ask, 3, Ask - StopLoss * Point, Ask + TakeProfit * Point, "MACD MA60 Long", 16384, 0, Green);
            if (ticket < 0)
                PrintFormat("做多下单失败, 错误代码: %d", GetLastError());
      }
    }

    // 做空条件
    if (macdBuffer > signalBuffer && macdBuffer < signalBuffer &&
      Close > ma60Buffer && Close < ma60Buffer &&
      histogramBuffer <= 0 && histogramBuffer <= 0)
    {
      if (OrderSelect(Symbol(), SELECT_BY_SYMBOL | SELECT_BY_POS, MODE_TRADES) == -1)
      {
            int ticket = OrderSend(_Symbol, OP_SELL, LotSize, Bid, 3, Bid + StopLoss * Point, Bid - TakeProfit * Point, "MACD MA60 Short", 16384, 0, Red);
            if (ticket < 0)
                PrintFormat("做空下单失败, 错误代码: %d", GetLastError());
      }
    }
}

//+------------------------------------------------------------------+
//| 程序停止时调用的函数                                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // 清理资源
}

江苏宇桐科技 发表于 2025-2-5 16:14:23

请问愿意支付人民币吗?
页: [1]
查看完整版本: 来高手写EA