Skip to content

Commit b90072c

Browse files
committed
PLAT-3171. OHLC Plus. Added VWAP
1 parent 1d9878a commit b90072c

1 file changed

Lines changed: 97 additions & 16 deletions

File tree

Technical/OHLCPlus.cs

Lines changed: 97 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,17 @@ private class LevelData
191191
lineType: LineType.Bar
192192
);
193193

194+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.CurrentDay), Order = 65)]
195+
public LevelSettings DayVWAPLevel { get; set; } = new(
196+
enabled: false,
197+
color: System.Drawing.Color.SteelBlue.Convert(),
198+
width: 2,
199+
lineStyle: LineDashStyle.Solid,
200+
showPrice: true,
201+
labelPosition: LabelPosition.Bar,
202+
lineType: LineType.Bar
203+
);
204+
194205
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.CurrentDay), Name = nameof(Strings.VAH), Order = 70)]
195206
public LevelSettings DayVAHLevel { get; set; } = new(
196207
enabled: false,
@@ -283,6 +294,17 @@ private class LevelData
283294
lineType: LineType.Bar
284295
);
285296

297+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.PreviousDay), Order = 65)]
298+
public LevelSettings PrevDayVWAPLevel { get; set; } = new(
299+
enabled: false,
300+
color: System.Drawing.Color.SteelBlue.Convert(),
301+
width: 2,
302+
lineStyle: LineDashStyle.Solid,
303+
showPrice: true,
304+
labelPosition: LabelPosition.Bar,
305+
lineType: LineType.Bar
306+
);
307+
286308
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.PreviousDay), Name = nameof(Strings.VAH), Order = 70)]
287309
public LevelSettings PrevDayVAHLevel { get; set; } = new(
288310
enabled: false,
@@ -375,6 +397,17 @@ private class LevelData
375397
lineType: LineType.Bar
376398
);
377399

400+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.CurrentWeek), Order = 65)]
401+
public LevelSettings WeekVWAPLevel { get; set; } = new(
402+
enabled: false,
403+
color: System.Drawing.Color.SteelBlue.Convert(),
404+
width: 2,
405+
lineStyle: LineDashStyle.Solid,
406+
showPrice: true,
407+
labelPosition: LabelPosition.Bar,
408+
lineType: LineType.Bar
409+
);
410+
378411
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.CurrentWeek), Name = nameof(Strings.VAH), Order = 70)]
379412
public LevelSettings WeekVAHLevel { get; set; } = new(
380413
enabled: false,
@@ -467,6 +500,17 @@ private class LevelData
467500
lineType: LineType.Bar
468501
);
469502

503+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.PreviousWeek), Order = 65)]
504+
public LevelSettings PrevWeekVWAPLevel { get; set; } = new(
505+
enabled: false,
506+
color: System.Drawing.Color.SteelBlue.Convert(),
507+
width: 2,
508+
lineStyle: LineDashStyle.Solid,
509+
showPrice: true,
510+
labelPosition: LabelPosition.Bar,
511+
lineType: LineType.Bar
512+
);
513+
470514
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.PreviousWeek), Name = nameof(Strings.VAH), Order = 70)]
471515
public LevelSettings PrevWeekVAHLevel { get; set; } = new(
472516
enabled: false,
@@ -559,6 +603,17 @@ private class LevelData
559603
lineType: LineType.Bar
560604
);
561605

606+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.CurrentMonth), Order = 65)]
607+
public LevelSettings MonthVWAPLevel { get; set; } = new(
608+
enabled: false,
609+
color: System.Drawing.Color.SteelBlue.Convert(),
610+
width: 2,
611+
lineStyle: LineDashStyle.Solid,
612+
showPrice: true,
613+
labelPosition: LabelPosition.Bar,
614+
lineType: LineType.Bar
615+
);
616+
562617
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.CurrentMonth), Name = nameof(Strings.VAH), Order = 70)]
563618
public LevelSettings MonthVAHLevel { get; set; } = new(
564619
enabled: false,
@@ -651,6 +706,17 @@ private class LevelData
651706
lineType: LineType.Bar
652707
);
653708

