// Manual Order Bypass Test Study for Sierra Chart v13.0 #include "sierrachart.h" SCDLLName("Manual Order Bypass Test Study v13.0") SCSFExport scsf_ManualOrderTest(SCStudyInterfaceRef sc) { // Inputs SCInputRef EnableTest = sc.Input[0]; SCInputRef ForceReset = sc.Input[1]; // Persistent variables int& TestsDone = sc.GetPersistentInt(1); if (sc.SetDefaults) { sc.GraphName = "Manual Order Bypass Test"; sc.StudyDescription = "Test bypassing struct assignments completely"; sc.GraphRegion = 0; sc.AutoLoop = 1; // Minimal trading settings sc.SendOrdersToTradeService = false; sc.MaintainTradeStatisticsAndTradesData = true; // Inputs EnableTest.Name = "Enable Test"; EnableTest.SetYesNo(0); ForceReset.Name = "Force Reset"; ForceReset.SetYesNo(0); return; } // Force reset if (ForceReset.GetYesNo()) { TestsDone = 0; SCString LogMsg; LogMsg.Format("=== MANUAL ORDER BYPASS TEST RESET ==="); sc.AddMessageToLog(LogMsg, 1); } // Final diagnostic test if (EnableTest.GetYesNo() && TestsDone == 0 && sc.Index > 50) { TestsDone = 1; SCString LogMsg; LogMsg.Format("=== MANUAL ORDER BYPASS TEST - BAR %d ===", sc.Index); sc.AddMessageToLog(LogMsg, 1); // TEST 1: Check if Sierra Chart simulation is actually working LogMsg.Format("TEST 1: Sierra Chart environment check..."); sc.AddMessageToLog(LogMsg, 1); // Check if we can access basic data float CurrentPrice = sc.Close[sc.Index]; SCString Symbol = sc.GetChartSymbol(sc.ChartNumber); LogMsg.Format("Symbol: '%s', Price: %.2f, ArraySize: %d", Symbol.GetChars(), CurrentPrice, sc.ArraySize); sc.AddMessageToLog(LogMsg, 1); // Check trading environment LogMsg.Format("SendOrdersToTradeService: %s", sc.SendOrdersToTradeService ? "TRUE" : "FALSE"); sc.AddMessageToLog(LogMsg, 1); // TEST 2: Try creating struct without assignments LogMsg.Format("TEST 2: Empty struct test..."); sc.AddMessageToLog(LogMsg, 1); s_SCNewOrder EmptyOrder; LogMsg.Format("Empty struct: Qty=%u, Type=%d, TIF=%d", EmptyOrder.OrderQuantity, EmptyOrder.OrderType, EmptyOrder.TimeInForce); sc.AddMessageToLog(LogMsg, 1); // TEST 3: Try to use Sierra Chart's own order management LogMsg.Format("TEST 3: Check position data..."); sc.AddMessageToLog(LogMsg, 1); s_SCPositionData PositionData; sc.GetTradePosition(PositionData); LogMsg.Format("Current Position: Qty=%d", PositionData.PositionQuantity); sc.AddMessageToLog(LogMsg, 1); // TEST 4: Ultimate diagnosis - try minimal order submission LogMsg.Format("TEST 4: Absolute minimal order attempt..."); sc.AddMessageToLog(LogMsg, 1); s_SCNewOrder MinOrder; // Try using memset to clear everything first memset(&MinOrder, 0, sizeof(MinOrder)); LogMsg.Format("After memset: Qty=%u, Type=%d", MinOrder.OrderQuantity, MinOrder.OrderType); sc.AddMessageToLog(LogMsg, 1); // Try setting just one field MinOrder.OrderQuantity = 1; LogMsg.Format("After setting Qty=1: Qty=%u", MinOrder.OrderQuantity); sc.AddMessageToLog(LogMsg, 1); if (MinOrder.OrderQuantity == 1) { LogMsg.Format("SUCCESS: Struct assignment actually worked!"); sc.AddMessageToLog(LogMsg, 1); // Now try setting other fields MinOrder.OrderType = SCT_ORDERTYPE_MARKET; LogMsg.Format("After setting type: Qty=%u, Type=%d", MinOrder.OrderQuantity, MinOrder.OrderType); sc.AddMessageToLog(LogMsg, 1); if (MinOrder.OrderQuantity == 1) { LogMsg.Format("Struct assignments are working - trying order submission..."); sc.AddMessageToLog(LogMsg, 1); int Result = sc.BuyEntry(MinOrder); LogMsg.Format("FINAL RESULT: %d", Result); sc.AddMessageToLog(LogMsg, 1); if (Result > 0) { LogMsg.Format("BREAKTHROUGH! Order actually worked!"); sc.AddMessageToLog(LogMsg, 1); } else { LogMsg.Format("Struct works but order submission fails: %d", Result); sc.AddMessageToLog(LogMsg, 1); } } else { LogMsg.Format("Setting OrderType corrupted OrderQuantity"); sc.AddMessageToLog(LogMsg, 1); } } else { LogMsg.Format("CONFIRMED: Even simple assignment fails"); sc.AddMessageToLog(LogMsg, 1); LogMsg.Format("This indicates a fundamental C++ compilation or Sierra Chart issue"); sc.AddMessageToLog(LogMsg, 1); } LogMsg.Format("=== FINAL DIAGNOSIS COMPLETE ==="); sc.AddMessageToLog(LogMsg, 1); LogMsg.Format("RECOMMENDATION: Contact Sierra Chart support with these test results"); sc.AddMessageToLog(LogMsg, 1); LogMsg.Format("This appears to be a Sierra Chart installation or compilation issue"); sc.AddMessageToLog(LogMsg, 1); } }