From 641285fafbd93d4e98bab96d379cf613cf05cf28 Mon Sep 17 00:00:00 2001 From: 7u83 <7u83@maiil.ru> Date: Tue, 1 Jan 2019 14:20:41 +0100 Subject: [PATCH] function to calculate stop loss --- src/opensesim/world/Account.java | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/opensesim/world/Account.java b/src/opensesim/world/Account.java index 900cfc4..7d40b90 100644 --- a/src/opensesim/world/Account.java +++ b/src/opensesim/world/Account.java @@ -78,9 +78,8 @@ public class Account { } public Double getMargin(AbstractAsset currency) { - return this.getFinalBalance() - * this.leverage - + this.get(currency); + return this.getFinalBalance(currency) * getLeverage() + - this.getAssetDebt(world.getDefaultExchange(), currency); } @@ -200,4 +199,29 @@ public class Account { public Double getFinalBalance() { return getFinalBalance(world.getDefaultAssetPair().getCurrency()); } + + public Double calcStopLoss(Exchange ex, AbstractAsset asset, AbstractAsset currency) { + Double e = (get(currency)); + for (AbstractAsset a : assets.keySet()) { + if (a.equals(asset)) { + continue; + } + + AssetPair pair = world.getAssetPair(a, currency); + if (pair == null) { + continue; + } + + TradingEngine api = (TradingEngine) ex.getAPI(pair); + Double v = get(a) * api.last_quote.price; + e = e+v; + + } + + return -(double)e / (double)get(asset); + } + + public Double calcStopLoss(AbstractAsset asset){ + return calcStopLoss(world.getDefaultExchange(),asset,world.getDefaultAssetPair().getCurrency()); + } }