Ir para o conteúdo

Tipos de parâmetros no cTrader Algo

Neste artigo e no vídeo correspondente, demonstraremos como pode declarar e utilizar parâmetros personalizáveis nos seus cBots e indicadores. Desenvolveremos um indicador simples e mostraremos como configurar os parâmetros a partir da interface do utilizador do cTrader. Também explicaremos que tipo de parâmetros pode usar num cBot ou indicador do cTrader e ilustraremos como são declarados e usados no seu código.

Parâmetros personalizáveis

Os parâmetros personalizáveis são valores configuráveis que podem ser definidos ao adicionar, iniciar ou utilizar um algoritmo. Permitem que você e outros utilizadores personalizem o comportamento de cBots, indicadores e plugins sem modificar o código-fonte.

Utilização de parâmetros em cBots, indicadores e plugins

  • Para cBots, pode configurar variáveis ou definições que influenciam a execução, como níveis de stop loss e take profit.
  • Para indicadores, pode configurar variáveis que afetam os resultados do indicador, como os períodos considerados ou a fonte de dados a ser utilizada.
  • Para plugins, pode configurar variáveis, como opções de interface do utilizador ou chaves de API, que determinam como o plugin interage com a interface ou serviços externos.

Como explicado anteriormente, o cTrader suporta estes tipos de parâmetros:

  • int
  • double
  • string
  • bool
  • DataSeries
  • TimeFrame
  • enum
  • Color
  • DateTime
  • DateOnly
  • TimeSpan
  • Symbol
  • Symbol[] (multi-symbol)
  • Enum[] (multi-enum)
  • TimeFrame[] (multi-period)

Nota

Os algoritmos Python utilizam parâmetros personalizáveis declarados nos seus ficheiros .cs.

Criar um indicador simples com parâmetros

Para demonstrar como pode usar parâmetros em indicadores personalizados, criaremos um novo indicador e chamar-lhe-emos Standard Deviation.

Para calcular o desvio padrão, primeiro precisamos de calcular a média móvel do preço. Subsequentemente, declararemos os parâmetros necessários para um indicador de média móvel, começando com o período da média móvel.

1
public int MaPeriod { get; set; }

Qualquer propriedade pública que tenha um dos tipos suportados pode tornar-se um parâmetro do indicador. Para transformar a nossa propriedade MaPeriod num parâmetro, tudo o que temos de fazer é adicionar a declaração necessária.

1
2
[Parameter("MA Period")]
public int MaPeriod { get; set; }

O atributo Parameter instrui o cTrader a apresentar esta propriedade como um parâmetro no painel de parâmetros do indicador usando o nome definido ("MA Period").

Como mostrado abaixo, o atributo Parameter também permite definir algumas propriedades do parâmetro, como o nome exibido, o valor predefinido, o grupo em que este parâmetro será colocado, os valores máximo e mínimo, bem como o passo que o parâmetro mudará quando as setas para cima e para baixo forem pressionadas (apenas para valores numéricos).

1
2
[Parameter("SMA Period", DefaultValue = 14, Group = "MA", MaxValue = 100, MinValue = 1, Step = 1)]
public int MaPeriod { get; set; }

Vamos agora adicionar o resto dos parâmetros necessários para um indicador de média móvel. O parâmetro MaType ajudar-nos-á a determinar o tipo de média móvel. É um enum que aparecerá como um menu suspenso na interface do utilizador do cTrader.

1
2
[Parameter("MA Type", Group = "MA")]
public MovingAverageType MaType { get; set; }

O parâmetro Source dará aos utilizadores a opção de especificar a fonte de dados para o nosso indicador de média móvel. Este parâmetro é do tipo DataSeries.

1
2
[Parameter("Source", Group = "MA")]
public DataSeries Source { get; set; }

Agora que os parâmetros necessários foram declarados, vamos definir e inicializar a nossa média móvel.

1
2
3
4
5
6
private MovingAverage movingAverage;

protected override void Initialize()
{
    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);
}

Neste momento, estamos prontos para implementar o cálculo do nosso desvio padrão. O modelo de código padrão já contém a propriedade Output que podemos usar para exibir os resultados do cálculo.

1
2
[Output("Result", LineColor = "Orange")]
public IndicatorDataSeries Result { get; set; }

Por último, mas não menos importante, vamos implementar o cálculo do desvio padrão no método Calculate().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public override void Calculate(int index)
{
    var average = movingAverage.Result[index];

    double sum = 0;

    for (var period = 0; period < MaPeriod; period++)
    {
        sum += Math.Pow(Source[index - period] - average, 2.0);
    }

    Result[index] = Math.Sqrt(sum / MaPeriod);
}

Se adicionarmos o nosso indicador a um gráfico, deveremos ver todos os nossos parâmetros na janela Adicionar instância.

Adicionar parâmetros adicionais

Com o nosso desvio padrão concluído, também podemos adicionar uma linha horizontal que servirá como um limite visual para o indicador. Para este fim, precisaremos de adicionar mais alguns parâmetros.

O primeiro será um parâmetro booleano que determinará se a nossa linha será mostrada ou não.

1
2
[Parameter("Show Line", DefaultValue = true, Group = "Line")]
public bool ShowLine { get; set; }

O parâmetro LineLevel permitir-nos-á determinar o nível de preço no qual a linha deve ser desenhada.

1
2
[Parameter("Line Level", DefaultValue = 0.001, Step = 0.001, Group = "Line")]
public double LineLevel { get; set; }

Também adicionaremos um parâmetro que permite escolher a cor da linha.

1
2
[Parameter("Line Color", DefaultValue = "Blue", Group = "Line")]
public Color LineColor { get; set; }

Com todos os parâmetros necessários no lugar, podemos escrever código para desenhar a linha no gráfico onde o nosso indicador está anexado.

1
2
3
4
if (ShowLine)
{
    Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
}

Se construirmos o indicador novamente e adicionarmos uma nova instância, poderemos ocultar/mostrar a linha, movê-la para cima ou para baixo e selecionar a cor da nossa escolha como a cor da linha.

Como mostrado no exemplo abaixo, os parâmetros também podem ser usados para garantir que o nosso indicador seja exibido apenas quando adicionado a gráficos para um intervalo de tempo específico.

1
2
[Parameter("Timeframe")]
public TimeFrame TF { get; set; }

No método Initialize(), verificaremos o intervalo de tempo do gráfico ao qual o nosso indicador está anexado. Se não for igual ao valor do parâmetro TF, impediremos que o indicador seja exibido.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
protected override void Initialize()
{
    if (TimeFrame != TF)
        return;

    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);

    if (ShowLine)
    {
        Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
    }
}

Esperamos que este guia tenha sido útil para entender os parâmetros e como eles funcionam na negociação algorítmica do cTrader.