MQL4 代码示例:修复常见错误并实现自动交易策略/n/n在本文中,我们将解决在 MQL4 代码中经常遇到的一些错误,并提供一个完整的、改进的代码示例。/n/n### 常见错误和解决方案/n/n以下是一些在提供的代码片段中发现的常见错误及其解决方案:/n/n1. 'INITIAL_LOT_SIZE' - constant expected 7777.mq4 87 46: 此错误表示您尝试在不应修改变量值的位置修改 'INITIAL_LOT_SIZE' 的值。为解决此问题,请确保 'INITIAL_LOT_SIZE' 在函数外部声明为 extern 变量,并仅在函数外部或 OnInit() 函数中为其赋值。/n/n2. 'lastOrderType' - function not defined 7777.mq4 61 13: 此错误表示您正在尝试使用未定义的函数 'lastOrderType'。要解决此问题,您需要使用 OrderType() 函数获取最近一笔订单的类型。/n/n3. 'OP_PENDING' - undeclared identifier 7777.mq4 133 70: 此错误表示您正在使用未声明的标识符 'OP_PENDING'。要解决此问题,请确保包含 Trade/Trade.mqh 头文件,因为它定义了订单类型常量,包括 'OP_PENDING'。/n/n### 改进后的代码示例/n/n以下是一个完整的 MQL4 代码示例,它结合了错误修复和一些改进:/n/nc/n// 包含头文件/n#include <Trade//Trade.mqh>/n/n// 定义可更改参数/nextern int MAGIC_NUMBER = 92133;/nextern double INITIAL_LOT_SIZE = 0.5;/nextern double TAKE_PROFIT_AMOUNT = 80.0;/nextern int SLIPPAGE = 4;/nextern int MAX_REBUY_ATTEMPTS = 4;/nextern double REBUY_MULTIPLIER = 2.0;/nextern int REBUY_SPACING = 100;/n/n// 初始化变量/nint totalProfit = 0;/nint consecutiveBuys = 0;/nint consecutiveSells = 0;/ndouble lastBuyLotSize = INITIAL_LOT_SIZE;/ndouble lastSellLotSize = INITIAL_LOT_SIZE;/n/n// 主循环/nvoid OnTick()/n{/n double currentPrice = MarketInfo(Symbol(), MODE_BID);/n int openOrdersCount = OrdersTotal();/n/n // 平仓并撤销所有挂单/n if (totalProfit >= TAKE_PROFIT_AMOUNT)/n {/n CloseAllOrders();/n DeleteAllPendingOrders();/n Sleep(60000); // 1分钟延迟重新开始/n totalProfit = 0;/n consecutiveBuys = 0;/n consecutiveSells = 0;/n lastBuyLotSize = INITIAL_LOT_SIZE;/n lastSellLotSize = INITIAL_LOT_SIZE;/n return;/n }/n/n // 如果没有持仓,则挂单/n if (openOrdersCount == 0)/n {/n double buyPrice = currentPrice + 200 * Point;/n double sellPrice = currentPrice - 200 * Point;/n BuyOrder(buyPrice);/n SellOrder(sellPrice);/n }/n/n // 检查补仓条件/n if (openOrdersCount > 0)/n {/n int lastOrderTicket = OrderGetTicket(0);/n double lastOrderPrice = OrderClosePrice(lastOrderTicket);/n int lastOrderType = OrderType(lastOrderTicket); // 获取最近一笔订单的类型/n/n // 多单补仓/n if (lastOrderType == OP_BUY && currentPrice - lastOrderPrice >= REBUY_SPACING * Point)/n {/n if (consecutiveBuys < MAX_REBUY_ATTEMPTS)/n {/n consecutiveBuys++;/n lastBuyLotSize *= REBUY_MULTIPLIER;/n double buyPrice = currentPrice + 200 * Point;/n BuyOrder(buyPrice, lastBuyLotSize);/n }/n }/n/n // 空单补仓/n if (lastOrderType == OP_SELL && lastOrderPrice - currentPrice >= REBUY_SPACING * Point)/n {/n if (consecutiveSells < MAX_REBUY_ATTEMPTS)/n {/n consecutiveSells++;/n lastSellLotSize *= REBUY_MULTIPLIER;/n double sellPrice = currentPrice - 200 * Point;/n SellOrder(sellPrice, lastSellLotSize);/n }/n }/n }/n}/n/n// 发送买入订单/nvoid BuyOrder(double price, double lotSize = INITIAL_LOT_SIZE)/n{/n int ticket = OrderSend(Symbol(), OP_BUY, lotSize, price, SLIPPAGE, 0, 0, 'Buy order', MAGIC_NUMBER, 0, Green);/n if (ticket > 0)/n {/n totalProfit += OrderProfit(ticket); // 根据您的需求获取订单的盈利金额/n }/n}/n/n// 发送卖出订单/nvoid SellOrder(double price, double lotSize = INITIAL_LOT_SIZE)/n{/n int ticket = OrderSend(Symbol(), OP_SELL, lotSize, price, SLIPPAGE, 0, 0, 'Sell order', MAGIC_NUMBER, 0, Red);/n if (ticket > 0)/n {/n totalProfit += OrderProfit(ticket); // 根据您的需求获取订单的盈利金额/n }/n}/n/n// 平仓所有订单/nvoid CloseAllOrders()/n{/n int totalOrders = OrdersTotal();/n for (int i = totalOrders - 1; i >= 0; i--)/n {/n if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))/n {/n if (OrderMagicNumber() == MAGIC_NUMBER)/n {/n if (OrderClose(OrderTicket(), OrderLots(), MarketInfo(Symbol(), MODE_BID), SLIPPAGE))/n {/n totalProfit += OrderProfit(); // 根据您的需求获取订单的盈利金额/n }/n }/n }/n }/n}/n/n// 撤销所有挂单/nvoid DeleteAllPendingOrders()/n{/n int totalOrders = OrdersTotal();/n for (int i = totalOrders - 1; i >= 0; i--)/n {/n if (OrderSelect(i, SELECT_BY_POS, MODE_PENDING))/n {/n if (OrderMagicNumber() == MAGIC_NUMBER)/n {/n OrderDelete(OrderTicket());/n }/n }/n }/n}/n/n/n### 代码说明/n/n* 该代码包含一个简单的自动交易策略,该策略会在当前价格上方和下方一定点数处设置买入和卖出订单。/n* 当总利润达到 TAKE_PROFIT_AMOUNT 时,它会平仓所有订单并撤销所有挂单。/n* 它还包括一个补仓逻辑,如果价格向不利于当前持仓的方向移动,则会增加订单数量。/n* 该代码还包括一些辅助函数,例如 BuyOrderSellOrderCloseAllOrdersDeleteAllPendingOrders,以简化订单管理。/n/n请注意,这只是一个示例代码,您应该在将其用于真实交易之前对其进行彻底测试和调整。/n

MQL4 代码示例:修复常见错误并实现自动交易策略

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

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