0
Answered

Уровень максимального объема вчерашнего дня

thinarthrill 7 years ago updated by Андрей Ринас2 (ATAS developer) 2 years ago 7

Здравствуйте. Как программно можно определить уровень (цену) с максимальным объемом? Пытался использовать candle.GetPriceVolumeInfo(candle.High).Price и candle.MaxVolumePriceInfo.Price, но не получается, не те цены определяются. Сама цель построить на тиковом графике уровни предыдущего дня (High, Low, Close, Poc)


protected override void OnCalculate(int bar, decimal value)

{
var candle = GetCandle(bar);

// If the current data is not the same date as the current bar then its a new session
if (currentDate != candle.Time.Date || currentHigh == 0)
{
// The current day OHLC values are now the prior days value so set
// them to their respect indicator series for plotting
priorDayHigh = currentHigh;
priorDayLow = currentLow;
priorDayClose = currentClose;
priorDayVol= currentVol;

// Initilize the current day settings to the new days data
currentHigh = candle.High;
currentLow = candle.Low;
currentClose = candle.Close;
//currentVol = candle.GetPriceVolumeInfo(candle.High).Price;
//currentVol = candle.MaxVolumePriceInfo.Price;

currentDate = candle.Time.Date;
}
else // The current day is the same day
{
// Set the current day OHLC values
currentHigh = Math.Max(currentHigh, candle.High);
currentLow = Math.Min(currentLow, candle.Low);
currentClose = candle.Close;
//currentVol = candle.GetPriceVolumeInfo(candle.High).Price;
//currentVol = candle.MaxVolumePriceInfo.Price;

DataSeries[1][bar] = priorDayHigh;
DataSeries[2][bar] = priorDayLow;
DataSeries[3][bar] = priorDayClose;
DataSeries[4][bar] = priorDayVol;
}
}


GOOD, I'M SATISFIED
Satisfaction mark by thinarthrill 7 years ago
Under review

Здравствуйте.

Покажите пример что выдает candle.MaxVolumePriceInfo.Price и что на самом деле? Желательно со скриншотом и указанием той свечки, о которой идет речь.

мой индикатор (кода ниже) на тиковом 576 графике http://clip2net.com/s/3t4RTV6

дневная свеча с уровнем максимального объема за 12 января http://clip2net.com/s/3t4SqXd

дневная свеча с уровнем максимального объема за 13 января http://clip2net.com/s/3t4SLaY


ниже полный код индикатора, в котором обрабатывается candle.MaxVolumePriceInfo.Price



using System.Linq;

using System;
using System.ComponentModel;
using System.Windows.Media;
using ATAS.Indicators;

namespace CustomIndicatorSet
{
public class PriorDayLevels : Indicator
{
private DateTime currentDate = DateTime.MinValue;
private decimal currentHigh = 0;
private decimal currentLow = 0;
private decimal currentClose = 0;
private decimal currentVol = 0;

private decimal priorDayHigh = 0;
private decimal priorDayLow = 0;
private decimal priorDayClose = 0;
private decimal priorDayVol= 0;

public PriorDayLevels()
{
// DataSeries.Add(new ValueDataSeries("High") { VisualType = VisualMode.Line });
//DataSeries.Add(new ValueDataSeries("Low") { VisualType = VisualMode.Line });

DataSeries.Add(new ValueDataSeries("High"));
DataSeries.Add(new ValueDataSeries("Low"));
DataSeries.Add(new ValueDataSeries("Close"));
DataSeries.Add(new ValueDataSeries("MaxVolume"));
}

protected override void OnCalculate(int bar, decimal value)
{
var candle = GetCandle(bar);

// If the current data is not the same date as the current bar then its a new session
if (currentDate != candle.Time.Date || currentHigh == 0)
{
// The current day OHLC values are now the prior days value so set
// them to their respect indicator series for plotting
priorDayHigh = currentHigh;
priorDayLow = currentLow;
priorDayClose = currentClose;
priorDayVol= currentVol;

// Initilize the current day settings to the new days data
currentHigh = candle.High;
currentLow = candle.Low;
currentClose = candle.Close;
//currentVol = candle.GetPriceVolumeInfo(candle.High).Price;
currentVol = candle.MaxVolumePriceInfo.Price;

currentDate = candle.Time.Date;
}
else // The current day is the same day
{
// Set the current day OHLC values
currentHigh = Math.Max(currentHigh, candle.High);
currentLow = Math.Min(currentLow, candle.Low);
currentClose = candle.Close;
//currentVol = candle.GetPriceVolumeInfo(candle.High).Price;
currentVol = Math.Max(currentVol, candle.MaxVolumePriceInfo.Price);

DataSeries[1][bar] = priorDayHigh;
DataSeries[2][bar] = priorDayLow;
DataSeries[3][bar] = priorDayClose;
DataSeries[4][bar] = priorDayVol;
}
}
}
}


Все верно.

Вы берете одну из свечек на графике

var candle = GetCandle(bar);

Получаете для нее макс.уровень currentVol = candle.MaxVolumePriceInfo.Price;


Но к макс. объему дня эта свечка ведь никак не относится.

С помощью candle.MaxVolumePriceInfo.Price вы получаете макс. объем данной 576и тиковой свечки.

а для того чтобы максимальный объем дня узнать, куда нужно обратиться? Как то можно подключить датасерию дневных свечек?

+1

К сожалению, дневную датасерию подключить нельзя.

Можно попробовать составить дневную свечку из внутридневных.

Например сделать некий Dictionary<decimal,int>, где ключом будет являться цена, а значением-объем.

Затем перебрать свечки, которые относятся к конкретному дню и добавить все ценовые уровни эти свечек в дневную.

спасибо большое за подсказку, буду в этом направлении копать