I am new to coding, I have developed a momentum indicator in EasyLanguage for TradeStation (simple one really). and Now I need to translate it to C++ (SierraChart ACSIL), I'm not able to compile it, any help would be really appreciated,.
Here is my trial code:
SCDLLName("TrueMomentum_H")
SCSFExport scsf_TrueMomentum_H(SCStudyInterfaceRef sc)
{
SCSubgraphRef Subgraph_Main = sc.Subgraph[0];
SCSubgraphRef Subgraph_Signal = sc.Subgraph[1];
SCSubgraphRef Subgraph_ZeroLine = sc.Subgraph[2];
SCSubgraphRef Subgraph_UpperLine = sc.Subgraph[3];
SCSubgraphRef Subgraph_LowerLine = sc.Subgraph[4];
SCSubgraphRef Subgraph_Overbought = sc.Subgraph[5];
SCSubgraphRef Subgraph_Oversold = sc.Subgraph[6];
SCInputRef Input_Length = sc.Input[0];
SCInputRef Input_CalcLength = sc.Input[1];
SCInputRef Input_SmoothLength = sc.Input[2];
if (sc.SetDefaults)
{
sc.GraphName = "#MyTrueMomentum";
sc.GraphRegion = 0;
sc.ValueFormat = 2;
sc.AutoLoop = 1;
Subgraph_Main.Name = "Main";
Subgraph_Main.DrawStyle = DRAWSTYLE_LINE;
Subgraph_Main.PrimaryColor = RGB(0, 255, 0);
Subgraph_Main.SecondaryColor = RGB(255, 0, 0);
Subgraph_Main.SecondaryColorUsed = true;
Subgraph_Main.DrawZeros = false;
Subgraph_Signal.Name = "Signal";
Subgraph_Signal.DrawStyle = DRAWSTYLE_LINE;
Subgraph_Signal.PrimaryColor = RGB(0, 255, 0);
Subgraph_Signal.SecondaryColor = RGB(255, 0, 0);
Subgraph_Signal.SecondaryColorUsed = true;
Subgraph_Signal.DrawZeros = false;
Subgraph_ZeroLine.Name = "ZeroLine";
Subgraph_ZeroLine.DrawStyle = DRAWSTYLE_LINE;
Subgraph_ZeroLine.PrimaryColor = RGB(169, 169, 169);
Subgraph_ZeroLine.DrawZeros = true;
Subgraph_UpperLine.Name = "UpperLine";
Subgraph_UpperLine.DrawStyle = DRAWSTYLE_LINE;
Subgraph_UpperLine.PrimaryColor = RGB(255, 0, 0);
Subgraph_UpperLine.DrawZeros = false;
Subgraph_LowerLine.Name = "LowerLine";
Subgraph_LowerLine.DrawStyle = DRAWSTYLE_LINE;
Subgraph_LowerLine.PrimaryColor = RGB(0, 255, 0);
Subgraph_LowerLine.DrawZeros = false;
Subgraph_Overbought.Name = "Overbought";
Subgraph_Overbought.DrawStyle = DRAWSTYLE_LINE;
Subgraph_Overbought.PrimaryColor = RGB(255, 0, 0);
Subgraph_Overbought.DrawZeros = false;
Subgraph_Oversold.Name = "Oversold";
Subgraph_Oversold.DrawStyle = DRAWSTYLE_LINE;
Subgraph_Oversold.PrimaryColor = RGB(0, 255, 0);
Subgraph_Oversold.DrawZeros = false;
Input_Length.Name = "Length";
Input_Length.SetInt(14);
Input_Length.SetIntLimits(1, MAX_STUDY_LENGTH);
Input_CalcLength.Name = "Calculation Length";
Input_CalcLength.SetInt(5);
Input_CalcLength.SetIntLimits(1, MAX_STUDY_LENGTH);
Input_SmoothLength.Name = "Smooth Length";
Input_SmoothLength.SetInt(3);
Input_SmoothLength.SetIntLimits(1, MAX_STUDY_LENGTH);
return;
}
int len = Input_Length.GetInt();
SCFloatArrayRef s = sc.Subgraph[7]; // Create an array to store 's' values
SCFloatArrayRef MA = sc.Subgraph[8]; // Create an array to store 'MA' values
SCFloatArrayRef Main = sc.Subgraph[9]; // Create an array to store 'Main' values
SCFloatArrayRef Signal = sc.Subgraph[10]; // Create an array to store 'Signal' values
s[sc.Index] = 0;
for (int ss = 0; ss < len; ss++)
{
if (sc.Close[sc.Index] > sc.Open[sc.Index - ss])
s[sc.Index] = s[sc.Index] + 1;
else if (sc.Close[sc.Index] < sc.Open[sc.Index - ss])
s[sc.Index] = s[sc.Index] - 1;
//else
// s[sc.Index] = 0;
}
MA[sc.Index] = sc.SimpleMovAvg(s, Input_CalcLength.GetInt());
Main[sc.Index] = sc.SimpleMovAvg(MA, Input_SmoothLength.GetInt());
Signal[sc.Index] = sc.SimpleMovAvg(Main, Input_SmoothLength.GetInt());
Subgraph_Main[sc.Index] = Main[sc.Index];
Subgraph_Signal[sc.Index] = Signal[sc.Index];
Subgraph_ZeroLine[sc.Index] = 0;
Subgraph_UpperLine[sc.Index] = len;
Subgraph_LowerLine[sc.Index] = -len;
Subgraph_Overbought[sc.Index] = len * 0.8;
Subgraph_Oversold[sc.Index] = -len * 0.8;
}
Here is the error list I am facing when compiling:
-- Starting remote build of Custom Studies Source files: TrueMomentum_H.cpp. 64-bit -- 14:17:12
Allow time for the server to compile the files and build the DLL.
The remote build did not succeed. Result:
TrueMomentum_H.cpp: In function 'void scsf_TrueMomentum_H(SCStudyInterfaceRef)':
TrueMomentum_H.cpp:105:61: error: no matching function for call to 's_sc::SimpleMovAvg(c_ArrayWrapper<float>&, int)'
105 | MA[sc.Index] = sc.SimpleMovAvg(s, Input_CalcLength.GetInt());
| ^
In file included from TrueMomentum_H.cpp:2:
sierrachart.h:1253:18: note: candidate: 'c_ArrayWrapper<float>& s_sc::SimpleMovAvg(SCFloatArrayRef, SCFloatArrayRef, int, int)'
1253 | SCFloatArrayRef SimpleMovAvg(SCFloatArrayRef In, SCFloatArrayRef Out, int Index, int Length)
| ^~~~~~~~~~~~
sierrachart.h:1253:18: note: candidate expects 4 arguments, 2 provided
sierrachart.h:1257:18: note: candidate: 'c_ArrayWrapper<float>& s_sc::SimpleMovAvg(SCFloatArrayRef, SCFloatArrayRef, int)'
1257 | SCFloatArrayRef SimpleMovAvg(SCFloatArrayRef In, SCFloatArrayRef Out, int Length)
| ^~~~~~~~~~~~
sierrachart.h:1257:18: note: candidate expects 3 arguments, 2 provided
TrueMomentum_H.cpp:106:66: error: no matching function for call to 's_sc::SimpleMovAvg(c_ArrayWrapper<float>&, int)'
106 | Main[sc.Index] = sc.SimpleMovAvg(MA, Input_SmoothLength.GetInt());
| ^
In file included from TrueMomentum_H.cpp:2:
sierrachart.h:1253:18: note: candidate: 'c_ArrayWrapper<float>& s_sc::SimpleMovAvg(SCFloatArrayRef, SCFloatArrayRef, int, int)'
1253 | SCFloatArrayRef SimpleMovAvg(SCFloatArrayRef In, SCFloatArrayRef Out, int Index, int Length)
| ^~~~~~~~~~~~
sierrachart.h:1253:18: note: candidate expects 4 arguments, 2 provided
sierrachart.h:1257:18: note: candidate: 'c_ArrayWrapper<float>& s_sc::SimpleMovAvg(SCFloatArrayRef, SCFloatArrayRef, int)'
1257 | SCFloatArrayRef SimpleMovAvg(SCFloatArrayRef In, SCFloatArrayRef Out, int Length)
| ^~~~~~~~~~~~
sierrachart.h:1257:18: note: candidate expects 3 arguments, 2 provided
TrueMomentum_H.cpp:107:70: error: no matching function for call to 's_sc::SimpleMovAvg(c_ArrayWrapper<float>&, int)'
107 | Signal[sc.Index] = sc.SimpleMovAvg(Main, Input_SmoothLength.GetInt());
| ^
In file included from TrueMomentum_H.cpp:2:
sierrachart.h:1253:18: note: candidate: 'c_ArrayWrapper<float>& s_sc::SimpleMovAvg(SCFloatArrayRef, SCFloatArrayRef, int, int)'
1253 | SCFloatArrayRef SimpleMovAvg(SCFloatArrayRef In, SCFloatArrayRef Out, int Index, int Length)
| ^~~~~~~~~~~~
sierrachart.h:1253:18: note: candidate expects 4 arguments, 2 provided
sierrachart.h:1257:18: note: candidate: 'c_ArrayWrapper<float>& s_sc::SimpleMovAvg(SCFloatArrayRef, SCFloatArrayRef, int)'
1257 | SCFloatArrayRef SimpleMovAvg(SCFloatArrayRef In, SCFloatArrayRef Out, int Length)
| ^~~~~~~~~~~~
sierrachart.h:1257:18: note: candidate expects 3 arguments, 2 provided
-- End of Build -- 14:17:17