Files
nt8-sdk/src/NT8.Core/Common/Models/StrategyContext.cs
Billy Valentine 92f3732b3d
Some checks failed
Build and Test / build (push) Has been cancelled
Phase 0 completion: NT8 SDK core framework with risk management and position sizing
2025-09-09 17:06:37 -04:00

204 lines
5.1 KiB
C#

using System;
using System.Collections.Generic;
namespace NT8.Core.Common.Models
{
/// <summary>
/// Strategy context - provides market and account information to strategies
/// </summary>
public class StrategyContext
{
/// <summary>
/// Trading symbol
/// </summary>
public string Symbol { get; set; }
/// <summary>
/// Current timestamp
/// </summary>
public DateTime CurrentTime { get; set; }
/// <summary>
/// Current position information
/// </summary>
public Position CurrentPosition { get; set; }
/// <summary>
/// Account information
/// </summary>
public AccountInfo Account { get; set; }
/// <summary>
/// Market session information
/// </summary>
public MarketSession Session { get; set; }
/// <summary>
/// Additional custom data
/// </summary>
public Dictionary<string, object> CustomData { get; set; }
/// <summary>
/// Constructor for StrategyContext
/// </summary>
public StrategyContext(
string symbol,
DateTime currentTime,
Position currentPosition,
AccountInfo account,
MarketSession session,
Dictionary<string, object> customData)
{
Symbol = symbol;
CurrentTime = currentTime;
CurrentPosition = currentPosition;
Account = account;
Session = session;
CustomData = customData ?? new Dictionary<string, object>();
}
}
/// <summary>
/// Position information
/// </summary>
public class Position
{
/// <summary>
/// Position symbol
/// </summary>
public string Symbol { get; set; }
/// <summary>
/// Position quantity
/// </summary>
public int Quantity { get; set; }
/// <summary>
/// Average entry price
/// </summary>
public double AveragePrice { get; set; }
/// <summary>
/// Unrealized profit/loss
/// </summary>
public double UnrealizedPnL { get; set; }
/// <summary>
/// Realized profit/loss
/// </summary>
public double RealizedPnL { get; set; }
/// <summary>
/// Last update timestamp
/// </summary>
public DateTime LastUpdate { get; set; }
/// <summary>
/// Constructor for Position
/// </summary>
public Position(
string symbol,
int quantity,
double averagePrice,
double unrealizedPnL,
double realizedPnL,
DateTime lastUpdate)
{
Symbol = symbol;
Quantity = quantity;
AveragePrice = averagePrice;
UnrealizedPnL = unrealizedPnL;
RealizedPnL = realizedPnL;
LastUpdate = lastUpdate;
}
}
/// <summary>
/// Account information
/// </summary>
public class AccountInfo
{
/// <summary>
/// Current account equity
/// </summary>
public double Equity { get; set; }
/// <summary>
/// Available buying power
/// </summary>
public double BuyingPower { get; set; }
/// <summary>
/// Today's profit/loss
/// </summary>
public double DailyPnL { get; set; }
/// <summary>
/// Maximum drawdown
/// </summary>
public double MaxDrawdown { get; set; }
/// <summary>
/// Last update timestamp
/// </summary>
public DateTime LastUpdate { get; set; }
/// <summary>
/// Constructor for AccountInfo
/// </summary>
public AccountInfo(
double equity,
double buyingPower,
double dailyPnL,
double maxDrawdown,
DateTime lastUpdate)
{
Equity = equity;
BuyingPower = buyingPower;
DailyPnL = dailyPnL;
MaxDrawdown = maxDrawdown;
LastUpdate = lastUpdate;
}
}
/// <summary>
/// Market session information
/// </summary>
public class MarketSession
{
/// <summary>
/// Session start time
/// </summary>
public DateTime SessionStart { get; set; }
/// <summary>
/// Session end time
/// </summary>
public DateTime SessionEnd { get; set; }
/// <summary>
/// Regular Trading Hours
/// </summary>
public bool IsRth { get; set; }
/// <summary>
/// Session name
/// </summary>
public string SessionName { get; set; }
/// <summary>
/// Constructor for MarketSession
/// </summary>
public MarketSession(
DateTime sessionStart,
DateTime sessionEnd,
bool isRth,
string sessionName)
{
SessionStart = sessionStart;
SessionEnd = sessionEnd;
IsRth = isRth;
SessionName = sessionName;
}
}
}