Skip to content
57 changes: 38 additions & 19 deletions Technical/InitialBalance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ namespace ATAS.Indicators.Technical;
using OFT.Localization;
using OFT.Rendering.Settings;

using Pen = CrossPen;

[DisplayName("Initial Balance")]
[Category(IndicatorCategories.VolumeOrderFlow)]
[Display(ResourceType = typeof(Strings), Description = nameof(Strings.InitialBalanceIndDescription))]
Expand Down Expand Up @@ -120,49 +118,49 @@ public enum PeriodType
DescriptionKey = nameof(Strings.SessionAveragePriceDescription)
};

private RangeDataSeries _ibhx32 = new("Ibhx32", "ibhx32")
private readonly RangeDataSeries _ibhx32 = new("Ibhx32", "ibhx32")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _ibhx21 = new("Ibhx21", "ibhx21")
private readonly RangeDataSeries _ibhx21 = new("Ibhx21", "ibhx21")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _ibhx1h = new("Ibhx1h", "ibhx1h")
private readonly RangeDataSeries _ibhx1h = new("Ibhx1h", "ibhx1h")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _ibHm = new("IbHm", "ibHm")
private readonly RangeDataSeries _ibHm = new("IbHm", "ibHm")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _ibMl = new("IbM1", "ibM1")
private readonly RangeDataSeries _ibMl = new("IbM1", "ibM1")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _ibl1 = new("Ibl1", "ibl1")
private readonly RangeDataSeries _ibl1 = new("Ibl1", "ibl1")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _iblx12 = new("Ibl12", "ibl12")
private readonly RangeDataSeries _iblx12 = new("Ibl12", "ibl12")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
IsHidden = true
};
private RangeDataSeries _iblx23 = new("Ibl23", "ibl23")
private readonly RangeDataSeries _iblx23 = new("Ibl23", "ibl23")
{
RangeColor = System.Drawing.Color.Transparent.Convert(),
DrawAbovePrice = false,
Expand Down Expand Up @@ -297,7 +295,7 @@ public TimeSpan StartDate
}

[Display(ResourceType = typeof(Strings), Name = nameof(Strings.EndTime),
GroupName = nameof(Strings.SessionTime), Description = nameof(Strings.EndTimeDescription), Order = 20)]
GroupName = nameof(Strings.SessionTime), Description = nameof(Strings.EndTimeDescription), Order = 25)]
public TimeSpan EndDate
{
get => _endDate;
Expand Down Expand Up @@ -337,7 +335,8 @@ public PeriodType PeriodMode
[Parameter]
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.Multiplier1),
GroupName = nameof(Strings.Multiplier), Description = nameof(Strings.MultiplierDescription), Order = 100)]
public decimal X1
[Range(0.1, 100)]
public decimal X1
{
get => _x1;
set
Expand All @@ -350,7 +349,8 @@ public decimal X1
[Parameter]
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.Multiplier2),
GroupName = nameof(Strings.Multiplier), Description = nameof(Strings.MultiplierDescription),Order = 110)]
public decimal X2
[Range(0.1, 100)]
public decimal X2
{
get => _x2;
set
Expand All @@ -363,7 +363,8 @@ public decimal X2
[Parameter]
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.Multiplier3),
GroupName = nameof(Strings.Multiplier), Description = nameof(Strings.MultiplierDescription), Order = 120)]
public decimal X3
[Range(0.1, 100)]
public decimal X3
{
get => _x3;
set
Expand Down Expand Up @@ -487,7 +488,8 @@ public InitialBalance()
_iblx1.PropertyChanged += DataSeriesPropertyChanged;
_iblx2.PropertyChanged += DataSeriesPropertyChanged;
_iblx3.PropertyChanged += DataSeriesPropertyChanged;
}
_mid.PropertyChanged += DataSeriesPropertyChanged;
}

#endregion

Expand Down Expand Up @@ -614,9 +616,12 @@ protected override void OnCalculate(int bar, decimal value)
_calculate = true;
_highLowIsSet = false;
_lastStartBar = bar;
_endTime = candleFullDateTime.AddMinutes(_period);
_isStarted = true;

if (PeriodMode is PeriodType.Minutes)
_endTime = candleFullDateTime.AddMinutes(_period);


foreach (var dataSeries in DataSeries)
if (dataSeries is ValueDataSeries series)
series.SetPointOfEndLine(bar - 1);
Expand Down Expand Up @@ -735,11 +740,25 @@ private DateTime GetPrevDateTime(int bar)
return GetCandle(bar - 1).Time.AddHours(InstrumentInfo.TimeZone);
}

#endregion
protected override void OnDispose()
{
_ibh.PropertyChanged -= DataSeriesPropertyChanged;
_ibl.PropertyChanged -= DataSeriesPropertyChanged;
_ibm.PropertyChanged -= DataSeriesPropertyChanged;
_ibhx1.PropertyChanged -= DataSeriesPropertyChanged;
_ibhx2.PropertyChanged -= DataSeriesPropertyChanged;
_ibhx3.PropertyChanged -= DataSeriesPropertyChanged;
_iblx1.PropertyChanged -= DataSeriesPropertyChanged;
_iblx2.PropertyChanged -= DataSeriesPropertyChanged;
_iblx3.PropertyChanged -= DataSeriesPropertyChanged;
_mid.PropertyChanged -= DataSeriesPropertyChanged;
}

#endregion

#region Private methods
#region Private methods

private void DataSeriesPropertyChanged(object sender, PropertyChangedEventArgs e)
private void DataSeriesPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (!_initialized)
return;
Expand Down