declare lower;
def series = 1;
def CurrentYear = GetYear();
def CurrentMonth = GetMonth();
def CurrentDOM = GetDayOfMonth(GetYYYYMMDD());
def Day1DOW1 = GetDayOfWeek(CurrentYear * 10000 + CurrentMonth * 100 + 1);
def FirstFridayDOM1 = if Day1DOW1 < 6
then 6 - Day1DOW1
else if Day1DOW1 == 6
then 7
else 6;
def RollDOM = FirstFridayDOM1 + 14;
def ExpMonth1 = if RollDOM > CurrentDOM
then CurrentMonth + series - 1
else CurrentMonth + series;
def ExpMonth2 = if ExpMonth1 > 12
then ExpMonth1 - 12
else ExpMonth1;
def ExpYear = if ExpMonth1 > 12
then CurrentYear + 1
else CurrentYear;
def Day1DOW = GetDayOfWeek(ExpYear * 10000 + ExpMonth2 * 100 + 1);
def FirstFridayDOM = if Day1DOW < 6
then 6 - Day1DOW
else if Day1DOW == 6
then 7
else 6;
def ExpDOM = FirstFridayDOM + 14;
def date = ExpYear * 10000 + ExpMonth2 * 100 + ExpDOM + 1;
def PutVolume_SPY = if isNaN(volume(symbol = GetATMOption("SPY", date, OptionClass.PUT)))
then PutVolume_SPY[1]
else volume(symbol = GetATMOption("SPY", date, OptionClass.PUT));
def PutVolume_QQQ = if isNaN(volume(symbol = GetATMOption("QQQ", date, OptionClass.PUT)))
then PutVolume_QQQ[1]
else volume(symbol = GetATMOption("QQQ", date, OptionClass.PUT));
def PutVolume_DIA = if isNaN(volume(symbol = GetATMOption("DIA", date, OptionClass.PUT)))
then PutVolume_DIA[1]
else volume(symbol = GetATMOption("DIA", date, OptionClass.PUT));;
def CallVolume_SPY = if isNaN(volume(symbol = GetATMOption("SPY", date, OptionClass.CALL)))
then CallVolume_SPY[1]
else volume(symbol = GetATMOption("SPY", date, OptionClass.CALL));
def CallVolume_QQQ = if isNaN(volume(symbol = GetATMOption("QQQ", date, OptionClass.CALL)))
then CallVolume_QQQ[1]
else volume(symbol = GetATMOption("QQQ", date, OptionClass.CALL));
def CallVolume_DIA = if isNaN(volume(symbol = GetATMOption("DIA", date, OptionClass.CALL)))
then CallVolume_DIA[1]
else volume(symbol = GetATMOption("DIA", date, OptionClass.CALL));
def PutTotal = PutVolume_SPY + PutVolume_QQQ + PutVolume_DIA;
def CallTotal = CallVolume_SPY + CallVolume_QQQ + CallVolume_DIA;
AddLabel(yes,(concat("Ex date: ",
concat(ExpMonth2,
concat("/",
concat(ExpDOM,
concat("/",
concat(AsPrice(ExpYear),""))))))), color.white);
def Strike_SPY = Round(close(symbol = "SPY") / .5, 0) * .5;
def Strike_QQQ = Round(close(symbol = "QQQ") / .5, 0) * .5;
def Strike_DIA = Round(close(symbol = "DIA") / .5, 0) * .5;
AddLabel(1, "Strikes SPY: $" + Strike_SPY + " QQQ: $" + Strike_QQQ + " DIA: $" + Strike_DIA, Color.White);
AddLabel(yes, Concat("ATM Put/Call Ratio ", Round(PutTotal / CallTotal, 2)) + " / 1", Color.White);
def PV = if IsNaN(PutTotal)
then PV[1]
else PutTotal;
def CV = if IsNaN(CallTotal)
then CV[1]
else CallTotal;
plot ChangeRatio = if isNaN(close) then Double.NaN else PV / CV;
ChangeRatio.AssignValueColor(if ChangeRatio > 1
then color.green
else color.red);
plot AvgCR = if isNaN(close) then Double.NaN else Average(ChangeRatio, 5);
AvgCR.SetDefaultColor(Color.Yellow);
plot Neutral = if isNaN(close) then Double.NaN else 1;
Neutral.SetDefaultColor(Color.Gray);
declare lower;
def series = 1;
def CurrentYear = GetYear();
def CurrentMonth = GetMonth();
def CurrentDOM = GetDayOfMonth(GetYYYYMMDD());
def Day1DOW1 = GetDayOfWeek(CurrentYear * 10000 + CurrentMonth * 100 + 1);
def FirstFridayDOM1 = if Day1DOW1 < 6
then 6 - Day1DOW1
else if Day1DOW1 == 6
then 7
else 6;
def RollDOM = FirstFridayDOM1 + 14;
def ExpMonth1 = if RollDOM > CurrentDOM
then CurrentMonth + series - 1
else CurrentMonth + series;
def ExpMonth2 = if ExpMonth1 > 12
then ExpMonth1 - 12
else ExpMonth1;
def ExpYear = if ExpMonth1 > 12
then CurrentYear + 1
else CurrentYear;
def Day1DOW = GetDayOfWeek(ExpYear * 10000 + ExpMonth2 * 100 + 1);
def FirstFridayDOM = if Day1DOW < 6
then 6 - Day1DOW
else if Day1DOW == 6
then 7
else 6;
def ExpDOM = FirstFridayDOM + 14;
def date = ExpYear * 10000 + ExpMonth2 * 100 + ExpDOM + 1;
def PutVolume_AMZN = if isNaN(volume(symbol = GetATMOption("AMZN", date, OptionClass.PUT)))
then PutVolume_AMZN[1]
else volume(symbol = GetATMOption("AMZN", date, OptionClass.PUT));
def CallVolume_AMZN = if isNaN(volume(symbol = GetATMOption("AMZN", date, OptionClass.CALL)))
then CallVolume_AMZN[1]
else volume(symbol = GetATMOption("AMZN", date, OptionClass.CALL));
def PutTotal = PutVolume_AMZN;
def CallTotal = CallVolume_AMZN;
AddLabel(yes,(concat("Ex date: ",
concat(ExpMonth2,
concat("/",
concat(ExpDOM,
concat("/",
concat(AsPrice(ExpYear),""))))))), color.white);
def Strike_AMZN = Round(close(symbol = "AMZN") / .5, 0) * .5;
AddLabel(1, "Strikes AMZN: $" + Strike_AMZN, Color.White);
AddLabel(yes, Concat("ATM Put/Call Ratio ", Round(PutTotal / CallTotal, 2)) + " / 1", Color.White);
def PV = if IsNaN(PutTotal)
then PV[1]
else PutTotal;
def CV = if IsNaN(CallTotal)
then CV[1]
else CallTotal;
plot ChangeRatio = if isNaN(close) then Double.NaN else PV / CV;
ChangeRatio.AssignValueColor(if ChangeRatio > 1
then color.green
else color.red);
plot AvgCR = if isNaN(close) then Double.NaN else Average(ChangeRatio, 5);
AvgCR.SetDefaultColor(Color.Yellow);
plot Neutral = if isNaN(close) then Double.NaN else 1;
Neutral.SetDefaultColor(Color.Gray);
It can be used to get a general idea around where the market thinks a stock is headed, P/C ratio of 4 and plenty of people are betting on a stock going down. P/C ration of .05 and the market is very confident in that stock. It is also important to consider the option chain when making a predictions. Are most of these puts or calls being bought for a strike in the near term or farther out? This gives you an idea of the time frame of the expected move. But be warned it can be effective but is not the holy grail, these assumptions fail to account for things like hedging.How to use PUT CALL ratio? What can be determined ? Will it give any additional indication to buy or sell call/put
Thx
Suresh
@YungTraderFromMontana , That was a very good answer. Feel encouraged to keep answering where you feel appropriate. The more voices we have, the better the comunity! Don't think your answer may be wrong, if you're out of line or the answer is debatable, that's good. That way we all learn what we think we know. MarkosIt can be used to get a general idea around where the market thinks a stock is headed, P/C ratio of 4 and plenty of people are betting on a stock going down. P/C ratio of .05 and the market is very confident in that stock. It is also important to consider the option chain when making a predictions. Are most of these puts or calls being bought for a strike in the near term or farther out? This gives you an idea of the time frame of the expected move. But be warned it can be effective but is not the holy grail, these assumptions fail to account for things like hedging.
Hey you! You've been out a bit lately. That's ok, just teasing. (Actually I say a lot of silly stuff )Can I just place ROKU instead of SPY into this?
# Put/Call
# 11.9.2019
declare lower;
input symbol = "AMZN";
def series = 1;
def CurrentYear = GetYear();
def CurrentMonth = GetMonth();
def CurrentDOM = GetDayOfMonth(GetYYYYMMDD());
def Day1DOW1 = GetDayOfWeek(CurrentYear * 10000 + CurrentMonth * 100 + 1);
def FirstFridayDOM1 = if Day1DOW1 < 6
then 6 - Day1DOW1
else if Day1DOW1 == 6
then 7
else 6;
def RollDOM = FirstFridayDOM1 + 14;
def ExpMonth1 = if RollDOM > CurrentDOM
then CurrentMonth + series - 1
else CurrentMonth + series;
def ExpMonth2 = if ExpMonth1 > 12
then ExpMonth1 - 12
else ExpMonth1;
def ExpYear = if ExpMonth1 > 12
then CurrentYear + 1
else CurrentYear;
def Day1DOW = GetDayOfWeek(ExpYear * 10000 + ExpMonth2 * 100 + 1);
def FirstFridayDOM = if Day1DOW < 6
then 6 - Day1DOW
else if Day1DOW == 6
then 7
else 6;
def ExpDOM = FirstFridayDOM + 14;
def date = ExpYear * 10000 + ExpMonth2 * 100 + ExpDOM + 1;
def PutVolume = if isNaN(volume(symbol = GetATMOption(symbol, date, OptionClass.PUT)))
then PutVolume[1]
else volume(symbol = GetATMOption(symbol, date, OptionClass.PUT));
def CallVolume = if isNaN(volume(symbol = GetATMOption(symbol, date, OptionClass.CALL)))
then CallVolume[1]
else volume(symbol = GetATMOption(symbol, date, OptionClass.CALL));
def PutTotal = PutVolume;
def CallTotal = CallVolume;
AddLabel(yes,(concat("Ex date: ",
concat(ExpMonth2,
concat("/",
concat(ExpDOM,
concat("/",
concat(AsPrice(ExpYear),""))))))), color.white);
def Strike = Round(close(symbol = symbol) / .5, 0) * .5;
AddLabel(1, "Strikes " + symbol + ": $" + Strike, Color.White);
AddLabel(yes, Concat("ATM Put/Call Ratio ", Round(PutTotal / CallTotal, 2)) + " / 1", Color.White);
def PV = if IsNaN(PutTotal)
then PV[1]
else PutTotal;
def CV = if IsNaN(CallTotal)
then CV[1]
else CallTotal;
plot ChangeRatio = if isNaN(close) then Double.NaN else PV / CV;
ChangeRatio.AssignValueColor(if ChangeRatio > 1
then color.green
else color.red);
plot AvgCR = if isNaN(close) then Double.NaN else Average(ChangeRatio, 5);
AvgCR.SetDefaultColor(Color.Yellow);
plot Neutral = if isNaN(close) then Double.NaN else 1;
Neutral.SetDefaultColor(Color.Gray);
# End Study
@tomsk Can I assume that the AvgCR yellow colored is Puts?
It can be used to get a general idea around where the market thinks a stock is headed, P/C ratio of 4 and plenty of people are betting on a stock going down. P/C ration of .05 and the market is very confident in that stock. It is also important to consider the option chain when making a predictions. Are most of these puts or calls being bought for a strike in the near term or farther out? This gives you an idea of the time frame of the expected move. But be warned it can be effective but is not the holy grail, these assumptions fail to account for things like hedging.
Thread starter | Similar threads | Forum | Replies | Date |
---|---|---|---|---|
Create put/call ratio for individual stock? | Questions | 8 | ||
F | Looking for put/call ratio indicator in ToS | Questions | 6 | |
2 | Option call or Put beta , IV column | Questions | 3 | |
Buy Call or Put, last candle 15' | Questions | 2 | ||
C | Try to put variable in the tradesize of AddOrder function | Questions | 10 |