Remove timeframe from strategy (#13)
This commit is contained in:
@@ -7,23 +7,24 @@ namespace Managing.Application.Abstractions
|
||||
public interface IScenarioService
|
||||
{
|
||||
IEnumerable<Scenario> GetScenarios();
|
||||
Scenario CreateScenario(string name, List<string> strategies);
|
||||
Scenario CreateScenario(string name, List<string> strategies, int? loopbackPeriod = 1);
|
||||
IEnumerable<Strategy> GetStrategies();
|
||||
bool DeleteStrategy(string name);
|
||||
bool DeleteScenario(string name);
|
||||
Scenario GetScenario(string name);
|
||||
|
||||
Strategy CreateStrategy(StrategyType type,
|
||||
Timeframe timeframe,
|
||||
string name,
|
||||
int? period = null,
|
||||
int? fastPeriods = null,
|
||||
int? slowPeriods = null,
|
||||
int? signalPeriods = null,
|
||||
double? multiplier = null,
|
||||
int? stochPeriods = null,
|
||||
int? smoothPeriods = null,
|
||||
int? cyclePeriods = null);
|
||||
string name,
|
||||
int? period = null,
|
||||
int? fastPeriods = null,
|
||||
int? slowPeriods = null,
|
||||
int? signalPeriods = null,
|
||||
double? multiplier = null,
|
||||
int? stochPeriods = null,
|
||||
int? smoothPeriods = null,
|
||||
int? cyclePeriods = null);
|
||||
|
||||
bool DeleteStrategies();
|
||||
bool DeleteScenarios();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ namespace Managing.Application.Abstractions
|
||||
Timeframe Timeframe { get; set; }
|
||||
HashSet<IStrategy> Strategies { get; set; }
|
||||
Ticker Ticker { get; }
|
||||
string Scenario { get; }
|
||||
string ScenarioName { get; }
|
||||
string AccountName { get; }
|
||||
bool IsForWatchingOnly { get; set; }
|
||||
MoneyManagement MoneyManagement { get; set; }
|
||||
@@ -31,5 +31,6 @@ namespace Managing.Application.Abstractions
|
||||
decimal GetProfitAndLoss();
|
||||
decimal GetTotalFees();
|
||||
void LoadStrategies(IEnumerable<IStrategy> strategies);
|
||||
void LoadScenario(string scenarioName);
|
||||
}
|
||||
}
|
||||
@@ -58,7 +58,7 @@ namespace Managing.Application.Backtesting
|
||||
{
|
||||
var scalpingBot = _botFactory.CreateBacktestScalpingBot(account.Name, moneyManagement, ticker, "scenario",
|
||||
timeframe, isForWatchingOnly);
|
||||
scalpingBot.LoadStrategies(ScenarioHelpers.GetStrategiesFromScenario(scenario));
|
||||
scalpingBot.LoadScenario(scenario.Name);
|
||||
var candles = initialCandles ?? GetCandles(account, ticker, timeframe, days);
|
||||
var result = GetBacktestingResult(ticker, scenario, timeframe, scalpingBot, candles, balance, account,
|
||||
moneyManagement);
|
||||
@@ -88,8 +88,7 @@ namespace Managing.Application.Backtesting
|
||||
{
|
||||
var flippingBot = _botFactory.CreateBacktestFlippingBot(account.Name, moneyManagement, ticker, "scenario",
|
||||
timeframe, false);
|
||||
var strategy = ScenarioHelpers.GetStrategiesFromScenario(scenario);
|
||||
flippingBot.LoadStrategies(ScenarioHelpers.GetStrategiesFromScenario(scenario));
|
||||
flippingBot.LoadScenario(scenario.Name);
|
||||
var candles = initialCandles ?? GetCandles(account, ticker, timeframe, days);
|
||||
var result = GetBacktestingResult(ticker, scenario, timeframe, flippingBot, candles, balance, account,
|
||||
moneyManagement);
|
||||
@@ -107,7 +106,7 @@ namespace Managing.Application.Backtesting
|
||||
var ticker = MiscExtensions.ParseEnum<Ticker>(candles.FirstOrDefault().Ticker);
|
||||
var bot = _botFactory.CreateBacktestScalpingBot(account.Name, moneyManagement, ticker, "scenario",
|
||||
timeframe, false);
|
||||
bot.LoadStrategies(ScenarioHelpers.GetStrategiesFromScenario(scenario));
|
||||
bot.LoadScenario(scenario.Name);
|
||||
var result = GetBacktestingResult(ticker, scenario, timeframe, bot, candles, balance, account,
|
||||
moneyManagement);
|
||||
return result;
|
||||
@@ -119,6 +118,7 @@ namespace Managing.Application.Backtesting
|
||||
var ticker = MiscExtensions.ParseEnum<Ticker>(candles.FirstOrDefault().Ticker);
|
||||
var bot = _botFactory.CreateBacktestFlippingBot(account.Name, moneyManagement, ticker, "scenario",
|
||||
timeframe, false);
|
||||
bot.LoadScenario(scenario.Name);
|
||||
var result = GetBacktestingResult(ticker, scenario, timeframe, bot, candles, balance, account,
|
||||
moneyManagement);
|
||||
return result;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace Managing.Application.ManageBot
|
||||
scalpingBotData.MoneyManagement,
|
||||
backupBot.Name,
|
||||
scalpingBotData.Ticker,
|
||||
scalpingBotData.Scenario,
|
||||
scalpingBotData.ScenarioName,
|
||||
scalpingBotData.Timeframe,
|
||||
scalpingBotData.IsForWatchingOnly);
|
||||
botTask = Task.Run(() => ((ITradingBot)bot).Start());
|
||||
@@ -140,7 +140,7 @@ namespace Managing.Application.ManageBot
|
||||
flippingBotData.MoneyManagement,
|
||||
backupBot.Name,
|
||||
flippingBotData.Ticker,
|
||||
flippingBotData.Scenario,
|
||||
flippingBotData.ScenarioName,
|
||||
flippingBotData.Timeframe,
|
||||
flippingBotData.IsForWatchingOnly);
|
||||
botTask = Task.Run(() => ((ITradingBot)bot).Start());
|
||||
|
||||
@@ -19,9 +19,9 @@ namespace Managing.Application.Scenarios
|
||||
_tradingService = tradingService;
|
||||
}
|
||||
|
||||
public Scenario CreateScenario(string name, List<string> strategies)
|
||||
public Scenario CreateScenario(string name, List<string> strategies, int? loopbackPeriod = 1)
|
||||
{
|
||||
var scenario = new Scenario(name);
|
||||
var scenario = new Scenario(name, loopbackPeriod);
|
||||
|
||||
foreach (var strategy in strategies)
|
||||
{
|
||||
@@ -43,20 +43,18 @@ namespace Managing.Application.Scenarios
|
||||
|
||||
public Strategy CreateStrategy(
|
||||
StrategyType type,
|
||||
Timeframe timeframe,
|
||||
string name,
|
||||
string name,
|
||||
int? period = null,
|
||||
int? fastPeriods = null,
|
||||
int? slowPeriods = null,
|
||||
int? signalPeriods = null,
|
||||
double? multiplier = null,
|
||||
int? stochPeriods = null,
|
||||
int? smoothPeriods = null,
|
||||
int? smoothPeriods = null,
|
||||
int? cyclePeriods = null)
|
||||
{
|
||||
var strategy = ScenarioHelpers.BuildStrategy(
|
||||
type,
|
||||
timeframe,
|
||||
name,
|
||||
period,
|
||||
fastPeriods,
|
||||
@@ -141,4 +139,4 @@ namespace Managing.Application.Scenarios
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ public class SettingsService : ISettingsService
|
||||
SetupMoneyManagementsSeed(Timeframe.FifteenMinutes);
|
||||
SetupMoneyManagementsSeed(Timeframe.OneHour);
|
||||
SetupMoneyManagementsSeed(Timeframe.OneDay);
|
||||
SetupScenariosSeed(Timeframe.FifteenMinutes);
|
||||
SetupScenariosSeed();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -82,30 +82,29 @@ public class SettingsService : ISettingsService
|
||||
Leverage = 1,
|
||||
StopLoss = 0.021m,
|
||||
TakeProfit = 0.042m,
|
||||
Name = $"{timeframe} Money Management"
|
||||
Name = $"{timeframe}-MediumRisk",
|
||||
};
|
||||
|
||||
await _moneyManagementService.CreateOrUpdateMoneyManagement(moneyManagement);
|
||||
}
|
||||
|
||||
private void SetupScenariosSeed(Timeframe timeframe)
|
||||
private void SetupScenariosSeed()
|
||||
{
|
||||
SetupMacd(timeframe);
|
||||
SetupRsiDiv(timeframe);
|
||||
SetupRsiDivConfirm(timeframe);
|
||||
SetupSuperTrend(timeframe);
|
||||
SetupChandelierExit(timeframe);
|
||||
SetupStochRsiTrend(timeframe);
|
||||
SetupStochSTCTrend(timeframe);
|
||||
SetupEmaTrend(timeframe);
|
||||
SetupEmaCross(timeframe);
|
||||
SetupMacd();
|
||||
SetupRsiDiv();
|
||||
SetupRsiDivConfirm();
|
||||
SetupSuperTrend();
|
||||
SetupChandelierExit();
|
||||
SetupStochRsiTrend();
|
||||
SetupStochSTCTrend();
|
||||
SetupEmaTrend();
|
||||
SetupEmaCross();
|
||||
}
|
||||
|
||||
private void SetupStochSTCTrend(Timeframe timeframe)
|
||||
private void SetupStochSTCTrend()
|
||||
{
|
||||
var name = "STCTrend";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.Stc,
|
||||
timeframe,
|
||||
name,
|
||||
fastPeriods: 23,
|
||||
slowPeriods: 50,
|
||||
@@ -113,11 +112,10 @@ public class SettingsService : ISettingsService
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupMacd(Timeframe timeframe)
|
||||
private void SetupMacd()
|
||||
{
|
||||
var name = "MacdCross";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.MacdCross,
|
||||
timeframe,
|
||||
name,
|
||||
fastPeriods: 12,
|
||||
slowPeriods: 26,
|
||||
@@ -125,53 +123,48 @@ public class SettingsService : ISettingsService
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupRsiDiv(Timeframe timeframe)
|
||||
private void SetupRsiDiv()
|
||||
{
|
||||
var name = "RsiDiv6";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.RsiDivergence,
|
||||
timeframe,
|
||||
name,
|
||||
period: 6);
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupRsiDivConfirm(Timeframe timeframe)
|
||||
private void SetupRsiDivConfirm()
|
||||
{
|
||||
var name = "RsiDivConfirm6";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.RsiDivergenceConfirm,
|
||||
timeframe,
|
||||
name,
|
||||
period: 6);
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupSuperTrend(Timeframe timeframe)
|
||||
private void SetupSuperTrend()
|
||||
{
|
||||
var name = "SuperTrend";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.SuperTrend,
|
||||
timeframe,
|
||||
name,
|
||||
period: 10,
|
||||
multiplier: 3);
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupChandelierExit(Timeframe timeframe)
|
||||
private void SetupChandelierExit()
|
||||
{
|
||||
var name = "ChandelierExit";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.ChandelierExit,
|
||||
timeframe,
|
||||
name,
|
||||
period: 22,
|
||||
multiplier: 3);
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupStochRsiTrend(Timeframe timeframe)
|
||||
private void SetupStochRsiTrend()
|
||||
{
|
||||
var name = "StochRsiTrend";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.StochRsiTrend,
|
||||
timeframe,
|
||||
name,
|
||||
period: 14,
|
||||
stochPeriods: 14,
|
||||
@@ -180,21 +173,19 @@ public class SettingsService : ISettingsService
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupEmaTrend(Timeframe timeframe)
|
||||
private void SetupEmaTrend()
|
||||
{
|
||||
var name = "Ema200Trend";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.EmaTrend,
|
||||
timeframe,
|
||||
name,
|
||||
period: 200);
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
}
|
||||
|
||||
private void SetupEmaCross(Timeframe timeframe)
|
||||
private void SetupEmaCross()
|
||||
{
|
||||
var name = "Ema200Cross";
|
||||
var strategy = _scenarioService.CreateStrategy(StrategyType.EmaCross,
|
||||
timeframe,
|
||||
name,
|
||||
period: 200);
|
||||
_scenarioService.CreateScenario(name, new List<string> { strategy.Name });
|
||||
|
||||
@@ -30,7 +30,7 @@ public class RsiDiv : FlowBase
|
||||
MapParameters();
|
||||
var candles = JsonConvert.DeserializeObject<HashSet<Candle>>(input);
|
||||
|
||||
var strategy = new RSIDivergenceStrategy(Name, RsiDivParameters.Timeframe, RsiDivParameters.Period);
|
||||
var strategy = new RSIDivergenceStrategy(Name, RsiDivParameters.Period);
|
||||
strategy.UpdateCandles(candles);
|
||||
strategy.Run();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user