找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 1|回复: 0

【Caius 3.6 EA MT4】EA采用多重开仓逻辑,按优先级顺序执行

[复制链接]

6628

主题

54

回帖

4871

积分

管理员

积分
4871
发表于 2026-8-16 12:29:59 | 显示全部楼层 |阅读模式
Caius 3.6 EA 策略分析报告

概述

Caius 3.6 是一个基于MetaTrader 4平台的智能交易专家顾问(EA),集成了多种先进的技术分析方法和风险管理策略。该EA的主要特点包括:


多重技术指标融合:结合ADX、RSI、布林带、斐波那契回调等指标

AI趋势学习系统:使用神经网络进行市场趋势预测

订单流分析:实时分析买卖力量对比

动态风险管理:包含马丁格尔策略、固定止损、百分比止损等

趋势过滤机制:支持多种趋势确认条件

1. 基本结构分析

1.1 输入参数配置

// 通用设置

input double 风险比 = 0.001;           // 风险比(每100美元账户资金的交易手数)

input double 加倍点数 = 0.001;         // 加倍点数(已弃用)

input int 距离 = 20.0;                 // 基础开仓距离(点数)

input double 基础加仓距离 = 10.0;       // 基础加仓距离

input double 马丁倍率 = 1.3;           // 马丁格尔倍率

input int inFixed_SL = 100000;         // 固定止损金额(美元)

input double inPercentage_SL = 100;    // 百分比止损

安全机制:

仅允许指定账户使用

内置时间限制,过期后自动停止

2. 核心策略逻辑

2.1 开仓条件分析

EA采用多重开仓逻辑,按优先级顺序执行:


2.1.1 基础开仓逻辑(传统网格策略)

// 多头开仓条件

if (Cek_Loss_daily() == false &&                    // 每日亏损检查

    iOpen(NULL,0,0) < iClose(NULL,0,0) &&          // K线为阳线

    Bid >= PricBuyLine &&                           // 价格突破买入线

    LastType() != OP_BUY &&                         // 最后订单不是多单

    Count(-1) == 0) {                              // 无持仓订单

    // 执行开仓

}

2.1.2 趋势方向开仓(高级策略)

当启用启用趋势方向开仓时,优先执行趋势分析:


bool OpenTradeByTrend() {

    // 1. 更新指标状态

    UpdateIndicatorStatus();

    // 2. 计算综合趋势得分

    double trend_score = 0;

    // ADX趋势强度 (权重0.35)

    // RSI超买超卖状态 (权重0.25)

    // 布林带状态 (权重0.25)

    // 均线交叉状态 (权重0.15)

    // 斐波那契回调判断 (权重0.2)

    // 3. 根据得分决定开仓方向

    if (trend_score > 0.5) {

        // 开多仓

    } else if (trend_score < -0.5) {

        // 开空仓

    }

}

2.1.3 订单流增强开仓

当启用启用订单流分析时,进一步优化开仓方向:


if(启用订单流分析) {

    if(orderFlow.buyPower > orderFlow.sellPower) {

        // 买入信号强,开多单

    } else {

        // 卖出信号强,开空单

    }

}

2.2 技术指标体系

2.2.1 ADX指标(平均趋向指数)

周期:ADX周期 = 12(默认)

阈值:ADX阈值 = 25(默认)

作用:判断市场趋势强度,ADX > 25表示有趋势

2.2.2 RSI指标(相对强弱指数)

周期:RSI_Period = 14(默认)

超买阈值:RSI_Overbought = 70

超卖阈值:RSI_Oversold = 30

作用:识别超买超卖状态

2.2.3 布林带指标

周期:BB_Period = 20

标准差倍数:BB_Deviation = 2.0

作用:判断价格相对位置和波动性

2.2.4 ATR指标(平均真实波幅)

周期:ATR周期 = 7

作用:动态调整加仓距离

2.2.5 斐波那契回调

作用:判断价格在斐波那契水平上的位置

关键水平:38.2%、50%、61.8%

2.3 动态加仓系统

2.3.1 传统马丁格尔策略

