/***********************************************************************/
void __declspec(dllexport) BWMA(struct s_sg &sg)
{
sg.GraphName="BWMA";
sg.SubgraphName[0]="MA";
sg.InputNames[2]="3 MA Length";
sg.FreeDLL=1;
if(sg.ArraySize<100) return;
// if(sg.DateIn[sg.ArraySize-1]>38350) return;
int i,j,c,start, pos,term=30,Bars;
float k;
if(sg.Inputs[2]==0) sg.Inputs[2]=34;
double sum1=0;
double avg1=0;
sg.DataStartIndex=50;
for (pos=50; pos < sg.ArraySize; pos++)
{
sum1 = sum1 + sg.BaseDataIn[3][pos];
if(pos>=50+sg.Inputs[2]) {sum1 = sum1 - avg1;};
avg1 = sum1 / sg.Inputs[2];
sg.SubGraphDataOut[0][pos] = avg1;
}
};
/***********************************************************************/
void __declspec(dllexport) AC(struct s_sg &sg)
{
sg.GraphName="AC";
sg.SubgraphName[0]="Up";
sg.SubgraphName[1]="Dn";
sg.SubgraphName[2]="Flat";
sg.InputNames[2]="3 Long MA Length";
sg.InputNames[3]="4 Short MA Length";
sg.InputNames[4]="5 Signal MA Length";
sg.InputNames[5]="6 BWSmoothed (0), Exponential (1) or Simple (2) Moving Averages";
sg.FreeDLL=1;
if(sg.ArraySize<100) return;
// if(sg.DateIn[sg.ArraySize-1]>38350) return;
int i,j,c,start, pos,term=30,Bars;
float k;
if(sg.Inputs[2]==0) sg.Inputs[2]=34;
if(sg.Inputs[3]==0) sg.Inputs[3]=5;
if(sg.Inputs[4]==0) sg.Inputs[4]=5;
double sum1=0; double sum2=0; double sum3=0; double sum4=0;
double avg1=0; double avg2=0; double avg3=0; double avg4=0;
double cfactor1=2/(sg.Inputs[2]+1); double cinvfactor1=1-cfactor1;
double cfactor2=2/(sg.Inputs[3]+1); double cinvfactor2=1-cfactor2;
double cfactor4=2/(sg.Inputs[4]+1); double cinvfactor4=1-cfactor4;
sg.DataStartIndex=50;
for (pos=50; pos < sg.ArraySize; pos++)
{
if(sg.Inputs[5]==0)
{
sum1 = sum1 + sg.BaseDataIn[3][pos];
if(pos>=50+sg.Inputs[2]) {sum1 = sum1 - avg1;};
avg1 = sum1 / sg.Inputs[2];
sum2 = sum2 + sg.BaseDataIn[3][pos];
if(pos>=50+sg.Inputs[3]) {sum2 = sum2 - avg2;};
avg2 = sum2 / sg.Inputs[3];
avg3 = avg2 - avg1;
sg.SubGraphDataOut[5][pos] = avg3;
sum4 = sum4 + avg3;
avg4 = sum4 / sg.Inputs[4];
j=pos-sg.Inputs[4]+1;
if(pos>50+sg.Inputs[4]-2) {sum4 = sum4 - sg.SubGraphDataOut[5][j];};
} else if(sg.Inputs[5]==1)
{
avg1 = avg1*cinvfactor1+sg.BaseDataIn[3][pos]*cfactor1;
avg2 = avg2*cinvfactor2+sg.BaseDataIn[3][pos]*cfactor2;
avg3 = avg2 - avg1;
sg.SubGraphDataOut[5][pos] = avg3;
avg4 = avg4*cinvfactor4+avg3*cfactor4;
} else
{
sum1 = sum1 + sg.BaseDataIn[3][pos];
avg1 = sum1 / sg.Inputs[2];
j=pos-sg.Inputs[2]+1;
if(pos>50+sg.Inputs[2]-2) {sum1 = sum1 - sg.BaseDataIn[3][j];};
sum2 = sum2 + sg.BaseDataIn[3][pos];
avg2 = sum2 / sg.Inputs[3];
j=pos-sg.Inputs[3]+1;
if(pos>50+sg.Inputs[3]-2) {sum2 = sum2 - sg.BaseDataIn[3][j];};
avg3 = avg2 - avg1;
sg.SubGraphDataOut[5][pos] = avg3;
sum4 = sum4 + avg3;
avg4 = sum4 / sg.Inputs[4];
j=pos-sg.Inputs[4]+1;
if(pos>50+sg.Inputs[4]-2) {sum4 = sum4 - sg.SubGraphDataOut[5][j];};
}
sg.SubGraphDataOut[4][pos] = avg3-avg4;
if(sg.SubGraphDataOut[4][pos]>sg.SubGraphDataOut[4][pos-1])
{sg.SubGraphDataOut[0][pos] = sg.SubGraphDataOut[4][pos]; sg.SubGraphDataOut[1][pos] = 0; sg.SubGraphDataOut[2][pos] = 0;} else
if(sg.SubGraphDataOut[4][pos]<sg.SubGraphDataOut[4][pos-1])
{sg.SubGraphDataOut[0][pos] = 0; sg.SubGraphDataOut[1][pos] = sg.SubGraphDataOut[4][pos]; sg.SubGraphDataOut[2][pos] = 0;} else
{sg.SubGraphDataOut[0][pos] = 0; sg.SubGraphDataOut[1][pos] = 0; sg.SubGraphDataOut[2][pos] = sg.SubGraphDataOut[4][pos];};;
}
};
/***********************************************************************/
void __declspec(dllexport) AO(struct s_sg &sg)
{
sg.GraphName="AO";
sg.SubgraphName[0]="Up";
sg.SubgraphName[1]="Dn";
sg.SubgraphName[2]="Flat";
sg.SubgraphName[3]="All";
sg.InputNames[2]="3 Long MA Length";
sg.InputNames[3]="4 Short MA Length";
sg.InputNames[4]="5 Signal MA Length";
sg.InputNames[5]="6 BWSmoothed (0), Exponential (1) or Simple (2) Moving Averages";
sg.FreeDLL=1;
if(sg.ArraySize<100) return;
// if(sg.DateIn[sg.ArraySize-1]>38350) return;
int i,j,c,start, pos,term=30,Bars;
float k;
if(sg.Inputs[2]==0) sg.Inputs[2]=34;
if(sg.Inputs[3]==0) sg.Inputs[3]=5;
if(sg.Inputs[4]==0) sg.Inputs[4]=5;
double sum1=0; double sum2=0; double sum3=0; double sum4=0;
double avg1=0; double avg2=0; double avg3=0; double avg4=0;
double cfactor1=2/(sg.Inputs[2]+1); double cinvfactor1=1-cfactor1;
double cfactor2=2/(sg.Inputs[3]+1); double cinvfactor2=1-cfactor2;
double cfactor4=2/(sg.Inputs[4]+1); double cinvfactor4=1-cfactor4;
sg.DataStartIndex=50;
for (pos=50; pos < sg.ArraySize; pos++)
{
if(sg.Inputs[5]==0)
{
sum1 = sum1 + sg.BaseDataIn[3][pos];
if(pos>=50+sg.Inputs[2]) {sum1 = sum1 - avg1;};
avg1 = sum1 / sg.Inputs[2];
sum2 = sum2 + sg.BaseDataIn[3][pos];
if(pos>=50+sg.Inputs[3]) {sum2 = sum2 - avg2;};
avg2 = sum2 / sg.Inputs[3];
avg3 = avg2 - avg1;
sg.SubGraphDataOut[5][pos] = avg3;
sum4 = sum4 + avg3;
avg4 = sum4 / sg.Inputs[4];
j=pos-sg.Inputs[4]+1;
if(pos>50+sg.Inputs[4]-2) {sum4 = sum4 - sg.SubGraphDataOut[5][j];};
} else if(sg.Inputs[5]==1)
{
avg1 = avg1*cinvfactor1+sg.BaseDataIn[3][pos]*cfactor1;
avg2 = avg2*cinvfactor2+sg.BaseDataIn[3][pos]*cfactor2;
avg3 = avg2 - avg1;
sg.SubGraphDataOut[5][pos] = avg3;
avg4 = avg4*cinvfactor4+avg3*cfactor4;
} else
{
sum1 = sum1 + sg.BaseDataIn[3][pos];
avg1 = sum1 / sg.Inputs[2];
j=pos-sg.Inputs[2]+1;
if(pos>50+sg.Inputs[2]-2) {sum1 = sum1 - sg.BaseDataIn[3][j];};
sum2 = sum2 + sg.BaseDataIn[3][pos];
avg2 = sum2 / sg.Inputs[3];
j=pos-sg.Inputs[3]+1;
if(pos>50+sg.Inputs[3]-2) {sum2 = sum2 - sg.BaseDataIn[3][j];};
avg3 = avg2 - avg1;
sg.SubGraphDataOut[5][pos] = avg3;
sum4 = sum4 + avg3;
avg4 = sum4 / sg.Inputs[4];
j=pos-sg.Inputs[4]+1;
if(pos>50+sg.Inputs[4]-2) {sum4 = sum4 - sg.SubGraphDataOut[5][j];};
}
sg.SubGraphDataOut[4][pos] = avg3-avg4;
sg.SubGraphDataOut[3][pos] = sg.SubGraphDataOut[5][pos];
if(sg.SubGraphDataOut[5][pos]>sg.SubGraphDataOut[5][pos-1])
{sg.SubGraphDataOut[0][pos] = sg.SubGraphDataOut[5][pos]; sg.SubGraphDataOut[1][pos] = 0; sg.SubGraphDataOut[2][pos] = 0;} else
if(sg.SubGraphDataOut[5][pos]<sg.SubGraphDataOut[5][pos-1])
{sg.SubGraphDataOut[0][pos] = 0; sg.SubGraphDataOut[1][pos] = sg.SubGraphDataOut[5][pos]; sg.SubGraphDataOut[2][pos] = 0;} else
{sg.SubGraphDataOut[0][pos] = 0; sg.SubGraphDataOut[1][pos] = 0; sg.SubGraphDataOut[2][pos] = sg.SubGraphDataOut[5][pos];};;
}
};