DataMiner Operation Screen Backtest

Run a screen backtest.

Marco Salerno
Written by Marco SalernoLast update 5 months ago

Overview

This operation allows you to run and collect the output of a screen backtest. The ScreenBacktest operation is basically the same as the ScreenRun operation except that the screen is executed multiple times at the intervals set by the Rebalance Frequency parameter for the period defined by the Start Data and End Date and the returns are calculated for the screen’s holdings.

Input Specification

Default values if not specified are in [brackets]. Any parameter which has a default value is optional and can be omitted. The input script is in YAML syntax. The learn the basics see DataMiner YAML Syntax

Key

Value

Description

Main:              

# Section with main settings

→ Operation:

ScreenBacktest

→ On Error: 

[Stop],  Continue 

Specifies if you want to stop an operation when there is an error.

→ Precision: 

[2],3,4 

Decimal precision of the output values.

Settings:

# Section with operation settings

→ Vendor:

[FactSet], Compustat

→ Type:

[Stock], ETF

→ Screen:

Id of an existing screen.

Optional

If the Screen parameter is used, then any other parameters that would override a setting in the existing screen are not allowed and will cause an error.

→ Currency:

[USD], CAD, CHF, EUR, GBP, NOK, PLN, SEK, TRY

→ Trans Price:

[Open], Close, AvgHiLow

Price used in the transactions.

→ Universe:

ALLFUND, SP500, etc.

Specifies the Universe to be used in the operation. Specify the name of your custom universe or one of the Portfolio123 Universes

→ Benchmark:

[SPY], VTI, etc

Instrument that the performance is compared to.

→ PIT method: 

[Complete],  Prelim

“Prelim” includes preliminary data from earnings calls, while “Complete” only includes quarter or annual report data.

→ Start Date:

YYYY-MM-DD

→ End Date:

[today] 

→ Rebalance Frequency:

1Day, 1Week, 2Weeks, 3Weeks, [4Weeks], 6Weeks, 8Weeks, 13Weeks, 26Weeks, 52Weeks

→ Max Num Holdings: 

[0] 0 for all.

The maximum number of holdings.

→ Ranking:

see DataMiner Ranking Definition

→ Method:

[Long], Short, LongShort, Hedged

Specifies if your strategy is long, short, long & short or hedged.

→ Rules:

→→ -

Common rules that apply to both long and short positions.

→ Long Rules:

→→ -

Apply to long positions if the Method is LongShort or Hedged.

→ Short Rules:

→→ -

Apply to short positions if the Method is LongShort.

→ Hedge Rules:

→→ -

Apply if the Method is Hedged.

→ Rank Tolerance:

[0]-100

If higher than zero, then any stock that was in the basket during the last rebalance is retained as long as its rank has not slipped below a number of percentage points equal to the Rank Tolerance.

→ Carry Cost:

[1.5] 0-100

Percentage penalty that will be assessed against margined or short positions.

→ Risk Stats Period:

[monthly], weekly, daily

Period used when calculating the statistics presented in the backtest results.

→ Max Pos Pct:

[0]-100. Use 0 for no maximum

Limits the allocation to each position. It does so in conjunction with the Max No Stocks/ETFs setting.

→ Slippage:

[0]-5 in percent

A cost added to each transaction to account for trading costs and price movements.

→ Long Weight:

0-[100]

Only required for Methods LongShort or Hedge.

→ Short Weight:

0-[100]

Only required for Methods LongShort or Hedge.

Sample Input

Main:
    Operation: ScreenBacktest
    On Error:  Stop
Default Settings:
    Start Date: 2012-01-01
    End Date: 2022-01-01
    Rebalance Frequency: 4Weeks
    Slippage: .25
    Ranking: 'Core: Value'
    Universe: ALLFUND
    Max Pos Pct: 10
    Max Num Holdings: 20
    Benchmark: IWM
    Trans Price: AvgHiLow
    Rules:
        - MktCap < 300 #microcaps
        - AvgDailyTot(30) > 300000 #tradable
        - Close(0) > Close(90) AND Close(0) > Close(180)
        - Rank >= 70
          #Want the strongest performers.
        - FOrder("close(1)/close(250)",#previous,#desc) <= 35 
          #But filter out the high flyers.
        - FOrder("close(1)/close(250)",#previous,#desc) >= 5

Sample Output

Did this answer your question?