Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

problema com um código

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    problema com um código

    estou tentando fazer com que as linhas desse meu indicador não fiquem interligadas de um ponto até o outro. a ideia é plotar uma linha customizável em um ponto onde ocorra uma agressão e só volte a aparecer quando acontecer outra agressão. mas o problema é que as linhas ficam interligadas. alguém pode me ajudar a arrumar isso? eis abaixo o código-fonte: #região Usando declarações
    usando NinjaTrader.NinjaScript;
    usando NinjaTrader.Data;
    usando NinjaTrader.Gui.Tools;
    usando System.ComponentModel;
    usando System.Windows.Media;

    #endregion
    namespace NinjaTrader.NinjaScript.Indicators
    {
    public class StopSignal : Indicator
    {
    Variável para plotar agressão
    private double stopSignal = double. Nan; Inicializa como NaN para garantir que comece vazio
    private double lastStopSignal = double. Nan; Armazena o último sinal de stop

    Limite de agressão (acima de 1000)
    private double aggressionThreshold = 1000;

    Período de cálculo (ajustável)
    private int lookbackPeriod = 50;

    protected override void OnStateChange()
    {
    if (State == State.SetDefaults)
    {
    Description = @"Indicador de Stop baseado em agressão maior que 1000";
    Nome = "StopSignal";
    Calcular = Calcular.OnEachTick;
    IsOverlay = true; Exibe no gráfico principal
    AddPlot(Brushes.Red, "StopSignal"); Plot de agressão (Stop)
    }
    }

    protected override void OnBarUpdate()
    {
    if (CurrentBar < lookbackPeriod) return;

    Cálculo de volume e agressão
    double totalVolume = 0;
    stopSignal = double. Nan; Resetar a variável a cada barra
    double[] priceVolumes = new double[lookbackPeriod];

    Iteração sobre o período de lookback para calcular os volumes
    for (int i = 0; i < lookbackPeriod; i++)
    {
    double barVolume = Volume[i];
    volumetotal += volume_da_barra;

    Se o volume da barra exceder o limite de agressão
    if (barVolume > aggressionThreshold)
    {
    stopSignal = Close[i]; // Define o preço atual como nível de stop
    break; // Saímos do loop após encontrar o primeiro sinal de agressão
    }
    }

    Se um novo sinal de stop for identificado, atualize o último sinal
    if (!double. IsNaN(stopSignal))
    {
    lastStopSignal = stopSignal; // Armazena o último sinal de stop
    }
    else
    {
    stopSignal = lastStopSignal; // Mantém o último sinal caso não haja um novo
    }

    Plotar o StopSignal baseado na agressão
    Values[0][0] = stopSignal;
    Print("Sinal de Stop: " + stopSignal); Debug para verificar
    }
    }
    }

    #região Código gerado pelo NinjaScript. Nem alterar nem remover.

    namespace NinjaTrader.NinjaScript.Indicators
    {
    classe parcial pública Indicador: NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
    {
    privado StopSignal[] cacheStopSignal;
    public StopSignal StopSignal()
    {
    return StopSignal(Input);
    }

    public StopSignal StopSignal(ISeries<double> input)
    {
    if (cacheStopSignal != null)
    for (int idx = 0; idx < cacheStopSignal.Length; idx++)
    if (cacheStopSignal[idx] != null && cacheStopSignal[idx]. EqualsInput(input))return
    cacheStopSignal[idx];
    return CacheIndicator<StopSignal>(new StopSignal(), entrada, ref cacheStopSignal);
    }
    }
    }namespace

    NinjaTrader.NinjaScript.MarketAnalyzerColumns
    {
    classe parcial pública MarketAnalyzerColumn: MarketAnalyzerColumnBase
    {
    public Indicators.StopSignal StopSignal()
    {
    indicador de retorno. StopSignal(Entrada);
    }

    public Indicators.StopSignal StopSignal(ISeries<double> input )
    {
    indicador de retorno. StopSignal(entrada);
    }
    }
    }

    namespace NinjaTrader.NinjaScript.Strategies
    {
    classe parcial pública Estratégia: NinjaTrader.Gui.NinjaScript.StrategyRenderBase
    {
    public Indicators.StopSignal StopSignal()
    {
    indicador de retorno. StopSignal(Entrada);
    }

    public Indicators.StopSignal StopSignal(ISeries<double> input )
    {
    indicador de retorno. StopSignal(entrada);
    }
    }
    }#endregion


    #2
    estou tentando fazer com que as linhas desse meu indicador não fiquem interligadas de um ponto até o outro. a ideia é plotar uma linha customizável em um ponto onde ocorra uma agressão e só volte a aparecer quando acontecer outra agressão. mas o problema é que as linhas ficam interligadas. alguém pode me ajudar a arrumar isso?

    Comment


      #3
      Hello JardelLobo38,

      The reason it becomes connected is because you are plotting on every bar, you would need to move the Values[0][0] = stopSignal; into a condition so that value is not being set for every bar. That would leave gaps in the plot when its not set.

      Comment

      Latest Posts

      Collapse

      Topics Statistics Last Post
      Started by Geovanny Suaza, 02-11-2026, 06:32 PM
      0 responses
      599 views
      0 likes
      Last Post Geovanny Suaza  
      Started by Geovanny Suaza, 02-11-2026, 05:51 PM
      0 responses
      345 views
      1 like
      Last Post Geovanny Suaza  
      Started by Mindset, 02-09-2026, 11:44 AM
      0 responses
      103 views
      0 likes
      Last Post Mindset
      by Mindset
       
      Started by Geovanny Suaza, 02-02-2026, 12:30 PM
      0 responses
      558 views
      1 like
      Last Post Geovanny Suaza  
      Started by RFrosty, 01-28-2026, 06:49 PM
      0 responses
      558 views
      1 like
      Last Post RFrosty
      by RFrosty
       
      Working...
      X