I have this code:
function CalculateWeightedReturn(sym)
{
WeightedReturn = Null;
Data = Null;
TimeFrameSet(inMonthly);
Data = Foreign(sym,"C");
WeightedReturn = 100 * ((1 * Nz(Data / Ref(Data, -1) - 1) +
1 * Nz(Data / Ref(Data, -3) - 1) +
2 * Nz(Data / Ref(Data, -6) - 1) +
0 * Nz(Data / Ref(Data, -12) - 1)) / 4)
;
TimeFrameRestore();
WeightedReturn = TimeFrameExpand(WeightedReturn, inMonthly, expandLast);
return WeightedReturn;
}
Symbols="IWM,IWP,IWS";
if (Status("stocknum") == 0)
{
StaticVarRemove("sv*");
// Calculate the Weighted Return values
for (i=0; (sym = StrExtract(Symbols,i)) != ""; i++) {
C0 = Foreign(sym,"C"); // for debugging
WeightedReturn = CalculateWeightedReturn(sym); // pass in the symbol, do NOT pass in Close due to the timeframe switch
// Store Local variable
VarSet("WeightedReturn"+sym,WeightedReturn);
// Store Static Variable
StaticVarSet("svWeightedReturn"+sym,WeightedReturn);
printf("sym=%s\tWeightedReturn=%f\n",sym,WeightedReturn[BarCount-1]);
}
}
Walking this through the debugger, if my active chart is monthly periodicity I get the correct results. When I switch to daily periodicity the results are incorrect.
Here is a screenshot from the debugger:
The problem is on the line Data = Foreign(sym,"C") in the function.
I've read the doc on the TimeFrame* functions as well as the tutorial but can't see what I'm doing wrong.