Is there any way to access the "Wealth-Lab Score" presented in the Performance Visualizer from a Strategy? What I would like to do is run a strategy over a set of symbols and record the Wealth-Lab Score for each individual symbol off to a file somewhere and rank symbols by their Wealth-Lab Score. Any input as to approach appreciated...
Size:
Color:
Have you seen Tools > Strategy Ranking?
Size:
Color:
OK, I had a look at Strategy Ranking and it looks to be great at judging a set of strategies over a fixed set of symbols. What I would like to be able to do is judge a set of symbols over a fixed strategy. E.G. For my strategy, which symbols currently show the highest Wealth-Lab score for the given data range. Do you see the difference? Thanks!
Size:
Color:
Yes, now I see.
For simplicity sake, it's not possible to access a performance metric from a Strategy. Visualizers do their job after a Strategy has already finished processing. There are
solutions but you'd have to code the Wealth-Lab Score from scratch for the concept to work anyway.
Ideally, if the By Symbol visualizer could be expanded to show the Wealth-Lab Score or other metrics, would that do the trick?
Size:
Color:
It could be interesting if you think in a future to have an extension with all performance metrics available in Wealth-Lab (Visualizer, scorescard...) that we can request value on fly in a script (Possizer, strategy...).
Size:
Color:
It's not possible. See above.
Size:
Color:
The WelathLab score is available in the performance engine of either
using Community.Components;
or
using WealthLab.Visualizers.MS123; I forget which w/o outgoing back to the source code (you'll likely need both anyway
So if you are able to work with the solution Eugene pointed out, you could loop through symbols, spit the data out to a .csv file and screen from there.
It's not an automated strategy. It's a semi automated "human in the loop" solution but it works
CODE:
Please log in to see this code.
then pe.WLScore is available.
Size:
Color:
Good point Steve. No need to code the WL Score from scratch.
Size:
Color:
One more question... Can we find in the Performance engine object all performance metrics or only a selection of them ?
Size:
Color:
If you program all performance metrics, you'll find everything there. :)
Of course only a selection that I coded.
Size:
Color:
Thank you Eugene and sedelstein for the pointers. I have been resisting setting up Visual Studio for WL. Looks like this is my reason. I will have a look through the materials and post back my findings and any code I end up "improving". Cheers.
Size:
Color:
OK - Had some time to code this up. It would appear that Utility.runDonor() is not properly filling out all its attributes? When run over the Dow 30 it reports the correct number of trades and the correct BuyAndHold net profit, but reports zero as the value of the strategy net profit, long net profit, and short net profit. Any input welcome.
Here is the code I wrote this afternoon....
CODE:
Please log in to see this code.
Here is the debug console.
QUOTE:
AA; NumTrades=6; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-127072.8
AA = 0
AXP; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=81009.25
AXP = 0
BA; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=4012.47000000004
BA = 0
BAC; NumTrades=5; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-85937.54
BAC = 0
CAT; NumTrades=4; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-19173.96
CAT = 0
CSCO; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=72884.7
CSCO = 0
CVX; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-3627.39000000001
CVX = 0
DD; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-14131
DD = 0
DIS; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=6370.91000000003
DIS = 0
GE; NumTrades=4; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-9734.34
GE = 0
HD; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=102473.21
HD = 0
HPQ; NumTrades=5; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-123122.4
HPQ = 0
IBM; NumTrades=4; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=80763.98
IBM = 0
INTC; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=126639.9
INTC = 0
JNJ; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=32571.32
JNJ = 0
JPM; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-906.080000000004
JPM = 0
KFT; NumTrades=1; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=59787
KFT = 0
KO; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=30296.98
KO = 0
MCD; NumTrades=0; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=86005.13
MCD = 0
MMM; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-11176.87
MMM = 0
MRK; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=45899.26
MRK = 0
MSFT; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=80115.265
MSFT = 0
PFE; NumTrades=4; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=30838.4
PFE = 0
PG; NumTrades=4; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=24353.28
PG = 0
T; NumTrades=2; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=4800.53000000002
T = 0
TRV; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-3165.11999999998
TRV = 0
UTX; NumTrades=4; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-9598.68000000001
UTX = 0
VZ; NumTrades=0; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=-2339.40000000003
VZ = 0
WMT; NumTrades=1; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=51153.06
WMT = 0
XOM; NumTrades=3; NetProfit=0; NPLong=0; NPShort= 0; NPBuyHold=8748.74
XOM = 0
Size:
Color:
The code works OK. RawTrades is the number of all theoretical trades. If you'd use sp.Results.Positions.Count instead, it would show that the system hasn't taken any trades. Probably because your position size was too large e.g. 100%.
Size:
Color:
Pilot Error! Whoops. I'm somewhat famous for that ;0) OK - I have my filter. Thanks to all who contributed. Final code below. It will create a WLScore.csv file in "My Documents" which contains the symbol and Wealth-Lab Score.
CODE:
Please log in to see this code.
Size:
Color:
Important note to the users of the PerformanceEngine class (internal, unsupported part of the MS123 Visualizers library):
The information regarding PerformanceEngine calling conventions provided across the forum before is actual as of the library version 2012.05.1 and earlier. In future versions, the syntax will most likely undergo a breaking change due to a complete rewrite of the PerformanceEngine class.
Size:
Color:
System: Windows 8 x64, WL v6.4 64bit
I ran the directly above code but getting some compile errors.
1)
QUOTE:
warning CS1685@(0.0): The predefined type 'System.Treading.Tasks.Task' is defined in multiple assemblies in the global alias; using definition from 'c:\\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll'
How can I correct this warning?
2)
QUOTE:
error CS0104@(28.4): 'Utility' is an ambiguous reference between 'WealthLab.Visualizers.MS123.Utility' and 'Community.Components.Utility'
Fixed by replacing 'Utility' by 'Community.Components.Utility'. But should there be confusion about different namespaces with same class reference?
3)
QUOTE:
error CS1729@(31,27): 'WealthLab.Visualizers.MS123.Utility' does not contain a constructor that takes 2 arguments
MS123 Visualizers wiki states a breaking change to
PerformanceEngine class. So, in the above code, what changes need to be made to implement this new calling convention to
PerformanceEngine? I looked at the
PerformanceEngine demo code and it does take 2 arguments.
Size:
Color:
QUOTE:
How can I correct this warning?
Disregard it.
QUOTE:
Fixed by replacing 'Utility' by 'Community.Components.Utility'. But should there be confusion about different namespaces with same class reference?
Yes, there should be. The new, rewritten MS123 Visualizers library itself contains a Utility class. Your task, as compiler suggests, was to fix that ambiguous reference and you've fixed it correctly, good job.
QUOTE:
MS123 Visualizers wiki states a breaking change to PerformanceEngine class. So, in the above code, what changes need to be made to implement this new calling convention to PerformanceEngine?
This should suffice:
CODE:
Please log in to see this code.
Hint: You can solve such issues on your own by opening up Visual Studio, adding a library, and exploring the classes it contains with "Object Browser".
Size:
Color: