Login Page - Create Account

Support Board


Date/Time: Sun, 05 May 2024 00:59:25 +0000



sc.DeleteUserDrawnACSDrawing affecting sc.GetUserDrawnChartDrawing

View Count: 1075

[2019-05-06 07:22:09]
@sstfrederik - Posts: 403
Hi,

I just came across something odd. When I run a while loop on sc.GetUserDrawnChartDrawing and delete a drawing that fits my criteria with sc.DeleteUserDrawnACSDrawing inside that while loop, it seems that the next linenumber is skipped.

See code snippet and log output below. Am I missing something?

Frederik

little codesnippet below:
while( sc.GetUserDrawnChartDrawing(sc.ChartNumber, DRAWING_HORIZONTAL_RAY, ChartDrawing, DrawingIndex) ){

aap.Format("LineNumber = %d, DrawingIndex = %d", ChartDrawing.LineNumber, DrawingIndex);
sc.AddMessageToLog(aap,1);
      
if(FirstLineNr < 0 && (ChartDrawing.LineNumber > FirstLineNr || ChartDrawing.LineNumber < LastLineNr )){
sc.DeleteUserDrawnACSDrawing(sc.ChartNumber, ChartDrawing.LineNumber);

aap.Format("Deleted LineNumber = %d", ChartDrawing.LineNumber);
sc.AddMessageToLog(aap,1);      
}
DrawingIndex++;  
}

message log output:

Chart: CLM19 5 Min #1 | Study: test | FirstLineNr = -108 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LastLineNr = -113 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -102, DrawingIndex = 0 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | Deleted LineNumber = -102 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -104, DrawingIndex = 1 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | Deleted LineNumber = -104 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -106, DrawingIndex = 2 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | Deleted LineNumber = -106 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -108, DrawingIndex = 3 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -109, DrawingIndex = 4 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -110, DrawingIndex = 5 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -111, DrawingIndex = 6 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -112, DrawingIndex = 7 | 2019-05-06 03:03:25 *
Chart: CLM19 5 Min #1 | Study: test | LineNumber = -113, DrawingIndex = 8 | 2019-05-06 03:03:25 *
[2019-05-06 19:28:34]
Ackin - Posts: 1865

FirstLineNr = -108
LastLineNr = -113

LineNumber = -102, DrawingIndex = 0 |
Deleted LineNumber = -102 |
LineNumber = -104, DrawingIndex = 1 |
Deleted LineNumber = -104 |
LineNumber = -106, DrawingIndex = 2 |
Deleted LineNumber = -106 |
LineNumber = -108, DrawingIndex = 3 |
LineNumber = -109, DrawingIndex = 4 |
LineNumber = -110, DrawingIndex = 5 |
LineNumber = -111, DrawingIndex = 6 |
LineNumber = -112, DrawingIndex = 7 |
LineNumber = -113, DrawingIndex = 8 |


Hi,
numbers are negative, condition LineNumber > FirstLineNr || LineNumber < LastLineNr is true, there is no other number that meets the condition

If do you think that is bad loading getfunction because lines are missing "-107, -105, -103" try you to see if those lines actually exist on the chart, I had recently solved similar, when the index of already stored IDs has been shifted
Date Time Of Last Edit: 2019-05-06 19:44:40
[2019-05-06 19:49:32]
@sstfrederik - Posts: 403
The lines exist. That is my point. When delete is called the linenumber of the next drawing is skipped. The lines with linenumber "-107, -105, -103" are still on the chart, but should be deleted.
Date Time Of Last Edit: 2019-05-06 20:36:41
[2019-05-06 20:39:32]
@sstfrederik - Posts: 403
Solved the issue. Maybe documentation can be adjusted. When delete is done do not update the DrawingIndex. Below code works fine.

Thanks @Ackin. You gave me an idea about the indexing.

while( sc.GetUserDrawnChartDrawing(sc.ChartNumber, DRAWING_HORIZONTAL_RAY, ChartDrawing, DrawingIndex) ){



aap.Format("LineNumber = %d, DrawingIndex = %d", ChartDrawing.LineNumber, DrawingIndex);

sc.AddMessageToLog(aap,1);



if(FirstLineNr < 0 && (ChartDrawing.LineNumber > FirstLineNr || ChartDrawing.LineNumber < LastLineNr )){

sc.DeleteUserDrawnACSDrawing(sc.ChartNumber, ChartDrawing.LineNumber);



aap.Format("Deleted LineNumber = %d", ChartDrawing.LineNumber);

sc.AddMessageToLog(aap,1);

continue;
}

DrawingIndex++;

}

[2020-06-08 15:51:25]
darksaber - Posts: 8
Thank you a lot @sstfrederik and @Ackin. The documentation should be indeed adjusted. Not obvious behavior of sc.DeleteUserDrawnACSDrawing at all that costed me a couple of sleepless nights. :(
[2020-06-09 06:23:36]
Sierra Chart Engineering - Posts: 104368
We would think it should be understood that if a Chart Drawing is removed, the internal storage of the Chart Drawings is affected and the indexes of those Chart Drawings would be affected. However, we have done a documentation update about this.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing

To post a message in this thread, you need to log in with your Sierra Chart account:

Login

Login Page - Create Account