public override List <string> OnQuotesReceived(string[] names, CandleDataBidAsk[] quotes, bool isHistoryStartOff) { var events = new List <string>(); var candle = UpdateCurrentCandle(names, quotes); if (candle == null) { return(events); } // проверить Каймана CandleData cayCandle; if (!caymanCandles.TryGetValue(candle.timeOpen, out cayCandle)) { return(events); } // знак Каймана var sign = cayCandle.close >= 50 ? -1 : 1; caymanLastSigns.Add(sign); if (caymanLastSigns.Length < caymanLastSigns.MaxQueueLength) { return(events); } // последняя сделка List <MarketOrder> orders; GetMarketOrders(out orders); var lastOrder = orders.LastOrDefault(); // закрыть ордер if (lastOrder != null && sign != lastOrder.Side) { CloseMarketOrder(lastOrder.ID); lastOrder = null; } // войти в рынок? if (lastOrder != null) { return(events); } if (caymanLastSigns.Any(s => s != sign)) { return(events); } OpenDeal(candle.close, sign); return(events); }
protected string BuildSeries() { var indi = chart.indicators.FirstOrDefault(i => i.GetType() == typeof(IndicatorExternSeries)); if (indi == null) { return("Нет данных для построения (данные из файла)"); } var indiData = indi.SeriesResult[0] as CandlestickSeries; if (indiData.DataCount == 0) { return("Индикатор пуст"); } var candles = chart.chart.StockSeries.Data.Candles; var max = Math.Min(candles.Count, indiData.DataCount); var lines = new List <TrendLine>(); TrendLine trendLine = null; var dealSign = 0; var caymanSigns = new RestrictedQueue <int>(skippedCandles); for (var i = 0; i < max; i++) { var candle = indiData.Data[i]; var chartCandle = candles[i]; var extremumSign = candle.close <lowerMargin ? -1 : candle.close> upperMargin ? 1 : 0; caymanSigns.Add(extremumSign); if (dealSign != 0) { trendLine.AddPoint(i, chartCandle.close); if ((dealSign < 0 && candle.close > 50) || (dealSign > 0 && candle.close < 50)) { trendLine = null; dealSign = 0; } continue; } dealSign = caymanSigns.Last; if (dealSign == 0) { continue; } if (caymanSigns.Any(s => s != dealSign)) { dealSign = 0; continue; } trendLine = new TrendLine { Comment = CommentSpecName, Magic = LineMagic, LineColor = dealSign > 0 ? colorSell : ColorBuy }; trendLine.AddPoint(i, chartCandle.close); trendLine.AddPoint(i, chartCandle.close); lines.Add(trendLine); } MakeChartGraph(lines); return("Построено " + lines.Count + " областей"); }
private string BuildSeries() { var indi = chart.indicators.FirstOrDefault(i => i.GetType() == typeof (IndicatorExternSeries)); if (indi == null) return "Нет данных для построения (данные из файла)"; var indiData = indi.SeriesResult[0] as CandlestickSeries; if (indiData.DataCount == 0) return "Индикатор пуст"; var candles = chart.chart.StockSeries.Data.Candles; var max = Math.Min(candles.Count, indiData.DataCount); var lastSign = 0; var lastSigns = new RestrictedQueue<int>(skippedCandles); var lines = new List<TrendLine>(); TrendLine trendLine = null; for (var i = 0; i < max; i++) { var candle = indiData.Data[i]; var chartCandle = candles[i]; var thisSign = GetCaymanSign(candle); lastSigns.Add(thisSign); // растянуть регион if (trendLine != null) { trendLine.AddPoint(i, chartCandle.close); if (thisSign == lastSign) continue; } lastSign = thisSign; // завершить регион if (trendLine != null) { trendLine = null; continue; } if (lastSigns.Any(s => s != lastSign) || lastSigns.Length < skippedCandles) continue; // новая линия trendLine = new TrendLine { Comment = CommentSpecName, Magic = LineMagic, LineColor = thisSign > 0 ? colorSell : ColorBuy }; trendLine.AddPoint(i, chartCandle.close); lines.Add(trendLine); } MakeChartGraph(lines); return "Построено " + lines.Count + " областей"; }
private string BuildSeries() { var indi = chart.indicators.FirstOrDefault(i => i.GetType() == typeof(IndicatorExternSeries)); if (indi == null) { return("Нет данных для построения (данные из файла)"); } var indiData = indi.SeriesResult[0] as CandlestickSeries; if (indiData.DataCount == 0) { return("Индикатор пуст"); } var candles = chart.chart.StockSeries.Data.Candles; var max = Math.Min(candles.Count, indiData.DataCount); var lastSign = 0; var lastSigns = new RestrictedQueue <int>(skippedCandles); var lines = new List <TrendLine>(); TrendLine trendLine = null; for (var i = 0; i < max; i++) { var candle = indiData.Data[i]; var chartCandle = candles[i]; var thisSign = GetCaymanSign(candle); lastSigns.Add(thisSign); // растянуть регион if (trendLine != null) { trendLine.AddPoint(i, chartCandle.close); if (thisSign == lastSign) { continue; } } lastSign = thisSign; // завершить регион if (trendLine != null) { trendLine = null; continue; } if (lastSigns.Any(s => s != lastSign) || lastSigns.Length < skippedCandles) { continue; } // новая линия trendLine = new TrendLine { Comment = CommentSpecName, Magic = LineMagic, LineColor = thisSign > 0 ? colorSell : ColorBuy }; trendLine.AddPoint(i, chartCandle.close); lines.Add(trendLine); } MakeChartGraph(lines); return("Построено " + lines.Count + " областей"); }