FSB Pro provides some new features as working with several strategies, loading different data sets simultaneously, using different symbols and periods for an indicator in a strategy. These new features require minor changes of indicators format. In order to provide future compatibility, we modified FSB Freeware for using the new format.
I'll explain the new format by comparing and converting Footons's Adaptive MACD indicator with the already converted MACD from FSB v2.81.
I'm using Notepad++ for editing indicators in this tutorial.
The source code of Adaptive MACD can be find in this forum post: Converting Indicator in New Format
FSB Pro uses three new namespaces:
using ForexStrategyBuilder.Infrastructure.Entities; using ForexStrategyBuilder.Infrastructure.Enums; using ForexStrategyBuilder.Infrastructure.Interfaces;
Also indicators are defined in namespace ForexStrategyBuilder.Indicators.Store
Old code:
using System; using System.Drawing; namespace Forex_Strategy_Builder
New Code:
using System; using System.Drawing; using ForexStrategyBuilder.Infrastructure.Entities; using ForexStrategyBuilder.Infrastructure.Enums; using ForexStrategyBuilder.Infrastructure.Interfaces; namespace ForexStrategyBuilder.Indicators.Store
New indicators use parameterless constructor and move initialization in Initialize method. This allows program to create an instance of an indicator and to set its slot type later.
We don't need setting CustomIndicator = true; in a custom indicator. FSB sets it when loads the indicator.
Old code:
public class MACD : Indicator { public MACD(SlotTypes slotType) { // General properties IndicatorName = "Adaptable MACD"; PossibleSlots = SlotTypes.OpenFilter | SlotTypes.CloseFilter; SeparatedChart = true; CustomIndicator = true; // Setting up the indicator parameters IndParam = new IndicatorParam(); IndParam.IndicatorName = IndicatorName; IndParam.SlotType = slotType; // The ComboBox parameters IndParam.ListParam[0].Caption = "Logic"; IndParam.ListParam[0].ItemList = new string[]
New code:
public class MACD : Indicator { public MACD() { IndicatorName = "Adaptable MACD"; PossibleSlots = SlotTypes.OpenFilter | SlotTypes.CloseFilter; SeparatedChart = true; } public override void Initialize(SlotTypes slotType) { SlotType = slotType; // The ComboBox parameters IndParam.ListParam[0].Caption = "Logic"; IndParam.ListParam[0].ItemList = new string[]
We push DataSet to Calculate method. DataSet keeps testing data in FSB pro. It allows giving different data to each indicator. Actually DataSet is not used in FSB Freeware but we have to set it in order to provide FSB Pro compatibility. We do not need setting SlotTypes in Calculate method since we set it in Initialize.
We have to rename slotType to SlotType in the Calculate method code since slotType is not used. Calculate uses base property SlotType.
Old code:
public override void Calculate(SlotTypes slotType) { // Reading the parameters MAMethod shortmaMethod = (MAMethod )IndParam.ListParam[1].Index; MAMethod longmaMethod = (MAMethod )IndParam.ListParam[4].Index;
New code:
public override void Calculate(IDataSet dataSet) { DataSet = dataSet; // Reading the parameters MAMethod shortmaMethod = (MAMethod )IndParam.ListParam[1].Index; MAMethod longmaMethod = (MAMethod )IndParam.ListParam[4].Index;
SetDescription doesn't need slotType parameter anymore since it is stored in the base class. We remove slotType parameter from declaration.
Old code:
/// <summary> /// Sets the indicator logic description /// </summary> public override void SetDescription(SlotTypes slotType) { EntryFilterLongDescription = ToString() + "; the MACD line "; EntryFilterShortDescription = ToString() + "; the MACD line ";
New code
/// <summary> /// Sets the indicator logic description /// </summary> public override void SetDescription() { EntryFilterLongDescription = ToString() + "; the MACD line "; EntryFilterShortDescription = ToString() + "; the MACD line ";
DataPeriod was changed. New enumeration is in ForexStrategyBuilder.Infrastructure.Enums namespace. It replaces the old DataPeriods.
This change does not affect Adaptive MACD indicator.
namespace ForexStrategyBuilder.Infrastructure.Enums { public enum DataPeriod { M1 = 1, M5 = 5, M15 = 15, M30 = 30, H1 = 60, H4 = 240, D1 = 1440, W1 = 10080 } }