Exemple #1
0
        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;
            }
        }