Asset parameters 1 - transaction costs
Simulated difference between the ask and bid price of the current asset (default taken from AssetsFix.csv when offline, current real spread when connected to a broker). The trade profit is reduced by this amount. Spread is ignored in binary trading mode (BINARY flag).
Simulated extra slippage in seconds (default = 5), used in [Test] mode only. In Fill modes above 0, slippage is simulated by filling or closing orders not at the current price, but at a price expected after the given number of seconds. The direction and length of the next candle is used for estimating the price. For instance, with 1-minute bars and Slippage at 15, the order is filled at a price within the first quarter of the next bar. The larger the Slippage variable, the larger is the price range and thus the deviation of the fill or close price from the current price. For hitting entry, stop, or takeprofit limits, slippage is simulated by taking a price from the current tick range, regardless of the Slippage variable.
Extra slippage has normally a negative effect on systems that go with the trend and can noticeably reduce the profit especially on short time frames. But can also be in favor of the trader in some cases, especially with counter-trend systems. It is recommended to test systems with and without slippage for determining its effect on the result. Slippage at 0 disables extra slippage, but entry, stop, or takeprofit limits still cause slippage unless Fill is also set to 0 (naive simulation mode). Setting Slippage to a negative amount simulates asymmetric slippage that is always in adverse direction. Asymmetric slippage is illegal, but some trading platforms allow the broker to automatically apply asymmetric slippage.
Broker's fee for opening and closing a trade, taken from AssetsFix.csv. Roundturn commission in units of the account currency per 10000 contracts for currencies, and per contract for all other assets. The trade profit is reduced by this amount.
Ignored in binary trading mode (BINARY flag). When set in the script, it must be set individually for every traded asset.
It is equivalent to an additional spread, with a size in pips given by Commission*LotAmount/10000/PIPCost for currencies and Commission*LotAmount/PIPCost for all other assets.
Daily rollover interest (also called 'swap') per 10000 contracts for currencies, resp. per contract for all other assets. Taken from the assets list when offline, otherwise the broker's current rollover value is used. The rollover is interest paid to or received from the broker for holding a short or long position overnight. For instance, when you hold a EUR/USD long position, you receive interest from the broker for borrowing the EUR and pay interest for lending the USD - the difference is the rollover. Negative rollover contributes to the losses, positive rollover to the profits. As you can imagine, negative rollover values are more frequent and greater than positive rollover values. For CFDs, rollover is usually trend compensating - for instance, upwards trending index CFDs get a negative RollLong for eliminating long-term trend profit. Rollover can heavily affect the performance of a strategy and cause an asymmetry between long and short trades, especially when positions are hold for several weeks.
Payout in percent of the invested Margin for binary trading (set(BINARY)). Winning trades win the invested amount plus the WinPayout, losing trades lose the invested amount minus the LossPayout. The payout variables must be set individually for every traded asset. Spread and Commission should be set to 0 for normal binary trades.
- The accumulated trading costs by spread, slippage, commission and rollover are displayed on the Performance Report.
- When Zorro is connected to a broker, it loads the current spread and rollover values from the broker's server. When not connected, the spread and rollover values are loaded from the History\AssetsFix.csv file or from the parameter file given by AssetList. This file can be edited with a text editor for simulating different brokers, accounts, and assets in backtests. For details see Data Import.
- In portfolio strategies, transaction costs are specific to the currently selected asset. The asset must be selected before modifying any asset specificc parameters.
- The roundturn cost of a currency pair trade - without rollover and slippage - is Lots*(Commission*LotAmount/10000 + Spread*PIPCost/PIP). For all other assets it's Lots*(Commission*LotAmount + Spread*PIPCost/PIP).
- Trade costs can be set to constant values per asset for test purposes. F.i. for a simulation with no slippage and trade costs at all, run the following command once per traded assets (f.i. inside the asset loop): Spread = Commission = RollLong = RollShort = Slippage = 0. Also set Fill mode at 0 for closing all trades exactly at the stop or profit limit.
- In [Test] and [Train] mode, rollover is added to the trading cost for any trade that was longer open than 12 hours at any new day, including Saturday and Sunday. This is only an approximation to the real rollover cost, as brokers have many different algorithms to calculate rollover. If you need to simulate rollover very precisely, use a data set of historical rollover costs, and add them to the trading costs by script using the broker's algorithm.
- Since spread and rollover are taken from an 'account snapshot' when the asset list was generated, they can be very different to the current, as well as to historical spread and rollover. This can falsify backtests f.i. when trades are open a long time and accumulate a large rollover. For being on the safe side, you could set RollShort and RollLong to their minimum (RollLong = RollShort = min(RollLong,RollShort);) and Spread to a high percentile of a one-day sample. This way a false positive result can be avoided.
Spread = 3*PIP; // ignore broker spread, set constant spread for performance calculation
enterLong/Short, price, Stop, Lots, Margin, PIP, asset parameters
► latest version online