Escrevendo uma Estratégia com IA
Um guia passo a passo para criar uma estratégia de negociação StockSharp usando ferramentas de IA.
Preparação
1. Instale uma Ferramenta de IA
Escolha uma das ferramentas disponíveis:
- Claude Code —
npm install -g @anthropic-ai/claude-code(requer Node.js) - Cursor — baixe em cursor.com
- GitHub Copilot — instale o plugin para a sua IDE
2. Crie um Projeto
dotnet new console -n MyStrategy --framework net10.0
cd MyStrategy
dotnet add package StockSharp.Algo
dotnet add package StockSharp.Algo.Strategies
dotnet add package StockSharp.Algo.Indicators
dotnet add package StockSharp.Algo.Testing
dotnet add package StockSharp.Binance
3. Prepare o Contexto
Crie um arquivo CLAUDE.md (ou .cursorrules) na raiz do projeto:
# Regras do projeto
- Framework: StockSharp 5.x, .NET 10
- As estratégias herdam da classe Strategy
- Subscrever candles via Connector.Subscribe(subscription)
- Registar ordens via RegisterOrder(order)
- Logging: this.AddInfoLog(), this.AddWarningLog(), this.AddErrorLog()
- Indicadores: criar com new e chamar indicator.Process(candle)
- Tratar sempre connector.Error e os erros da estratégia
Exemplo Passo a Passo: Estratégia SMA
Passo 1: Descreva a Tarefa para a IA
Exemplo de prompt:
Crie uma estratégia de negociação com StockSharp que:
- herde de Strategy
- use duas médias móveis simples (SMA): fast (período 10) e slow (período 30)
- compre quando a SMA rápida cruza acima da SMA lenta
- venda quando a SMA rápida cruza abaixo da SMA lenta
- tamanho da posição: 1 lote
- use candles de 5 minutos
- subscreva candles em OnStarted()
- processe candles via regras de subscrição
Passo 2: Revise o Código Gerado
A IA gerará algo como:
using StockSharp.Algo;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Messages;
public class SmaCrossStrategy : Strategy
{
private readonly StrategyParam<int> _fastPeriod;
private readonly StrategyParam<int> _slowPeriod;
private readonly StrategyParam<DataType> _candleType;
private SimpleMovingAverage _fastSma;
private SimpleMovingAverage _slowSma;
private bool _prevFastAbove;
private bool _isFirstCandle = true;
public SmaCrossStrategy()
{
_fastPeriod = Param(nameof(FastPeriod), 10);
_slowPeriod = Param(nameof(SlowPeriod), 30);
_candleType = Param(nameof(CandleType), DataType.TimeFrame(TimeSpan.FromMinutes(5)));
}
public int FastPeriod
{
get => _fastPeriod.Value;
set => _fastPeriod.Value = value;
}
public int SlowPeriod
{
get => _slowPeriod.Value;
set => _slowPeriod.Value = value;
}
public DataType CandleType
{
get => _candleType.Value;
set => _candleType.Value = value;
}
protected override void OnStarted(DateTimeOffset time)
{
base.OnStarted(time);
_fastSma = new SimpleMovingAverage { Length = FastPeriod };
_slowSma = new SimpleMovingAverage { Length = SlowPeriod };
_isFirstCandle = true;
var subscription = new Subscription(CandleType, Security);
this
.WhenCandlesFinished(subscription)
.Do(ProcessCandle)
.Apply(this);
Subscribe(subscription);
}
private void ProcessCandle(ICandleMessage candle)
{
var fastValue = _fastSma.Process(candle);
var slowValue = _slowSma.Process(candle);
if (!_fastSma.IsFormed || !_slowSma.IsFormed)
return;
var fastAbove = fastValue.GetValue<decimal>() > slowValue.GetValue<decimal>();
if (!_isFirstCandle)
{
if (fastAbove && !_prevFastAbove)
{
// A SMA rápida cruzou acima da lenta — comprar
if (Position <= 0)
RegisterOrder(this.BuyAtMarket(Volume));
}
else if (!fastAbove && _prevFastAbove)
{
// A SMA rápida cruzou abaixo da lenta — vender
if (Position >= 0)
RegisterOrder(this.SellAtMarket(Volume));
}
}
_prevFastAbove = fastAbove;
_isFirstCandle = false;
}
}
Passo 3: O Que Verificar
Percorra esta lista de verificação:
- Herança: a classe herda de
Strategy✓ - Parâmetros: usa
StrategyParam<T>para otimização ✓ - Assinatura de candles: via
Subscribe(new Subscription(...))✓ - Processamento de candles: via a regra
WhenCandlesFinished✓ - Verificação de IsFormed: os indicadores são verificados quanto à prontidão ✓
- Ordens: via
RegisterOrder()comBuyAtMarket/SellAtMarket✓ - Posição:
Positioné verificada antes de enviar ordens ✓
Passo 4: Peça à IA para Adicionar Backtesting
Adicione código de backtesting para esta estratégia usando dados históricos.
Use HistoryEmulationConnector, carregue dados do armazenamento local
e apresente estatísticas resumidas (PnL, número de transações, drawdown máximo).
Exemplos de Prompts
Estratégia de Bandas de Bollinger
Crie uma estratégia StockSharp que negoceie com Bandas de Bollinger:
- comprar quando o preço toca na banda inferior
- vender quando o preço toca na banda superior
- período 20, multiplicador 2,0
- stop-loss: 1% a partir do preço de entrada
- take-profit: 2% a partir do preço de entrada
- usar StrategyParam para todos os parâmetros
Estratégia de Arbitragem
Crie uma estratégia de arbitragem de pares em StockSharp:
- dois instrumentos (especificados via parâmetros)
- calcular o spread entre os preços
- entrar quando o spread se desvia 2 desvios-padrão
- sair quando o spread regressa à média
- neutralização de volume (posições equivalentes em termos monetários)
Scalping no Livro de Ofertas
Crie uma estratégia de scalping em StockSharp:
- subscrever o livro de ofertas (MarketDepth) via Subscribe
- analisar o desequilíbrio bid/ask
- entrar com desequilíbrio forte (> 3:1)
- saída rápida por take-profit (5 ticks)
- stop-loss: 3 ticks
- no máximo 1 posição de cada vez
Erros Comuns da IA
1. Eventos Desatualizados
Errado (API antiga):
connector.NewSecurities += securities => { ... };
connector.CandleSeriesProcessing += (series, candle) => { ... };
Correto (API atual):
// Usar assinaturas
var subscription = new Subscription(DataType.TimeFrame(TimeSpan.FromMinutes(5)), security);
connector.Subscribe(subscription);
2. Criação de Ordens Sem Helpers
Errado:
var order = new Order
{
Security = Security,
Portfolio = Portfolio,
Side = Sides.Buy,
Type = OrderTypes.Market,
Volume = 1,
};
Correto (usando os helpers da estratégia):
RegisterOrder(this.BuyAtMarket(Volume));
// or
RegisterOrder(this.SellAtLimit(price, Volume));
3. Verificação de IsFormed Ausente
Errado:
var value = _sma.Process(candle);
// Usar o valor imediatamente — pode ainda não estar pronto
Correto:
var value = _sma.Process(candle);
if (!_sma.IsFormed)
return;
Dicas
- Forneça a documentação à IA — aponte-a para doc.stocksharp.com ou copie exemplos de código de
Samples/ - Use o CLAUDE.md — um arquivo de regras do projeto reduz muito o número de erros
- Comece simples — crie primeiro uma estratégia básica, depois adicione filtros e gestão de risco
- Teste no histórico — sempre execute um backtest antes da negociação ao vivo
- Clone o repositório — se a IA tiver acesso aos códigos-fonte do StockSharp, ela usará a API com mais precisão