New Haven, CT/USA
Experience: Beginner
Platform: MT4, thinkorswim
Trading: stocks
Posts: 34 since Jul 2015
Thanks Given: 5
Thanks Received: 3
|
I want to add one dummy/future price one bar forward to the current bar. For example, if current bar with index 0 with H, L, open, last/close price, last bar with index [-1] with H, L, open, close price; then I want to create a dummy/future bar with index of 1, and assign H=L=open=last price of the current bar (index 0).
When I call stochastic indicator, I'd like the price of the dummy/future bar be used to calculate the value for the next bar based on the assumptive price of H=L=open=last price. I am not sure how to modify the existing source code, as it seems calling a systemic array of price history. Can someone help? appreciate very much!
Here is the source code for the slow stochastics.
/**********************************************************************/
SCSFExport scsf_SlowStochastic(SCStudyInterfaceRef sc)
{
SCSubgraphRef SlowK = sc.Subgraph[0];
SCSubgraphRef SlowD = sc.Subgraph[1];
SCSubgraphRef Line1 = sc.Subgraph[2];
SCSubgraphRef Line2 = sc.Subgraph[3];
SCSubgraphRef Temp4 = sc.Subgraph[4];
SCInputRef FastKLength = sc.Input[2];
SCInputRef FastDLength = sc.Input[3];
SCInputRef SlowDLength = sc.Input[4];
SCInputRef Line1Value = sc.Input[5];
SCInputRef Line2Value = sc.Input[6];
SCInputRef MovAvgType = sc.Input[7];
SCInputRef InputDataHigh = sc.Input[8];
SCInputRef InputDataLow = sc.Input[9];
SCInputRef InputDataLast = sc.Input[10];
SCInputRef UpdateFlag = sc.Input[11];
if ( sc.SetDefaults )
{
sc.GraphName = "Stochastic - Slow";
sc.ValueFormat = 2;
SlowK.Name = "Slow %K";
SlowK.DrawStyle = DRAWSTYLE_LINE;
SlowK.PrimaryColor = RGB(0,255,0);
SlowK.DrawZeros = true;
SlowD.Name = "Slow %D";
SlowD.DrawStyle = DRAWSTYLE_LINE;
SlowD.PrimaryColor = RGB(255,0,255);
SlowD.DrawZeros = true;
Line1.Name = "Line1";
Line1.DrawStyle = DRAWSTYLE_LINE;
Line1.PrimaryColor = RGB(255,255,0);
Line1.DrawZeros = true;
Line2.Name = "Line2";
Line2.DrawStyle = DRAWSTYLE_LINE;
Line2.PrimaryColor = RGB(255,127,0);
Line2.DrawZeros = true;
FastKLength.Name = "Fast %K Length";
FastKLength.SetInt(10);
FastKLength.SetIntLimits(1,MAX_STUDY_LENGTH);
FastDLength.Name = "Fast %D Length (Slow %K)";
FastDLength.SetInt(3);
FastDLength.SetIntLimits(1,MAX_STUDY_LENGTH);
SlowDLength.Name = "Slow %D Length";
SlowDLength.SetInt(3);
SlowDLength.SetIntLimits(1,MAX_STUDY_LENGTH);
Line1Value.Name = "Line1 Value";
Line1Value.SetFloat(70);
Line2Value.Name = "Line2 Value";
Line2Value.SetFloat(30);
MovAvgType.Name = "Moving Average Type";
MovAvgType.SetMovAvgType(MOVAVGTYPE_SIMPLE);
InputDataHigh.Name = "Input Data for High";
InputDataHigh.SetInputDataIndex(SC_HIGH);
InputDataLow.Name = "Input Data for Low";
InputDataLow.SetInputDataIndex(SC_LOW);
InputDataLast.Name = "Input Data for Last";
InputDataLast.SetInputDataIndex(SC_LAST);
UpdateFlag.SetInt(1); //update flag
sc.AutoLoop = true;
return;
}
sc.DataStartIndex = FastKLength.GetInt() + FastDLength.GetInt() + SlowDLength.GetInt();
sc.Stochastic(
sc.BaseData[InputDataHigh.GetInputDataIndex()],
sc.BaseData[InputDataLow.GetInputDataIndex()],
sc.BaseData[InputDataLast.GetInputDataIndex()],
Temp4, // Data member is Fast %K
FastKLength.GetInt(),
FastDLength.GetInt(),
SlowDLength.GetInt(),
MovAvgType.GetMovAvgType()
);
SlowK[sc.Index] = Temp4.Arrays[0][sc.Index];
SlowD[sc.Index] = Temp4.Arrays[1][sc.Index];
Line1[sc.Index] = Line1Value.GetFloat();
Line2[sc.Index] = Line2Value.GetFloat();
return;
}
|