在金融市场中,使用自动交易系统(EA)可以大大提高交易效率。本文将介绍一种基于目标利润和止损策略的MT4交易工具,帮助您更好地管理交易风险与收益。
该EA需要设置三个输入参数:
- 目标利润
- 止损
- 魔术编号
extern double inTargetProfitMoney = 10; //目标利润 ($) extern double inCutLossMoney = 0.0 //止损 ($) extern int inMagicNumber = 0 //魔术编号
当该EA执行时,它将首先调用 OnInit() 函数,验证输入参数和变量的初始化。
int OnInit() { //--- if(inTargetProfitMoney <= 0) { Alert("输入无效"); return(INIT_PARAMETERS_INCORRECT); } inCutLossMoney = MathAbs(inCutLossMoney) * -1; //--- return(INIT_SUCCEEDED); }
每当价格波动时(即每个tick),将调用 OnTick() 函数。
void OnTick() { //--- double tFloating = 0.0; int tOrder = OrdersTotal(); for(int i=tOrder-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderMagicNumber() == inMagicNumber) { tFloating += OrderProfit()+OrderCommission() + OrderSwap(); } } } if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0)) { fCloseAllOrders(); } }
在 OnTick 函数中,它将继续计算总的盈亏,并在达到目标利润或最大损失限制时关闭所有订单。
void fCloseAllOrders() { double priceClose = 0.0; int tOrders = OrdersTotal(); for(int i=tOrders-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL)) { priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK); if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold)) { Print("警告:关闭失败"); } } } } }
欲获取更多详细信息和MQL4代码教育分享,欢迎加入我们的Telegram群组:t.me/codeMQL