예제 #1
0
        private void OnRefreshOnBuy(object sender, MetaOrder e)
        {
            Log.Warning($"Begin cancel order: {e}");

            _container.Resolve <IBittrexExchange>().CancelOrder(e.OrderId).GetAwaiter().GetResult();

            Log.Warning($"Canceled. Push on sell");

            _container.Resolve <IBusControl>().Publish <BuyCurrency>(new
            {
                Id      = Guid.NewGuid(),
                Created = DateTime.Now,
                Amount  = e.Amount,
                Bid     = e.Rate
            }).GetAwaiter().GetResult();
        }
예제 #2
0
        private static (string value, bool isValueInPips) FormatOrderValue(MetaOrder order)
        {
            if (order == null)
            {
                return(null, false);
            }
            StringBuilder formula       = new StringBuilder();
            bool          valueInPips   = true;
            string        lastOperation = null;

            foreach (var value in order.ValueStack)
            {
                switch (value.ValueType)
                {
                case FormulaItemType.Operand:
                    formula.Append(value.Value);
                    lastOperation = value.Value;
                    break;

                case FormulaItemType.Parameter:
                    switch (lastOperation)
                    {
                    case "-":
                    case "+":
                        formula.Append($"instance.parameters.{value.Value}*source:pipSize()");
                        break;

                    default:
                        formula.Append($"instance.parameters.{value.Value}");
                        break;
                    }
                    break;

                case FormulaItemType.Stream:
                case FormulaItemType.StreamValue:
                    if (string.IsNullOrEmpty(value.Substream))
                    {
                        formula.Append($"{value.Value}:tick(period)");
                    }
                    else
                    {
                        if (value.Value == null && value.StreamType == StreamType.Instrument)
                        {
                            formula.Append($"source.{value.Substream}:tick(period)");
                        }
                        else
                        {
                            formula.Append($"{value.Value}.{value.Substream}:tick(period)");
                        }
                    }
                    valueInPips = false;
                    break;

                case FormulaItemType.Value:
                    switch (lastOperation)
                    {
                    case "-":
                    case "+":
                        formula.Append($"{value.Value}*source:pipSize()");
                        break;

                    default:
                        formula.Append($"{value.Value}");
                        break;
                    }
                    break;
                }
            }
            return(formula.ToString(), valueInPips);
        }
 public void AddOrder(MetaOrder metaOrder)
 {
     _orders.Add(metaOrder);
 }
예제 #4
0
        /// <summary>
        /// Format order value
        /// </summary>
        /// <exception cref="NotSupportedFormulaItemException">Unsupported element in the value</exception>
        /// <param name="order">Order</param>
        /// <returns>Formatted value</returns>
        private static (string value, bool isValueInPips) FormatOrderValue(MetaOrder order)
        {
            if (order == null)
            {
                return(null, false);
            }
            StringBuilder formula       = new StringBuilder();
            bool          valueInPips   = true;
            string        lastOperation = null;

            foreach (var value in order.ValueStack)
            {
                switch (value.ValueType)
                {
                case FormulaItemType.Operand:
                    formula.Append(value.Value);
                    lastOperation = value.Value;
                    break;

                case FormulaItemType.Parameter:
                    switch (lastOperation)
                    {
                    case "-":
                    case "+":
                        throw new NotSupportedFormulaItemException(value.ValueType, "Pine Script");

                    default:
                        formula.Append($"{value.Value}");
                        break;
                    }
                    break;

                case FormulaItemType.Stream:
                case FormulaItemType.StreamValue:
                    if (string.IsNullOrEmpty(value.Substream))
                    {
                        formula.Append($"{value.Value}");
                    }
                    else
                    {
                        if (value.Value == null && value.StreamType == StreamType.Instrument)
                        {
                            formula.Append($"{value.Substream}");
                        }
                        else
                        {
                            formula.Append($"{value.Value}_{value.Substream}");
                        }
                    }
                    valueInPips = false;
                    break;

                case FormulaItemType.Value:
                    switch (lastOperation)
                    {
                    case "-":
                    case "+":
                        throw new NotSupportedFormulaItemException(value.ValueType, "Pine Script");

                    default:
                        formula.Append($"{value.Value}");
                        break;
                    }
                    break;
                }
            }
            return(formula.ToString(), valueInPips);
        }