I eventually want to use a rolling correlation like above. Not sure how to actually do it yet.

However I have started with some random pairs currently. I would like to optimize on minimum hurst ratio. I am curious if they way I am defining assets and looping through them, including setting the Algo is messing up the optimization...

How might I ignore the asset for the optimization, and later OptimalF parameters?

When I uncomment either optimization line I get.

Error 011: optimize invalid number/range

Code
// Strategy template ///////////////////////


#define ASSET_NUM 10
void tradeLong(string a1, string a2)
{
	print(TO_LOG,"\ntradeLong, %s-%s",a1,a2);
	asset(a1);
	enterLong();
	asset(a2);
	enterShort();
}
void tradeShort(string a1, string a2)
{
	print(TO_LOG,"\ntradeShort, %s-%s",a1,a2);
	asset(a1);
	enterShort();
	asset(a2);
	enterLong();
}
void closeTrades(string a1, string a2)
{
	string algoName = strf("%s%s",a1,a2);
	Algo = algoName;
	

	print(TO_LOG,"\nCloseTrades",a1,a2);
	asset(a1);
	for (current_trades)
	{
		print(TO_LOG,"\n%i",TradeID);
		exitTrade(ThisTrade);
	}
	
	asset(a2);
	for (current_trades)
	{
		print(TO_LOG,"\n%i",TradeID);
		exitTrade(ThisTrade);
	}
}
void tradePair(string a1, string a2)
{
	string algoName = strf("%s%s",a1,a2);
	Algo = algoName;
	
	MaxLong = MaxShort = 1;
	var thH = 50;//optimize(30,30,60,5);
	var thL = -50;
	
	int hurstPer = 50;
	var minHurst = 0.5;//optimize(0.5,0.5,0.9,0.1);
	
	asset(a1);
	vars p1 = series(priceClose());
	vars ret1 = series(diff(priceClose()));
	var h1 = Hurst(p1, hurstPer);
	//vars s1 = series(StochEhlers(p1,14,0,0)*100);
	Stoch(14,3,MAType_EMA,3,MAType_EMA);
	vars s1 = series(rSlowK);

	asset(a2);
	vars p2 = series(priceClose());
	vars ret2 = series(diff(priceClose()));
	var h2 = Hurst(p2, hurstPer);
	//vars s2 = series(StochEhlers(p2,14,0,0)*100);
	Stoch(14,3,MAType_EMA,3,MAType_EMA);
	vars s2 = series(rSlowK);
	
	vars sd = series(s1[0]-s2[0]);
	
	plot("ret1",ret1[0],NEW+BARS,BLACK);
	plot("ret2",ret2[0],NEW+BARS,BLUE);
	
	plot("s1",s1[0],NEW,BLACK);
	plot("s2",s2[0],0,BLUE);
	plot("sd",sd[0],NEW,BLACK);
	
	plot("thH",thH,LINE,RED);
	plot("thL",thL,LINE,RED);
	plot("zero",0,LINE,RED);
	
	if (crossOver(sd,0) || crossUnder(sd,0))
		closeTrades(a1,a2);
	
	
	var hurstRatio = (h1+h2)/2;
	
	if (hurstRatio > minHurst)
	{
		if (crossUnder(sd,thL))
			tradeLong(a1,a2);
		
		if (crossOver(sd,thH))
			tradeShort(a1,a2);
	}
	
	
}

function run() 
{
	set(LOGFILE);
	setf(PlotMode,PL_ALL);
	BarPeriod = 1440;
	LookBack = 100;
	StartDate = 2015;
	EndDate = 2020;
	
	set(PARAMETERS);
	//set(FACTORS);
	
	//NumWFOCycles = 3;
	
	assetList("AssetsIB_ETF");
	
	Hedge = 5;
	
	int i;
	int j;
	string a1;
	string a2;
	
	for(i = 0; i < ASSET_NUM; i++)
	{
		a1 = Assets[i];
		for(j = i+1; j < ASSET_NUM; j++)
		{
			a2 = Assets[j];			
			tradePair(a1,a2);
		}
	}
	
}

Last edited by jbhunter; 06/12/20 22:23.