StockFetcher Forums · Filter Exchange · Sharpe Allocation Filter - 11 ETS Want to Add Two More<< >>Post Follow-up
davesaint86
725 posts
msg #134280
Ignore davesaint86
modified
2/14/2017 11:25:23 AM

I was able to modify Kevin's original filter and add some more funds to it. I would like to add two more funds to it but keep screwing something up. Any help would be appreciated. By the way for longer term trading this is a decent filter and is underrated.


Fetcher[
symlist(iws,xly,xlp,xle,xlf,xlv,xli,xlb,xlre,xlk,xlu)
SET{perf1A, ma(3) 60 days ago}
SET{perf1b, MA(3) / perf1a}
SET{perf, perf1b - 1}
SET{var1, perf*100}
SET{rfr, ind(^irx,close)}
SET{RISKFREERETURN, rfr/100}
SET{perf63, perf - RISKFREERETURN}
SET{STD63, CSTDDEV(CLOSE,63)}
SET{VOL63a, STD63 / MA(63)}
SET{vol63, vol63a * 100}

/*CALCULATION OF SHARPE RATIO - ANNUALIZED*/
SET{SHARPE1a, perf63 / VOL63a}
set{sharpe, sharpe1a * 0.5}

set{var1a, IND(iws, var1)}
set{var1b, IND(xly, var1)}
set{var1c, IND(xlp, var1)}
set{var1d, IND(xle, var1)}
set{var1e, IND(xlf, var1)}
set{var1f, IND(xlv, var1)}
set{var1g, IND(xli, var1)}
set{var1h, IND(xlb, var1)}
set{var1i, IND(xlre, var1)}
set{var1j, IND(xlk, var1)}
set{var1k, IND(xlu, var1)}

SET{RANK1A, COUNT(var1 is above var1a,1)}
SET{RANK1B, COUNT(var1 is above var1b,1)}
SET{RANK1C, COUNT(var1 is above var1c,1)}
SET{RANK1D, COUNT(var1 is above var1d,1)}
SET{RANK1E, COUNT(var1 is above var1e,1)}
SET{RANK1F, COUNT(var1 is above var1f,1)}
SET{RANK1G, COUNT(var1 is above var1g,1)}
SET{RANK1H, COUNT(var1 is above var1h,1)}
SET{RANK1I, COUNT(var1 is above var1i,1)}
SET{RANK1J, COUNT(var1 is above var1j,1)}
SET{RANK1K, COUNT(var1 is above var1k,1)}


SET{RANK1L, RANK1A + RANK1B}
SET{RANK1M, RANK1C + RANK1D}
SET{RANK1N, RANK1E + RANK1F}
SET{RANK1O, RANK1G + RANK1H}
SET{RANK1P, RANK1I + RANK1J}
SET{RANK1Q, RANK1K + RANK1L}
SET{RANK1R, RANK1M + RANK1N}
SET{RANK1S, RANK1O + RANK1P}
SET{RANK1T, RANK1Q + RANK1R}
SET{RANK1U, RANK1S + RANK1T}


SET{RANK, 11 - RANK1U}

set{var2a, IND(iws, sharpe)}
set{var2b, IND(xly, sharpe)}
set{var2c, IND(xlp, sharpe)}
set{var2d, IND(xle, sharpe)}
set{var2e, IND(xlf, sharpe)}
set{var2f, IND(xlv, sharpe)}
set{var2g, IND(xli, sharpe)}
set{var2h, IND(xlb, sharpe)}
set{var2i, IND(xlre, sharpe)}
set{var2j, IND(xlk, sharpe)}
set{var2k, IND(xlu, sharpe)}

SET{var3a, COUNT(var2a is above 0,1)}
SET{var3b, COUNT(var2b is above 0,1)}
SET{var3c, COUNT(var2c is above 0,1)}
SET{var3d, COUNT(var2d is above 0,1)}
SET{var3e, COUNT(var2e is above 0,1)}
SET{var3f, COUNT(var2f is above 0,1)}
SET{var3g, COUNT(var2g is above 0,1)}
SET{var3h, COUNT(var2h is above 0,1)}
SET{var3i, COUNT(var2i is above 0,1)}
SET{var3j, COUNT(var2j is above 0,1)}
SET{var3k, COUNT(var2k is above 0,1)}



SET{var4a, var2a * var3a}
SET{var4b, var2b * var3b}
SET{var4c, var2c * var3c}
SET{var4d, var2d * var3d}
SET{var4e, var2e * var3e}
SET{var4f, var2f * var3f}
SET{var4g, var2g * var3g}
SET{var4h, var2h * var3h}
SET{var4i, var2i * var3i}
SET{var4j, var2j * var3j}
SET{var4k, var2k * var3k}


set{var5a, var4a + var4b}
set{var5b, var4c + var4d}
set{var5c, var4e + var4f}
set{var5d, var4g + var4h}
set{var5e, var4i + var4j}
set{var5f, var4k}

set{var5g, var5a + var5b}
set{var5h, var5c + var5d}
set{var5i, var5e + var5f}

set{var5j, var5g + var5h}
set{var5k, var5j + var5i}


SET{allocation1, sharpe / var5k}

set{allocation2, allocation1 * count(sharpe above 0,1)}
set{allocation, allocation2 *100}
SET{TI42, MA(4) / MA(42)}

ADD COLUMN SEPARATOR
ADD COLUMN RANK {Rank}
ADD COLUMN SEPARATOR
ADD COLUMN TI42
DD COLUMN SEPARATOR
add column atr(21) {Atr$}
add column separator
add column average day range (21){ADR%}
ADD COLUMN SEPARATOR
ADD COLUMN ROC(126,1) {6 mth %}
add column separator
ADD COLUMN ROC(63,1) {3 mth %}
add column separator
ADD COLUMN ROC(21,1) {1 mth %}
add column separator
ADD COLUMN vol63 {vol(%)}
add column separator
add column sharpe {sharpe ratio}
add column separator
add column allocation {Allocation (%)}
add column separator
add column corr(spy,63, close) {S&P500 Cor.}
add column separator
add column RSI(9)
add column separator
add column RSI(30)
add column separator
add column WEEKLY IFT(2,1){IFT}

add column separator
add column MA(200)

and draw CCI (20) line at 100.00 and draw CCI (20) line at 50
and draw CCI (20) line at 10
and draw Slow Stochastic(5,1) Fast %K line at 20.00 and draw Slow Stochastic(5,1) Fast %K line at 80.00
and draw Slow Stochastic(5,1) Fast %K line at 50.00
and draw MACD Fast Line(12,26) line at 0
and draw RSI(30) line at 50
and Draw RSI(9) on plot RSI(30)
DRAW WEEKLY IFT(2,1)
DRAW WEEKLY IFT(2,1) LINE AT .90
DRAW WEEKLY IFT(2,1) LINE AT -.90
DRAW WEEKLY IFT(2,1) LINE AT 0
SORT ON COLUMN 6 ascending
CHART-TIME IS 120 days
draw MA(3)
draw sharpe line at 0
]