Lot = Lot * pow(马丁倍率, orderCount);  // 每次亏损后按倍率增加手数

2.3.2 递增倍数加仓

input bool EnableIncrementalMartingale = false;    // 启用递增倍数加仓

input double InitialMultiplier = 1.0;              // 初始倍数

input double IncrementStep = 0.1;                  // 递增步长

input double MaxMultiplier = 1.5;                  // 最大倍数

input int BaseLotsCount = 3;                        // 基础手数单数

2.3.3 动态距离调整

double GetDynamicDistance() {

    if (!启用动态加仓距离) return 基础加仓距离;

    double atrValue = iATR(NULL, 0, ATR周期, 1);

    double adxValue = GetADXValue();

    // 动态调整波动敏感系数

    double dynamicCoefficient = 波动系数 * (1 + MathMin(adxValue, 50) / 100);

    double 动态距离 = 基础加仓距离 + (atrValue / _Point * dynamicCoefficient);

    return MathMax(动态距离, 基础加仓距离 * 0.5);

}

3. AI趋势学习系统

3.1 系统架构

struct AITrendLearner {

    double weights[][];        // 神经网络权重

    double biases[][];         // 神经网络偏置

    int layers;                // 网络层数

    int neuronsPerLayer;       // 每层神经元数

};

3.2 学习参数配置

input bool   启用AI趋势学习 = true;     // 启用AI趋势学习

input int    学习周期 = 1000;           // 历史数据学习周期

input int    预测周期 = 20;             // 未来预测周期

input double 学习率 = 0.01;             // 学习率

input int    神经网络层数 = 3;          // 神经网络隐藏层

input int    每层神经元 = 10;           // 每层神经元数量

3.3 特征提取

void ExtractFeatures(int shift, double &features[]) {

    // 价格数据特征

    features[0] = iClose(Symbol(), 0, shift);

    features[1] = iHigh(Symbol(), 0, shift) - iLow(Symbol(), 0, shift);

    // 技术指标特征

    features[2] = iADX(Symbol(), 0, ADX周期, PRICE_CLOSE, MODE_MAIN, shift);

    features[3] = iRSI(Symbol(), 0, RSI_Period, PRICE_CLOSE, shift);

    // 布林带特征

    features[4] = iBands(Symbol(), 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_UPPER, shift);

    features[5] = iBands(Symbol(), 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_LOWER, shift);

    // 移动平均特征

    features[6] = iMA(Symbol(), 0, 趋势均线周期, 0, MODE_SMA, PRICE_CLOSE, shift);

}

3.4 预测逻辑

double PredictTrend(double &features[]) {

    // 前向传播

    double layerOutput[];

    ArrayCopy(layerOutput, features);

    for(int i = 0; i < layers; i++) {

        layerOutput = ForwardPass(layerOutput, i);

    }

    // 返回预测结果(0-1之间)

    return layerOutput[0];

}

4. 订单流分析系统

4.1 数据结构

struct OrderFlowData {

    double buyPower;    // 买入力量

    double sellPower;   // 卖出力量

    string flowReason;  // 分析原因

};

4.2 权重配置

input bool   启用订单流分析 = true;     // 启用订单流分析

input double 订单流权重 = 0.6;          // 订单流分析权重

input double 技术指标权重 = 0.4;        // 技术指标权重

4.3 动态权重调整

struct DynamicWeights {

    double trend_weight;    // 趋势权重

    double flow_weight;     // 订单流权重

    double ai_weight;       // AI权重

};

DynamicWeights GetDynamicWeights() {

    // 根据市场波动率动态调整权重

    double volatility = iATR(Symbol(), 0, 14, 0) / iClose(Symbol(), 0, 0);

    if(volatility > 0.02) {  // 高波动期

        return {0.3, 0.5, 0.2};  // 增加订单流权重

    } else {  // 低波动期

        return {0.4, 0.3, 0.3};  // 平衡权重

    }

}

5. 风险管理系统

5.1 多重止损机制

5.1.1 固定金额止损

if(Calculate <= -inFixed_SL) {

    // 关闭所有订单

}

5.1.2 百分比止损

