Login Page - Create Account

Support Board


Date/Time: Thu, 06 Mar 2025 17:27:14 +0000



Post From: WaveTrend ACSIL source code

[2022-02-03 18:16:14]
User551752 - Posts: 25
// WaveTrend ACSIL source code



#include "sierrachart.h"

SCDLLName("WaveTrend")

/*==========================================================================*/
SCSFExport scsf_MovingAverageExponential(SCStudyInterfaceRef sc)
{
SCSubgraphRef Subgraph_EMA = sc.Subgraph[0];
SCSubgraphRef Subgraph_EMA2 = sc.Subgraph[1];
SCSubgraphRef Subgraph_HLC = sc.Subgraph[2];
SCSubgraphRef Subgraph_Abs = sc.Subgraph[3];
SCSubgraphRef Subgraph_CCI = sc.Subgraph[4];
SCSubgraphRef Subgraph_EMA3 = sc.Subgraph[5];
SCSubgraphRef Subgraph_SMA = sc.Subgraph[6];
SCSubgraphRef Subgraph_CenterLine = sc.Subgraph[7];
SCSubgraphRef Subgraph_TopLine = sc.Subgraph[8];
SCSubgraphRef Subgraph_TopLine2 = sc.Subgraph[9];
SCSubgraphRef Subgraph_BottomLine = sc.Subgraph[10];
SCSubgraphRef Subgraph_BottomLine2 = sc.Subgraph[11];

SCSubgraphRef Subgraph_Buy = sc.Subgraph[12];
SCSubgraphRef Subgraph_Sell = sc.Subgraph[13];

SCInputRef Input_Data = sc.Input[0];
SCInputRef Input_Length = sc.Input[1];
SCInputRef Input_Length2 = sc.Input[2];
SCInputRef Input_Length3 = sc.Input[3];

SCInputRef Input_CenterLineValue = sc.Input[4];

SCInputRef Input_TopLineValue = sc.Input[6];
SCInputRef Input_TopLine2Value = sc.Input[7];
SCInputRef Input_BottomLineValue = sc.Input[8];
SCInputRef Input_BottomLine2Value = sc.Input[9];


if (sc.SetDefaults)
{

sc.GraphName = "WaveTrend";

sc.GraphRegion = 1;
sc.ValueFormat = 3;
sc.AutoLoop = 1;

Subgraph_CenterLine.Name = "Center Line";
Subgraph_CenterLine.DrawStyle = DRAWSTYLE_LINE;
Subgraph_CenterLine.PrimaryColor = RGB(128, 128, 128);
Subgraph_CenterLine.LineWidth = 1;
Subgraph_CenterLine.DrawZeros = true;

Subgraph_TopLine.Name = "Top Line";
Subgraph_TopLine.DrawStyle = DRAWSTYLE_LINE;
Subgraph_TopLine.PrimaryColor = RGB(255, 0, 0);
Subgraph_TopLine.LineWidth = 1;
Subgraph_TopLine.DrawZeros = true;


Subgraph_TopLine2.Name = "Top Line 2";
Subgraph_TopLine2.DrawStyle = DRAWSTYLE_LINE;
Subgraph_TopLine2.PrimaryColor = RGB(255, 127, 0);
Subgraph_TopLine2.LineWidth = 1;
Subgraph_TopLine2.DrawZeros = true;

Subgraph_BottomLine.Name = "Bottom Line";
Subgraph_BottomLine.DrawStyle = DRAWSTYLE_LINE;
Subgraph_BottomLine.PrimaryColor = RGB(0, 255, 0);
Subgraph_BottomLine.LineWidth = 1;
Subgraph_BottomLine.DrawZeros = true;

Subgraph_BottomLine2.Name = "Bottom Line 2";
Subgraph_BottomLine2.DrawStyle = DRAWSTYLE_LINE;
Subgraph_BottomLine2.PrimaryColor = RGB(255, 127, 0);
Subgraph_BottomLine2.LineWidth = 1;
Subgraph_BottomLine2.DrawZeros = true;

Input_CenterLineValue.Name = "Center Line 1 Value";
Input_CenterLineValue.SetFloat(0);

Input_TopLineValue.Name = "Top Line 1 Value";
Input_TopLineValue.SetFloat(60);

Input_TopLine2Value.Name = "Top Line 2 Value";
Input_TopLine2Value.SetFloat(53);

Input_BottomLineValue.Name = "Top Line 1 Value";
Input_BottomLineValue.SetFloat(-60);

Input_BottomLine2Value.Name = "Top Line 2 Value";
Input_BottomLine2Value.SetFloat(-53);

Subgraph_EMA3.Name = "EMA3";
Subgraph_EMA3.DrawStyle = DRAWSTYLE_LINE;
Subgraph_EMA3.PrimaryColor = RGB(0,255,0);
Subgraph_EMA3.DrawZeros = true;

Subgraph_SMA.Name = "SMA";
Subgraph_SMA.DrawStyle = DRAWSTYLE_LINE;
Subgraph_SMA.PrimaryColor = RGB(0,0,255);
Subgraph_SMA.DrawZeros = true;

Input_Data.Name = "Input Data";
Input_Data.SetInputDataIndex(SC_HLC);

Input_Length.Name = "Channel Length";
Input_Length.SetInt(9);
Input_Length.SetIntLimits(1, MAX_STUDY_LENGTH);

Input_Length2.Name = "Average Length";
Input_Length2.SetInt(15);
Input_Length2.SetIntLimits(1, MAX_STUDY_LENGTH);

Input_Length3.Name = "SMA Smooth Length";
Input_Length3.SetInt(3);
Input_Length3.SetIntLimits(1, MAX_STUDY_LENGTH);


Subgraph_Buy.Name = "Buy";
Subgraph_Buy.PrimaryColor = RGB(255, 127, 0);
Subgraph_Buy.DrawStyle = DRAWSTYLE_ARROW_UP;
Subgraph_Buy.LineWidth = 2; //Width Of Arrow

Subgraph_Sell.Name = "Sell";
Subgraph_Sell.DrawStyle = DRAWSTYLE_ARROW_DOWN;
Subgraph_Sell.PrimaryColor = RGB(255, 0, 0);
Subgraph_Sell.LineWidth = 2; //Width Of Arrow

return;
}

Subgraph_CenterLine[sc.Index] = Input_CenterLineValue.GetFloat();

Subgraph_TopLine[sc.Index] = Input_TopLineValue.GetFloat();
Subgraph_TopLine2[sc.Index] = Input_TopLine2Value.GetFloat();

Subgraph_BottomLine[sc.Index] = Input_BottomLineValue.GetFloat();
Subgraph_BottomLine2[sc.Index] = Input_BottomLine2Value.GetFloat();

Subgraph_HLC[sc.Index] = (sc.High[sc.Index] + sc.Low[sc.Index] + sc.Close[sc.Index])/3;
sc.DataStartIndex = Input_Length.GetInt() - 1;
sc.ExponentialMovAvg(sc.BaseDataIn[Input_Data.GetInputDataIndex()], Subgraph_EMA, Input_Length.GetInt());

Subgraph_Abs[sc.Index] = fabs(Subgraph_HLC[sc.Index] - Subgraph_EMA[sc.Index]);
sc.ExponentialMovAvg(Subgraph_Abs, Subgraph_EMA2, Input_Length.GetInt());
Subgraph_CCI[sc.Index] = (Subgraph_HLC[sc.Index] - Subgraph_EMA[sc.Index]) / (Subgraph_EMA2[sc.Index] * 0.015);
sc.ExponentialMovAvg(Subgraph_CCI, Subgraph_EMA3, Input_Length2.GetInt());
sc.SimpleMovAvg(Subgraph_EMA3, Subgraph_SMA , Input_Length3.GetInt());


if (sc.CrossOver( Subgraph_EMA3, Subgraph_SMA, sc.Index) == CROSS_FROM_BOTTOM && Subgraph_EMA3[sc.Index] < 0)

{
Subgraph_Buy[sc.Index] = Subgraph_SMA[sc.Index];
Subgraph_Sell[sc.Index] = 0;
}

else if (sc.CrossOver(Subgraph_EMA3, Subgraph_SMA, sc.Index) == CROSS_FROM_TOP && Subgraph_EMA3[sc.Index] > 0)

{
Subgraph_Sell[sc.Index] = Subgraph_SMA[sc.Index];
Subgraph_Buy[sc.Index] = 0;
}
else
{
Subgraph_Buy[sc.Index] = 0;
Subgraph_Sell[sc.Index] = 0;
}

}