NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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 array

for() 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 kryptomien

Odoslaní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.