SAFeTRADE
630 posts
msg #134281
Ignore SAFeTRADE
2/14/2017 11:41:27 AM

I think this what you are looking for.

Fetcher [
symlist(iws,xly,xlp,xle,xlf,xlv,xli,xlb,xlre,xlk,xlu)
SET{perf1A, ma(3) 60 days ago}
SET{perf1b, MA(3) / perf1a}
SET{perf, perf1b - 1}
SET{var1, perf*100}
SET{rfr, ind(^irx,close)}
SET{RISKFREERETURN, rfr/100}
SET{perf63, perf - RISKFREERETURN}
SET{STD63, CSTDDEV(CLOSE,63)}
SET{VOL63a, STD63 / MA(63)}
SET{vol63, vol63a * 100}

/*CALCULATION OF SHARPE RATIO - ANNUALIZED*/
SET{SHARPE1a, perf63 / VOL63a}
set{sharpe, sharpe1a * 0.5}

set{var1a, IND(iws, sharpe)}
set{var1b, IND(xly, sharpe)}
set{var1c, IND(xlp, sharpe)}
set{var1d, IND(xle, sharpe)}
set{var1e, IND(xlf, sharpe)}
set{var1f, IND(xlv, sharpe)}
set{var1g, IND(xli, sharpe)}
set{var1h, IND(xlb, sharpe)}
set{var1i, IND(xlre, sharpe)}
set{var1j, IND(xlk, sharpe)}
set{var1k, IND(xlu,sharpe)}

SET{RANK1A, COUNT(sharpe is above var1a,1)}
SET{RANK1B, COUNT(sharpe is above var1b,1)}
SET{RANK1C, COUNT(sharpe is above var1c,1)}
SET{RANK1D, COUNT(sharpe is above var1d,1)}
SET{RANK1E, COUNT(sharpe is above var1e,1)}
SET{RANK1F, COUNT(sharpe is above var1f,1)}
SET{RANK1G, COUNT(sharpe is above var1g,1)}
SET{RANK1H, COUNT(sharpe is above var1h,1)}
SET{RANK1I, COUNT(sharpe is above var1i,1)}
SET{RANK1J, COUNT(sharpe is above var1j,1)}
SET{RANK1K, COUNT(sharpe is above var1k,1)}


SET{RANK1L, RANK1A + RANK1B}
SET{RANK1M, RANK1C + RANK1D}
SET{RANK1N, RANK1E + RANK1F}
SET{RANK1O, RANK1G + RANK1H}
SET{RANK1P, RANK1I + RANK1J}
SET{RANK1Q, RANK1K + RANK1L}
SET{RANK1R, RANK1M + RANK1N}
SET{RANK1S, RANK1O + RANK1P}
SET{RANK1T, RANK1Q + RANK1R}
SET{RANK1U, RANK1S + RANK1T}


SET{RANK, 11 - RANK1U}

set{var2a, IND(iws, sharpe)}
set{var2b, IND(xly, sharpe)}
set{var2c, IND(xlp, sharpe)}
set{var2d, IND(xle, sharpe)}
set{var2e, IND(xlf, sharpe)}
set{var2f, IND(xlv, sharpe)}
set{var2g, IND(xli, sharpe)}
set{var2h, IND(xlb, sharpe)}
set{var2i, IND(xlre, sharpe)}
set{var2j, IND(xlk, sharpe)}
set{var2k, IND(xlu, sharpe)}

SET{var3a, COUNT(var2a is above 0,1)}
SET{var3b, COUNT(var2b is above 0,1)}
SET{var3c, COUNT(var2c is above 0,1)}
SET{var3d, COUNT(var2d is above 0,1)}
SET{var3e, COUNT(var2e is above 0,1)}
SET{var3f, COUNT(var2f is above 0,1)}
SET{var3g, COUNT(var2g is above 0,1)}
SET{var3h, COUNT(var2h is above 0,1)}
SET{var3i, COUNT(var2i is above 0,1)}
SET{var3j, COUNT(var2j is above 0,1)}
SET{var3k, COUNT(var2k is above 0,1)}



SET{var4a, var2a * var3a}
SET{var4b, var2b * var3b}
SET{var4c, var2c * var3c}
SET{var4d, var2d * var3d}
SET{var4e, var2e * var3e}
SET{var4f, var2f * var3f}
SET{var4g, var2g * var3g}
SET{var4h, var2h * var3h}
SET{var4i, var2i * var3i}
SET{var4j, var2j * var3j}
SET{var4k, var2k * var3k}


set{var5a, var4a + var4b}
set{var5b, var4c + var4d}
set{var5c, var4e + var4f}
set{var5d, var4g + var4h}
set{var5e, var4i + var4j}
set{var5f, var4k}

set{var5g, var5a + var5b}
set{var5h, var5c + var5d}
set{var5i, var5e + var5f}

set{var5j, var5g + var5h}
set{var5k, var5j + var5i}


SET{allocation1, sharpe / var5k}

set{allocation2, allocation1 * count(sharpe above 0,1)}
set{allocation, allocation2 *100}
SET{TI42, MA(4) / MA(42)}

ADD COLUMN SEPARATOR
ADD COLUMN RANK {Rank}
ADD COLUMN SEPARATOR
ADD COLUMN TI42
DD COLUMN SEPARATOR
add column atr(21) {Atr$}
add column separator
add column average day range (21){ADR%}
ADD COLUMN SEPARATOR
ADD COLUMN ROC(126,1) {6 mth %}
add column separator
ADD COLUMN ROC(63,1) {3 mth %}
add column separator
ADD COLUMN ROC(21,1) {1 mth %}
add column separator
ADD COLUMN vol63 {vol(%)}
add column separator
add column sharpe {sharpe ratio}
add column separator
add column allocation {Allocation (%)}
add column separator
add column corr(spy,63, close) {S&P500 Cor.}
add column separator
add column RSI(9)
add column separator
add column RSI(30)
add column separator
add column WEEKLY IFT(2,1){IFT}

add column separator
add column MA(200)

and draw CCI (20) line at 100.00 and draw CCI (20) line at 50
and draw CCI (20) line at 10
and draw Slow Stochastic(5,1) Fast %K line at 20.00 and draw Slow Stochastic(5,1) Fast %K line at 80.00
and draw Slow Stochastic(5,1) Fast %K line at 50.00
and draw MACD Fast Line(12,26) line at 0
and draw RSI(30) line at 50
and Draw RSI(9) on plot RSI(30)
DRAW WEEKLY IFT(2,1)
DRAW WEEKLY IFT(2,1) LINE AT .90
DRAW WEEKLY IFT(2,1) LINE AT -.90
DRAW WEEKLY IFT(2,1) LINE AT 0
SORT ON COLUMN 6 ascending
CHART-TIME IS 120 days
draw MA(3)
draw sharpe line at 0
]

