Výber metrík
Predvolene bežia všetky kalkulátory. Odovzdajte triedy kalkulátorov, ktoré chcete; ich závislosti sa pridajú automaticky — aj tranzitívne — a zachová sa kanonické poradie behu:
use RoundlyConsulting\TradingAnalytics\Analytics\Counts;
use RoundlyConsulting\TradingAnalytics\Analytics\Streaks;
$analytics = TradingAnalytics::calculate($trades, only: [Counts::class]);
$analytics = TradingAnalytics::for($trades)->only([Counts::class])->calculate(); // same, fluent
// $analytics->counts is populated; metrics you didn't request stay null
$analytics = TradingAnalytics::for($trades)->except([Streaks::class])->calculate();Trieda, ktorá nie je registrovaný kalkulátor, vyhodí UnknownCalculatorException. Čo only() / except() prijímajú, zistíte cez TradingAnalytics::metrics() (alebo metrics() na inštancii enginu):
$available = TradingAnalytics::metrics(); // list of calculator class-strings
// Counts, TradingVolume, TradingValue, Commissions,
// UnrealizedGrossProfitAndLoss, UnrealizedNetProfitAndLoss,
// RealizedGrossProfitAndLoss, RealizedNetProfitAndLoss, Wins, ProfitFactor,
// GrossCumulativeReturn, NetCumulativeReturn, TradingFrequency, TradesDuration,
// Streaks, Expectancy, RiskRewardRatio, WinRateByPeriod, MaxDrawdown,
// RiskAdjustedReturns — all in RoundlyConsulting\TradingAnalytics\Analytics\Závislosti
Každý kalkulátor beží samostatne: každý agregát si sám počíta obchody, z ktorých robí priemer. Od iného kalkulátora závisia len tri — ProfitFactor, Expectancy a RiskRewardRatio vychádzajú z realizovaného hrubého P&L, takže so sebou pridajú RealizedGrossProfitAndLoss:
| Kalkulátor | only() spustí aj |
|---|---|
ProfitFactor | RealizedGrossProfitAndLoss |
Expectancy | RealizedGrossProfitAndLoss |
RiskRewardRatio | RealizedGrossProfitAndLoss |
except() aj tak spustí vylúčený kalkulátor, od ktorého závisí niektorý zostávajúci — except([RealizedGrossProfitAndLoss::class]) ho ponechá, kým ho potrebuje profit factor. Výsledky sa v oboch prípadoch zhodujú s úplným behom:
use RoundlyConsulting\TradingAnalytics\Analytics\Expectancy;
use RoundlyConsulting\TradingAnalytics\Analytics\MaxDrawdown;
use RoundlyConsulting\TradingAnalytics\Analytics\RealizedGrossProfitAndLoss;
use RoundlyConsulting\TradingAnalytics\Analytics\RealizedNetProfitAndLoss;
$analytics = TradingAnalytics::for($trades)
->scale(2)
->only([
RealizedNetProfitAndLoss::class, // averages over the closed trades it counted itself
Expectancy::class, // pulls in RealizedGrossProfitAndLoss
MaxDrawdown::class,
])
->calculate();
array_keys($analytics->toArray());
// ['profit_and_loss', 'expectancy', 'max_drawdown']
$analytics->realizedProfitAndLoss->net->global->total->average; // '260.33' — same as a full run
$analytics->counts; // null — not requested
// except() keeps a dependency a remaining calculator still needs
$analytics = TradingAnalytics::for($trades)->except([RealizedGrossProfitAndLoss::class])->calculate();
$analytics->realizedProfitAndLoss->gross; // still calculated — the profit factor needs itPrejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.