- 显示:
- 11053
- 等级:
- 已发布:
- 2021.06.21 09:39
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
在手动或自动化交易中,一键平仓功能都是比较常用的,特别是在涉及风控管理的时候,能够快速止损,有效控制风险。这个脚本功能实现起来并不难,但在程序化实现的过程中,会有一些不同的应用场景。
//+------------------------------------------------------------------+ //| | //| | //| http://www.popoding.club/ | //+------------------------------------------------------------------+ #property copyright "Wen Tao Xiong" #property link "https://www.mql5.com/zh/users/xiongsir/seller" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- for(int i = 0 ; i < PositionsTotal(); i++) { ulong pos_ticket = PositionGetTicket(i); ulong pos_magic = PositionGetInteger(POSITION_MAGIC); string pos_symbol = PositionGetString(POSITION_SYMBOL); double pos_volume = PositionGetDouble(POSITION_VOLUME); double pos_profit = PositionGetDouble(POSITION_PROFIT); ENUM_POSITION_TYPE pos_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); if(pos_magic == 0 && pos_symbol == "EURUSD" && pos_profit < 0) { MqlTradeRequest requst = {}; MqlTradeResult result = {}; double ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK); double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID); requst.action = TRADE_ACTION_DEAL; requst.position = pos_ticket; requst.symbol = pos_symbol; requst.volume = pos_volume; requst.deviation = 50; requst.magic = pos_magic; int filling_mode = (int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE); if(filling_mode == 1) { requst.type_filling = ORDER_FILLING_FOK; } else if(filling_mode == 2) { requst.type_filling = ORDER_FILLING_IOC; } else if(filling_mode == 3) { requst.type_filling = ORDER_FILLING_RETURN; } if(pos_type == POSITION_TYPE_BUY) { requst.type = ORDER_TYPE_SELL; requst.price = bid; } else if(pos_type == POSITION_TYPE_SELL) { requst.type = ORDER_TYPE_BUY; requst.price = ask; } if(!OrderSend(requst,result)) { printf("OrderSend Error %d",GetLastError()); } } } } //+------------------------------------------------------------------+

MT5已经自带了很多指标,给交易带来了极大便利,作为辅助工具,很多时候我们需要对其进行进一步改造,或重新自定义指标,本例通过实现双线一柱变色MACD指标来进行说明。

MT5挂单类型有六种,能够很好地适应回调和突破场景,在一些突破策略交易系统中应用较多,当挂单条件不再有效的时候,就会涉及到挂单的取消操作。六种挂单应用说明如下: Buy Limit(回踩买入):在当前价格下方,等待行情下跌到挂单位置触发买入单。 Sell Limit(回踩卖出):在当前价格上方,等待行情上涨到挂单位置触发卖出单。 Buy Stop(突破买入):在当前价格上方,等待行情上涨到挂单位置触发买入单。 Buy Stop(突破卖出):在当前价格下方,等待行情下跌到挂单位置触发卖出单。 Buy Stop Limit(突破回踩买入):在当前价格上方,等待行情上涨到突破位置后,再下跌到回踩位置,触发买入单。 Sell Stop Limit(突破回踩卖出):在当前位置下方,等待行情下跌到突破位置后, 再上涨到回踩位置,触发卖出单。