Crear estrategia
Para crear su propia estrategia, cree una carpeta para ella en la carpeta Strategies.

Usando SmaStrategy como ejemplo, cree la estrategia en sí.
Si necesita añadir su propio panel de prueba o monitorización para una estrategia, la estrategia debe implementar las interfaces IHaveTestControl e IHaveMonitoringControl, respectivamente.
public class SmaStrategy : Strategy, IHaveMonitoringControl, IHaveTestControl
{
...
#region MonitoringControl
public BaseStudioControl AddMonitoringPanel()
{
var usercontrol = new SmaMonitoringControl();
usercontrol.Init(this);
return usercontrol;
}
#endregion
#region TestingControl
public BaseStudioControl AddTestPanel()
{
var usercontrol = new SmaTestingControl();
usercontrol.Init(this);
return usercontrol;
}
#endregion
...
}
También debe crear los paneles en sí. Cómo construir su propio panel de prueba o monitorización se describe en Crear panel de estrategia.
Tip
Si son suficientes los paneles de prueba o monitorización para la estrategia que se usan en estrategias predeterminadas, no necesita implementar las interfaces IHaveTestControl e IHaveMonitoringControl. Shell ejecutará por sí mismo los paneles predeterminados de prueba o monitorización.

Para que la estrategia creada esté disponible en la ventana de selección de estrategias, debe añadirse al diccionario DictionaryStrategies de la ventana principal.
...
//---------------------------------------------------------------------
DictionaryStrategies = new ObservableDictionary<Guid, Strategy>
{
{ new SmaStrategy().GetTypeId(), new SmaStrategy() },
{ new StairsTrendStrategy().GetTypeId(), new StairsTrendStrategy() },
{ new StairsCountertrendStrategy().GetTypeId(), new StairsCountertrendStrategy() }
};
//---------------------------------------------------------------------
...
Para que la estrategia se guarde y luego se cargue, debe establecer el parámetro de estrategia en el diseñador de estrategias.
public class SmaStrategy : Strategy, IHaveMonitoringControl, IHaveTestControl
{
...
public SmaStrategy()
{
...
this.Param("TypeId", GetType().GUID);
...
}
...
}
Para guardar campos adicionales, debe sobrescribir los métodos Load y Save.
public class SmaStrategy : Strategy, IHaveMonitoringControl, IHaveTestControl
{
...
#region Load
public override void Load(SettingsStorage storage)
{
base.Load(storage);
try
{
_securityStr = storage.GetValue<string>(nameof(Security));
_portfolioStr = storage.GetValue<string>(nameof(Portfolio));
LongSmaLength = storage.GetValue<int>(nameof(LongSmaLength));
ShortSmaLength = storage.GetValue<int>(nameof(ShortSmaLength));
Series.CandleType = storage.GetValue(nameof(Series.CandleType), Series.CandleType);
Series.Arg = storage.GetValue(nameof(Series.Arg), Series.Arg);
}
catch (Exception e)
{
e.LogError();
}
}
#endregion
#region Save
public override void Save(SettingsStorage storage)
{
base.Save(storage);
storage.SetValue(nameof(Security), Security?.Id);
storage.SetValue(nameof(Portfolio), Portfolio?.Name);
storage.SetValue(nameof(LongSmaLength), LongSmaLength);
storage.SetValue(nameof(ShortSmaLength), ShortSmaLength);
if (Series.CandleType != null)
storage.SetValue(nameof(Series.CandleType), Series.CandleType.GetTypeName(false));
if (Series.Arg != null)
storage.SetValue(nameof(Series.Arg), Series.Arg);
}
#endregion
...
}