Пример #1
0
        public static long NormalizeVolume(this ProtoOASymbol symbol, long volumeInUnits)
        {
            var normalizedVolume = volumeInUnits - (volumeInUnits % symbol.StepVolume);

            if (normalizedVolume > symbol.MaxVolume)
            {
                normalizedVolume = symbol.MaxVolume;
            }
            if (normalizedVolume < symbol.MinVolume)
            {
                normalizedVolume = symbol.MinVolume;
            }

            return(normalizedVolume);
        }
Пример #2
0
        public static double GetTickValue(this ProtoOASymbol symbol, ProtoOAAsset symbolQuoteAsset, ProtoOAAsset accountDepositAsset, IEnumerable <Tuple <ProtoOAAsset, ProtoOAAsset, double> > conversionAssets)
        {
            _ = symbol ?? throw new ArgumentNullException(nameof(symbol));
            _ = symbolQuoteAsset ?? throw new ArgumentNullException(nameof(symbolQuoteAsset));
            _ = accountDepositAsset ?? throw new ArgumentNullException(nameof(accountDepositAsset));

            double tickValue;

            var symbolTickSize = symbol.GetTickSize();

            if (symbolQuoteAsset.AssetId == accountDepositAsset.AssetId)
            {
                tickValue = symbolTickSize;
            }
            else
            {
                tickValue = symbolTickSize * Convert(symbolQuoteAsset, conversionAssets);
            }

            return(tickValue);
        }
Пример #3
0
 public static double GetPipsFromPrice(this ProtoOASymbol symbol, double price) => Math.Round(price * Math.Pow(10, symbol.PipPosition), symbol.Digits - symbol.PipPosition);
Пример #4
0
 public static long GetPointsFromPips(this ProtoOASymbol symbol, double pips) => System.Convert.ToInt64(pips * Math.Pow(10, symbol.Digits - symbol.PipPosition));
Пример #5
0
 public static double GetPipsFromPoints(this ProtoOASymbol symbol, long points) => symbol.GetPipsFromPrice(points * symbol.GetTickSize());
Пример #6
0
 public static double GetPipsFromRelative(this ProtoOASymbol symbol, long relative) => Math.Round((relative / 100000.0) / symbol.GetPipSize(), symbol.Digits - symbol.PipPosition);
Пример #7
0
 public static double GetPipValue(this ProtoOASymbol symbol, double tickValue) => tickValue * (symbol.GetPipSize() / symbol.GetTickSize());
Пример #8
0
 public static double GetPriceFromRelative(this ProtoOASymbol symbol, long relative) => Math.Round(relative / 100000.0, symbol.Digits);
Пример #9
0
        public static long GetRelativeFromPips(this ProtoOASymbol symbol, double pips)
        {
            var pipsInPrice = pips * symbol.GetPipSize();

            return((long)Math.Round(pipsInPrice * 100000, symbol.Digits));
        }
Пример #10
0
 public static double GetPipSize(this ProtoOASymbol symbol) => 1 / Math.Pow(10, symbol.PipPosition);
Пример #11
0
        public static double SubtractPipsFromPrice(this ProtoOASymbol symbol, double price, double pips)
        {
            var pipsInPrice = pips * symbol.GetPipSize();

            return(Math.Round(price - pipsInPrice, symbol.Digits));
        }
Пример #12
0
        public static double AddPipsToPrice(this ProtoOASymbol symbol, double price, double pips)
        {
            var pipsInPrice = pips * symbol.GetPipSize();

            return(Math.Round(price + pipsInPrice, symbol.Digits));
        }
Пример #13
0
 public static double GetTickSize(this ProtoOASymbol symbol) => 1 / Math.Pow(10, symbol.Digits);