NexusFi: Find Your Edge


Home Menu

 





SierraChart coding help (error compiling)


Discussion in Sierra Chart

Updated
    1. trending_up 477 views
    2. thumb_up 2 thanks given
    3. group 3 followers
    1. forum 3 posts
    2. attach_file 0 attachments




 
Search this Thread

SierraChart coding help (error compiling)

  #1 (permalink)
hhomsi8
Stockholm, Sweden
 
Posts: 10 since Feb 2023
Thanks Given: 7
Thanks Received: 0

Hi, I am new to coding, I have developed a momentum indicator in EasyLanguage for TradeStation (simple one really). and Now that I want to move to SierraChart, I faced problem trying to replicate the code for ACSIL

Here is my EasyLanguage code:

HTML Code:
inputs: 
double length(14), 
double calcLength(5), 
double smoothLength(3);

vars: 
double s(0), 
double MA(0), 
double Main(0), 
double Signal(0), 
double ss(0),
double len(0);

len = length;

s = 0;
for ss = 0 to (len - 1) begin
	if close > open[ss] then s = s + 1;
	if close < open[ss] then s = s - 1;
	//else s = 0;
	 

end;

MA = XAverage(s, calcLength);
Main = XAverage(MA, smoothLength);
Signal = XAverage(Main, smoothLength);

plot1(Main, "Main", iff(Main > Signal, green, red));
plot2(Signal, "Signal", iff(Main > Signal, green, red));
plot3(0, "ZeroLine", Darkgray);

plot4(length, "UpperLine", red);
plot5(-length, "LowerLine", green);

plot6(length * 0.8, "Overbought", red);
plot7(-length * 0.8, "Oversold", green);


And Here is my endless trial of replicating it to SierraChart ACSIL, I really appreciate any help cause I am going nuts with this thingy

HTML 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;
}

Reply With Quote

Can you help answer these questions
from other members on NexusFi?
use extra computer for optimisation
NinjaTrader
What broker to use for trading palladium futures
Commodities
Cheap historycal L1 data for stocks
Stocks and ETFs
Quantum physics & Trading dynamics
The Elite Circle
MC PL editor upgrade
MultiCharts
 
  #2 (permalink)
 Trembling Hand 
Melbourne, Land of Oz
 
Experience: Advanced
Platform: Sierra Chart, CQG
Broker: CQG
Trading: HSI
Posts: 246 since Jun 2011
Thanks Given: 28
Thanks Received: 360

What does the error say?

Follow me on Twitter Reply With Quote
Thanked by:
  #3 (permalink)
hhomsi8
Stockholm, Sweden
 
Posts: 10 since Feb 2023
Thanks Given: 7
Thanks Received: 0


I am getting this error lists:

HTML Code:
-- 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

Reply With Quote
  #4 (permalink)
 Trembling Hand 
Melbourne, Land of Oz
 
Experience: Advanced
Platform: Sierra Chart, CQG
Broker: CQG
Trading: HSI
Posts: 246 since Jun 2011
Thanks Given: 28
Thanks Received: 360


hhomsi8 View Post
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


Its telling you what is wrong with your code and what line. "note: candidate expects 3 arguments, 2 provided"

You are not providing all required parameters for each function that is throwing an error. See the specs for the Simple Moving Average here

https://www.sierrachart.com/index.php?page=doc/ACSIL_Members_Functions.html

Follow me on Twitter Reply With Quote
Thanked by:




Last Updated on August 9, 2023


© 2024 NexusFi™, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Privacy Policy - Downloads - Top
no new posts