Syntax
public class symbolList : List<object>
public IndexHelper(string folder, string index, Bars bars)
public DateTime FirstIndexDate(int bar)
public DateTime LastIndexDate(int bar)
public symbolList WatchList(int bar)
Parameter Description
folder |
Location of files containing historical watchlist data |
index |
Index name |
bars |
Current Bars object |
Description
As a protection from survivorship bias, traders can use historical data on index components, when they entered, exited or even re-entered an index. The
IndexHelper class scans a folder of text files that have an index name and date in their names (e.g. DAX_20010702.txt = DAX Index components for 2001/07/02).
Each of those files holds a list of symbols that were in the index at this date. The list is one symbol at each line. The assumption is, that each symbol in the list is active until the next file. If it still appears it was still in the index, if not it was dropped.
The
IndexHelper returns the index composition (
WatchList) on any given date (
bar) within the first and last available dates (which are exposed as
FirstIndexDate and
LastIndexDate, respectively.) The WatchList is an object of type
symbolList which is simply a generic list of type
string.
Example
To run this sample code, you need a collection of files placed in
C:\Data and named like below, containing a history of index components:
DAX_20010702.txt
DAX_20010910.txt
DAX_20020923.txt
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using Community.Components; /*** Requires installation of Community.Components Extension from www.wealth-lab.com > Extensions ***/
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
protected override void Execute()
{
IndexHelper ih = new IndexHelper( @"C:\Data\", "DAX", Bars );
DateTime firstDateAvailable = ih.FirstIndexDate();
for(int bar = 1; bar < Bars.Count; bar++)
{
if (IsLastPositionActive)
{
//code your exit rules here
}
else
{
// Test it
if( Bars.Date[bar] >= firstDateAvailable )
{
symbolList sl = ih.WatchList( bar );
if( sl != null )
{
foreach (string s in sl.symbols )
PrintDebug (s);
}
}
}
}
}
}
}