本EA策略基于MACD指标,实现自动交易,具体规则如下:

多单操作:

  1. 检查当前魔术码下'多单持仓' 是否为0,如果是,则MACD金叉的时候做多,初始手数为'初始多手数'。
  2. 每上涨'多补仓间距'微点,以第一个多单持仓订单的'多补仓倍数'进行补仓,补仓次数为'多补仓次数'。
  3. 多单持仓时,检查当前魔术码下的'空单持仓' 是否为0,如果是,并且当前最新价格低于第一个多单订单'多补仓间距'微点间距,则以'初始多手数'进行锁仓。
  4. 锁仓后,以第一个锁仓空单为基础,每下跌'多补仓间距'微点间距,以持仓第一个空单订单手数的'多补仓倍数'进行补仓做空,补仓次数为'多补仓次数'。
  5. 当多空总盈利达到'多空总盈利美元'时,全部平仓。

空单操作:

  1. 检查当前魔术码下的'空单持仓' 是否为0,如果是,则MACD死叉的时候做空,初始手数为'初始空手数'。
  2. 每下跌'空补仓间距'微点,以第一个空单持仓订单的'空补仓倍数'进行补仓,补仓次数为'空补仓次数'。
  3. 空单持仓时,检查当前魔术码下的'多单持仓' 是否为0,如果是,并且当前最新价格高于第一个空单订单'空补仓间距'微点间距,则以'初始空手数'进行锁仓。
  4. 锁仓后,以第一个锁仓多单为基础,每上涨'空补仓间距'微点间距,以持仓第一个多单订单手数的'空补仓倍数'进行补仓做多,补仓次数为'空补仓次数'。
  5. 当多空总盈利达到'多空总盈利美元'时,全部平仓。

EA属性:

  • 魔术码:自定义
  • 初始手数:自定义
  • 补仓倍数:自定义
  • 补仓次数:自定义
  • 多空总盈利(美元):自定义
  • 补仓间距:自定义

代码示例:

// 在原有代码的基础上添加以下内容

extern int 多魔术码 = 92133;
extern double 初始多手数 = 0.5;
extern double 多补仓倍数 = 0.6;
extern int 多补仓次数 = 5;
extern double 多空总盈利美元 = 40;
extern double 多补仓间距 = 0.001;

extern int 空魔术码 = 92133;
extern double 初始空手数 = 0.5;
extern double 空补仓倍数 = 0.6;
extern int 空补仓次数 = 5;
extern double 多空总盈利美元 = 40;
extern double 空补仓间距 = 0.001;

// 在OnTick函数中进行修改
void OnTick()
{
    // 检查多单持仓是否为0
    if (danshu(多魔术码, OP_BUY) == 0)
    {
        // MACD金叉且价格上涨
        if (buy)
        {
            double currentProfit = (Ask - firstBuyOrderPrice) * 100000; // 换算为点数
            double orderLots = OrderLots(多魔术码, OP_BUY); // 第一个多单的手数

            if (currentProfit >= 100 && orderLots > 0)
            {
                double newLots = orderLots * 多补仓倍数; // 加仓手数为上一个多单手数的倍数
                int res5 = OrderSend(Symbol(), OP_BUY, newLots, Ask, 30, stp_b, stk_b, "1", 多魔术码, 0, Red);
                if (res5 > 0)
                {
                    // 创建箭头对象等操作
                    // ...
                }
                if (res5 <= 0)
                {
                    Sleep(time);
                }
            }
        }
        // 第一个多单持仓订单的盈利达到设定的总盈利美元
        else if (duoyingkui(多魔术码) >= 多空总盈利美元)
        {
            close_allx(多魔术码); // 平仓所有多单订单
        }
    }

    // 检查空单持仓是否为0
    if (danshu(空魔术码, OP_SELL) == 0)
    {
        // MACD死叉且价格下跌
        if (sell)
        {
            double currentProfit = (firstSellOrderPrice - Bid) * 100000; // 换算为点数
            double orderLots = OrderLots(空魔术码, OP_SELL); // 第一个空单的手数

            if (currentProfit >= 100 && orderLots > 0)
            {
                double newLots = orderLots * 空补仓倍数; // 加仓手数为上一个空单手数的倍数
                int res5 = OrderSend(Symbol(), OP_SELL, newLots, Bid, 30, stp_s, stk_s, "1", 空魔术码, 0, Lime);
                if (res5 > 0)
                {
                    // 创建箭头对象等操作
                    // ...
                }
                if (res5 <= 0)
                {
                    Sleep(time);
                }
            }
        }
        // 第一个空单持仓订单的盈利达到设定的总盈利美元
        else if (duoyingkui(空魔术码) >= 多空总盈利美元)
        {
            close_allx(空魔术码); // 平仓所有空单订单
        }
    }

    // 其他代码...
}

// 检查特定魔术码下的订单数量
int danshu(int magic, int type)
{
    int count = 0;
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
            break;
        if (OrderType() == type && OrderMagicNumber() == magic)
        {
            count++;
        }
    }
    return count;
}

// 获取特定魔术码下的总盈亏
double duoyingkui(int magic)
{
    double totalProfit = 0.0;
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
            break;
        if (OrderMagicNumber() == magic)
        {
            totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
        }
    }
    return totalProfit;
}

请注意,以上代码仅供参考,并可能需要根据实际需求进行修改和完善。确保在使用之前进行充分测试。

EA策略:MACD金叉/死叉做单,自动补仓锁仓止盈

原文地址: https://www.cveoy.top/t/topic/b5zJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录