Quando chiudi una posizione, puoi aprirne subito un'altra opposta con lo stesso volume. Questo metodo è valido per qualsiasi simbolo e numero magico.
Facciamo un esempio: hai aperto una posizione BUY su AUDUSD con volume 0.01. Una volta chiusa questa posizione (ad esempio, chiudendola manualmente), l'Expert Advisor per il trading opposto aprirà automaticamente una nuova posizione SELL su AUDUSD.
Tutto il codice necessario si trova all'interno della funzione OnTradeTransaction:
//+------------------------------------------------------------------+ //| Funzione TradeTransaction | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- otteniamo il tipo di transazione come valore enumerato ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- se la transazione è il risultato dell'aggiunta di una transazione nella cronologia 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; } } } }
In questa funzione, aspettiamo che si chiuda la posizione (DEAL_ENTRY_OUT). Una volta che questa transazione è registrata, controlliamo il tipo di operazione (se abbiamo chiuso un BUY, questa sarà una SELL, e viceversa) e apriamo una nuova posizione.
Commento 0