davesaint86
725 posts
msg #134299
Ignore davesaint86
2/14/2017 3:59:05 PM

Nope. I want to be able to add a least two more funds for a total of 13 not eleven.

four
5,087 posts
msg #134300
Ignore four
modified
2/14/2017 6:55:13 PM

added... schb,schc,schd
14 results from Tuesday February 14, 2017 - Close Results
Delay times are at least 15 mins for NASDAQ, 20 mins for NYSE and Amex.

-----------------
symlist(iws,xly,xlp,xle,xlf,xlv,xli,xlb,xlre,xlk,xlu,schb,schc,schd)
SET{perf1A, ma(3) 60 days ago}
SET{perf1b, MA(3) / perf1a}
SET{perf, perf1b - 1}
SET{var1, perf*100}
SET{rfr, ind(^irx,close)}
SET{RISKFREERETURN, rfr/100}
SET{perf63, perf - RISKFREERETURN}
SET{STD63, CSTDDEV(CLOSE,63)}
SET{VOL63a, STD63 / MA(63)}
SET{vol63, vol63a * 100}

/*CALCULATION OF SHARPE RATIO - ANNUALIZED*/
SET{SHARPE1a, perf63 / VOL63a}
set{sharpe, sharpe1a * 0.5}

set{var1a, IND(iws, sharpe)}
set{var1b, IND(xly, sharpe)}
set{var1c, IND(xlp, sharpe)}
set{var1d, IND(xle, sharpe)}
set{var1e, IND(xlf, sharpe)}
set{var1f, IND(xlv, sharpe)}
set{var1g, IND(xli, sharpe)}
set{var1h, IND(xlb, sharpe)}
set{var1i, IND(xlre, sharpe)}
set{var1j, IND(xlk, sharpe)}
set{var1k, IND(xlu,sharpe)}

