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
|
