Spustenie enginu
Odovzdajte TradingAnalytics::for() zdroj obchodov — objekty Trade, riadky v akomkoľvek tvare, ktorý prečíta Trade::fromRow(), ich kombináciu alebo zoradený dopyt —, nastavte beh a zavolajte calculate(); prípadne všetko vytvorte a spustite jedným volaním TradingAnalytics::calculate(). Engine urobí jediný prechod: pre každý obchod spustí všetky aktívne kalkulátory a potom nechá každý kalkulátor dopočítať výsledky. Históriu obchodov si nedrží, takže pamäť sa nezväčšuje, nech je história akokoľvek dlhá:
use Illuminate\Support\Facades\DB;
use RoundlyConsulting\TradingAnalytics\Analytics\Counts;
use RoundlyConsulting\TradingAnalytics\Analytics\Streaks;
use RoundlyConsulting\TradingAnalytics\Facades\TradingAnalytics;
// Build, configure, run
$analytics = TradingAnalytics::for($trades)
->scale(5) // decimal places of every amount, default 10 (see Precision)
->calculate(); // returns the Analytics instance
// Or build and run in one call, optionally restricted to some metrics
$analytics = TradingAnalytics::calculate(DB::table('trades')->orderBy('close_time')->orderBy('id'));
$analytics = TradingAnalytics::calculate($rows, only: [Counts::class, Streaks::class]);
$analytics->hasBeenCalculated(); // true
$analytics->toArray(); // the full result matrix as a nested arrayfor() vráti engine Analytics pripravený na nastavenie. Jeho fluentné metódy:
- scale(int) — počet desatinných miest každej sumy v tomto behu (predvolene z konfigurácie, 10; pozrite Presnosť). Záporná škála vyhodí InvalidScaleException; getScale() ju vráti.
- usingWinRatePeriod(Period) — obdobie pre mieru výhier po obdobiach (predvolene z konfigurácie, daily).
- only([...]) / except([...]) — výber kalkulátorov, ktoré sa spustia.
- onEachTrade() / afterTrades() — háčiky do výpočtu.
- calculate() — spustí prechod a vráti inštanciu; realizované obchody musia prichádzať v poradí podľa času zatvorenia (pozrite Poradie obchodov). hasBeenCalculated() povie, či už prebehol; toArray() dovtedy vracia [].
Ukážkový príklad
Príklady v celej dokumentácii používajú tieto tri fiktívne obchody, zoradené podľa času zatvorenia, s ->scale(2):
use RoundlyConsulting\TradingAnalytics\DataTransferObjects\Trade;
use RoundlyConsulting\TradingAnalytics\Facades\TradingAnalytics;
// Three fictional, closed trades used by the examples in these docs
$trades = Trade::collect([
['base_currency' => 'BTC', 'quote_currency' => 'USD', 'open_price' => '40000', 'close_price' => '42000',
'size' => '0.5', 'direction' => 'buy', 'open_time' => '2024-03-01 09:00', 'commission' => '10',
'close_time' => '2024-03-01 15:00'],
['base_currency' => 'ETH', 'quote_currency' => 'USD', 'open_price' => '3000', 'close_price' => '3150',
'size' => '2', 'direction' => 'sell', 'open_time' => '2024-03-02 10:00', 'commission' => '6',
'close_time' => '2024-03-02 12:00'],
['base_currency' => 'ETH', 'quote_currency' => 'USD', 'open_price' => '3100', 'close_price' => '3200',
'size' => '1', 'direction' => 'buy', 'open_time' => '2024-03-04 08:00', 'commission' => '3',
'close_time' => '2024-03-05 08:00'],
]);
$analytics = TradingAnalytics::for($trades)->scale(2)->calculate();
(string) $analytics->counts->global->total; // '3'
(string) $analytics->realizedProfitAndLoss->gross->global->total->total; // '800.00'
(string) $analytics->realizedProfitAndLoss->net->global->total->total; // '781.00'
(string) $analytics->wins->winRatio->global->total; // '0.66'
(string) $analytics->profitFactor->total; // '3.66'
(string) $analytics->maxDrawdown->value; // '306.00'Chcete radšej injektovaného manažéra alebo priamo triedu enginu? Pozrite Fasáda TradingAnalytics a Bez fasády.
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.