public void BaseAmountAndPrice() { // arrange var tradeSettings = new TradeSettings { CounterAmount = 10, BuyUnderPriceMargin = 1, BaseAmountSavingsRate = 5, SellPriceRate = 10 }; var ticker = new Ticker { Last = 9500 }; var pairInfo = new TradingPairInfo { BaseDecimals = 8, CounterDecimals = 2 }; // act var baseAmount = tradeSettings.GetBuyBaseAmount(ticker, pairInfo); var basePrice = tradeSettings.GetBuyBasePrice(ticker, pairInfo); var sellBaseAmount = tradeSettings.GetSellBaseAmount(ticker, pairInfo); var sellBasePrice = tradeSettings.GetSellBasePrice(ticker, pairInfo); // assert Assert.AreEqual(baseAmount, 0.00106326M); Assert.AreEqual(basePrice, 9405M); Assert.AreEqual(sellBaseAmount, 0.001010097M); Assert.AreEqual(sellBasePrice, 10345.5M); }
internal override async Task ExecuteAsync() { // get ticker var ticker = await BitstampTrader.GetTickerAsync(TradeSession.PairCode); _tickers.Add(ticker); if (ExecuteTradeHolders()) { return; } if (!PriceDropped()) { return; } // get pair info var pairInfo = CacheHelper.GetFromCache <List <TradingPairInfo> >("TradingPairInfo").First(i => i.PairCode == TradeSession.PairCode.ToLower()); // buy currency on Bitstamp exchange var orderResult = await BitstampTrader.BuyLimitOrderAsync(TradeSession, TradeSettings.GetBuyBaseAmount(ticker, pairInfo), TradeSettings.GetBuyBasePrice(ticker, pairInfo)); // update database BitstampTrader.AddNewOrderToDb(orderResult, ticker, TradeSettings, pairInfo); }
protected TradeRuleBase(BitstampTrader bitstampTrader, TradeSettings tradeSettings, params ITradeHolder[] tradeHolders) { BitstampTrader = bitstampTrader; TradeSettings = tradeSettings; TradeSession.PairCode = tradeSettings.PairCode; _tradeHolders = tradeHolders; }
public void RemoveTradeSettings(TradeSettings tradeSettings) { var idx = _tradeSettings.FindIndex(x => x.Id == tradeSettings.Id); _tradeSettings.RemoveAt(idx); SaveTradeSettings(); }
static void Main() { try { // initialize logger Log.Logger = new LoggerConfiguration() .WriteTo.Console() .MinimumLevel.Debug() .CreateLogger(); // initialize trader _trader = new BitstampTrader(TimeSpan.FromSeconds(15)); var paircodes = new[] { BitstampPairCode.btceur, BitstampPairCode.xrpeur, BitstampPairCode.ltceur, BitstampPairCode.etheur, BitstampPairCode.bcheur }; foreach (var bitstampPairCode in paircodes) { var tradeSettings = new TradeSettings { PairCode = bitstampPairCode.ToString(), BuyUnderPriceMargin = 0.4M, CounterAmount = 17, BaseAmountSavingsRate = 3.0M, SellPriceRate = 6 }; var tradeRule = new BuyAfterDropTradeRule(_trader, tradeSettings, 2.5M, TimeSpan.FromMinutes(60), new WaitPeriodAfterBuyOrderHolder(TimeSpan.FromHours(6)), new MaxNumberOfBuyOrdersHolder(1), new MaxNumberOfSellOrdersHolder(12)); //var tradeRule = new BuyPeriodicTradeRule(_trader, tradeSettings, // new WaitPeriodAfterBuyOrderHolder(TimeSpan.FromHours(1)), // new MaxNumberOfBuyOrdersHolder(1)); _trader.AddTradeRule(tradeRule); } _trader.AddTradeRule(new LinearSpreadTradeRule(_trader, new TradeSettings { PairCode = BitstampPairCode.btcusd.ToString(), BuyUnderPriceMargin = 0.2M, CounterAmount = 10, BaseAmountSavingsRate = 0.75M, SellPriceRate = 2 }, 1.0M)); _trader.ErrorOccured += ErrorOccured; _trader.TickerRetrieved += TickerRetrieved; _trader.BuyLimitOrderPlaced += BuyLimitOrderPlaced; _trader.BuyLimitOrderExecuted += BuyLimitOrderExecuted; _trader.SellLimitOrderPlaced += SellLimitOrderPlaced; _trader.SellLimitOrderExecuted += SellLimitOrderExecuted; // start trader _trader.Start(); System.Console.ReadLine(); } catch (Exception e) { System.Console.WriteLine(e); } }
public static AccountView ToView(this AccountSettings account, TradeSettings tradeSettings) { return(new AccountView() { TradeSettings = tradeSettings.ToView(), Number = account.Account, Symbol = account.Symbol, Lots = account.Lot }); }
public void Init(TradeSettings tradeSettings) { _tradeSettings = tradeSettings; if (String.IsNullOrEmpty(_tradeSettings.Id)) { this.btnRemove.Hide(); } BindData(); }
public PositionManager(IOrderMaker orderMaker, TradeSettings tradeSettings, ILogger logger) { _orderMaker = orderMaker; _tradeSettings = tradeSettings; _logger = logger; if (_orderMaker.Name == ProviderName.HUA_NAN) { _orderMaker.AccountPositionUpdated += OrderMaker_AccountPositionUpdated; } }
public static TradeSettingsView ToView(this TradeSettings settings) { return(new TradeSettingsView() { Id = settings.Id, Name = settings.Name, Interval = settings.Interval, DayTrade = settings.DayTrade, FileName = settings.FileName, Offset = settings.Offset }); }
public Uc_Strategy(IOrderMaker orderMaker, TradeSettings settings, ITimeManager timeManager, ILogger logger) { this._orderMaker = orderMaker; this._tradeSettings = settings; this._timeManager = timeManager; this._logger = logger; InitializeComponent(); if (!File.Exists(_tradeSettings.FileName)) { File.Create(_tradeSettings.FileName).Close(); } _positionFile = new PositionFile(); _positionManager = ServiceFactory.CreatePositionManager(_orderMaker, _tradeSettings, logger); this.timer.Interval = _tradeSettings.Interval; this.timer.Enabled = true; #region UI var lbl = UIHelpers.CreateLabel(_tradeSettings.Name); lbl.Font = new System.Drawing.Font("新細明體", 11.25F); this.tpTop.Controls.Add(lbl, 0, 0); this.tpTop.Controls.Add(UIHelpers.CreateLabel("即時部位:"), 2, 0); lblPosition = UIHelpers.CreateLabel(""); this.tpTop.Controls.Add(lblPosition, 3, 0); lblTime = UIHelpers.CreateLabel(""); this.tpTop.Controls.Add(lblTime, 4, 0); for (int i = 0; i < _tradeSettings.Accounts.Count; i++) { var item = _tradeSettings.Accounts[i]; var uc_Account = new Uc_Account(); uc_Account.BindData(item); this.uc_AccountList.Add(uc_Account); fpanelAccounts.Height += uc_Account.Height; this.fpanelAccounts.Controls.Add(uc_Account); fpanelAccounts.Controls.SetChildIndex(uc_Account, 0); this.Height += uc_Account.Height; } #endregion }
public Trade ( ILogger <Trade> logger, IRequest request, IConfiguration configuration ) { _logger = logger; _request = request; _tradeSettings = configuration .GetSection(typeof(TradeSettings).Name).Get <TradeSettings>(); }
internal void AddNewOrderToDb(ExchangeOrder order, Ticker ticker, TradeSettings tradeSettings, TradingPairInfo pairInfo) { _orderRepository.Add(new Order { BuyId = order.Id, CurrencyPairId = GetCurrencyPairId(order.PairCode), //CurrencyPair = _currencyPairRepository.First(p => p.PairCode == order.PairCode), //todo: check with concrete repository BuyAmount = order.Amount, BuyPrice = order.Price, SellAmount = tradeSettings.GetSellBaseAmount(ticker, pairInfo), SellPrice = tradeSettings.GetSellBasePrice(ticker, pairInfo) }); _orderRepository.Save(); }
public void AddUpdateTradeSettings(TradeSettings tradeSettings) { if (String.IsNullOrEmpty(tradeSettings.Id)) { //新增 tradeSettings.Id = Guid.NewGuid().ToString(); _tradeSettings.Add(tradeSettings); } else { var idx = _tradeSettings.FindIndex(x => x.Id == tradeSettings.Id); _tradeSettings[idx] = tradeSettings; } SaveTradeSettings(); }
public LinearSpreadTradeRule(BitstampTrader bitstampTrader, TradeSettings tradeSettings, decimal spreadPct, params ITradeHolder[] tradeHolders) : base(bitstampTrader, tradeSettings, tradeHolders) { _spreadPct = spreadPct; }
public EditStrategyEventArgs(TradeSettings tradeSettings) { this.TradeSettings = tradeSettings; }
public static IPositionManager CreatePositionManager(IOrderMaker orderMaker, TradeSettings tradeSettings, ILogger logger) { return(new PositionManager(orderMaker, tradeSettings, logger)); }
public BuyPeriodicTradeRule(BitstampTrader bitstampTrader, TradeSettings tradeSettings, params ITradeHolder[] tradeHolders) : base(bitstampTrader, tradeSettings, tradeHolders) { }
public BuyAfterDropTradeRule(BitstampTrader bitstampTrader, TradeSettings tradeSettings, decimal dropRate, TimeSpan dropPeriod, params ITradeHolder[] tradeHolders) : base(bitstampTrader, tradeSettings, tradeHolders) { _dropRate = dropRate; _dropPeriod = dropPeriod; }