Sierra Chart Delta Divergence

  • Upload
    zach

  • View
    314

  • Download
    10

Embed Size (px)

DESCRIPTION

Source code for Delta Divergences, written for the Sierra Chart trading platform.

Citation preview

/*jdt Delta DivergenceAuthor: jsydDate: 11/13/2011*/#include "sierrachart.h"SCDLLInit("Delta Divergence");/***********************************************************************/SCSFExport scsf_DeltaDivergence(SCStudyGraphRef sc){SCSubgraphRef ddVolSubgraph = sc.Subgraph[0];SCSubgraphRef ddBuySubgraph = sc.Subgraph[1];SCSubgraphRef ddSellSubgraph = sc.Subgraph[2];SCSubgraphRef ma1Subgraph = sc.Subgraph[3];SCSubgraphRef ma2Subgraph = sc.Subgraph[4];SCInputRef version = sc.Input[0];SCInputRef ddModeInput = sc.Input[1];SCInputRef useCSTInput = sc.Input[2];SCInputRef ddPeriodInput = sc.Input[3];SCInputRef ma1Input = sc.Input[4];SCInputRef ma2Input = sc.Input[5];SCInputRef maTypeInput = sc.Input[6];SCInputRef maInputDataInput = sc.Input[7];SCInputRef ddOffsetInput = sc.Input[8];SCInputRef maOffsetInput = sc.Input[9];if(sc.SetDefaults){sc.GraphName="Delta Divergence";sc.StudyDescription="Delta Divergence with option to only trade with trend";ddVolSubgraph.Name = "Delta Volume";ddVolSubgraph.DrawStyle = DRAWSTYLE_DONOTDRAW;ddBuySubgraph.Name = "Delta Divergence Buy";ddBuySubgraph.DrawStyle = DRAWSTYLE_ARROWUP;ddBuySubgraph.PrimaryColor = RGB(0, 255, 0);ddBuySubgraph.LineWidth = 2;ddSellSubgraph.Name = "Delta Divergence Sell";ddSellSubgraph.DrawStyle = DRAWSTYLE_ARROWDOWN;ddSellSubgraph.PrimaryColor = RGB(255, 0, 0);ddSellSubgraph.LineWidth = 2;ma1Subgraph.Name = "ma1";ma1Subgraph.DrawStyle = DRAWSTYLE_LINE;ma1Subgraph.PrimaryColor = RGB(0, 128, 0);ma1Subgraph.SecondaryColor = RGB(0, 0, 0);ma1Subgraph.LineWidth = 1;ma2Subgraph.Name = "ma2";ma2Subgraph.DrawStyle = DRAWSTYLE_LINE;ma2Subgraph.PrimaryColor = RGB(128, 0, 0);ma2Subgraph.SecondaryColor = RGB(0, 0, 0);ma2Subgraph.LineWidth = 1;// InputsddModeInput.Name = "Trend following mode";ddModeInput.SetYesNo(false);useCSTInput.Name = "Use Daily HH/LL (else define period)";useCSTInput.SetYesNo(false);ddPeriodInput.Name = "Lookback Period"; ddPeriodInput.SetInt(5); ddPeriodInput.SetIntLimits(0, 1000);ma1Input.Name = "Fast MA Length";ma1Input.SetInt(20);ma1Input.SetIntLimits(1, 10000);ma2Input.Name = "Slow MA Length";ma2Input.SetInt(30);ma2Input.SetIntLimits(1, 10000);maTypeInput.Name = "MA Type";maTypeInput.SetMovAvgType(MOVAVGTYPE_EXPONENTIAL);maInputDataInput.Name = "MA Input Data";maInputDataInput.SetInputDataIndex(SC_LAST);ddOffsetInput.Name = "Display Signal Offset"; ddOffsetInput.SetFloat(.001); ddOffsetInput.SetFloatLimits(.00001f, 1000);maOffsetInput.Name = "MA Zone Offset"; maOffsetInput.SetFloat(.0002); maOffsetInput.SetFloatLimits(.00001f, 1000);version.Name = "Version";version.SetInt(2);version.SetIntLimits(2,2);sc.DrawZeros = false; sc.AutoLoop = 1;sc.FreeDLL = 0;sc.GraphRegion = 0;sc.ValueFormat = 6;sc.ScaleRangeType=SCALE_SAMEASREGION;return;}int cur = sc.Index;/*======================================================================================MA========================================================================================*/sc.MovingAverage(sc.BaseDataIn[maInputDataInput.GetInputDataIndex()], ma1Subgraph, maTypeInput.GetMovAvgType() , cur, ma1Input.GetInt());sc.MovingAverage(sc.BaseDataIn[maInputDataInput.GetInputDataIndex()], ma2Subgraph, maTypeInput.GetMovAvgType() , cur, ma2Input.GetInt());/*====================================================================================Delta Divergence====================================================================================*/if(sc.GetBarHasClosedStatus() == BHCS_BAR_HAS_CLOSED) {float ddHigh;float ddLow;float Open;float Close;ddVolSubgraph[cur] = sc.BaseDataIn[SC_ASKVOL][cur] - sc.BaseDataIn[SC_BIDVOL][cur];if(useCSTInput.BooleanValue) {sc.GetOHLCForDate(sc.BaseDateTimeIn[cur], Open, ddHigh, ddLow, Close);} else {ddHigh = sc.GetHighest(sc.BaseData[SC_HIGH], ddPeriodInput.GetInt());ddLow = sc.GetLowest(sc.BaseData[SC_LOW], ddPeriodInput.GetInt());}if(ddModeInput.BooleanValue) {if((ddVolSubgraph[cur] > 0) && (sc.BaseData[SC_LOW][cur] (ma2Subgraph[cur]+maOffsetInput.GetFloat())) && (sc.BaseDataIn[SC_LOW][cur] = ddHigh) && (ma1Subgraph[cur] < (ma2Subgraph[cur]-maOffsetInput.GetFloat())) && (sc.BaseDataIn[SC_HIGH][cur] >= (ma1Subgraph[cur]-maOffsetInput.GetFloat()))) {ddSellSubgraph[cur] = sc.BaseDataIn[SC_HIGH][cur] + ddOffsetInput.GetFloat();}} else {if((ddVolSubgraph[cur] > 0) && (sc.BaseData[SC_LOW][cur] = ddHigh)) {ddSellSubgraph[cur] = sc.BaseDataIn[SC_HIGH][cur] + ddOffsetInput.GetFloat();}}}}