Medias móviles con Martingale
Descripción general
SmaStrategyMartingaleStrategy es una estrategia de trading basada en el cruce de dos medias móviles simples (SimpleMovingAverage) con elementos de martingale. La estrategia usa SMAs larga y corta para determinar señales de entrada y salida, aumentando el tamaño de posición con cada nueva operación.
Componentes principales
public class SmaStrategyMartingaleStrategy : Strategy
{
private readonly StrategyParam<int> _longSmaLength;
private readonly StrategyParam<int> _shortSmaLength;
private readonly StrategyParam<DataType> _candleType;
// Variables para almacenar valores anteriores de indicadores
private decimal _prevLongValue;
private decimal _prevShortValue;
private bool _isFirstValue = true;
}
Parámetros de estrategia
La estrategia permite personalizar los siguientes parámetros:
- LongSmaLength - periodo de la media móvil larga (predeterminado 80)
- ShortSmaLength - periodo de la media móvil corta (predeterminado 30)
- CandleType - tipo de vela con el que trabajar (predeterminado 5 minutos)
Todos los parámetros están disponibles para optimización con rangos de valores especificados.
Inicialización de la estrategia
En el método OnStarted2, se crean indicadores SMA, se configura la suscripción a velas y se prepara la visualización:
protected override void OnStarted2(DateTime time)
{
base.OnStarted2(time);
// Crear indicadores
var longSma = new SimpleMovingAverage { Length = LongSmaLength };
var shortSma = new SimpleMovingAverage { Length = ShortSmaLength };
// Agregar indicadores a la colección de la estrategia para seguimiento automático de IsFormed
Indicators.Add(longSma);
Indicators.Add(shortSma);
// Crear suscripción y vincular indicadores
var subscription = SubscribeCandles(CandleType);
subscription
.Bind(longSma, shortSma, ProcessCandle)
.Start();
// Configurar visualización en el gráfico
var area = CreateChartArea();
if (area != null)
{
DrawCandles(area, subscription);
DrawIndicator(area, longSma, System.Drawing.Color.Blue);
DrawIndicator(area, shortSma, System.Drawing.Color.Red);
DrawOwnTrades(area);
}
}
Procesamiento de velas
El método ProcessCandle se llama para cada vela completada e implementa la lógica de trading:
private void ProcessCandle(ICandleMessage candle, decimal longValue, decimal shortValue)
{
// Omitir velas incompletas
if (candle.State != CandleStates.Finished)
return;
// Comprobar si la estrategia está lista para operar
if (!IsFormedAndOnlineAndAllowTrading())
return;
// Para el primer valor, solo guardar datos sin generar señales
if (_isFirstValue)
{
_prevLongValue = longValue;
_prevShortValue = shortValue;
_isFirstValue = false;
return;
}
// Obtener comparación actual y anterior de valores de indicadores
var isShortLessThenLongCurrent = shortValue < longValue;
var isShortLessThenLongPrevious = _prevShortValue < _prevLongValue;
// Guardar valores actuales como anteriores para la próxima vela
_prevLongValue = longValue;
_prevShortValue = shortValue;
// Comprobar cruce (señal)
if (isShortLessThenLongPrevious == isShortLessThenLongCurrent)
return;
// Cancelar órdenes activas antes de colocar nuevas
CancelActiveOrders();
// Determinar dirección de operación
var direction = isShortLessThenLongCurrent ? Sides.Sell : Sides.Buy;
// Calcular tamaño de posición (aumentar posición con cada operación: enfoque martingale)
var volume = Volume + Math.Abs(Position);
// Crear y registrar una orden con el precio correspondiente
var price = Security.ShrinkPrice(shortValue);
RegisterOrder(CreateOrder(direction, price, volume));
}
Lógica de trading
- Señal de compra: la SMA corta cruza la SMA larga desde abajo
- Señal de venta: la SMA corta cruza la SMA larga desde arriba
- El tamaño de posición aumenta por el importe de la posición actual con cada nueva operación (elemento martingale)
- El precio de la orden se establece en el valor actual de la SMA corta, redondeado al tamaño de tick del instrumento
Características
- La estrategia determina automáticamente los instrumentos con los que trabajar mediante el método
GetWorkingSecurities() - La estrategia solo trabaja con velas completadas
- La estrategia sigue cruces de indicadores comparando la relación actual y anterior entre SMAs
- Todas las órdenes activas se cancelan antes de colocar nuevas
- Se implementa el principio martingale: aumento del tamaño de posición con cada nueva operación
- Los indicadores y operaciones se visualizan en el gráfico cuando hay un área gráfica disponible
- Se admite optimización de parámetros para encontrar ajustes óptimos de estrategia