Login Page - Create Account

Support Board


Date/Time: Wed, 28 Jan 2026 17:56:04 +0000



Post From: how to calculate and plot over arrays on different timeframes in ACSIL?

[2025-12-12 16:27:48]
User431178 - Posts: 838
I probably wouldn't do it like this, but it does calculate a rolling sum of one minute average true price data multiplied by one minute volume.


SCSFExport scsf_SimulationBackgroundColor(SCStudyInterfaceRef sc)
{
SCSubgraphRef testSubgraph = sc.Subgraph[0];
SCInputRef Input_Length = sc.Input[0];

if (sc.SetDefaults)
{
sc.GraphName = "MyTest";
sc.StudyDescription = "MyTest";

Input_Length.Name = "Test Length";
Input_Length.SetInt(100);

  testSubgraph.Name = "Test Subgraph";
  testSubgraph.DrawStyle = DRAWSTYLE_LINE;
  testSubgraph.PrimaryColor = RGB(255, 0, 0);
  testSubgraph.LineWidth = 2;


sc.DisplayStudyInputValues = false;
sc.AutoLoop = true;
sc.DrawStudyUnderneathMainPriceGraph = 1;

}

const int P_ONE_MIN_CHART = 1;

int& oneMinChartNumber = sc.GetPersistentInt(P_ONE_MIN_CHART);

if (sc.IsFullRecalculation || sc.Index == 0)
{
s_ACSOpenChartParameters oneMinParams;

oneMinParams.PriorChartNumber = oneMinChartNumber;
oneMinParams.DaysToLoad = 0;
oneMinParams.ChartDataType = INTRADAY_DATA;
oneMinParams.Symbol = sc.GetRealTimeSymbol();
oneMinParams.IntradayBarPeriodType = IBPT_DAYS_MINS_SECS;
oneMinParams.IntradayBarPeriodLength = 1 * SECONDS_PER_MINUTE;
oneMinParams.HideNewChart = true;
oneMinParams.LoadWeekendData = true;
oneMinParams.UseEveningSession = true;
oneMinParams.UpdatePriorChartNumberParametersToMatch = true;
oneMinChartNumber = sc.OpenChartOrGetChartReference(oneMinParams);

sc.SetPersistentInt(P_ONE_MIN_CHART, oneMinChartNumber);
}

if (sc.Index < sc.ArraySize - 1
&& sc.IsFullRecalculation)
return;

if (oneMinChartNumber != 0)
{
SCGraphData oneMinData;
sc.GetChartBaseData(oneMinChartNumber, oneMinData);

if (oneMinData.GetArraySize() == 0)
return;

int dataIndex = oneMinData[SC_OPEN].GetArraySize() - 1;

auto tpvSum{ 0.0 };

for (auto offset = 0; offset < Input_Length.GetInt(); ++offset)
{
if (dataIndex - offset < 0)
break;

auto refIndex = dataIndex - offset;
auto tpvVal = static_cast<double>(oneMinData[SC_HLC][refIndex]) * static_cast<double>(oneMinData[SC_VOLUME][refIndex]);
tpvSum += tpvVal;
  }

SCString FormattedMessage;

sc.AddMessageToLog(FormattedMessage.Format("sc.index=%i dataIndex=%i oneMinDataLen=%i tpvSum=%.2f", sc.Index, dataIndex, oneMinData[0].GetArraySize(), tpvSum), 0);

testSubgraph[sc.Index] = static_cast<float>(tpvSum);
}
}

2025-12-12 10:23:57.182 | Chart: Replay 30X: ESZ25-CME[M] 15 Sec #1 | Study: MyTest | sc.index=3704 dataIndex=946 oneMinDataLen=947 tpvSum=868519156.64

That is my last comment / contribution on this.
Hope you get it working how you want.
Date Time Of Last Edit: 2025-12-12 16:29:56