709+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.PreviousMonth), Order = 65)]
710+
public LevelSettings PrevMonthVWAPLevel { get; set; } = new(
711+
enabled: false,
712+
color: System.Drawing.Color.SteelBlue.Convert(),
713+
width: 2,
714+
lineStyle: LineDashStyle.Solid,
715+
showPrice: true,
716+
labelPosition: LabelPosition.Bar,
717+
lineType: LineType.Bar
718+
);
719+
654720
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.PreviousMonth), Name = nameof(Strings.VAH), Order = 70)]
655721
public LevelSettings PrevMonthVAHLevel { get; set; } = new(
656722
enabled: false,
@@ -743,6 +809,17 @@ private class LevelData
743809
lineType: LineType.Bar
744810
);
745811

812+
[Display(ResourceType = typeof(Strings), Name = nameof(Strings.VWAP), GroupName = nameof(Strings.Contract), Order = 65)]
813+
public LevelSettings ContractVWAPLevel { get; set; } = new(
814+
enabled: false,
815+
color: System.Drawing.Color.SteelBlue.Convert(),
816+
width: 2,
817+
lineStyle: LineDashStyle.Solid,
818+
showPrice: true,
819+
labelPosition: LabelPosition.Bar,
820+
lineType: LineType.Bar
821+
);
822+
746823
[Display(ResourceType = typeof(Strings), GroupName = nameof(Strings.Contract), Name = nameof(Strings.VAH), Order = 70)]
747824
public LevelSettings ContractVAHLevel { get; set; } = new(
748825
enabled: false,
@@ -821,13 +898,13 @@ protected override void OnRender(RenderContext context, DrawingLayouts layout)
821898
return;
822899

823900
// Render all levels in groups for better organization
824-
RenderLevelGroup(context, "d", DayOpenLevel, DayHighLevel, DayLowLevel, DayCloseLevel, DayEquilibriumLevel, DayPOCLevel, DayVAHLevel, DayVALLevel);
825-
RenderLevelGroup(context, "p", PrevDayOpenLevel, PrevDayHighLevel, PrevDayLowLevel, PrevDayCloseLevel, PrevDayEquilibriumLevel, PrevDayPOCLevel, PrevDayVAHLevel, PrevDayVALLevel);
826-
RenderLevelGroup(context, "w", WeekOpenLevel, WeekHighLevel, WeekLowLevel, WeekCloseLevel, WeekEquilibriumLevel, WeekPOCLevel, WeekVAHLevel, WeekVALLevel);
827-
RenderLevelGroup(context, "pw", PrevWeekOpenLevel, PrevWeekHighLevel, PrevWeekLowLevel, PrevWeekCloseLevel, PrevWeekEquilibriumLevel, PrevWeekPOCLevel, PrevWeekVAHLevel, PrevWeekVALLevel);
828-
RenderLevelGroup(context, "m", MonthOpenLevel, MonthHighLevel, MonthLowLevel, MonthCloseLevel, MonthEquilibriumLevel, MonthPOCLevel, MonthVAHLevel, MonthVALLevel);
829-
RenderLevelGroup(context, "pm", PrevMonthOpenLevel, PrevMonthHighLevel, PrevMonthLowLevel, PrevMonthCloseLevel, PrevMonthEquilibriumLevel, PrevMonthPOCLevel, PrevMonthVAHLevel, PrevMonthVALLevel);
830-
RenderLevelGroup(context, "c", ContractOpenLevel, ContractHighLevel, ContractLowLevel, ContractCloseLevel, ContractEquilibriumLevel, ContractPOCLevel, ContractVAHLevel, ContractVALLevel);
901+
RenderLevelGroup(context, "d", DayOpenLevel, DayHighLevel, DayLowLevel, DayCloseLevel, DayEquilibriumLevel, DayPOCLevel, DayVWAPLevel, DayVAHLevel, DayVALLevel);
902+
RenderLevelGroup(context, "p", PrevDayOpenLevel, PrevDayHighLevel, PrevDayLowLevel, PrevDayCloseLevel, PrevDayEquilibriumLevel, PrevDayPOCLevel, PrevDayVWAPLevel, PrevDayVAHLevel, PrevDayVALLevel);
903+
RenderLevelGroup(context, "w", WeekOpenLevel, WeekHighLevel, WeekLowLevel, WeekCloseLevel, WeekEquilibriumLevel, WeekPOCLevel, WeekVWAPLevel, WeekVAHLevel, WeekVALLevel);
904+
RenderLevelGroup(context, "pw", PrevWeekOpenLevel, PrevWeekHighLevel, PrevWeekLowLevel, PrevWeekCloseLevel, PrevWeekEquilibriumLevel, PrevWeekPOCLevel, PrevWeekVWAPLevel, PrevWeekVAHLevel, PrevWeekVALLevel);
905+
RenderLevelGroup(context, "m", MonthOpenLevel, MonthHighLevel, MonthLowLevel, MonthCloseLevel, MonthEquilibriumLevel, MonthPOCLevel, MonthVWAPLevel, MonthVAHLevel, MonthVALLevel);
906+
RenderLevelGroup(context, "pm", PrevMonthOpenLevel, PrevMonthHighLevel, PrevMonthLowLevel, PrevMonthCloseLevel, PrevMonthEquilibriumLevel, PrevMonthPOCLevel, PrevMonthVWAPLevel, PrevMonthVAHLevel, PrevMonthVALLevel);
907+
RenderLevelGroup(context, "c", ContractOpenLevel, ContractHighLevel, ContractLowLevel, ContractCloseLevel, ContractEquilibriumLevel, ContractPOCLevel, ContractVWAPLevel, ContractVAHLevel, ContractVALLevel);
831908
}
832909

