Hedging and Virtual Hedging

Most strategies, especially portfolio strategies with different independent algorithms, allow several trades to be open at the same time. This often violates the NFA and FIFO compliance required by international brokers and causes rejection of orders. It also increases margin and trading costs by holding long and short positions simultaneously. Zorro's virtual hedging mechanism guarantees FIFO compliant closing of trades (oldest are closed first) and prevents positions in opposite directions, even with complex portfolio systems. This happens in a completely transparent way; the script needs no special code. The 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 pool trades can be only open in one direction per asset, either short or long.









For activating virtual hedging, only the Hedge variable (see below) needs to be set. All trades are then automatically 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 the 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 is used in test and trade mode only, not in training mode. The performance statistics (Long/Short/Total) are generated from the pool trades, not from the phantom trades. Only exception is NumPendingTotal, which is affected by pending phantom trades (pool trades are never pending). Phantom trades can also be manually entered for "equity curve trading"; those trades contribute to the Long/Short statistics, but do not trigger pool trades.

Virtual hedging affects the system performance parameters. Although the equity curves of a system with or without virtual hedging are relatively similar, the number of trades, the profit factor, the win rate, and the average trade duration can be very different. Although the end profit with virtual hedging is higher due to smaller transaction costs, the win rate and profit factor can be lower. Here's an example of the same grid trading system without and with virtual hedging:

EUR/CHF grid trader, normal hedging, win rate ~95%, profit factor ~10, total profit ~$16000

EUR/CHF grid trader, virtual hedging, same algorithm, win rate ~65%, profit factor ~3, total profit ~$16500

Hedging is controlled by the following variable:


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


0 = no hedging; automatically close opposite positions with the same asset when a new position is opened (default for NFA accounts).
1 = hedging across algos; automatically close opposite positions with the same algo when a new position is opened (default for unspecified accounts).
2 = full hedging; long and short positions can be open at the same time.
4 = virtual hedging without partial closing; enter long and short positions simultaneously, but send only the net amount to the broker.
5 = virtual hedging with partial closing; open positions are partially closed to match the net amount.





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

See also:

NFA, enterLong/Short, LotsPool, Phantom trades


► latest version online