Remove timeframe from strategy (#13)

This commit is contained in:
Oda
2025-02-26 17:24:59 +07:00
committed by GitHub
parent 298b666a0b
commit 4302bb8435
39 changed files with 299 additions and 288 deletions

View File

@@ -1,8 +1,8 @@
using Managing.Application.Abstractions;
using Microsoft.Extensions.Logging;
using static Managing.Common.Enums;
using Managing.Application.Abstractions.Services;
using Managing.Domain.MoneyManagements;
using Microsoft.Extensions.Logging;
using static Managing.Common.Enums;
namespace Managing.Application.Bots
{
@@ -11,7 +11,7 @@ namespace Managing.Application.Bots
public FlippingBot(string accountName,
MoneyManagement moneyManagement,
string name,
string scenario,
string scenarioName,
IExchangeService exchangeService,
Ticker ticker,
ITradingService tradingService,
@@ -26,7 +26,7 @@ namespace Managing.Application.Bots
moneyManagement,
name,
ticker,
scenario,
scenarioName,
exchangeService,
logger,
tradingService,

View File

@@ -1,8 +1,8 @@
using Managing.Application.Abstractions;
using Microsoft.Extensions.Logging;
using static Managing.Common.Enums;
using Managing.Application.Abstractions.Services;
using Managing.Domain.MoneyManagements;
using Microsoft.Extensions.Logging;
using static Managing.Common.Enums;
namespace Managing.Application.Bots
{
@@ -11,7 +11,7 @@ namespace Managing.Application.Bots
public ScalpingBot(string accountName,
MoneyManagement moneyManagement,
string name,
string scenario,
string scenarioName,
IExchangeService exchangeService,
Ticker ticker,
ITradingService tradingService,
@@ -23,19 +23,19 @@ namespace Managing.Application.Bots
bool isForBacktest = false,
bool isForWatchingOnly = false)
: base(accountName,
moneyManagement,
name,
ticker,
scenario,
exchangeService,
logger,
tradingService,
timeframe,
accountService,
messengerService,
botService,
isForBacktest,
isForWatchingOnly)
moneyManagement,
name,
ticker,
scenarioName,
exchangeService,
logger,
tradingService,
timeframe,
accountService,
messengerService,
botService,
isForBacktest,
isForWatchingOnly)
{
BotType = BotType.ScalpingBot;
}
@@ -47,4 +47,4 @@ namespace Managing.Application.Bots
Logger.LogInformation($"Starting {Name} bot - Status : {Status}");
}
}
}
}

View File

