Support Board
Date/Time: Thu, 06 Feb 2025 22:24:36 +0000
Post From: DRAWSTYLE_COLOR_BAR does not work with DRAWSTYLE_BACKGROUND
[2020-05-10 00:02:22] |
Yoda - Posts: 106 |
I have a study that colors the bars when certain conditions are met. I decided to add the option to switch between coloring the bars and coloring the background. However, I found once I added DRAWSTYLE_BACKGROUND to the code, DRAWSTYLE_COLOR_BAR no longer worked. I tried numerous other drawstyles, like DRAWSTYLE_ARROW_DOWN and DRAWSTYLE_POINT in place of DRAWSTYLE_COLOR_BAR and all of those worked. The issue appears to be only with DRAWSTYLE_COLOR_BAR. To demonstrate this issue, I created a study (1st example below) from the BackgroundDrawStyleExample in studies8.cpp and added the option to switch to DRAWSTYLE_COLOR_BAR. You will note that when you switch to Color bar, the bars are not colored. If you comment out Subgraph_ColorBar.DrawStyle = DRAWSTYLE_COLOR_BAR; and un-comment either one of the two lines below it, you will see that both arrow down and the point works without any issue. To further demonstrate this issue, I have a second study below. It is the same code as the first study, but I have commented out all of the lines related to Subgraph_Background and Subgraph_BackgroundDC. You will note that the bars are now being colored. Is this a bug in SC or is there something I need to do to have DRAWSTYLE_COLOR_BAR working with DRAWSTYLE_BACKGROUND? /****************************************************************************** Name : BackgroundDrawStyleExampleWithColorBar01.cpp Description : Demonstrates issue when combining DRAWSTYLE_BACKGROUND & DRAWSTYLE_COLOR_BAR Last Modified Date : 20200509-1823 Version : 0.01 Disclosure ***** : SEE DISCLOSURE BELOW CODE ******************************************************************************/ #include "sierrachart.h" SCDLLName("BackgroundDrawStyleExampleWithColorBar01") SCSFExport scsf_BackgroundDrawStyleExample(SCStudyInterfaceRef sc) { SCSubgraphRef Subgraph_Background = sc.Subgraph[0]; SCSubgraphRef Subgraph_BackgroundDC = sc.Subgraph[1]; SCSubgraphRef Subgraph_ColorBar = sc.Subgraph[2]; SCSubgraphRef Subgraph_HighPrice = sc.Subgraph[3]; SCInputRef Input_ColorBar_or_ColorBackground = sc.Input[1]; if (sc.SetDefaults) { // Set the configuration and defaults sc.GraphName = "Background DrawStyle Example"; sc.StudyDescription = "Background DrawStyle Example"; sc.AutoLoop = true; sc.GraphRegion = 0; sc.DrawStudyUnderneathMainPriceGraph = 1; // not required in studies, but want color behind price for this study Subgraph_Background.Name = "Background"; Subgraph_Background.DrawStyle = DRAWSTYLE_BACKGROUND; Subgraph_Background.PrimaryColor = COLOR_LIGHTGREEN; Subgraph_Background.SecondaryColor = COLOR_LIGHTPINK; Subgraph_Background.SecondaryColorUsed = true; // turn on if both colors are to be used Subgraph_Background.AutoColoring = AUTOCOLOR_POSNEG; // use positive/negative values to signify colors Subgraph_BackgroundDC.Name = "Background DataColor"; Subgraph_BackgroundDC.DrawStyle = DRAWSTYLE_BACKGROUND; Subgraph_BackgroundDC.PrimaryColor = RGB(255,0,255); Subgraph_ColorBar.Name = "Background"; Subgraph_ColorBar.DrawStyle = DRAWSTYLE_COLOR_BAR; // DOES NOT WORK //Subgraph_ColorBar.DrawStyle = DRAWSTYLE_ARROW_DOWN; // WORKS //Subgraph_ColorBar.DrawStyle = DRAWSTYLE_POINT; // WORKS Subgraph_ColorBar.PrimaryColor = COLOR_LIGHTGREEN; Subgraph_ColorBar.SecondaryColor = COLOR_LIGHTPINK; Subgraph_ColorBar.SecondaryColorUsed = true; // turn on if both colors are to be used Subgraph_ColorBar.AutoColoring = AUTOCOLOR_POSNEG; // use positive/negative values to signify colors Subgraph_ColorBar.LineWidth = 8; Input_ColorBar_or_ColorBackground.Name = "Color Bar or background"; Input_ColorBar_or_ColorBackground.SetCustomInputStrings("0: Color Background; 1: Color bar"); Input_ColorBar_or_ColorBackground.SetCustomInputIndex(0); Input_ColorBar_or_ColorBackground.SetIntLimits(0,1); return; } // Do data processing int min = sc.BaseDateTimeIn[sc.Index].GetMinute(); float High = sc.High[sc.Index]; if (Input_ColorBar_or_ColorBackground.GetIndex() == 0) // Color Background { if (min > 0 && min < 15) Subgraph_Background[sc.Index] = 0; // do not color background else if (min >= 15 && min < 30) Subgraph_Background[sc.Index] = 1; // use primary color else if (min >= 30 && min < 45) Subgraph_Background[sc.Index] = -1; // use secondary color else if (min >= 45 && min < 60) { Subgraph_BackgroundDC[sc.Index] = 1; Subgraph_BackgroundDC.DataColor[sc.Index] = RGB(0, 0, 17*(60-min)); } } else // 1st 15m no coloring, 2nd & 3rd color bars, 4th 15m color background { if (min > 0 && min < 15) { Subgraph_ColorBar[sc.Index] = 0; // do not color bar } else if (min >= 15 && min < 30) { Subgraph_ColorBar[sc.Index] = High; Subgraph_ColorBar.DataColor[sc.Index] = Subgraph_ColorBar.PrimaryColor; } else if (min >= 30 && min < 45) { Subgraph_ColorBar[sc.Index] = High; Subgraph_ColorBar.DataColor[sc.Index] = Subgraph_ColorBar.SecondaryColor; } else if (min >= 45 && min < 60) // color background { Subgraph_BackgroundDC[sc.Index] = 1; Subgraph_BackgroundDC.DataColor[sc.Index] = RGB(0, 0, 17*(60-min)); } } /***************************************************************************** DISCLAIMER / WARNING: This code is provided for educational purposes on an As Is, Where Is basis. No express or implied warranties are provided. There may be errors in this code, and it must not be used for live trading. Trading is very risky and you can lose more than you have invested. Past performance is not necessarily indicative of future results. By using any of this code, you acknowledge and agree to the above. ******************************************************************************/ } /****************************************************************************** Name : OnlyColorBar02.cpp Description : Shows DRAWSTYLE_COLOR_BAR works when DRAWSTYLE_BACKGROUND is commented out Last Modified Date : 20200509-1849 Version : 0.01 Disclosure ***** : SEE DISCLOSURE BELOW CODE ******************************************************************************/ #include "sierrachart.h" SCDLLName("OnlyColorBar02") SCSFExport scsf_BackgroundDrawStyleExample(SCStudyInterfaceRef sc) { //SCSubgraphRef Subgraph_Background = sc.Subgraph[0]; //SCSubgraphRef Subgraph_BackgroundDC = sc.Subgraph[1]; SCSubgraphRef Subgraph_ColorBar = sc.Subgraph[2]; SCSubgraphRef Subgraph_HighPrice = sc.Subgraph[3]; SCInputRef Input_ColorBar_or_ColorBackground = sc.Input[1]; if (sc.SetDefaults) { // Set the configuration and defaults sc.GraphName = "Background DrawStyle Example"; sc.StudyDescription = "Background DrawStyle Example"; sc.AutoLoop = true; sc.GraphRegion = 0; sc.DrawStudyUnderneathMainPriceGraph = 1; // not required in studies, but want color behind price for this study /* Subgraph_Background.Name = "Background"; Subgraph_Background.DrawStyle = DRAWSTYLE_BACKGROUND; Subgraph_Background.PrimaryColor = COLOR_LIGHTGREEN; Subgraph_Background.SecondaryColor = COLOR_LIGHTPINK; Subgraph_Background.SecondaryColorUsed = true; // turn on if both colors are to be used Subgraph_Background.AutoColoring = AUTOCOLOR_POSNEG; // use positive/negative values to signify colors Subgraph_BackgroundDC.Name = "Background DataColor"; Subgraph_BackgroundDC.DrawStyle = DRAWSTYLE_BACKGROUND; Subgraph_BackgroundDC.PrimaryColor = RGB(255,0,255); */ Subgraph_ColorBar.Name = "Background"; Subgraph_ColorBar.DrawStyle = DRAWSTYLE_COLOR_BAR; // NOW WORKS //Subgraph_ColorBar.DrawStyle = DRAWSTYLE_ARROW_DOWN; // WORKS //Subgraph_ColorBar.DrawStyle = DRAWSTYLE_POINT; // WORKS Subgraph_ColorBar.PrimaryColor = COLOR_LIGHTGREEN; Subgraph_ColorBar.SecondaryColor = COLOR_LIGHTPINK; Subgraph_ColorBar.SecondaryColorUsed = true; // turn on if both colors are to be used Subgraph_ColorBar.AutoColoring = AUTOCOLOR_POSNEG; // use positive/negative values to signify colors Subgraph_ColorBar.LineWidth = 8; Input_ColorBar_or_ColorBackground.Name = "Color Bar or background"; Input_ColorBar_or_ColorBackground.SetCustomInputStrings("0: Color Background; 1: Color bar"); Input_ColorBar_or_ColorBackground.SetCustomInputIndex(1); Input_ColorBar_or_ColorBackground.SetIntLimits(0,1); return; } // Do data processing int min = sc.BaseDateTimeIn[sc.Index].GetMinute(); float High = sc.High[sc.Index]; /* if (Input_ColorBar_or_ColorBackground.GetIndex() == 0) // Color Background { if (min > 0 && min < 15) Subgraph_Background[sc.Index] = 0; // do not color background else if (min >= 15 && min < 30) Subgraph_Background[sc.Index] = 1; // use primary color else if (min >= 30 && min < 45) Subgraph_Background[sc.Index] = -1; // use secondary color else if (min >= 45 && min < 60) { Subgraph_BackgroundDC[sc.Index] = 1; Subgraph_BackgroundDC.DataColor[sc.Index] = RGB(0, 0, 17*(60-min)); } } else // 1st 15m no coloring, 2nd & 3rd color bars, 4th 15m color background { */ if (min > 0 && min < 15) { Subgraph_ColorBar[sc.Index] = 0; // do not color bar } else if (min >= 15 && min < 30) { Subgraph_ColorBar[sc.Index] = High; Subgraph_ColorBar.DataColor[sc.Index] = Subgraph_ColorBar.PrimaryColor; } else if (min >= 30 && min < 45) { Subgraph_ColorBar[sc.Index] = High; Subgraph_ColorBar.DataColor[sc.Index] = Subgraph_ColorBar.SecondaryColor; } /* else if (min >= 45 && min < 60) // color background { Subgraph_BackgroundDC[sc.Index] = 1; Subgraph_BackgroundDC.DataColor[sc.Index] = RGB(0, 0, 17*(60-min)); } } */ /***************************************************************************** DISCLAIMER / WARNING: This code is provided for educational purposes on an As Is, Where Is basis. No express or implied warranties are provided. There may be errors in this code, and it must not be used for live trading. Trading is very risky and you can lose more than you have invested. Past performance is not necessarily indicative of future results. By using any of this code, you acknowledge and agree to the above. ******************************************************************************/ } |