/// <summary> /// из коннектора пришли новые данные /// </summary> private void BotTabIndex_NewCandlesChangeEvent(List <Candle> candles) { for (int i = 0; i < Tabs.Count; i++) { List <Candle> myCandles = Tabs[i].Candles(true); if (myCandles == null || myCandles.Count < 10) { return; } } DateTime time = Tabs[0].Candles(true)[Tabs[0].Candles(true).Count - 1].TimeStart; for (int i = 0; i < Tabs.Count; i++) { List <Candle> myCandles = Tabs[i].Candles(true); if (myCandles[myCandles.Count - 1].TimeStart != time) { return; } } // цикл для сбоа всех свечей в один массив if (string.IsNullOrWhiteSpace(ConvertedFormula)) { return; } string nameArray = Calculate(ConvertedFormula); if (_valuesToFormula != null && !string.IsNullOrWhiteSpace(nameArray)) { ValueForm val = _valuesToFormula.Find(v => v.Name == nameArray); if (val != null) { Candles = val.ValueCandles; for (int i = 1; i < Candles.Count; i++) { if (Candles[i].TimeStart == Candles[i - 1].TimeStart) { Candles.RemoveAt(i); i--; } } _chartMaster.SetCandles(Candles); if (SpreadChangeEvent != null) { SpreadChangeEvent(Candles); } } } }
/// <summary> /// посчитать цифру и массив /// </summary> private string ConcateDecimalAndCandle(string valOne, string valTwo, string sign) { // берём первое значение decimal valueOne = Convert.ToDecimal(valOne); // берём второе значение List <Candle> candlesTwo = null; if (valTwo[0] == 'A') { int iOne = Convert.ToInt32(valTwo.Split('A')[1]); candlesTwo = Tabs[iOne].Candles(true); } if (candlesTwo == null) { ValueForm value = _valuesToFormula.Find(v => v.Name == valTwo); if (value == null) { return(""); } candlesTwo = value.ValueCandles; } // берём исходящее значение string znak = ""; if (sign == "+") { znak = "plus"; } else if (sign == "-") { znak = "minus"; } else if (sign == "*") { znak = "multiply"; } else if (sign == "/") { znak = "devide"; } ValueForm exitVal = _valuesToFormula.Find(val => val.Name == "B" + valOne + znak + valTwo); if (exitVal == null) { exitVal = new ValueForm(); exitVal.Name = "B" + valOne + znak + valTwo; exitVal.ValueCandles = new List <Candle>(); _valuesToFormula.Add(exitVal); } List <Candle> exitCandles = exitVal.ValueCandles; if (exitCandles.Count != 0 && candlesTwo[candlesTwo.Count - 1].TimeStart == exitCandles[exitCandles.Count - 1].TimeStart) { // надо обновить только последнюю свечу exitCandles[exitCandles.Count - 1] = (GetCandle(exitCandles[exitCandles.Count - 1], valueOne, candlesTwo[candlesTwo.Count - 1], sign)); } else if (exitCandles.Count != 0 && candlesTwo[candlesTwo.Count - 2].TimeStart == exitCandles[exitCandles.Count - 1].TimeStart) { // нужно добавить одну свечу exitCandles.Add(GetCandle(null, valueOne, candlesTwo[candlesTwo.Count - 1], sign)); } else { // обновить нужно всё int indexStartSecond = 0; for (int i2 = candlesTwo.Count - 1; exitCandles.Count != 0 && i2 > -1; i2--) { if (candlesTwo[i2].TimeStart <= exitCandles[exitCandles.Count - 1].TimeStart && indexStartSecond == 0) { indexStartSecond = i2; break; } } for (int i2 = indexStartSecond; i2 < candlesTwo.Count; i2++) { exitCandles.Add(GetCandle(null, valueOne, candlesTwo[i2], sign)); } exitVal.ValueCandles = exitCandles; } return(exitVal.Name); }