Description
View bars from other timeframes as transparent rectangles.
Press "Ctrl" to temporary hide (or show - when parameter Show By Default disabled) bars.
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using System.Linq;
namespace cAlgo
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class CtrlTimeframes : Indicator
{
private static TimeFrame[] TimeFrames;
private int _tfIndex = 0;
static CtrlTimeframes()
{
TimeFrames = new[]
{
TimeFrame.Minute,
//TimeFrame.Minute2,
//TimeFrame.Minute3,
//TimeFrame.Minute4,
TimeFrame.Minute5,
//TimeFrame.Minute6,
//TimeFrame.Minute7,
//TimeFrame.Minute8,
///TimeFrame.Minute9,
TimeFrame.Minute10,
//TimeFrame.Minute15,
//TimeFrame.Minute20,
//TimeFrame.Minute30,
//TimeFrame.Minute45,
TimeFrame.Hour,
//TimeFrame.Hour2,
//TimeFrame.Hour3,
TimeFrame.Hour4,
//TimeFrame.Hour6,
TimeFrame.Hour8,
//TimeFrame.Hour12,
TimeFrame.Daily,
//TimeFrame.Day2,
//TimeFrame.Day3,
//TimeFrame.Weekly
//TimeFrame.Monthly
};
}
[Parameter("Show by default", DefaultValue = true)]
public bool ShowByDefault { get; set; }
public override void Calculate(int index)
{
// do nothing
}
protected override void Initialize()
{
if (!TimeFrames.Any(t => t == TimeFrame))
{
return;
}
_tfIndex = Array.IndexOf(TimeFrames, TimeFrame);
if (_tfIndex < TimeFrames.Length - 1)
{
for (int i = _tfIndex + 1; i < TimeFrames.Length; i++)
{
MarketData.GetSeries(TimeFrames[i]);
}
Chart.MouseMove += OnChartMouseMove;
}
}
private void OnChartMouseMove(ChartMouseEventArgs args)
{
for (int i = _tfIndex + 1; i < TimeFrames.Length; i++)
{
var show = ShowByDefault ? !args.CtrlKey : args.CtrlKey;
var targetSeries = MarketData.GetSeries(TimeFrames[i]);
var barTime = MarketSeries.OpenTime[(int)Math.Floor(args.BarIndex)];
var targetBarIndex = targetSeries.OpenTime.GetIndexByTime(barTime);
if (!show || targetBarIndex <= 0 || targetBarIndex >= targetSeries.OpenTime.Count - 1)
{
Chart.RemoveObject("bar" + targetSeries.TimeFrame.ToString());
continue;
}
var openTime = targetSeries.OpenTime[targetBarIndex];
var closeTime = targetSeries.OpenTime[targetBarIndex + 1];
double open = targetSeries.Open[targetBarIndex];
double close = targetSeries.Close[targetBarIndex];
var targetBar = Chart.DrawRectangle(
"bar" + targetSeries.TimeFrame.ToString(),
TimeOnChart(openTime),
open,
TimeOnChart(closeTime),
close,
Color.FromArgb(50, open > close ? Chart.ColorSettings.BearFillColor : Chart.ColorSettings.BullFillColor));
targetBar.IsFilled = true;
targetBar.Thickness = 0 ;
targetBar.IsInteractive = false;
}
}
private DateTime TimeOnChart(DateTime time)
{
var timeIndex = MarketSeries.OpenTime.GetIndexByTime(time);
var t1 = MarketSeries.OpenTime[timeIndex - 1];
var t2 = MarketSeries.OpenTime[timeIndex];
return t1.AddMilliseconds((t2 - t1).TotalMilliseconds / 2);
}
}
}
devman
Joined on 22.10.2019
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: CtrlTimeframes.algo
- Rating: 5
- Installs: 1678
- Modified: 13/10/2021 09:55
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
No comments found.