Support Board
Date/Time: Mon, 25 Nov 2024 20:28:35 +0000
[Programming Help] - Request for ASCIL Code
View Count: 279
[2024-02-01 17:19:24] |
User719760 - Posts: 6 |
I have tried implementing this way but it is placing orders even when I am not in position. Can You please share me the full code. #include "sierrachart.h" SCDLLName("Target with SLs") SCSFExport scsf_TargetStopLossInTicks(SCStudyInterfaceRef sc) { static bool ordersPlaced = false; // Static variable to track if orders have been placed if (sc.SetDefaults) { // Set the study name and other properties sc.GraphName = "Target and Stop Loss in Ticks"; sc.StudyDescription = "Place target and stop loss in ticks for working orders"; sc.AutoLoop = 1; sc.FreeDLL = 1; // Define inputs for target and stop loss in ticks sc.Input[0].Name = "Target in Ticks"; sc.Input[0].SetInt(70); // Set a default value sc.Input[1].Name = "Stop Loss in Ticks"; sc.Input[1].SetInt(40); // Set a default value return; } s_SCPositionData PositionData; if (sc.PositionData.PositionQuantity >= 1) { // Check if orders are already placed if (!ordersPlaced) { // Create an s_SCNewOrder object. s_SCNewOrder NewOrder; NewOrder.OrderQuantity = 1; NewOrder.OrderType = SCT_ORDERTYPE_LIMIT; NewOrder.TextTag = "Position Taken of 1 Qty"; NewOrder.TimeInForce = SCT_TIF_GOOD_TILL_CANCELED; NewOrder.Stop1Offset = sc.Input[1].GetInt() * sc.TickSize; NewOrder.Target1Offset = sc.Input[0].GetInt() * sc.TickSize; // Place the orders sc.SellEntry(NewOrder); sc.BuyEntry(NewOrder); // Set the flag to true to indicate that orders have been placed ordersPlaced = true; } } else { // Reset the flag when there is no position ordersPlaced = false; } } |
[2024-02-01 20:11:26] |
ForgivingComputers.com - Posts: 960 |
I see an issue here. You need to use sc.GetTradePosition(): s_SCPositionData PositionData;
// Need to get the trade position before you can use Position Data sc.GetTradePosition(PositionData); if (sc.PositionData.PositionQuantity >= 1) |
[2024-02-02 13:21:05] |
emmanuel - Posts: 58 |
The position quantity is > 0 when there's a long position and < 0 when there's a short position. See Automated Trading From an Advanced Custom Study: s_SCPositionData Structure Members Use: if (PositionData.PositionQuantity != 0) `if (!ordersPlaced)` always returns false because the state of the `ordersPlaced` variable is not retained between invocations of the study function. Use a persistent variable instead: See Persistent Variable Functions if (sc.SetDefaults) { ... // There are no bool persistent variables. Use an int. int& ordersPlaced = sc.GerPersistentInt(1); return; } |
[2024-02-02 13:21:05] |
emmanuel - Posts: 58 |
The position quantity is > 0 when there's a long position and < 0 when there's a short position. See Automated Trading From an Advanced Custom Study: s_SCPositionData Structure Members Use: if (PositionData.PositionQuantity != 0) `if (!ordersPlaced)` always returns false because the state of the `ordersPlaced` variable is not retained between invocations of the study function. Use a persistent variable instead: See Persistent Variable Functions if (sc.SetDefaults) { ... // There are no bool persistent variables. Use an int. int& ordersPlaced = sc.GerPersistentInt(1); return; } |
To post a message in this thread, you need to log in with your Sierra Chart account: