Hoy vamos a hablar sobre una estrategia muy interesante: abrir una posición opuesta a la que cerramos, utilizando un sistema de trading. Esto funciona para cualquier símbolo y número mágico que utilices.
Imagina que tienes una posición abierta de AUDUSD en compra (BUY) de 0.01. Una vez que cierras esta posición (ya sea manualmente o de alguna otra forma), el Sistema de Comercio Opuesto se encargará de abrir automáticamente una nueva posición en AUDUSD, pero esta vez será de venta (SELL).
Todo el código necesario para implementar esta función se encuentra dentro de la función OnTradeTransaction:
//+------------------------------------------------------------------+ //| Función TradeTransaction | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- obtener el tipo de transacción como valor de enumeración ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- si la transacción es resultado de la adición a la historia if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_type =-1; long deal_entry =-1; double deal_volume =0.0; string deal_symbol =""; if(HistoryDealSelect(trans.deal)) { deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME); deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL); } else return; if(deal_entry==DEAL_ENTRY_OUT) { switch((int)deal_type) { case DEAL_TYPE_BUY: m_trade.Buy(deal_volume,deal_symbol); break; case DEAL_TYPE_SELL: m_trade.Sell(deal_volume,deal_symbol); break; default: break; } } } }
En este código, estamos esperando a que se cierre la operación (DEAL_ENTRY_OUT). Una vez que aparece este trato, revisamos el tipo de operación (si cerramos una compra, esta será una venta y viceversa) y automáticamente abrimos una nueva posición.
Comentarios 0