Posted By: Diabolus
Assets in Loops are impacted - 02/17/21 05:02
Hey folks,
It seems I'm coming across an unexpected behaviour.
So I'm definitely missing something. I'd appreciate if you could point me to the issue.
When I run the same algo in an asset loop, it seems one position is interfering with another. Which I believe can be one of the two:
the use of the "TradeIs*" variables, but I'm unclear how to achieve this "only enter if there is no position open for that asset" condition
or
Capital/Margin is impacting the entry of another asset
Take this code as example (simple code just to show the behaviour) :
If you run this code, you'd get the following result:
Portfolio analysis OptF ProF Win/Loss Wgt%
DIA avg .999 2.20 1/3 9.2
GLD avg .999 21.76 2/2 17.0
IWM avg .999 22.66 1/1 17.0
QQQ avg .1000 ++++ 2/0 28.8
SPY avg .999 113.26 2/1 28.0
DIA:L .999 2.20 1/3 9.2
GLD:L .999 21.76 2/2 17.0
IWM:L .999 22.66 1/1 17.0
QQQ:L .1000 ++++ 2/0 28.8
With the following individual equity plotting (equity plot from different assets):
[img]https://ibb.co/VBFMmgP[/img]
However, if I comment the asset loop line, and uncomment the "asset('DIA')" line, without changing anything else, I get the following result:
Portfolio analysis OptF ProF Win/Loss Wgt%
DIA:L .999 2.12 4/9 100.0
with the following equity line:
[img]https://ibb.co/prRNKnw[/img]
It seems that when running the backtest on the asset loop, it considers the whole basket as a portfolio, which one asset prevents the other from entering a position. Is this the expected behaviour ? Is there anything that I am missing so I can run each asset test (or even algo) completely independently from the other ?
It seems I'm coming across an unexpected behaviour.
So I'm definitely missing something. I'd appreciate if you could point me to the issue.
When I run the same algo in an asset loop, it seems one position is interfering with another. Which I believe can be one of the two:
the use of the "TradeIs*" variables, but I'm unclear how to achieve this "only enter if there is no position open for that asset" condition
or
Capital/Margin is impacting the entry of another asset
Take this code as example (simple code just to show the behaviour) :
Code
function run() { set(LOGFILE|PLOTNOW); setf(PlotMode,PL_ALL); StartDate = 20161225; BarPeriod = 1440; while(asset(loop("DIA", "GLD", "IWM", "QQQ", "SPY"))) //asset("DIA") { if(is(INITRUN)) { assetHistory(Asset, FROM_AV); } LookBack = 201; vars Close = series(priceClose()); vars MA1 = series(SMA(Close,200)); Lots = 100; if (Close[0] > MA1[0] && !TradeIsOpen){ enterLong(); } if (TradeIsOpen && TradeIsLong && Close[0] < MA1[0]){ exitLong(); } //plots individual charts of equity for each asset char name[40]; // string of maximal 39 characters strcpy(name,Asset); var equity = EquityShort+EquityLong; if(equity != 0) plot(name,equity,NEW|AVG,BLUE); } }
If you run this code, you'd get the following result:
Portfolio analysis OptF ProF Win/Loss Wgt%
DIA avg .999 2.20 1/3 9.2
GLD avg .999 21.76 2/2 17.0
IWM avg .999 22.66 1/1 17.0
QQQ avg .1000 ++++ 2/0 28.8
SPY avg .999 113.26 2/1 28.0
DIA:L .999 2.20 1/3 9.2
GLD:L .999 21.76 2/2 17.0
IWM:L .999 22.66 1/1 17.0
QQQ:L .1000 ++++ 2/0 28.8
With the following individual equity plotting (equity plot from different assets):
[img]https://ibb.co/VBFMmgP[/img]
However, if I comment the asset loop line, and uncomment the "asset('DIA')" line, without changing anything else, I get the following result:
Portfolio analysis OptF ProF Win/Loss Wgt%
DIA:L .999 2.12 4/9 100.0
with the following equity line:
[img]https://ibb.co/prRNKnw[/img]
It seems that when running the backtest on the asset loop, it considers the whole basket as a portfolio, which one asset prevents the other from entering a position. Is this the expected behaviour ? Is there anything that I am missing so I can run each asset test (or even algo) completely independently from the other ?