double Percentage = NormalizeDouble((inPercentage_SL/100) * Balance, 2);

if(Calculate <= -Percentage) {

    // 关闭所有订单

}

5.1.3 每日亏损限制

bool Cek_Loss_daily() {

    double dailyLoss = -ProfitDey(-1);

    return (dailyLoss >= DailyProfitLimit);

}

5.2 最大浮亏监控

// 实时更新各种周期的最大浮亏

MaxDrawdownDay = MathMax(MaxDrawdownDay, currentDrawdown);

MaxDrawdownYesterday = MathMax(MaxDrawdownYesterday, currentDrawdown);

MaxDrawdownWeek = MathMax(MaxDrawdownWeek, currentDrawdown);

MaxDrawdownMonth = MathMax(MaxDrawdownMonth, currentDrawdown);

5.3 交易时间限制

input int TimeStart = 0;   // 开始时间(小时)

input int TimeEnd = 23;    // 停止时间(小时)

6. 程序执行流程

6.1 初始化阶段(OnInit)

许可证验证

检查账户ID是否匹配

检查EA是否过期

参数初始化

设置图表显示属性

初始化全局变量

计算点值和小数位数

指标初始化

创建价格参考线

初始化斐波那契水平

初始化AI学习系统

训练历史数据

6.2 主循环阶段(OnTick)

graph TD

    A[开始OnTick] --> B[许可证和时间检查]

    B --> C[每日收益限制检查]

    C --> D[计算动态风险参数]

    D --> E[更新指标状态]

    E --> F{是否有持仓?}

    F -->|无| G[开仓逻辑]

    F -->|有| H[平仓逻辑]

    G --> I[CloseAll检查]

    H --> I

    I --> J[更新信息面板]

    J --> K[结束]

6.2.1 开仓逻辑详细流程

基础条件检查

每日亏损限制

K线状态(阴阳线)

价格位置(突破参考线)

订单状态(避免重复开仓)

高级策略判断

趋势方向开仓(优先级最高)

订单流分析优化

AI预测确认

动态手数计算

基础风险计算

马丁格尔倍数调整

递增倍数应用

6.2.2 平仓逻辑

被动平仓:达到止损条件时自动平仓

主动平仓:无固定止盈,依靠动态止损

6.3 指标更新流程

每10个tick执行一次:


更新所有技术指标值

计算趋势状态

更新订单流数据

刷新信息面板显示

7. 关键函数分析

7.1 OpenTradeByTrend() – 趋势开仓函数

功能:根据多重指标计算趋势得分,决定开仓方向


算法流程:


更新所有指标状态

计算ADX趋势强度得分(权重35%)

计算RSI超买超卖得分(权重25%)

计算布林带位置得分(权重25%)

计算均线交叉得分(权重15%)

计算斐波那契位置得分(权重20%)

综合评分决定开仓

7.2 ShouldOpenPosition() – 综合开仓判断

功能:整合趋势、订单流、AI预测的综合判断


评分机制:


趋势得分:ADX强度评估

订单流得分:买卖力量对比

AI得分:神经网络预测结果

最终得分 > 0.3 时允许开仓

7.3 GetDynamicDistance() – 动态距离计算

功能:根据市场波动率动态调整加仓距离


计算公式:


动态距离 = 基础加仓距离 + (ATR值 × 波动系数 × ADX调整)

7.4 CloseAll() – 风险平仓函数

功能:监控账户亏损,执行强制平仓


平仓条件:


固定金额亏损 ≥ inFixed_SL

百分比亏损 ≥ inPercentage_SL

8. 优势与特点

8.1 技术优势

多策略融合:传统网格 + 趋势跟踪 + AI预测

自适应算法:动态权重调整,根据市场状态优化

多重风控:固定止损 + 百分比止损 + 每日限制

智能化决策:AI学习历史数据,预测趋势

8.2 实用特点

可视化界面:实时显示账户状态和市场指标

参数可调:丰富的输入参数,支持个性化配置

稳定性保障:完善的错误处理和异常保护



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-8-25 07:45 , Processed in 0.114767 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表