Hedging, Virtual Hedging, FIFO Compliance

Many strategies, such as grid traders or systems with multiple algorithms, often hold opposite positions of the same asset. This would normally violate the NFA and FIFO compliance required by international brokers and cause rejection of orders. Even if orders are accepted, holding long and short positions simultaneously increases risk, margin, and trading costs. It is always preferable to close an open position, rather than opening a new position in opposite direction.
Therefore scripts must take care of NFA and FIFO compliant trading, i.e. close first opened positions first, and avoid concurrent long and short positions. This can require lengthy and awkward coding when several algorithms trade with the same assets. The virtual hedging mechanism of Zorro S guarantees FIFO compliant closing of trades and prevents positions in opposite directions, even with complex portfolio systems. This happens in a completely transparent way; the script needs no special code and can arbitrarily open and close positions.

The virtual hedging mechanism uses two layers of trades, phantom trades and pool trades. The pool trades hold the net amount of the phantom trades. The strategy script only handles the phantom trades, while the broker only receives orders for the pool trades. Pool trades are opened or closed when phantom trades open or close, but not necessarily in that order. Phantom trades can be open in both directions at the same time, but the resulting pool trades are only open in one direction per asset, either short or long.











Systems with virtual hedging are almost always* superior to 'real hedging' systems that hold opposite positions. Aside from NFA and FIFO compliance, virtual hedging systems achieve higher profit due to reduced transaction costs, need less capital due to lower margin requirements, and have lower risk because trades are closed earlier and less exposed to the market. Some brokers, such as Oanda, apply virtual hedging automatically to all trades. For brokers that don't, Zorro can activate virtual hedging with the Hedge variable (see below). All trades are then entered in phantom mode. When the net amount - the difference of long and short open lots - changes, Zorro automatically opens or closes pool trades in a way that FIFO order is observed and market exposure is minimized.

Example: several long positions are open with a total amount of 100 lots. Now a short trade of 40 lots is entered. The net amount is now 60 lots (100 long lots minus 40 short lots). Zorro closes the oldest long pool trades fully or partially until the sum of open positions is at 60 lots. If partial closing is not supported, the oldest long pool trades are fully closed until the remaining position is at or below 60 lots. If it's less than 60 lots, a new long pool trade is opened at the difference. In both cases the net amount ends up at exactly 60 lots.

Virtual hedging affects performance parameters. The equity curves of a system with or without virtual hedging are rather similar, but the number of trades, the profit factor, the win rate, and the average trade duration can be very different. Here's an example of the same grid trading system without and with virtual hedging:

EUR/CHF grid trader, real hedging, 402 trades, avg duration 14 weeks, win rate 95%, profit factor 10, total profit $15900

EUR/CHF grid trader, virtual hedging, 261 trades, avg duration 2 weeks, win rate 65%, profit factor 3, total profit $16300

* Exception: Systems that exploit rollover / swap arbitrage or use special order types cannot use virtual hedging.


Hedging behavior; determines how simultaneous long and short positions with the same asset are handled.


No hedging; automatically closes opposite positions with the same asset when a new position is opened (NFA compliant; default for NFA accounts).
1 Hedging across algos; automatically closes opposite positions with the same algo when a new position is opened (not NFA compliant; default for non-NFA accounts).
2 Full hedging; long and short positions even with the same algo can be open at the same time (not NFA compliant). Entering a trade will not automatically close opposite positions.
4 Virtual hedging without partial closing (NFA compliant). Long and short positions can be open simultaneously, but only the net position is open in the broker account. Phantom trades immediately trigger the opening or closing of corresponding pool positions.
5 Virtual hedging with partial closing and pooling (NFA and FIFO compliant). Phantom trades in the run function are collected and result in a single pool trade. Intrabar phantom trades trigger pool trades immediately. Open pool positions are partially closed to match the net amount.
6 Script-synchronized virtual hedging with partial closing and pooling (NFA and FIFO compliant). Like Hedge mode 5, but pool trades are only snychronized when the tradeUpdate function is called.





  Hedge = 5;  // virtual hedging in trade mode
  Hedge = 2;  // full hedging in test mode

See also:

NFA, enterLong/Short, LotsPool, Phantom trades, tradeUpdate


► latest version online