Think there are some other versions in the forum, but made this version where you can change the method to apply the inverse fisher transform to.
chickensword wrote: Wed Aug 10, 2022 7:07 pm could someone convert thus thinkorswims ift rsi? it looks really good
Part 1Part 2Code: Select all
# RSI_IFT (smoothed Inverse Fisher Transform RSI) # Change Log # # 2022.01.25 v1.1 @cos251 - Added .01 multiplier per proper forumat; pointed out by @bigboss # # 2021.01.29 v1.0 @cos251 - Intial Script; takes smoothed 5 period RSI and puts it # through Inverse arctanh(x) forumla # #CREDITS # - https://www.mesasoftware.com/papers/TheInverseFisherTransform.pdf # - https://www.mql5.com/en/articles/303 declare lower; #--- Inputs input useMultiplier = no; input length = 5; def over_Bought = .5; def over_Sold = -.5; input paintbars = no; input showVerticalLines = yes; input audibleAlerts = yes; #--- End Inputs #--- RSI and Smoothed Inverse RSI Calculation def R =if useMultiplier then (reference RSI(length, close) - 50) * .1 else (reference RSI(length, close) - 50); def AvgRSI = MovingAverage(AverageType.Exponential,R,9); def iRSI = (Power(Double.E, 2 * AvgRSI) - 1) / (Power(Double.E, 2 * AvgRSI) + 1); plot Inverse_RSI = iRSI; #AddLabel(yes,iRSI); Inverse_RSI.SetDefaultColor(Color.DARK_GRAY); Inverse_RSI.AssignValueColor(if Inverse_RSI > .5 then Color.GREEN else if Inverse_RSI < -.5 then Color.RED else Color.Current); #--- End RSI and Smoothed Calculation #--- OB/OS plot ob = over_Bought; plot os = over_Sold; ob.SetDefaultColor(Color.DARK_GRAY); os.SetDefaultColor(Color.DARK_GRAY); #--- End OB/OS #--- Add VerticalLine def sqzAlert = reference TTM_Squeeze().SqueezeAlert; #Hint -Used for candle price color AddVerticalLine(showVerticalLines and (iRSI > 0) and (iRSI[1] < 0), "Entry BUY", Color.GRAY); AddVerticalLine(showVerticalLines and (iRSI[1] > 0) and (iRSI < 0), "Entry SELL", Color.YELLOW); AssignPriceColor(if paintbars and iRSI > 0 and sqzAlert == 1 then Color.GREEN else if paintbars and iRSI < 0 and sqzAlert == 1 then Color.RED else if paintbars and sqzAlert == 0 then Color.GRAY else Color.Current); Alert(audibleAlerts and (iRSI > 0) and (iRSI[1] < 0), "Buy", Alert.BAR, Sound.Chimes); Alert(audibleAlerts and (iRSI[1] > 0) and (iRSI < 0), "Sell", Alert.BAR, Sound.Ding);
Code: Select all
# RSI_IFT_Strat (smoothed Inverse Fisher Transform RSI) # Change Log # 2021.08.20 v1.0 @cos251 - Intial Script; takes smoothed 5 period RSI and puts it # # through Inverse arctanh(x) forumla; converted to strategy for # back testing purposes # # Removing the header credits and description is not permitted, any modification needs to be shared. # #CREDITS # - https://www.mesasoftware.com/papers/TheInverseFisherTransform.pdf # - https://www.mql5.com/en/articles/303 declare upper; #--- Inputs input length = 5; input tradetype = { default "long", "short", "both" }; input paintbars = yes; input showVerticalLines = yes; #--- End Inputs #--- RSI and Smoothed Inverse RSI Calculation def R = reference RSI(length, close) - 50; def AvgRSI = MovingAverage(AverageType.Exponential,R,9); def iRSI = (Power(Double.E, 2 * AvgRSI) - 1) / (Power(Double.E, 2 * AvgRSI) + 1); def Inverse_RSI = iRSI; #--- End RSI and Smoothed Calculation #--- Add VerticalLine def sqzAlert = reference TTM_Squeeze().SqueezeAlert; #Hint -Used for candle price color # and sqzAlert == 1 AddVerticalLine(showVerticalLines and (tradetype == tradetype.long or tradetype == tradetype.both) and (iRSI > 0) and (iRSI[1] < 0), "Entry BUY", Color.GRAY); AddVerticalLine(showVerticalLines and (tradetype == tradetype.short or tradetype == tradetype.both) and (iRSI[1] > 0) and (iRSI < 0), "Entry SELL", Color.YELLOW); AssignPriceColor(if paintbars and (tradetype == tradetype.long or tradetype == tradetype.both) and iRSI > 0 then Color.GREEN else if paintbars and (tradetype == tradetype.short or tradetype == tradetype.both) and iRSI < 0 then Color.RED else if paintbars then Color.GRAY else Color.Current); AddOrder(OrderType.BUY_TO_OPEN, iRSI > 0 and iRSI[1] < 0 and (tradetype == tradetype.long or tradetype == tradetype.both), open, tickcolor = GetColor(9), arrowcolor = GetColor(9), name = "LONG"); AddOrder(OrderType.SELL_TO_CLOSE, iRSI < 0 and iRSI[1] > 0 and (tradetype == tradetype.long or tradetype == tradetype.both),open, tickcolor = GetColor(9), arrowcolor = GetColor(9), name = "LONG_EXIT"); AddOrder(OrderType.SELL_TO_OPEN,iRSI < 0 and iRSI[1] > 0 and (tradetype == tradetype.short or tradetype == tradetype.both),open, tickcolor = GetColor(8), arrowcolor = GetColor(8), name = "SHORT" ); AddOrder(OrderType.BUY_TO_CLOSE, iRSI > 0 and iRSI[1] < 0 and (tradetype == tradetype.short or tradetype == tradetype.both),open, tickcolor = GetColor(8), arrowcolor = GetColor(8), name = "SHORT_EXIT");