#include "sierrachart.h" SCDLLName("Position Config Switcher") SCSFExport scsf_PositionConfigSwitcher(SCStudyInterfaceRef sc) { // Configuration references SCInputRef Input_Enabled = sc.Input[0]; if (sc.SetDefaults) { // Set study defaults sc.GraphName = "Position Config Switcher"; sc.StudyDescription = "Switches trade window config based on position"; sc.AutoLoop = 1; sc.GraphRegion = 0; sc.CalculationPrecedence = LOW_PREC_LEVEL; // Input settings Input_Enabled.Name = "Enable Config Switching"; Input_Enabled.SetYesNo(1); return; } // Only run if enabled if (!Input_Enabled.GetYesNo()) return; // Only execute on the last bar to avoid excessive calls if (sc.Index < sc.ArraySize - 1) return; // Get current position quantity s_SCPositionData PositionData; int Result = sc.GetTradePosition(PositionData); if (Result == 0) { sc.AddMessageToLog("Error getting position data", 0); return; } // Determine which config file to use based on position SCString ConfigFileName; if (PositionData.PositionQuantity == 0) { ConfigFileName = "PositionEQzero.twconfig"; } else { ConfigFileName = "PositionGTzero.twconfig"; } // Check if we need to change the config (avoid unnecessary changes) static SCString LastConfigFileName; if (ConfigFileName != LastConfigFileName) { // Set the trade window config file sc.TradeWindowConfigFileName = ConfigFileName; // Update our tracking variable LastConfigFileName = ConfigFileName; // Add log message for debugging SCString LogMessage; LogMessage.Format("Position: %.0f, Config set to: %s", PositionData.PositionQuantity, ConfigFileName.GetChars()); sc.AddMessageToLog(LogMessage, 0); } }