Индикатор он-лайн
Atom Ответить
03.04.2013


Что изменить в индикаторе, чтобы он рассчитывался в режиме реального времени, а не по факту начала формирования следующей свечи?
Код
protected override decimal OnProcess(IIndicatorValue input)
        {
                var candle = input.GetValue<Candle>();
               
               if (input.IsFinal)
                {
                    _bufferh.Add(candle.HighPrice);
                    _bufferl.Add(candle.LowPrice);
                }



                _zigZagBuffer.Add(0);
                _bufferh1.Add(0);
                _bufferh2.Add(0);
                
                _bufferl1.Add(0);
                _bufferl2.Add(0);
                
                for (int i = 1; i < _bufferl.Count; i++)
                { 
                    if (_bufferh[i] > _bufferh[i - 1])
                    {
                        _bufferh1[i] = _bufferh[i];
                    }
                    else
                        _bufferh1[i] = _bufferh1[i - 1];

                    if (_bufferh1[i] > _bufferh1[i - 1])
                    {
                        _bufferh2[i] = _bufferh1[i];
                    }
                    else
                        _bufferh2[i] = _bufferh2[i - 1];

                    

                    
                    if (_bufferl[i] < _bufferl[i - 1])
                    {
                        _bufferl1[i] = _bufferl[i];
                    }
                    else
                        _bufferl1[i] = _bufferl1[i - 1];

                    if (_bufferl1[i] < _bufferl1[i - 1])
                    {
                        _bufferl2[i] = _bufferl1[i];
                    }
                    else
                        _bufferl2[i] = _bufferl2[i - 1];

                    
                        // zigzag
                        if (_bufferl2[i] != _bufferl2[i - 1])
                        {

                            _zigZagBuffer[i] = _bufferl2[i];
                            LastValue = _bufferl2[i];
                        }
                        else
                        {
                            if (_bufferh2[i] != _bufferh2[i - 1])
                            {

                                _zigZagBuffer[i] = _bufferh2[i];
                                LastValue = _bufferh2[i];
                            }
                            else
                            {

                                _zigZagBuffer[i] = _zigZagBuffer[i - 1];
                                LastValue = _zigZagBuffer[i];
                            }
                        }

                }
                if (candle.State == CandleStates.Finished || candle.State == CandleStates.Changed)

                {
                    if (_zigZagBuffer == _bufferl2 && candle.LowPrice < LastValue)
                        CurrentValue = Math.Min(candle.LowPrice,LastValue);
                    else
                    {
                        if (_zigZagBuffer == _bufferh2 && candle.HighPrice > LastValue)
                            CurrentValue = Math.Max(candle.HighPrice,LastValue);
                        else
                            CurrentValue = LastValue;
                    }
                }
                return CurrentValue;
                
         }

Теги:


Спасибо:




4 Ответов
wkj

Фотография
Курсы
Дата: 03.04.2013
Ответить


В индикаторе ничего менять не надо. Надо прочитать это https://stocksharp.ru/do...e4-80fe-7cf92944b4c9.htm и это https://stocksharp.ru/do...91-9306-275d55d4cf36.htm .
Спасибо:

Compressor

Фотография
Курсы
Дата: 04.04.2013
Ответить


В ссылках речь уже идет о стратегиях, а до этого пока далеко.
Автор топика
Спасибо:

wkj

Фотография
Курсы
Дата: 23.04.2013
Ответить


Если еще не разобрался, берем SampleSma под Quik и правим в MainWindow.Xaml.cs строчки
Код
CandleStates.Finished 
на
Код
CandleStates.Changed
, всего три раза встречаются.

А в SmaStrategy.cs меняем
Код
.WhenCandlesFinished()
на
Код
.WhenCandlesChanged()
.
Энджой, свечи и индикаторы пляшут.
Спасибо:

Compressor

Фотография
Курсы
Дата: 23.04.2013
Ответить


Здесь проблема в другом -
Код
 if (input.IsFinal)

поэтому этот способ не проходит, но все равно спасибо.
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy