Login Page - Create Account

Support Board


Date/Time: Mon, 23 Dec 2024 19:59:16 +0000



Post From: Drawing BidSize/AskSize on Chart - Graph Region 0

[2015-10-13 01:35:07]
User126996 - Posts: 30
I'm currently using the Depth of Market Study and the s_UseTool to try to draw the BidSize/AskSize on the chart (Graph Region 0). I've tried to accomplish this in 2 different ways but it keeps on shrinking the chart so the bars are really small. This leads me to believe that I'm identifying the Bid/Ask Size but in the process it is re-aligning or re-scaling the price graph to match the size of the Bid/Ask. How can I add the Bid/Ask Size to graph region 0 without the graph re-scaling?

Effort 1:



#include "sierrachart.h"
#include <math.h>

void DrawBidSize(SCStudyGraphRef sc, unsigned int index, float value, unsigned int align){
  s_UseTool DrawBidSize;

  DrawBidSize.Clear(); // reset tool structure for our next use
  DrawBidSize.DrawingType = DRAWING_TEXT;
  DrawBidSize.BeginIndex = index;
  DrawBidSize.BeginValue = value;
  DrawBidSize.Region = 0;
  DrawBidSize.Color = COLOR_GREEN;
  DrawBidSize.TextAlignment = DT_CENTER | align;
  DrawBidSize.AddMethod = UTAM_ADD_OR_ADJUST;
  DrawBidSize.LineNumber = 98563214;
  DrawBidSize.FontSize = 10;

  sc.UseTool(DrawBidSize);
}

// Example: DrawBidSize(sc, BidValue[sc.Index], BidSize[sc.Index], DT_RIGHT)

SCSFExport scsf_DepthOfMarketData(SCStudyInterfaceRef sc)
{
  SCSubgraphRef BidSize = sc.Subgraph[0];
  SCSubgraphRef BidValue = sc.Subgraph[1];
  SCSubgraphRef AskSize = sc.Subgraph[2];
  SCSubgraphRef AskValue = sc.Subgraph[3];

  if (sc.SetDefaults)
  {
    // Set the configuration and defaults
    
    sc.GraphName = "Depth of Market Data";
    
    sc.StudyDescription = "This is a study to display current market depth data. When adding this study, also add the Spreadsheet study to your chart to view the market depth data in a table form on the spreadsheet.";

    sc.UsesMarketDepthData= 1;

    
    
    

BidSize.Name = "Bid Size";
    BidSize.DrawStyle = DRAWSTYLE_DASH;
    BidSize.PrimaryColor = RGB(0,255,0);
    BidSize.DrawZeros = false;


    BidValue.Name = "Bid Value";
    BidValue.DrawStyle = DRAWSTYLE_HIDDEN;
    BidValue.LineLabel = LL_DISPLAY_VALUE | LL_VALUE_ALIGN_CENTER | LL_VALUE_ALIGN_FAR_RIGHT ;
    BidValue.PrimaryColor = COLOR_GREEN;
    BidValue.SecondaryColorUsed = 1;
    BidValue.SecondaryColor = COLOR_BLACK;
    BidValue.DrawZeros = false;

AskSize.Name = "Ask Size";
    AskSize.DrawStyle = DRAWSTYLE_DASH;
    AskSize.PrimaryColor = RGB(255,255,0);
    AskSize.DrawZeros = false;

    AskValue.Name = "Ask Value";
    AskValue.DrawStyle = DRAWSTYLE_TEXT;
    AskValue.LineLabel = LL_DISPLAY_VALUE | LL_VALUE_ALIGN_CENTER | LL_VALUE_ALIGN_FAR_RIGHT;
    AskValue.PrimaryColor = COLOR_RED;
    AskValue.SecondaryColorUsed = 1;
    AskValue.SecondaryColor = COLOR_BLACK;
    AskValue.DrawZeros = false;

    
    sc.FreeDLL = 1;

    return;
  }
  
  // Do data processing

  int& PriorIndex = sc.GetPersistentInt(1);


  for (int Level = 0; Level < MAX_NUM_DOM_LEVELS; Level++)
  {
    if (sc.ArraySize -1 - MAX_NUM_DOM_LEVELS < 0)
      break;

    BidSize[sc.ArraySize -1 -Level] = (float) sc.SymbolData->BidDOM[Level].Volume;
    BidValue[sc.ArraySize -1 -Level] = sc.SymbolData->BidDOM[Level].Price;
    AskSize[sc.ArraySize -1 -Level] = (float) sc.SymbolData->AskDOM[Level].Volume;
    AskValue[sc.ArraySize -1 -Level] = sc.SymbolData->AskDOM[Level].Price;
  }

  int LastIndex = sc.ArraySize -1 - MAX_NUM_DOM_LEVELS;

  sc.EarliestUpdateSubgraphDataArrayIndex = LastIndex;

  if (PriorIndex < LastIndex)
  {
    for (int ClearIndex = LastIndex; ClearIndex>= PriorIndex; ClearIndex--)
    {
      BidSize[ClearIndex] = 0;
      BidValue[ClearIndex] = 0;
      AskSize[ClearIndex] = 0;
      AskValue[ClearIndex] = 0;
    }
  }
  
  PriorIndex = (LastIndex >= 0) ? LastIndex : 0;


DrawBidSize(sc, BidValue[sc.Index], BidSize[sc.Index], DT_RIGHT);

}







Effort 2:


#include "sierrachart.h"
#include <math.h>


SCSFExport scsf_DepthOfMarketData(SCStudyInterfaceRef sc)
{
  SCSubgraphRef BidSize = sc.Subgraph[0];
  SCSubgraphRef BidValue = sc.Subgraph[1];
  SCSubgraphRef AskSize = sc.Subgraph[2];
  SCSubgraphRef AskValue = sc.Subgraph[3];

  if (sc.SetDefaults)
  {
    // Set the configuration and defaults
    
    sc.GraphName = "Depth of Market Data";
    
    sc.StudyDescription = "This is a study to display current market depth data. When adding this study, also add the Spreadsheet study to your chart to view the market depth data in a table form on the spreadsheet.";

    sc.UsesMarketDepthData= 1;

    BidSize.Name = "Bid Size";
    BidSize.DrawStyle = DRAWSTYLE_DASH;
    BidSize.PrimaryColor = RGB(0,255,0);
    BidSize.DrawZeros = false;

    BidValue.Name = "Bid Value";
    BidValue.DrawStyle = DRAWSTYLE_HIDDEN;
    BidValue.LineLabel = LL_DISPLAY_VALUE | LL_VALUE_ALIGN_CENTER | LL_VALUE_ALIGN_FAR_RIGHT ;
    BidValue.PrimaryColor = COLOR_GREEN;
    BidValue.SecondaryColorUsed = 1;
    BidValue.SecondaryColor = COLOR_BLACK;
    BidValue.DrawZeros = false;

AskSize.Name = "Ask Size";
    AskSize.DrawStyle = DRAWSTYLE_DASH;
    AskSize.PrimaryColor = RGB(255,255,0);
    AskSize.DrawZeros = false;

    AskValue.Name = "Ask Value";
    AskValue.DrawStyle = DRAWSTYLE_TEXT;
    AskValue.LineLabel = LL_DISPLAY_VALUE | LL_VALUE_ALIGN_CENTER | LL_VALUE_ALIGN_FAR_RIGHT;
    AskValue.PrimaryColor = COLOR_RED;
    AskValue.SecondaryColorUsed = 1;
    AskValue.SecondaryColor = COLOR_BLACK;
    AskValue.DrawZeros = false;
    
    sc.FreeDLL = 1;

    return;
  }
  
  // Do data processing

  int& PriorIndex = sc.GetPersistentInt(1);


  for (int Level = 0; Level < MAX_NUM_DOM_LEVELS; Level++)
  {
    if (sc.ArraySize -1 - MAX_NUM_DOM_LEVELS < 0)
      break;

    BidSize[sc.ArraySize -1 -Level] = (float) sc.SymbolData->BidDOM[Level].Volume;
    BidValue[sc.ArraySize -1 -Level] = sc.SymbolData->BidDOM[Level].Price;
    AskSize[sc.ArraySize -1 -Level] = (float) sc.SymbolData->AskDOM[Level].Volume;
    AskValue[sc.ArraySize -1 -Level] = sc.SymbolData->AskDOM[Level].Price;
  }

  int LastIndex = sc.ArraySize -1 - MAX_NUM_DOM_LEVELS;

  sc.EarliestUpdateSubgraphDataArrayIndex = LastIndex;

  if (PriorIndex < LastIndex)
  {
    for (int ClearIndex = LastIndex; ClearIndex>= PriorIndex; ClearIndex--)
    {
      BidSize[ClearIndex] = 0;
      BidValue[ClearIndex] = 0;
      AskSize[ClearIndex] = 0;
      AskValue[ClearIndex] = 0;
    }
  }
  
  PriorIndex = (LastIndex >= 0) ? LastIndex : 0;


if (sc.BaseDataIn[SC_LAST][sc.Index] != BidValue[sc.Index])
  {

    s_UseTool DrawTool;

    DrawTool.Clear(); // reset tool structure for our next use
    DrawTool.DrawingType = DRAWING_TEXT;
    DrawTool.BeginIndex = BidValue[sc.Index];
    DrawTool.BeginValue = BidSize[sc.Index];
    DrawTool.Region = 0;
    DrawTool.Color = COLOR_GREEN;
    DrawTool.TextAlignment = DT_RIGHT;
    DrawTool.Text.Format("B1: %.2f", BidSize[sc.Index]);
    DrawTool.AddMethod = UTAM_ADD_OR_ADJUST;
    DrawTool.LineNumber = 74127913;
    DrawTool.FontSize = 10;

    sc.UseTool(DrawTool);

  }

}