// 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);
}
}
}