forked from hwrdprkns/ThinkOrSwim
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCVR3.txt
More file actions
105 lines (91 loc) · 3.53 KB
/
CVR3.txt
File metadata and controls
105 lines (91 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# CVR3
# Drew Griffith
#hint: The CVR3 is a short-term trading strategy using the CBOE Volatility Index ($VIX) to time the S&P 500. Developed by Larry Connors and Dave Landry, this strategy looks for overextended VIX readings to signal excessive fear or greed in the stock market. Excessive fear is used to generate buy signals in this mean-reversion strategy, while excessive greed is used to generate sell signals.
#http://stockcharts.com/school/doku.php?id=chart_school:trading_strategies:cvr3_vix_market_timi
declare lower;
input ppo_ema1 = 1; # standard is 1
input ppo_ema2 = 10; # standard is 10
input price_ema = 10; # standard is 10
input h_res = 15; # standard is 10
input l_res = -15; # standard is -10
input lag=1; # standard is 1
input Agg = {default current, min15, min30, min60, daily};
def vix_op;
switch (Agg){
case current:
vix_op = open(symbol = "VIX");
case min15:
vix_op = open(period = AggregationPeriod.FIFTEEN_MIN, symbol = "VIX");
case min60:
vix_op = open(period = AGGREGATIONPERIOD.HOUR, symbol = "VIX");
case min30:
vix_op = open(period = AggregationPeriod.THIRTY_MIN, symbol = "VIX");
case daily:
vix_op = open(period = AggregationPeriod.DAY, symbol = "VIX");
}
def vix_cl;
switch (Agg){
case current:
vix_cl = close(symbol = "VIX");
case min15:
vix_cl = close(period = AggregationPeriod.FIFTEEN_MIN, symbol = "VIX");
case min60:
vix_cl = close(period = AGGREGATIONPERIOD.HOUR, symbol = "VIX");
case min30:
vix_cl = close(period = AggregationPeriod.THIRTY_MIN, symbol = "VIX");
case daily:
vix_cl = close(period = AggregationPeriod.DAY, symbol = "VIX");
}
def vix_hi;
switch (Agg){
case current:
vix_hi = high(symbol = "VIX");
case min15:
vix_hi = high(period = AggregationPeriod.FIFTEEN_MIN, symbol = "VIX");
case min60:
vix_hi = high(period = AGGREGATIONPERIOD.HOUR, symbol = "VIX");
case min30:
vix_hi = high(period = AggregationPeriod.THIRTY_MIN, symbol = "VIX");
case daily:
vix_hi = high(period = AggregationPeriod.DAY, symbol = "VIX");
}
def vix_lo;
switch (Agg){
case current:
vix_lo = low(symbol = "VIX");
case min15:
vix_lo = low(period = AggregationPeriod.FIFTEEN_MIN, symbol = "VIX");
case min60:
vix_lo = low(period = AGGREGATIONPERIOD.HOUR, symbol = "VIX");
case min30:
vix_lo = low(period = AggregationPeriod.THIRTY_MIN, symbol = "VIX");
case daily:
vix_lo = low(period = AggregationPeriod.DAY, symbol = "VIX");
}
#def vix_op = open(sym);
#def vix_cl = close(sym);
#def vix_hi = high(sym);
#def vix_lo = low(sym);
def e1 = MovAvgExponential(vix_cl, ppo_ema1);
def e2 = MovAvgExponential(vix_cl, ppo_ema2);
def ema = MovAvgExponential(vix_cl, price_ema);
def p = (e1 - e2) / e2 * 100;
DEF PP = IF ISNAN(P) THEN PP[1] ELSE -Average(p, lag); # inverse of normal calc
PLOT PPO = PP;
ppo.SetLineWeight(3);
ppo.SetDefaultColor(Color.CYAN);
ppo.AssignValueColor(if ppo >= h_res then Color.RED else if ppo <= l_res then Color.CYAN else Color.GRAY);
plot buysignal = if ppo < l_res and vix_lo > ema and vix_cl > vix_op then l_res else Double.NaN;
buysignal.SetPaintingStrategy(PaintingStrategy.POINTS);
buysignal.SetLineWeight(3);
buysignal.SetDefaultColor(Color.YELLOW);
plot sellsignal = if ppo > h_res and vix_hi < ema and vix_cl < vix_op then h_res else Double.NaN;
sellsignal.SetPaintingStrategy(PaintingStrategy.POINTS);
sellsignal.SetLineWeight(3);
sellsignal.SetDefaultColor(Color.YELLOW);
plot h = h_res;
h.SetDefaultColor(Color.GRAY);
plot l = l_res;
l.SetDefaultColor(Color.GRAY);
# Alerts
#Alert(buysignal, "Long Entry XIV", "alert type" = Alert.BAR, sound = Sound.Ding);