Čítanie výsledkov
Po calculate() je každá metrika verejnou vlastnosťou inštancie Analytics — null, ak jej kalkulátor nebežal:
| Vlastnosť | Kalkulátor | Kľúč v toArray() | Výsledok |
|---|---|---|---|
counts | Counts | counts | Počet obchodov, otvorených aj uzavretých. |
wins | Wins | wins | Víťazné uzavreté obchody a miera výhier: výhry vydelené uzavretými obchodmi. |
volume | TradingVolume | volume | Agregáty obchodovaného množstva zo všetkých obchodov. |
value | TradingValue | value | Agregáty nominálnej hodnoty (size × vstupná cena) zo všetkých obchodov. |
commission | Commissions | commission | Poplatok za obchod; obchod bez poplatku sa počíta ako 0. |
unrealizedProfitAndLoss | UnrealizedGrossProfitAndLoss, UnrealizedNetProfitAndLoss | profit_and_loss.unrealized | Hrubý a čistý P&L otvorených obchodov (ocenených ich closePrice), spriemerovaný cez ne. |
realizedProfitAndLoss | RealizedGrossProfitAndLoss, RealizedNetProfitAndLoss | profit_and_loss.realized | Hrubý a čistý P&L uzavretých obchodov, spriemerovaný cez ne. |
profitFactor | ProfitFactor | profit_factor | Realizovaný hrubý zisk vydelený realizovanou hrubou stratou (0, ak strata nie je). |
cumulativeReturn | GrossCumulativeReturn, NetCumulativeReturn | cumulative_return | Zložený výnos v percentách, hrubý aj čistý, jeho geometrický priemer na obchod a najvyšší / najnižší priebežný výnos. |
frequency | TradingFrequency | frequency | Ako často sa obchody otvárajú, za rozpätie časov otvorenia. |
duration | TradesDuration | duration | Ako dlho boli uzavreté obchody otvorené, v sekundách. |
streaks | Streaks | streaks | Najdlhšie série víťazných a stratových uzavretých obchodov. |
expectancy | Expectancy | expectancy | Očakávaný P&L priemerného uzavretého obchodu. |
riskRewardRatio | RiskRewardRatio | risk_reward_ratio | Priemerná výhra vydelená priemernou stratou. |
winRateByPeriod | WinRateByPeriod | win_rate_by_period | Miera výhier uzavretých obchodov podľa dňa, týždňa alebo mesiaca ich otvorenia. |
maxDrawdown | MaxDrawdown | max_drawdown | Najväčší prepad realizovanej (čistej) krivky kapitálu od vrcholu po dno. |
riskAdjustedReturns | RiskAdjustedReturns | risk_adjusted_returns | Sharpeho a Sortinov pomer realizovaných čistých výnosov. |
Komentáre v príkladoch ukazujú reťazcovú podobu každej hodnoty pre tri ukážkové obchody zo sekcie Spustenie enginu, s ->scale(2).
Rozpady
Kde to dáva zmysel, metrika poskytuje globálnu hodnotu ->global a rozpady ->forPair(), ->forBaseCurrency() a ->forQuoteCurrency(), každý rozdelený na total, buy a sell. Páry sa zapisujú ako ZÁKLAD/KÓTA, presne tak, ako ich vracia Trade::pair():
// Every level splits into total, buy and sell
$analytics->counts->global->total; // '3' — every trade
$analytics->counts->global->buy; // '2'
$analytics->counts->global->sell; // '1'
$analytics->counts->forPair('ETH/USD')->total; // '2'
$analytics->counts->forBaseCurrency('ETH')->sell; // '1'
$analytics->counts->forQuoteCurrency('USD')->total; // '3'Agregáty
Metriky typu suma — volume, value, commission, duration, P&L a kumulatívny výnos — majú na každej úrovni agregát aj s párom, ktorý určil krajné hodnoty. Každý agregát nesie aj count — počet obchodov, z ktorých vznikol — a jeho priemer delí presne týmto počtom: realizované hodnoty uzavretými obchodmi, nerealizované otvorenými:
$pnl = $analytics->realizedProfitAndLoss->net->global->total;
$pnl->total; // '781.00' — the sum
$pnl->count; // 3 — the trades that fed it: here, the closed trades
$pnl->average; // '260.33' — the total divided by that count
$pnl->highest; // '990.00' — the best single trade
$pnl->highestPair; // 'BTC/USD'
$pnl->lowest; // '-306.00' — the worst single trade
$pnl->lowestPair; // 'ETH/USD'Obchody bez zisku a straty a prázdne hodnoty
- Obchod s P&L presne 0 je uzavretý obchod, ktorý nevyhral ani neprehral: započíta sa do menovateľa miery výhier aj do expectancy, ale nie do priemernej straty pomeru rizika a výnosu, a ukončí sériu výhier aj prehier.
- Menej ako dva obchody alebo obchody otvorené v tej istej sekunde nechajú frekvenciu na 0 bez jednotky.
- Hodnota, ktorú nie je čím deliť — bez straty pri profit factore či pomere rizika a výnosu, bez odchýlky pri Sharpeho či Sortinovom pomere —, zostáva 0.
Tvary výsledkov
| Výsledky | Cesta k hodnote | Poznámka |
|---|---|---|
| counts, wins, wins->closed, wins->winRatio, streaks->wins, streaks->losses | ->global, ->forPair(), ->forBaseCurrency(), ->forQuoteCurrency() → ->total, ->buy, ->sell | Každá koncová hodnota je NumericValueAsString. |
| volume, value, commission, duration, P&L gross / net, cumulativeReturn gross / net | ->global, ->forPair(), … → ->total, ->buy, ->sell → ->total, ->count, ->average, ->highest, ->highestPair, ->lowest, ->lowestPair | count je int — počet obchodov, z ktorých agregát vznikol; highestPair a lowestPair sú obyčajné reťazce. |
| profitFactor, frequency, P&L grossProfits / grossLosses / netProfits / netLosses | ->total, ->forPair(), ->forBaseCurrency(), ->forQuoteCurrency() | Bez rozdelenia na nákupy a predaje. |
Prechádzanie rozpadov
Verejné polia perPair, perBaseCurrency a perQuoteCurrency obsahujú všetky rozpady z behu, s kľúčom podľa páru alebo meny:
foreach ($analytics->realizedProfitAndLoss->net->perPair as $pair => $pnl) {
echo $pair, ': ', $pnl->total->total, PHP_EOL;
}
// BTC/USD: 990.00
// ETH/USD: -209.00
array_keys($analytics->counts->perBaseCurrency); // ['BTC', 'ETH']
array_keys($analytics->counts->perQuoteCurrency); // ['USD']forPair() a ďalšie metódy rozpadov vrátia pre pár alebo menu bez obchodov nulové hodnoty — nikdy null.
Viac kótovaných mien
Globálne súčty sčítajú sumy zo všetkých kótovaných mien tak, ako sú. Ak obchodujete voči viacerým kótovaným menám, sumy čítajte po menách cez forQuoteCurrency().
Prejavte 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.