Sierra Chart Delta Divergence

download Sierra Chart Delta Divergence

If you can't read please download the document

description

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

Transcript of Sierra Chart Delta Divergence

/*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();}}}}