酷代码 AI
菜单
全部AI  /  热门  /  AI问答
服务商

按照本框架整理代码策略用于外汇EA自动交易//+------------------------------------------------------------------+ //| 12.mq4 | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+-------------------- 买入条件:阴阳烛的最低价同时低于周期为2的平均线周期和为20的布林带下轨线,并且随机指标(Stochastic)的值小于5,MACD值小于5,下买单,每根阴阳烛触发次数小于3,设置固定的止损值为30,固定止盈800。阴阳

以下是按照MQL4框架整理的外汇EA交易策略代码: ```mql4 //+------------------------------------------------------------------+ //| ForexEA.mq4 | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property strict //--- 输入参数 input int StopLoss = 30; // 止损点数 input int TakeProfit = 800; // 止盈点数 input int MaxTradesPerBar = 3;// 每根K线最大交易次数 input int MA_Period = 2; // 移动平均线周期 input int BB_Period = 20; // 布林带周期 input double BB_Deviation = 2.0; // 布林带标准差 input int Stoch_K = 5; // 随机指标K周期 input int Stoch_D = 3; // 随机指标D周期 input int Stoch_Slowing = 3; // 随机指标减速 //--- 全局变量 int barTradeCount = 0; // 当前K线交易计数 datetime lastBarTime = 0; // 记录上一根K线时间 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // 检查新K线 if(Time[0] != lastBarTime) { lastBarTime = Time[0]; barTradeCount = 0; } // 检查交易次数限制 if(barTradeCount >= MaxTradesPerBar) return; // 获取指标值 double ma = iMA(NULL, 0, MA_Period, 0, MODE_A, PRICE_CLOSE, 0); double bbUpper = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 0); double bbLower = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 0); double stochMain = iStochastic(NULL, 0, Stoch_K, Stoch_D, Stoch_Slowing, MODE_A, 0, MODE_MAIN, 0); double stochSignal = iStochastic(NULL, 0, Stoch_K, Stoch_D, Stoch_Slowing, MODE_A, 0, MODE_SIGNAL, 0); double macdMain = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0); // 检查买入条件 if(Low[0] < ma && Low[0] < bbLower && stochMain < 5 && stochSignal < 5 && macdMain < 5) { OpenOrder(OP_BUY); } // 检查卖出条件 if(High[0] > ma && High[0] > bbUpper && stochMain > 80 && stochSignal > 80 && macdMain > 80) { OpenOrder(OP_SELL); } } //+------------------------------------------------------------------+ //| 开仓函数 | //+------------------------------------------------------------------+ void OpenOrder(int cmd) { double price = (cmd == OP_BUY) ? Ask : Bid; double sl = (cmd == OP_BUY) ? price - StopLoss * Point : price + StopLoss * Point; double tp = (cmd == OP_BUY) ? price + TakeProfit * Point : price - TakeProfit * Point; int ticket = OrderSend(Symbol(), cmd, 0.1, price, 3, sl, tp, "", 0, 0, clrNONE); if(ticket > 0) { barTradeCount++; } } ``` 代码说明: 1. 输入参数部分定义了可调整的交易参数,包括止损止盈点数、每根K线最大交易次数等。 2. 使用全局变量`barTradeCount`和`lastBarTime`来跟踪每根K线的交易次数。 3. 在`OnTick()`函数中: - 首先检查是否是新K线,如果是则重置交易计数 - 检查是否达到每根K线的最大交易次数限制 - 获取各项指标值(移动平均线、布林带、随机指标、MACD) - 检查买入和卖出条件 4. `OpenOrder()`函数处理实际的下单操作,包括设置止损止盈水平。 5. 交易条件严格遵循用户要求: - 买入条件:最低价同时低于2周期MA和20周期布林带下轨,且随机指标和MACD都小于5 - 卖出条件:最高价同时高于2周期MA和20周期布林带上轨,且随机指标和MACD都大于80 注意:实际使用前建议进行充分测试,可能需要根据具体交易品种调整参数。 [2025-04-24 11:27:55 | AI问答 | 1184点数解答]

相关提问