833910
#endregion
@@ -868,43 +945,43 @@ private void RequestProfiles()
868945
private bool NeedsDayData()
869946
{
870947
return DayOpenLevel.Enabled || DayHighLevel.Enabled || DayLowLevel.Enabled || DayCloseLevel.Enabled ||
871-
DayEquilibriumLevel.Enabled || DayPOCLevel.Enabled || DayVAHLevel.Enabled || DayVALLevel.Enabled;
948+
DayEquilibriumLevel.Enabled || DayPOCLevel.Enabled || DayVWAPLevel.Enabled || DayVAHLevel.Enabled || DayVALLevel.Enabled;
872949
}
873950

874951
private bool NeedsPrevDayData()
875952
{
876953
return PrevDayOpenLevel.Enabled || PrevDayHighLevel.Enabled || PrevDayLowLevel.Enabled || PrevDayCloseLevel.Enabled ||
877-
PrevDayEquilibriumLevel.Enabled || PrevDayPOCLevel.Enabled || PrevDayVAHLevel.Enabled || PrevDayVALLevel.Enabled;
954+
PrevDayEquilibriumLevel.Enabled || PrevDayPOCLevel.Enabled || PrevDayVWAPLevel.Enabled || PrevDayVAHLevel.Enabled || PrevDayVALLevel.Enabled;
878955
}
879956

880957
private bool NeedsWeekData()
881958
{
882959
return WeekOpenLevel.Enabled || WeekHighLevel.Enabled || WeekLowLevel.Enabled || WeekCloseLevel.Enabled ||
883-
WeekEquilibriumLevel.Enabled || WeekPOCLevel.Enabled || WeekVAHLevel.Enabled || WeekVALLevel.Enabled;
960+
WeekEquilibriumLevel.Enabled || WeekPOCLevel.Enabled || WeekVWAPLevel.Enabled || WeekVAHLevel.Enabled || WeekVALLevel.Enabled;
884961
}
885962

886963
private bool NeedsPrevWeekData()
887964
{
888965
return PrevWeekOpenLevel.Enabled || PrevWeekHighLevel.Enabled || PrevWeekLowLevel.Enabled || PrevWeekCloseLevel.Enabled ||
889-
PrevWeekEquilibriumLevel.Enabled || PrevWeekPOCLevel.Enabled || PrevWeekVAHLevel.Enabled || PrevWeekVALLevel.Enabled;
966+
PrevWeekEquilibriumLevel.Enabled || PrevWeekPOCLevel.Enabled || PrevWeekVWAPLevel.Enabled || PrevWeekVAHLevel.Enabled || PrevWeekVALLevel.Enabled;
890967
}
891968

