public double CalcGrossPL(double close) { var gross = Buy ? close - Open : Open - close; PL = gross / PipSize; var offset = Pair == "USDOLLAR" ? 1 : 10.0; return(TradesManagerStatic.PipsAndLotToMoney(Pair, PL, Lots, close, PipSize)); }
public void PipCostTest() { try { TradesManagerStatic.AccountCurrency = "uSd"; Assert.AreEqual(0.1, TradesManagerStatic.PipCost("eur/usd", 118.896, 1000, 0.0001)); Assert.AreEqual(Math.Round(0.0841071188265375, 14), Math.Round(TradesManagerStatic.PipCost("USDJPY", 118.896, 1000, 0.01), 14)); } finally { TradesManagerStatic.AccountCurrency = null; } }
public Account GetAccount(bool includeOtherInfo) { if(includeOtherInfo) { var trades = GetTrades(); Account.Trades = trades; if(trades.Any()) Account.UsableMargin = Account.Equity - TradesManagerStatic.MarginRequired(trades.Lots(), GetBaseUnitSize(trades[0].Pair), TradesManagerStatic.GetMMR(trades[0].Pair, trades[0].IsBuy)); Account.StopAmount = includeOtherInfo ? trades.Sum(t => t.StopAmount) : 0; Account.LimitAmount = includeOtherInfo ? trades.Sum(t => t.LimitAmount) : 0; Account.PipsToMC = PipsToMarginCallCore(Account).ToInt(); } return Account; }
public void PipsAndLotToMoney() { try { TradesManagerStatic.AccountCurrency = "uSd"; var ptm = TradesManagerStatic.PipsAndLotToMoney("usdjpy", 2.1, 217000, 118.896, 0.01); Assert.AreEqual(38.327614, Math.Round(ptm, 6)); Assert.AreEqual(2.100000, Math.Round(TradesManagerStatic.MoneyAndLotToPips("usdjpy", ptm, 217000, 118.896, 0.01), 6)); ptm = TradesManagerStatic.PipsAndLotToMoney("eur/usd", 2.1, 20000, 1.3333, 0.0001); Assert.AreEqual(4.2, ptm); Assert.AreEqual(2.1, TradesManagerStatic.MoneyAndLotToPips("eurusd", ptm, 20000, 1.5555, 0.0001)); Assert.AreEqual(100, TradesManagerStatic.PipsAndLotToMoney("spy", (255 - 254) / 0.01, 100, 254, 0.01)); } finally { TradesManagerStatic.AccountCurrency = null; } }
double PipsToMarginCallCore(Account account) { var trades = GetTrades(); if(!trades.Any()) return int.MaxValue; var pair = trades[0].Pair; var offer = GetOffer(pair); return trades.Sum(trade => TradesManagerStatic.PipToMarginCall( trade.Lots, trade.PL, account.Balance, trade.IsBuy ? offer.MMRLong : offer.MMRShort, GetBaseUnitSize(trade.Pair), TradesManagerStatic.PipAmount(trade.Pair, trade.Lots, trade.Close, GetPipSize(trade.Pair)) // CommissionByTrade(trade) ) * trade.Lots) / trades.Lots(); }
public void PipAmount() { try { Assert.AreEqual(18.251244785358632, TradesManagerStatic.PipAmount("USD_JPY", 217000, 118.896, 0.01)); Assert.Fail("Not ArgumentNullException was not thrown."); } catch (ArgumentNullException) { TradesManagerStatic.AccountCurrency = "uSd"; Assert.AreEqual(18.251244785358632, TradesManagerStatic.PipAmount("USD_JPY", 217000, 118.896, 0.01)); Assert.AreEqual(21.7, TradesManagerStatic.PipAmount("eurUSD", 217000, 118.896, 0.0001)); try { TradesManagerStatic.PipAmount("eurUSX", 217000, 118.896, 0.0001); Assert.Fail("Not Supported exception was not thrown."); } catch (NotSupportedException) { } try { TradesManagerStatic.PipAmount("USD", 217000, 118.896, 0.01); Assert.Fail("Not ArgumentException was not thrown."); } catch (ArgumentException) { } } finally { TradesManagerStatic.AccountCurrency = null; } }
public void PipByPairTest() { TradesManagerStatic.AccountCurrency = "USD"; Assert.AreEqual(0.088733900342957, TradesManagerStatic.PipsAndLotToMoney("USD.JPY", 1, 1000, 112.6965, 0.01).Round(15)); }
public double Leverage(string pair, bool isBuy) { return (double)GetBaseUnitSize(pair) / TradesManagerStatic.GetMMR(pair, isBuy); }
public double InPoints(string pair, double? price) { return TradesManagerStatic.InPoins(this, pair, price); }
public double InPips(string pair, double? price) { return TradesManagerStatic.InPips(price, GetPipSize(pair)); }
protected static string TradingMacrosPath(string name, string pair, object group, object index) { return(_tradingMacrosPath.Formater(name, TradesManagerStatic.WrapPair(pair), group, index)); }
private void ProcessPrice(Price Price) { try { RaisePropertyChanged(() => DensityAverage); if (Visibility == Visibility.Hidden) { return; } var digits = fw.GetDigits(pair); ShowSpread(Price); var account = fw.GetAccount(); var usableMargin = account.UsableMargin; var avalibleTotal = usableMargin * Leverage; AmountToBuy = TradesManagerStatic.GetLotstoTrade(account.Balance, Leverage, lotsToBuyRatio, fw.MinimumQuantity); AmountToSell = TradesManagerStatic.GetLotstoTrade(account.Balance, Leverage, lotsToSellRatio, fw.MinimumQuantity); var summary = fw.GetSummary() ?? new Order2GoAddIn.Summary(); ShowAccount(account, summary); ShowSummary(summary, account); #region Trade (Open) var canBuy = chartingWindow.GoBuy && !chartingWindow.CloseBuy && (chartingWindow.CanTrade || summary.BuyLots > 0) && (Lib.GetChecked(chkCanBuy).Value || summary.BuyLots > 0); var canSell = chartingWindow.GoSell && !chartingWindow.CloseSell && (chartingWindow.CanTrade || summary.SellLots > 0) && (Lib.GetChecked(chkCanSell).Value || summary.SellLots > 0); if ((isAutoPilot || isAutoAdjust || summary.SellPositions + summary.BuyPositions > 0)) { var buyTradeDelta = tradeDelta * chartingWindow.DencityRatio;// *averageProfitCMA30_Sell / (averageProfitCMA30_Sell + averageProfitCMA30_Buy); var takeProfitBuy = summary == null || summary.BuyPositions == 0 || chartingWindow.TakeProfitBuy < 0 ? chartingWindow.TakeProfitBuy : -chartingWindow.TakeProfitNet(chartingWindow.TakeProfitBuy, summary, true); if ((isAutoPilot || summary.BuyPositions > 0) && canBuy /*&& lots > 0 && fw.CanTrade(true, buyTradeDelta)*/) { try { var lots = chartingWindow.LotsToTradeBuy > 1000 ? chartingWindow.LotsToTradeBuy : chartingWindow.LotsToTradeBuy * AmountToBuy; var l = fw.CanTrade2(true, buyTradeDelta, lots, tradeDistanceUnisex); lots = chartingWindow.LotsToTradeBuy > 1 && l < lots ? 0 : l; if (lots > 0) { fw.FixOrderOpen(true, lots, takeProfitBuy, chartingWindow.StopLossBuy, chartingWindow.TradeInfo.ToString()); } } catch (Order2GoAddIn.FXCoreWrapper.OrderExecutionException exc) { Log = exc; } } var sellTradeDelta = tradeDelta * chartingWindow.DencityRatio;// *averageProfitCMA30_Buy / (averageProfitCMA30_Sell + averageProfitCMA30_Buy); var takeProfitSell = summary == null || summary.SellPositions == 0 || chartingWindow.TakeProfitSell < 0 ? chartingWindow.TakeProfitSell : -chartingWindow.TakeProfitNet(chartingWindow.TakeProfitSell, summary, false); if ((isAutoPilot || summary.SellPositions > 0) && canSell /* && lots > 0 && fw.CanTrade(false, sellTradeDelta)*/) { try { var lots = chartingWindow.LotsToTradeSell > 1000 ? chartingWindow.LotsToTradeSell : chartingWindow.LotsToTradeSell * AmountToSell; var l = fw.CanTrade2(false, sellTradeDelta, lots, tradeDistanceUnisex); lots = chartingWindow.LotsToTradeSell > 1 && l < lots ? 0 : l; if (lots > 0) { fw.FixOrderOpen(false, lots, takeProfitSell, chartingWindow.StopLossSell, chartingWindow.TradeInfo.ToString()); } } catch (Order2GoAddIn.FXCoreWrapper.OrderExecutionException exc) { Log = exc; } } if (isAutoAdjust) { var stats = new DispatcherOperationStatus[] { DispatcherOperationStatus.Executing, DispatcherOperationStatus.Pending }; if (summary != null && summary.BuyPositions > 0 && takeProfitBuy > 0) { fw.FixOrderSetNetLimits(Math.Abs(takeProfitBuy), true); //if( setLimitThreadBuy != null ) // setLimitThreadBuy.Abort(); //setLimitThreadBuy = new Thread(delegate() { fw.FixOrder_SetNetLimits(Math.Abs(takeProfitBuy), true); }) { Priority = ThreadPriority.Lowest }; //setLimitThreadBuy.Start(); } if (summary != null && summary.SellPositions > 0 && takeProfitSell > 0) { fw.FixOrderSetNetLimits(Math.Abs(takeProfitSell), false); //if (setLimitThreadSell != null) // setLimitThreadSell.Abort(); //setLimitThreadSell = new Thread(delegate() { fw.FixOrder_SetNetLimits(Math.Abs(takeProfitSell), false); }) { Priority = ThreadPriority.Lowest }; //setLimitThreadSell.Start(); } } } #endregion } catch (ThreadAbortException) { } catch (Exception exc) { Log = exc; } }