Creación de un indicador en C#

La creación de un indicador propio en la API se describe en la sección Indicador personalizado. Estos indicadores son totalmente compatibles con Designer.

Para crear un indicador, en el panel Esquema debe seleccionar la carpeta Indicadores, hacer clic con el botón derecho y seleccionar Añadir en el menú contextual:

Designer indicador de código fuente 00

El código del indicador tendrá este aspecto:

/// <summary>
/// Indicador de ejemplo que demuestra cómo guardar y cargar parámetros.
///
/// Cambia el precio de entrada en +20% o -20%.
///
/// Vea más ejemplos https://github.com/StockSharp/StockSharp/tree/master/Algo/Indicators
///
/// Documentación https://doc.stocksharp.com/topics/Designer_Creating_indicator_from_source_code.html
/// </summary>
public class EmptyIndicator : BaseIndicator
{
	private int _change = 20;

	public int Change
	{
		get => _change;
		set
		{
			_change = value;
			Reset();
		}
	}

	private int _counter;
	// el indicador formado recibió todas las entradas necesarias para estar disponible para la negociación
	private bool _isFormed;

	protected override bool CalcIsFormed() => _isFormed;

	public override void Reset()
	{
		base.Reset();

		_isFormed = default;
		_counter = default;
	}

	protected override IIndicatorValue OnProcess(IIndicatorValue input)
	{
		// cada décima llamada intenta devolver un valor vacío
		if (RandomGen.GetInt(0, 10) == 0)
			return new DecimalIndicatorValue(this);

		if (_counter++ == 5)
		{
			// por ejemplo, nuestro indicador necesita 5 entradas para quedar formado
			_isFormed = true;
		}

		var value = input.GetValue<decimal>();

		// cambio aleatorio de +20% o -20% del valor actual

		value += value * RandomGen.GetInt(-Change, Change) / 100.0m;

		return new DecimalIndicatorValue(this, value)
		{
			// el valor final significa que este valor para la entrada especificada
			// ya no cambia (por ejemplo, para velas que cambian con el último precio)
			IsFinal = RandomGen.GetBool()
		};
	}

	// persistir nuestras propiedades para guardarlas para futuros reinicios de la aplicación

	public override void Load(SettingsStorage storage)
	{
		base.Load(storage);
		Change = storage.GetValue<int>(nameof(Change));
	}

	public override void Save(SettingsStorage storage)
	{
		base.Save(storage);
		storage.SetValue(nameof(Change), Change);
	}

	public override string ToString() => $"Cambio: {Change}";
}

Este indicador recibe un valor entrante y realiza una desviación arbitraria basada en el valor del parámetro Cambio.

La descripción de los métodos del indicador está disponible en la sección Indicador personalizado.

Para añadir el indicador creado al diagrama, debe usar el cubo Indicador y especificar en él el indicador necesario:

Designer indicador de código fuente 01

El parámetro Cambio, establecido previamente en el código del indicador, se muestra en el panel de propiedades.

Warning

Los indicadores creados con código C# no pueden usarse en estrategias creadas con código C#. Solo pueden usarse en estrategias creadas a partir de cubos.