SET{RANK1A, COUNT(sharpe is above var1a,1)}
SET{RANK1B, COUNT(sharpe is above var1b,1)}
SET{RANK1C, COUNT(sharpe is above var1c,1)}
SET{RANK1D, COUNT(sharpe is above var1d,1)}
SET{RANK1E, COUNT(sharpe is above var1e,1)}
SET{RANK1F, COUNT(sharpe is above var1f,1)}
SET{RANK1G, COUNT(sharpe is above var1g,1)}
SET{RANK1H, COUNT(sharpe is above var1h,1)}
SET{RANK1I, COUNT(sharpe is above var1i,1)}
SET{RANK1J, COUNT(sharpe is above var1j,1)}
SET{RANK1K, COUNT(sharpe is above var1k,1)}


SET{RANK1L, RANK1A + RANK1B}
SET{RANK1M, RANK1C + RANK1D}
SET{RANK1N, RANK1E + RANK1F}
SET{RANK1O, RANK1G + RANK1H}
SET{RANK1P, RANK1I + RANK1J}
SET{RANK1Q, RANK1K + RANK1L}
SET{RANK1R, RANK1M + RANK1N}
SET{RANK1S, RANK1O + RANK1P}
SET{RANK1T, RANK1Q + RANK1R}
SET{RANK1U, RANK1S + RANK1T}


