Condições estendidas de ordem
Ao trabalhar com algumas bolsas ou sistemas de negociação, os campos padrão para registrar uma ordem podem não ser suficientes. Por exemplo, quando é necessário:
- Ao registrar ordens stop.
- Quando é necessário especificar propriedades adicionais para definir regras de ordem personalizadas.
O StockSharp oferece um sistema flexível para trabalhar com essas condições estendidas de ordem.
Classe Base OrderCondition
OrderCondition é uma classe base abstrata para todas as condições de ordem. Ela fornece a funcionalidade básica:
- Dicionário
Parameterspara armazenar parâmetros adicionais da ordem - Método
Clone()para criar uma cópia da condição - Método
ToString()sobrescrito para exibição conveniente das informações sobre a condição
public class MyOrderCondition : OrderCondition
{
public decimal? SpecialPrice
{
get => (decimal?)Parameters[nameof(SpecialPrice)];
set => Parameters[nameof(SpecialPrice)] = value;
}
}
Interfaces Especializadas
O StockSharp define várias interfaces para tipos específicos de condições de ordem:
- ITakeProfitOrderCondition - para ordens com condição Take-Profit
- IStopLossOrderCondition - para ordens com condição Stop-Loss
- IWithdrawOrderCondition - para ordens de retirada
- IRepoOrderCondition - para ordens REPO
- INtmOrderCondition - para ordens no modo de negociações negociadas (NDM)
BaseWithdrawOrderCondition
BaseWithdrawOrderCondition é uma classe base para condições de ordem que suportam a retirada de fundos. Ela implementa a interface IWithdrawOrderCondition e contém campos para a transação de retirada.
public class MyWithdrawCondition : BaseWithdrawOrderCondition
{
public string DestinationAddress
{
get => (string)Parameters[nameof(DestinationAddress)];
set => Parameters[nameof(DestinationAddress)] = value;
}
}
CoinbaseOrderCondition
A classe CoinbaseOrderCondition herda de BaseWithdrawOrderCondition, já que a Coinbase suporta retirada programática de ativos. Além disso, ela implementa a interface IStopLossOrderCondition, o que permite seu uso para ordens stop-loss.
[Serializable]
[DataContract]
[Display(ResourceType = typeof(LocalizedStrings), Name = LocalizedStrings.CoinbaseKey)]
public class CoinbaseOrderCondition : BaseWithdrawOrderCondition, IStopLossOrderCondition
{
/// <summary>
/// Initializes a new instance of the <see cref="CoinbaseOrderCondition"/>.
/// </summary>
public CoinbaseOrderCondition()
{
}
/// <summary>
/// Preço de ativação; ao ser atingido, uma ordem será colocada.
/// </summary>
[DataMember]
[Display(
ResourceType = typeof(LocalizedStrings),
Name = LocalizedStrings.StopPriceKey,
Description = LocalizedStrings.StopPriceDescKey,
GroupName = LocalizedStrings.StopLossKey,
Order = 0)]
public decimal? StopPrice
{
get => (decimal?)Parameters.TryGetValue(nameof(StopPrice));
set => Parameters[nameof(StopPrice)] = value;
}
decimal? IStopLossOrderCondition.ClosePositionPrice { get; set; }
decimal? IStopLossOrderCondition.ActivationPrice
{
get => StopPrice;
set => StopPrice = value;
}
bool IStopLossOrderCondition.IsTrailing
{
get => false;
set { }
}
}
Uso no Adaptador
Ao desenvolver seu próprio adaptador, você pode criar sua própria classe de condições de ordem herdando-a de OrderCondition ou de uma de suas descendentes e implementando as interfaces necessárias. Isso permitirá adicionar suporte a parâmetros específicos da sua bolsa.
Para especificar o tipo de condição de ordem suportado pelo adaptador, é usado o atributo OrderConditionAttribute.
[OrderCondition(typeof(CoinbaseOrderCondition))]
public partial class CoinbaseMessageAdapter
Essa abordagem proporciona flexibilidade ao trabalhar com diversas bolsas e seus requisitos exclusivos de parâmetros de ordem, mantendo a uniformidade dentro da arquitetura do StockSharp.