892969
private bool NeedsMonthData()
893970
{
894971
return MonthOpenLevel.Enabled || MonthHighLevel.Enabled || MonthLowLevel.Enabled || MonthCloseLevel.Enabled ||
895-
MonthEquilibriumLevel.Enabled || MonthPOCLevel.Enabled || MonthVAHLevel.Enabled || MonthVALLevel.Enabled;
972+
MonthEquilibriumLevel.Enabled || MonthPOCLevel.Enabled || MonthVWAPLevel.Enabled || MonthVAHLevel.Enabled || MonthVALLevel.Enabled;
896973
}
897974

898975
private bool NeedsPrevMonthData()
899976
{
900977
return PrevMonthOpenLevel.Enabled || PrevMonthHighLevel.Enabled || PrevMonthLowLevel.Enabled || PrevMonthCloseLevel.Enabled ||
901-
PrevMonthEquilibriumLevel.Enabled || PrevMonthPOCLevel.Enabled || PrevMonthVAHLevel.Enabled || PrevMonthVALLevel.Enabled;
978+
PrevMonthEquilibriumLevel.Enabled || PrevMonthPOCLevel.Enabled || PrevMonthVWAPLevel.Enabled || PrevMonthVAHLevel.Enabled || PrevMonthVALLevel.Enabled;
902979
}
903980

904981
private bool NeedsContractData()
905982
{
906983
return ContractOpenLevel.Enabled || ContractHighLevel.Enabled || ContractLowLevel.Enabled || ContractCloseLevel.Enabled ||
907-
ContractEquilibriumLevel.Enabled || ContractPOCLevel.Enabled || ContractVAHLevel.Enabled || ContractVALLevel.Enabled;
984+
ContractEquilibriumLevel.Enabled || ContractPOCLevel.Enabled || ContractVWAPLevel.Enabled || ContractVAHLevel.Enabled || ContractVALLevel.Enabled;
908985
}
909986

910987
private void UpdateLevels(FixedProfilePeriods period, IndicatorCandle candle)
@@ -925,6 +1002,9 @@ private void UpdateLevels(FixedProfilePeriods period, IndicatorCandle candle)
9251002
if (candle.MaxVolumePriceInfo != null && candle.MaxVolumePriceInfo.Price > 0)
9261003
UpdateLevel($"{prefix}POC", candle.MaxVolumePriceInfo.Price);
9271004

1005+
if (candle.VWAP > 0)
1006+
UpdateLevel($"{prefix}VWAP", candle.VWAP);
1007+
9281008
// Safe ValueArea access with validation
9291009
if (candle.ValueArea != null &&
9301010
candle.ValueArea.ValueAreaHigh > 0 &&
@@ -1091,7 +1171,7 @@ private void DrawTextLabel(RenderContext context, string text, int x, int y, Ren
10911171

10921172
private void RenderLevelGroup(RenderContext context, string prefix,
10931173
LevelSettings openLevel, LevelSettings highLevel, LevelSettings lowLevel, LevelSettings closeLevel,
1094-
LevelSettings eqLevel, LevelSettings pocLevel, LevelSettings vahLevel, LevelSettings valLevel)
1174+
LevelSettings eqLevel, LevelSettings pocLevel, LevelSettings vwapLevel, LevelSettings vahLevel, LevelSettings valLevel)
10951175
{
10961176
var levels = new[]
10971177
{
@@ -1101,6 +1181,7 @@ private void RenderLevelGroup(RenderContext context, string prefix,
11011181
("Close", closeLevel),
11021182
("EQ", eqLevel),
11031183
("POC", pocLevel),
1184+
("VWAP", vwapLevel),
11041185
("VAH", vahLevel),
11051186
("VAL", valLevel)
11061187
};
@@ -1112,4 +1193,4 @@ private void RenderLevelGroup(RenderContext context, string prefix,
11121193
}
11131194

11141195
#endregion
1115-
}
1196+
}

0 commit comments

Comments
 (0)