SET{RANK, 11 - RANK1U}

set{var2a, IND(iws, sharpe)}
set{var2b, IND(xly, sharpe)}
set{var2c, IND(xlp, sharpe)}
set{var2d, IND(xle, sharpe)}
set{var2e, IND(xlf, sharpe)}
set{var2f, IND(xlv, sharpe)}
set{var2g, IND(xli, sharpe)}
set{var2h, IND(xlb, sharpe)}
set{var2i, IND(xlre, sharpe)}
set{var2j, IND(xlk, sharpe)}
set{var2k, IND(xlu, sharpe)}

SET{var3a, COUNT(var2a is above 0,1)}
SET{var3b, COUNT(var2b is above 0,1)}
SET{var3c, COUNT(var2c is above 0,1)}
SET{var3d, COUNT(var2d is above 0,1)}
SET{var3e, COUNT(var2e is above 0,1)}
SET{var3f, COUNT(var2f is above 0,1)}
SET{var3g, COUNT(var2g is above 0,1)}
SET{var3h, COUNT(var2h is above 0,1)}
SET{var3i, COUNT(var2i is above 0,1)}
SET{var3j, COUNT(var2j is above 0,1)}
SET{var3k, COUNT(var2k is above 0,1)}



SET{var4a, var2a * var3a}
SET{var4b, var2b * var3b}
SET{var4c, var2c * var3c}
SET{var4d, var2d * var3d}
SET{var4e, var2e * var3e}
SET{var4f, var2f * var3f}
SET{var4g, var2g * var3g}
SET{var4h, var2h * var3h}
SET{var4i, var2i * var3i}
SET{var4j, var2j * var3j}
SET{var4k, var2k * var3k}


set{var5a, var4a + var4b}
set{var5b, var4c + var4d}
set{var5c, var4e + var4f}
set{var5d, var4g + var4h}
set{var5e, var4i + var4j}
set{var5f, var4k}

set{var5g, var5a + var5b}
set{var5h, var5c + var5d}
set{var5i, var5e + var5f}

set{var5j, var5g + var5h}
set{var5k, var5j + var5i}


SET{allocation1, sharpe / var5k}

set{allocation2, allocation1 * count(sharpe above 0,1)}
set{allocation, allocation2 *100}
SET{TI42, MA(4) / MA(42)}

ADD COLUMN SEPARATOR
ADD COLUMN RANK {Rank}
ADD COLUMN SEPARATOR
ADD COLUMN TI42
DD COLUMN SEPARATOR
add column atr(21) {Atr$}
add column separator
add column average day range (21){ADR%}
ADD COLUMN SEPARATOR
ADD COLUMN ROC(126,1) {6 mth %}
add column separator
ADD COLUMN ROC(63,1) {3 mth %}
add column separator
ADD COLUMN ROC(21,1) {1 mth %}
add column separator
ADD COLUMN vol63 {vol(%)}
add column separator
add column sharpe {sharpe ratio}
add column separator
add column allocation {Allocation (%)}
add column separator
add column corr(spy,63, close) {S&P500 Cor.}
add column separator
add column RSI(9)
add column separator
add column RSI(30)
add column separator
add column WEEKLY IFT(2,1){IFT}

