Como o C# é uma linguagem fortemente tipada, é necessário especificar tipos de dados ao declarar variáveis e propriedades de classe em cBots, indicadores e plugins. Em contraste, o Python é dinamicamente tipado, pelo que os tipos de variáveis são inferidos automaticamente. No entanto, ao desenvolver cBots utilizando a API do cTrader, os mesmos tipos conceptuais são preservados para manter a consistência entre ambas as linguagens.
A API do cTrader Algo não permite que todos os tipos de dados sejam utilizados como parâmetros personalizáveis, e é por isso que é essencial que os desenvolvedores de algoritmos compreendam e naveguem cuidadosamente pelos tipos suportados.
Nota
Os cBots, indicadores e plugins em Python utilizam parâmetros personalizáveis declarados nos seus ficheiros .cs.
Casos de uso de parâmetros e UI
O cTrader suporta apenas estes tipos de parâmetros com os principais casos de uso e elementos de UI relacionados refletidos na tabela abaixo.
C#
Python
Casos de uso
Elemento de UI
int
int
Volume da ordem, número de barras, número de períodos, etc.
Campo de entrada numérico (com stepper)
double
float
Valor do preço, volume da ordem, etc.
Campo de entrada numérico (com stepper)
string
str
Mensagem personalizada, etiqueta da posição, etc.
Campo de entrada de texto
bool
bool
Mecanismos de proteção, permitir negociação, permitir e-mail, etc.
Lista suspensa sim/não
DataSeries
api.DataSeries
Fonte de preços de mercado, etc.
Lista suspensa
TimeFrame
api.TimeFrame
Intervalo de tempo escolhido, etc.
Seletor de período
enum
Enum
Alinhamento de desenhos do gráfico, níveis de risco individuais, etc.
Lista suspensa
Color
Color
Desenhos do gráfico, cor dos meios de análise técnica, elementos personalizados, etc.
Seletor de cor
DateTime
DateTime
Obter data e hora fortemente tipadas no fuso horário do algo
Seletor de data e hora
DateOnly
DateOnly
Obter data fortemente tipada
Seletor de data
TimeSpan
TimeSpan
Obter intervalo de tempo ou hora do dia fortemente tipados
Seletor de hora
Symbol
Symbol
Obter um único símbolo fortemente tipado
Seletor de símbolo
Symbol[]
Symbol[]
Obter múltiplos símbolos fortemente tipados num array
Seletor multi-símbolo
Enum[]
Enum[]
Obter múltiplos valores de um tipo Enum fortemente tipados num array
Seletor multi-valor de enum
TimeFrame[]
TimeFrame[]
Obter múltiplos valores TimeFrame fortemente tipados num array
Seletor multi-período
Aviso
Pode não conseguir utilizar alguns dos tipos de parâmetros acima se estiver a usar uma versão mais antiga do cTrader ou da API Algo.
Por exemplo, a UI do cTrader reflete os tipos bool, double, int do C# e bool, float, int do Python da seguinte forma.
Os três exemplos seguintes mostram os tipos de dados DataSeries, enum personalizado, string do C# e api.DataSeries, Enum, str do Python (para os quais também fornecemos o código completo neste guia).
Como mostrado abaixo, o tipo de parâmetro Color do C# e Color do Python é representado por um seletor de cor.
Finalmente, a UI do tipo de dados TimeFrame do C# e api.TimeFrame do Python reflete as opções de período disponíveis nos gráficos de negociação dentro da aplicação Trade.
Exemplos de cBot
A etiqueta da posição é um parâmetro string do C# e str do Python no seguinte cBot.
No exemplo abaixo, o tipo de dados double do C# e float do Python serve como um parâmetro para inserir o volume da ordem em lotes. O cBot executa uma ordem de compra ao mercado após três barras vermelhas consecutivas.
O valor do parâmetro DateTime é automaticamente convertido do fuso horário da plataforma do utilizador para o fuso horário do algo, eliminando a necessidade de conversão manual.
No exemplo abaixo, o tipo de dados Symbol serve como parâmetro.
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;namespacecAlgo{[Indicator(AccessRights = AccessRights.None)]publicclassNewIndicator4:Indicator{privateBars_hourlyTimeFrameBars;privateBars_targetTimeFrameBars;[Parameter("Chosen Time Frame")]publicTimeFrameTargetTimeFrame{get;set;}[Output("Main")]publicIndicatorDataSeriesResult{get;set;}protectedoverridevoidInitialize(){_hourlyTimeFrameBars=MarketData.GetBars(TimeFrame.Hour);_targetTimeFrameBars=MarketData.GetBars(TargetTimeFrame);}publicoverridevoidCalculate(intindex){Result[index]=_hourlyTimeFrameBars.HighPrices[index]-_targetTimeFrameBars.HighPrices[index];}}}
Existe um indicador divertido (teste de daltonismo) que oferece opções de visão de cores enum (por exemplo, normal, daltónico e escala de cinzentos) para os utilizadores determinarem a cor de uma linha horizontal desenhada no gráfico.
Em resumo, ao escolher o tipo de dados correto para as variáveis declaradas e propriedades de classe, poderá criar cBots e indicadores que podem lidar com tarefas mesmo não padronizadas.