Estratégia de Scalping Inteligente PRO Aprimorada v2 para NAS100 e Ouro
A estratégia faz scalping de movimentos de curto prazo usando EMA9 e VWAP como guias dinâmicas, RSI para momentum e ATR para gestão de risco. Um filtro de tendência EMA200 de 15 minutos mantém as operações na direção da tendência predominante, enquanto um filtro de pico de volume busca velas fortes. O tamanho das posições é calculado por risco e são suportados trailing stops opcionais e períodos de espera entre operações.
Detalhes
Critérios de entrada: sinal de indicador
Comprado/Vendido: Ambos
Critérios de saída: stop-loss, take-profit ou sinal oposto
Stops: Sim, baseados em ATR
Valores padrão:
CandleType = 1 minute
RiskPercent = 1%
AtrMultiplierSl = 1
AtrMultiplierTp = 2
CooldownMins = 30
StartHour = 13
EndHour = 20
Filtros:
Categoria: Scalping
Direção: Ambos
Indicadores: EMA, VWAP, RSI, ATR, EMA200
Stops: Sim
Complexidade: Intermediário
Período: Intradiário
Sazonalidade: Não
Redes neurais: Não
Divergência: Não
Nível de risco: Médio
using System;
using Ecng.Common;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Messages;
namespace StockSharp.Samples.Strategies;
public class Nas100AndGoldSmartScalpingProEnhancedV2Strategy : Strategy
{
private readonly StrategyParam<DataType> _candleType;
public DataType CandleType { get => _candleType.Value; set => _candleType.Value = value; }
public Nas100AndGoldSmartScalpingProEnhancedV2Strategy()
{
_candleType = Param(nameof(CandleType), TimeSpan.FromMinutes(5).TimeFrame());
}
protected override void OnStarted2(DateTime time)
{
base.OnStarted2(time);
var fast = new ExponentialMovingAverage { Length = 12 };
var slow = new ExponentialMovingAverage { Length = 34 };
var rsi = new RelativeStrengthIndex { Length = 14 };
var prevF = 0m; var prevS = 0m; var init = false;
var lastSignal = DateTimeOffset.MinValue;
var cooldown = TimeSpan.FromMinutes(120);
var sub = SubscribeCandles(CandleType);
sub.Bind(fast, slow, rsi, (c, f, s, r) =>
{
if (c.State != CandleStates.Finished || !fast.IsFormed || !slow.IsFormed || !rsi.IsFormed) return;
if (!init) { prevF = f; prevS = s; init = true; return; }
if (c.OpenTime - lastSignal >= cooldown)
{
if (prevF <= prevS && f > s && r > 50 && Position <= 0) { BuyMarket(); lastSignal = c.OpenTime; }
else if (prevF >= prevS && f < s && r < 50 && Position > 0) { SellMarket(); lastSignal = c.OpenTime; }
}
prevF = f; prevS = s;
}).Start();
var area = CreateChartArea();
if (area != null) { DrawCandles(area, sub); DrawIndicator(area, fast); DrawIndicator(area, slow); DrawOwnTrades(area); }
}
}
import clr
clr.AddReference("StockSharp.Messages")
clr.AddReference("StockSharp.Algo")
clr.AddReference("StockSharp.Algo.Indicators")
clr.AddReference("StockSharp.Algo.Strategies")
from System import TimeSpan
from StockSharp.Messages import DataType, CandleStates
from StockSharp.Algo.Indicators import ExponentialMovingAverage, RelativeStrengthIndex
from StockSharp.Algo.Strategies import Strategy
from datatype_extensions import *
from indicator_extensions import *
class nas100_and_gold_smart_scalping_pro_enhanced_v2_strategy(Strategy):
def __init__(self):
super(nas100_and_gold_smart_scalping_pro_enhanced_v2_strategy, self).__init__()
self._candle_type = self.Param("CandleType", tf(5)) \
.SetDisplay("Candle type", "Primary timeframe.", "General")
@property
def CandleType(self):
return self._candle_type.Value
@CandleType.setter
def CandleType(self, value):
self._candle_type.Value = value
def OnReseted(self):
super(nas100_and_gold_smart_scalping_pro_enhanced_v2_strategy, self).OnReseted()
self._prev_f = 0
self._prev_s = 0
self._init = False
self._last_signal = None
self._cooldown = TimeSpan.FromMinutes(120)
def OnStarted2(self, time):
super(nas100_and_gold_smart_scalping_pro_enhanced_v2_strategy, self).OnStarted2(time)
self._prev_f = 0
self._prev_s = 0
self._init = False
self._last_signal = None
self._cooldown = TimeSpan.FromMinutes(120)
fast = ExponentialMovingAverage()
fast.Length = 12
slow = ExponentialMovingAverage()
slow.Length = 34
rsi = RelativeStrengthIndex()
rsi.Length = 14
sub = self.SubscribeCandles(self.CandleType)
sub.Bind(fast, slow, rsi, self.OnProcess).Start()
area = self.CreateChartArea()
if area is not None:
self.DrawCandles(area, sub)
self.DrawIndicator(area, fast)
self.DrawIndicator(area, slow)
self.DrawOwnTrades(area)
def OnProcess(self, candle, f, s, r):
if candle.State != CandleStates.Finished:
return
if not self._init:
self._prev_f = f
self._prev_s = s
self._init = True
return
if self._last_signal is not None and (candle.OpenTime - self._last_signal) < self._cooldown:
pass
else:
if self._prev_f <= self._prev_s and f > s and r > 50 and self.Position <= 0:
self.BuyMarket()
self._last_signal = candle.OpenTime
elif self._prev_f >= self._prev_s and f < s and r < 50 and self.Position > 0:
self.SellMarket()
self._last_signal = candle.OpenTime
self._prev_f = f
self._prev_s = s
def CreateClone(self):
return nas100_and_gold_smart_scalping_pro_enhanced_v2_strategy()