adding portfolio and asset to wasm

This commit is contained in:
Andy Pack 2025-02-15 20:19:40 +00:00
parent f9a7fb4b2f
commit a567bcffaf
Signed by: sarsoo
GPG Key ID: A55BA3536A5E0ED7
7 changed files with 71 additions and 33 deletions

@ -1,4 +1,8 @@
import { ValueAtRisk } from "finlib";
import { ValueAtRisk, Portfolio, PortfolioAsset } from "finlib";
console.log(ValueAtRisk.varcovar([1, 2, 3, 4], 0.1));
console.log(ValueAtRisk.varcovar([1, 2, 3, 4], 0.05));
let portfolio = new Portfolio([new PortfolioAsset(1.0, "test", [1.0, 2.0, 3.0])]);
console.log(portfolio.isValid());
console.log(portfolio.valueAtRisk(0.1));

@ -20,7 +20,7 @@
}
},
"../pkg": {
"name": "@sarsoo/finlib",
"name": "finlib-wasm",
"version": "0.0.1"
},
"node_modules/@discoveryjs/json-ext": {

@ -3,4 +3,6 @@ pub mod stats;
pub mod util;
pub mod risk;
#[cfg(feature = "py")]
pub mod py;
pub mod py;
#[cfg(feature = "wasm")]
pub mod wasm;

@ -1,30 +1 @@
use pyo3::prelude::*;
use crate::risk::portfolio::{Portfolio, PortfolioAsset};
#[pymethods]
impl Portfolio {
#[new]
pub fn init(assets: Vec<PortfolioAsset>) -> Self {
Portfolio::from(assets)
}
#[pyo3(name = "is_valid")]
pub fn is_valid_py(&self) -> bool {
self.is_valid()
}
#[pyo3(name = "value_at_risk")]
pub fn value_at_risk_py(&mut self, confidence: f64) -> PyResult<Option<f64>> {
Ok(self.value_at_risk(confidence))
}
}
#[pymethods]
impl PortfolioAsset {
#[new]
pub fn init(portfolio_weight: f64, name: String, values: Vec<f64>) -> Self {
PortfolioAsset::new(portfolio_weight, name, values)
}
}
pub mod portfolio;

@ -0,0 +1,30 @@
use pyo3::prelude::*;
use crate::risk::portfolio::{Portfolio, PortfolioAsset};
#[pymethods]
impl Portfolio {
#[new]
pub fn init(assets: Vec<PortfolioAsset>) -> Self {
Portfolio::from(assets)
}
#[pyo3(name = "is_valid")]
pub fn is_valid_py(&self) -> bool {
self.is_valid()
}
#[pyo3(name = "value_at_risk")]
pub fn value_at_risk_py(&mut self, confidence: f64) -> PyResult<Option<f64>> {
Ok(self.value_at_risk(confidence))
}
}
#[pymethods]
impl PortfolioAsset {
#[new]
pub fn init(portfolio_weight: f64, name: String, values: Vec<f64>) -> Self {
PortfolioAsset::new(portfolio_weight, name, values)
}
}

1
finlib/src/wasm/mod.rs Normal file

@ -0,0 +1 @@
pub mod portfolio;

@ -0,0 +1,30 @@
use wasm_bindgen::prelude::*;
use crate::risk::portfolio::{Portfolio, PortfolioAsset};
#[wasm_bindgen]
impl Portfolio {
#[wasm_bindgen(constructor)]
pub fn init_wasm(assets: Vec<PortfolioAsset>) -> Self {
Portfolio::from(assets)
}
#[wasm_bindgen(js_name = "isValid")]
pub fn is_valid_wasm(&self) -> bool {
self.is_valid()
}
#[wasm_bindgen(js_name = "valueAtRisk")]
pub fn value_at_risk_wasm(&mut self, confidence: f64) -> Option<f64> {
self.value_at_risk(confidence)
}
}
#[wasm_bindgen]
impl PortfolioAsset {
#[wasm_bindgen(constructor)]
pub fn init_wasm(portfolio_weight: f64, name: String, values: Vec<f64>) -> Self {
PortfolioAsset::new(portfolio_weight, name, values)
}
}