add column separator
add column MA(200)

and draw CCI (20) line at 100.00 and draw CCI (20) line at 50
and draw CCI (20) line at 10
and draw Slow Stochastic(5,1) Fast %K line at 20.00 and draw Slow Stochastic(5,1) Fast %K line at 80.00
and draw Slow Stochastic(5,1) Fast %K line at 50.00
and draw MACD Fast Line(12,26) line at 0
and draw RSI(30) line at 50
and Draw RSI(9) on plot RSI(30)
DRAW WEEKLY IFT(2,1)
DRAW WEEKLY IFT(2,1) LINE AT .90
DRAW WEEKLY IFT(2,1) LINE AT -.90
DRAW WEEKLY IFT(2,1) LINE AT 0
SORT ON COLUMN 6 ascending
CHART-TIME IS 120 days
draw MA(3)
draw sharpe line at 0


Kevin_in_GA
4,599 posts
msg #134301
Ignore Kevin_in_GA
2/14/2017 7:04:54 PM

How about this?

Fetcher[
market is S&P 500
add column Sharpe Ratio(63) {sharpe ratio}
add column Sortino Ratio(63) {sortino ratio}
sort on column 5 descending
]



SF added the Sharpe and Sortino ratio functions a while back - just use this on a symlist with your preferred ETFs.

davesaint86
725 posts
msg #134305
Ignore davesaint86
modified
2/14/2017 8:13:25 PM

Thank you Safetrade, Kevin and Four.

four
5,087 posts
msg #134307
Ignore four
2/14/2017 8:22:05 PM

welcome

davesaint86
725 posts
msg #134315
Ignore davesaint86
2/15/2017 9:14:16 AM

Kevin,

If I wanted to create an Alpha score like you did when you had to code the 21 day and 63 day Sharpe Ratios would the simplified code for doing be shown below?


SET{21ALPHA, Sharpe Ratio(21) * 100}
SET{63ALPHA, Sharpe Ratio(63) * 100}
SET{ALPHA_SCORE, 63ALPHA + 21ALPHA}


Kevin_in_GA
4,599 posts
msg #134319
Ignore Kevin_in_GA
2/15/2017 9:47:33 AM

You approach is correct, but technically alpha is the measure of excess returns relative to the S&P 500, which would look more like this:

Fetcher[
S&P 500
set{alpha21, ROC(21,1) - ind(SPY, ROC(21,1))}
set{alpha63, ROC(63,1) - ind(SPY, ROC(63,1))}
set{alphascore, alpha21 + alpha63}
add column alphascore
draw alphascore
sort on column 5 descending
]


You can just substitute the Sharpe Ratio(21) and Sharpe ratio(63) in for the ROC() function if you want.

davesaint86
725 posts
msg #134320
Ignore davesaint86
2/15/2017 10:04:42 AM

Thank you Kevin

StockFetcher Forums · Filter Exchange · Sharpe Allocation Filter - 11 ETS Want to Add Two More<< >>Post Follow-up

*** Disclaimer *** StockFetcher.com does not endorse or suggest any of the securities which are returned in any of the searches or filters. They are provided purely for informational and research purposes. StockFetcher.com does not recommend particular securities. StockFetcher.com, Vestyl Software, L.L.C. and involved content providers shall not be liable for any errors or delays in the content, or for any actions taken based on the content.


Copyright 2022 - Vestyl Software L.L.C.Terms of Service | License | Questions or comments? Contact Us
EOD Data sources: DDFPlus & CSI Data Quotes delayed during active market hours. Delay times are at least 15 mins for NASDAQ, 20 mins for NYSE and Amex. Delayed intraday data provided by DDFPlus


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.