@@ -33,7 +33,7 @@ public class TradingBot : Bot, ITradingBot
public HashSet<Signal> Signals { get; set; }
public List<Position> Positions { get; set; }
public Ticker Ticker { get; set; }
public string Scenario { get; set; }
public string ScenarioName { get; set; }
public string AccountName { get; set; }
public MoneyManagement MoneyManagement { get; set; }
public Timeframe Timeframe { get; set; }
@@ -44,6 +44,7 @@ public class TradingBot : Bot, ITradingBot
public int PreloadedCandlesCount { get; set; }
public BotType BotType { get; set; }
public decimal Fee { get; set; }
public Scenario Scenario { get; set; }
public Dictionary<DateTime, decimal> WalletBalances { get; set; }
public TradingBot(
@@ -51,7 +52,7 @@ public class TradingBot : Bot, ITradingBot
MoneyManagement moneyManagement,
string name,
Ticker ticker,
string scenario,
string scenarioName,
IExchangeService exchangeService,
ILogger<TradingBot> logger,
ITradingService tradingService,
@@ -75,7 +76,7 @@ public class TradingBot : Bot, ITradingBot
AccountName = accountName;
MoneyManagement = moneyManagement;
Ticker = ticker;
Scenario = scenario;
ScenarioName = scenarioName;
Timeframe = timeframe;
IsForBacktest = isForBacktest;
Logger = logger;
@@ -101,7 +102,7 @@ public class TradingBot : Bot, ITradingBot
if (!IsForBacktest)
{
LoadScenario();
LoadScenario(ScenarioName);
await PreloadCandles();
await CancelAllOrders();
@@ -135,9 +136,9 @@ public class TradingBot : Bot, ITradingBot
}
}
public void LoadScenario()
public void LoadScenario(string scenarioName)
{
var scenario = TradingService.GetScenarioByName(Scenario);
var scenario = TradingService.GetScenarioByName(scenarioName);
if (scenario == null)
{
Logger.LogWarning("No scenario found for this scenario name");
@@ -145,6 +146,7 @@ public class TradingBot : Bot, ITradingBot
}
else
{
Scenario = scenario;
LoadStrategies(ScenarioHelpers.GetStrategiesFromScenario(scenario));
}
}
@@ -159,22 +161,25 @@ public class TradingBot : Bot, ITradingBot
public async Task Run()
{
Logger.LogInformation($"____________________{Name}____________________");
Logger.LogInformation(
$"Time : {DateTime.Now} - Server time {DateTime.Now.ToUniversalTime()} - Bot : {Name} - Type {BotType} - Ticker : {Ticker}");
if (!IsForBacktest)
{
Logger.LogInformation($"____________________{Name}____________________");
Logger.LogInformation(
$"Time : {DateTime.Now} - Server time {DateTime.Now.ToUniversalTime()} - Bot : {Name} - Type {BotType} - Ticker : {Ticker}");
}
var previousLastCandle = OptimizedCandles.LastOrDefault();
if (!IsForBacktest)
await UpdateCandles();
var currentLastCandle = OptimizedCandles.LastOrDefault();
if (currentLastCandle != previousLastCandle || IsForBacktest)
await UpdateSignals(OptimizedCandles);
else
Logger.LogInformation($"No need to update signals for {Ticker}");
if (!IsForWatchingOnly)
await ManagePositions();
@@ -213,7 +218,7 @@ public class TradingBot : Bot, ITradingBot
private async Task UpdateSignals(FixedSizeQueue<Candle> candles)
{
var signal = TradingBox.GetSignal(candles.ToHashSet(), Strategies, Signals);
var signal = TradingBox.GetSignal(candles.ToHashSet(), Strategies, Signals, Scenario.LoopbackPeriod);
if (signal == null) return;
@@ -231,7 +236,7 @@ public class TradingBot : Bot, ITradingBot
if (IsForWatchingOnly || (ExecutionCount < 1 && !IsForBacktest))
signal.Status = SignalStatus.Expired;
var signalText = $"{Scenario} trigger a signal. Signal told you " +
var signalText = $"{ScenarioName} trigger a signal. Signal told you " +
$"to {signal.Direction} {Ticker} on {Timeframe}. The confidence in this signal is {signal.Confidence}. Identifier : {signal.Identifier}";
Logger.LogInformation(signalText);
@@ -726,7 +731,7 @@ public class TradingBot : Bot, ITradingBot
Positions = Positions,
Timeframe = Timeframe,
Ticker = Ticker,
Scenario = Scenario,
ScenarioName = ScenarioName,
AccountName = AccountName,
IsForWatchingOnly = IsForWatchingOnly,
WalletBalances = WalletBalances,
@@ -744,7 +749,7 @@ public class TradingBot : Bot, ITradingBot
MoneyManagement = data.MoneyManagement;
Timeframe = data.Timeframe;
Ticker = data.Ticker;
Scenario = data.Scenario;
ScenarioName = data.ScenarioName;
AccountName = data.AccountName;
IsForWatchingOnly = data.IsForWatchingOnly;
}
@@ -758,7 +763,7 @@ public class TradingBotBackup
public List<Position> Positions { get; set; }
public Timeframe Timeframe { get; set; }
public Ticker Ticker { get; set; }
public string Scenario { get; set; }
public string ScenarioName { get; set; }
public string AccountName { get; set; }
public bool IsForWatchingOnly { get; set; }
public Dictionary<DateTime, decimal> WalletBalances { get; set; }