Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Fuzzy Logic Example
- # Build 23
- # The vast majority of this code has already been posted on reddit r/TheWallStreet by u/zoyosjd. This example shows how to take # well known reversal, momentum, and deviation based indicators, apply the concept of fuzzy logic to all of them to create a # single far more accurate but sligtly lagging indicator. As such it does give false signals which can be reduced with # optimizations.
- # This particular build is best viewed on the 5 day / 1 minute charts. All indicators have been reduced to quick view format. # Scroll to total skews section for more comments.
- def price = close;
- # StopsLoss and TakeProfit
- def WideStop = 4;
- def NarrowStop = 1;
- def WideProfit = 8;
- def NarrowProfit = 2;
- # StandardDevChannel Series
- def regression = InertiaAll(close);
- def stdDeviation = StDevAll(close);
- def STDCpos1 = regression + stdDeviation ;
- def STDCneg1 = regression - stdDeviation ;
- def STDCgradientMax = 30;
- def STDCgradientMin = -1 * STDCgradientMax;
- def STDCgradientCheck = IsNaN(((price - STDCneg1) * (STDCgradientMax - STDCgradientMin) / (STDCpos1 - STDCneg1) + STDCgradientMin));
- def STDCgradient = If(STDCgradientCheck == 1, 0, ((price - STDCneg1) * (STDCgradientMax - STDCgradientMin) / (STDCpos1 - STDCneg1) + STDCgradientMin));
- # Multi Time Frame Reversal Momentum
- input signalOffsetFactor_min_MTFA_RM = 0.50;
- def LongSignal_min_MTFA_RM;
- def ShortSignal_min_MTFA_RM;
- def NeutralSignal_min_MTFA_RM;
- def Period_min_close_min_MTFA_RM = close(period = AggregationPeriod.MIN);
- def Period_min_open_min_MTFA_RM = open(period = AggregationPeriod.MIN);
- def Period_min_high_min_MTFA_RM = high(period = AggregationPeriod.MIN);
- def Period_min_low_min_MTFA_RM = low(period = AggregationPeriod.MIN);
- def signalOffset_min_MTFA_RM = Average(TrueRange(Period_min_high_min_MTFA_RM , Period_min_close_min_MTFA_RM , Period_min_low_min_MTFA_RM ), 9) * signalOffsetFactor_min_MTFA_RM;
- def triggerSell_min_MTFA_RM = If((Period_min_high_min_MTFA_RM - Period_min_close_min_MTFA_RM > Period_min_close_min_MTFA_RM - Period_min_low_min_MTFA_RM ) and (Period_min_high_min_MTFA_RM - Period_min_close_min_MTFA_RM > AbsValue(Period_min_close_min_MTFA_RM [1] - Period_min_open_min_MTFA_RM [1])), 1, 0);
- def triggerBuy_min_MTFA_RM = If((Period_min_high_min_MTFA_RM - Period_min_close_min_MTFA_RM < Period_min_close_min_MTFA_RM - Period_min_low_min_MTFA_RM ) and (Period_min_close_min_MTFA_RM - Period_min_low_min_MTFA_RM > AbsValue(Period_min_close_min_MTFA_RM [1] - Period_min_open_min_MTFA_RM [1])), 1, 0);
- LongSignal_min_MTFA_RM = if triggerBuy_min_MTFA_RM == 1 && triggerSell_min_MTFA_RM == 0 then 1 else Double.NaN;
- ShortSignal_min_MTFA_RM = if triggerSell_min_MTFA_RM == 1 && triggerBuy_min_MTFA_RM == 0 then 1 else Double.NaN;
- NeutralSignal_min_MTFA_RM = if ( triggerBuy_min_MTFA_RM == 0 && triggerSell_min_MTFA_RM == 0 or triggerBuy_min_MTFA_RM == 1 && triggerSell_min_MTFA_RM == 1) then 1 else Double.NaN;
- AddLabel(1, "Reversal Momentum Series", Color.ORANGE);
- AddLabel(LongSignal_min_MTFA_RM, "min", Color.DARK_GREEN);
- AddLabel(ShortSignal_min_MTFA_RM, "min", Color.DARK_RED);
- AddLabel(NeutralSignal_min_MTFA_RM, "min", Color.WHITE);
- input signalOffsetFactor_fifteen_min_MTFA_RM = 0.50;
- def LongSignal_fifteen_min_MTFA_RM;
- def ShortSignal_fifteen_min_MTFA_RM;
- def NeutralSignal_fifteen_min_MTFA_RM;
- def Period_fifteen_min_close_fifteen_min_MTFA_RM = close(period = AggregationPeriod.FIFTEEN_MIN);
- def Period_fifteen_min_open_fifteen_min_MTFA_RM = open(period = AggregationPeriod.FIFTEEN_MIN);
- def Period_fifteen_min_high_fifteen_min_MTFA_RM = high(period = AggregationPeriod.FIFTEEN_MIN);
- def Period_fifteen_min_low_fifteen_min_MTFA_RM = low(period = AggregationPeriod.FIFTEEN_MIN);
- def signalOffset_fifteen_min_MTFA_RM = Average(TrueRange(Period_fifteen_min_high_fifteen_min_MTFA_RM , Period_fifteen_min_close_fifteen_min_MTFA_RM , Period_fifteen_min_low_fifteen_min_MTFA_RM ), 9) * signalOffsetFactor_fifteen_min_MTFA_RM;
- def triggerSell_fifteen_min_MTFA_RM = If((Period_fifteen_min_high_fifteen_min_MTFA_RM - Period_fifteen_min_close_fifteen_min_MTFA_RM > Period_fifteen_min_close_fifteen_min_MTFA_RM - Period_fifteen_min_low_fifteen_min_MTFA_RM ) and (Period_fifteen_min_high_fifteen_min_MTFA_RM - Period_fifteen_min_close_fifteen_min_MTFA_RM > AbsValue(Period_fifteen_min_close_fifteen_min_MTFA_RM [1] - Period_fifteen_min_open_fifteen_min_MTFA_RM [1])), 1, 0);
- def triggerBuy_fifteen_min_MTFA_RM = If((Period_fifteen_min_high_fifteen_min_MTFA_RM - Period_fifteen_min_close_fifteen_min_MTFA_RM < Period_fifteen_min_close_fifteen_min_MTFA_RM - Period_fifteen_min_low_fifteen_min_MTFA_RM ) and (Period_fifteen_min_close_fifteen_min_MTFA_RM - Period_fifteen_min_low_fifteen_min_MTFA_RM > AbsValue(Period_fifteen_min_close_fifteen_min_MTFA_RM [1] - Period_fifteen_min_open_fifteen_min_MTFA_RM [1])), 1, 0);
- LongSignal_fifteen_min_MTFA_RM = if triggerBuy_fifteen_min_MTFA_RM == 1 && triggerSell_fifteen_min_MTFA_RM == 0 then 1 else Double.NaN;
- ShortSignal_fifteen_min_MTFA_RM = if triggerSell_fifteen_min_MTFA_RM == 1 && triggerBuy_fifteen_min_MTFA_RM == 0 then 1 else Double.NaN;
- NeutralSignal_fifteen_min_MTFA_RM = if ( triggerBuy_fifteen_min_MTFA_RM == 0 && triggerSell_fifteen_min_MTFA_RM == 0 or triggerBuy_fifteen_min_MTFA_RM == 1 && triggerSell_fifteen_min_MTFA_RM == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_fifteen_min_MTFA_RM, "fifteen_min", Color.DARK_GREEN);
- AddLabel(ShortSignal_fifteen_min_MTFA_RM, "fifteen_min", Color.DARK_RED);
- AddLabel(NeutralSignal_fifteen_min_MTFA_RM, "fifteen_min", Color.WHITE);
- input signalOffsetFactor_hour_MTFA_RM = 0.50;
- def LongSignal_hour_MTFA_RM;
- def ShortSignal_hour_MTFA_RM;
- def NeutralSignal_hour_MTFA_RM;
- def Period_hour_close_hour_MTFA_RM = close(period = AggregationPeriod.HOUR);
- def Period_hour_open_hour_MTFA_RM = open(period = AggregationPeriod.HOUR);
- def Period_hour_high_hour_MTFA_RM = high(period = AggregationPeriod.HOUR);
- def Period_hour_low_hour_MTFA_RM = low(period = AggregationPeriod.HOUR);
- def signalOffset_hour_MTFA_RM = Average(TrueRange(Period_hour_high_hour_MTFA_RM , Period_hour_close_hour_MTFA_RM , Period_hour_low_hour_MTFA_RM ), 9) * signalOffsetFactor_hour_MTFA_RM;
- def triggerSell_hour_MTFA_RM = If((Period_hour_high_hour_MTFA_RM - Period_hour_close_hour_MTFA_RM > Period_hour_close_hour_MTFA_RM - Period_hour_low_hour_MTFA_RM ) and (Period_hour_high_hour_MTFA_RM - Period_hour_close_hour_MTFA_RM > AbsValue(Period_hour_close_hour_MTFA_RM [1] - Period_hour_open_hour_MTFA_RM [1])), 1, 0);
- def triggerBuy_hour_MTFA_RM = If((Period_hour_high_hour_MTFA_RM - Period_hour_close_hour_MTFA_RM < Period_hour_close_hour_MTFA_RM - Period_hour_low_hour_MTFA_RM ) and (Period_hour_close_hour_MTFA_RM - Period_hour_low_hour_MTFA_RM > AbsValue(Period_hour_close_hour_MTFA_RM [1] - Period_hour_open_hour_MTFA_RM [1])), 1, 0);
- LongSignal_hour_MTFA_RM = if triggerBuy_hour_MTFA_RM == 1 && triggerSell_hour_MTFA_RM == 0 then 1 else Double.NaN;
- ShortSignal_hour_MTFA_RM = if triggerSell_hour_MTFA_RM == 1 && triggerBuy_hour_MTFA_RM == 0 then 1 else Double.NaN;
- NeutralSignal_hour_MTFA_RM = if ( triggerBuy_hour_MTFA_RM == 0 && triggerSell_hour_MTFA_RM == 0 or triggerBuy_hour_MTFA_RM == 1 && triggerSell_hour_MTFA_RM == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_hour_MTFA_RM, "hour", Color.DARK_GREEN);
- AddLabel(ShortSignal_hour_MTFA_RM, "hour", Color.DARK_RED);
- AddLabel(NeutralSignal_hour_MTFA_RM, "hour", Color.WHITE);
- input signalOffsetFactor_four_hours_MTFA_RM = 0.50;
- def LongSignal_four_hours_MTFA_RM;
- def ShortSignal_four_hours_MTFA_RM;
- def NeutralSignal_four_hours_MTFA_RM;
- def Period_four_hours_close_four_hours_MTFA_RM = close(period = AggregationPeriod.FOUR_HOURS);
- def Period_four_hours_open_four_hours_MTFA_RM = open(period = AggregationPeriod.FOUR_HOURS);
- def Period_four_hours_high_four_hours_MTFA_RM = high(period = AggregationPeriod.FOUR_HOURS);
- def Period_four_hours_low_four_hours_MTFA_RM = low(period = AggregationPeriod.FOUR_HOURS);
- def signalOffset_four_hours_MTFA_RM = Average(TrueRange(Period_four_hours_high_four_hours_MTFA_RM , Period_four_hours_close_four_hours_MTFA_RM , Period_four_hours_low_four_hours_MTFA_RM ), 9) * signalOffsetFactor_four_hours_MTFA_RM;
- def triggerSell_four_hours_MTFA_RM = If((Period_four_hours_high_four_hours_MTFA_RM - Period_four_hours_close_four_hours_MTFA_RM > Period_four_hours_close_four_hours_MTFA_RM - Period_four_hours_low_four_hours_MTFA_RM ) and (Period_four_hours_high_four_hours_MTFA_RM - Period_four_hours_close_four_hours_MTFA_RM > AbsValue(Period_four_hours_close_four_hours_MTFA_RM [1] - Period_four_hours_open_four_hours_MTFA_RM [1])), 1, 0);
- def triggerBuy_four_hours_MTFA_RM = If((Period_four_hours_high_four_hours_MTFA_RM - Period_four_hours_close_four_hours_MTFA_RM < Period_four_hours_close_four_hours_MTFA_RM - Period_four_hours_low_four_hours_MTFA_RM ) and (Period_four_hours_close_four_hours_MTFA_RM - Period_four_hours_low_four_hours_MTFA_RM > AbsValue(Period_four_hours_close_four_hours_MTFA_RM [1] - Period_four_hours_open_four_hours_MTFA_RM [1])), 1, 0);
- LongSignal_four_hours_MTFA_RM = if triggerBuy_four_hours_MTFA_RM == 1 && triggerSell_four_hours_MTFA_RM == 0 then 1 else Double.NaN;
- ShortSignal_four_hours_MTFA_RM = if triggerSell_four_hours_MTFA_RM == 1 && triggerBuy_four_hours_MTFA_RM == 0 then 1 else Double.NaN;
- NeutralSignal_four_hours_MTFA_RM = if ( triggerBuy_four_hours_MTFA_RM == 0 && triggerSell_four_hours_MTFA_RM == 0 or triggerBuy_four_hours_MTFA_RM == 1 && triggerSell_four_hours_MTFA_RM == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_four_hours_MTFA_RM, "four_hours", Color.DARK_GREEN);
- AddLabel(ShortSignal_four_hours_MTFA_RM, "four_hours", Color.DARK_RED);
- AddLabel(NeutralSignal_four_hours_MTFA_RM, "four_hours", Color.WHITE);
- input signalOffsetFactor_week_MTFA_RM = 0.50;
- def LongSignal_week_MTFA_RM;
- def ShortSignal_week_MTFA_RM;
- def NeutralSignal_week_MTFA_RM;
- def Period_week_close_week_MTFA_RM = close(period = AggregationPeriod.WEEK);
- def Period_week_open_week_MTFA_RM = open(period = AggregationPeriod.WEEK);
- def Period_week_high_week_MTFA_RM = high(period = AggregationPeriod.WEEK);
- def Period_week_low_week_MTFA_RM = low(period = AggregationPeriod.WEEK);
- def signalOffset_week_MTFA_RM = Average(TrueRange(Period_week_high_week_MTFA_RM , Period_week_close_week_MTFA_RM , Period_week_low_week_MTFA_RM ), 9) * signalOffsetFactor_week_MTFA_RM;
- def triggerSell_week_MTFA_RM = If((Period_week_high_week_MTFA_RM - Period_week_close_week_MTFA_RM > Period_week_close_week_MTFA_RM - Period_week_low_week_MTFA_RM ) and (Period_week_high_week_MTFA_RM - Period_week_close_week_MTFA_RM > AbsValue(Period_week_close_week_MTFA_RM [1] - Period_week_open_week_MTFA_RM [1])), 1, 0);
- def triggerBuy_week_MTFA_RM = If((Period_week_high_week_MTFA_RM - Period_week_close_week_MTFA_RM < Period_week_close_week_MTFA_RM - Period_week_low_week_MTFA_RM ) and (Period_week_close_week_MTFA_RM - Period_week_low_week_MTFA_RM > AbsValue(Period_week_close_week_MTFA_RM [1] - Period_week_open_week_MTFA_RM [1])), 1, 0);
- LongSignal_week_MTFA_RM = if triggerBuy_week_MTFA_RM == 1 && triggerSell_week_MTFA_RM == 0 then 1 else Double.NaN;
- ShortSignal_week_MTFA_RM = if triggerSell_week_MTFA_RM == 1 && triggerBuy_week_MTFA_RM == 0 then 1 else Double.NaN;
- NeutralSignal_week_MTFA_RM = if ( triggerBuy_week_MTFA_RM == 0 && triggerSell_week_MTFA_RM == 0 or triggerBuy_week_MTFA_RM == 1 && triggerSell_week_MTFA_RM == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_week_MTFA_RM, "week", Color.DARK_GREEN);
- AddLabel(ShortSignal_week_MTFA_RM, "week", Color.DARK_RED);
- AddLabel(NeutralSignal_week_MTFA_RM, "week", Color.WHITE);
- # Outside Reversal Series
- declare once_per_bar;
- input BarMultiplier_min_OR = 1.25;
- input BarsBack_min_OR = 50;
- def Period_min_OR_close;
- def Period_min_OR_open;
- def Period_min_OR_high;
- def Period_min_OR_low;
- def Long_min_OR;
- def Short_min_OR;
- def LongSignal_min_OR;
- def ShortSignal_min_OR;
- def NeutralSignal_min_OR;
- Period_min_OR_close = close(period = AggregationPeriod.MIN);
- Period_min_OR_open = open(period = AggregationPeriod.MIN);
- Period_min_OR_high = high(period = AggregationPeriod.MIN);
- Period_min_OR_low = low(period = AggregationPeriod.MIN);
- def MyCandleSize_min_OR = (Period_min_OR_high - Period_min_OR_low);
- def AverageCandle_min_OR = Average(MyCandleSize_min_OR, BarsBack_min_OR);
- def Bar_min_OR = BarNumber();
- Long_min_OR = if Period_min_OR_low < Period_min_OR_low[1]
- and Period_min_OR_close > Period_min_OR_high[1]
- and ((Period_min_OR_high - Period_min_OR_low) >= (AverageCandle_min_OR * BarMultiplier_min_OR))
- then 1 else 0;
- Short_min_OR = if Period_min_OR_high > Period_min_OR_high[1]
- and Period_min_OR_close < Period_min_OR_low[1]
- and ((Period_min_OR_high - Period_min_OR_low) >= (AverageCandle_min_OR * BarMultiplier_min_OR))
- then 1 else 0;
- LongSignal_min_OR = if Long_min_OR == 1 && Short_min_OR == 0 then 1 else Double.NaN;
- ShortSignal_min_OR = if Short_min_OR == 1 && Long_min_OR == 0 then 1 else Double.NaN;
- NeutralSignal_min_OR = if ( Long_min_OR == 0 && Short_min_OR == 0 or Long_min_OR == 1 && Short_min_OR == 1) then 1 else Double.NaN;
- AddLabel(1, "Outside Reversal Series", Color.ORANGE);
- AddLabel(LongSignal_min_OR, "min", Color.DARK_GREEN);
- AddLabel(ShortSignal_min_OR, "min", Color.DARK_RED);
- AddLabel(NeutralSignal_min_OR, "min", Color.WHITE);
- input BarMultiplier_fifteen_min_OR = 1.25;
- input BarsBack_fifteen_min_OR = 50;
- def Period_fifteen_min_OR_close;
- def Period_fifteen_min_OR_open;
- def Period_fifteen_min_OR_high;
- def Period_fifteen_min_OR_low;
- def Long_fifteen_min_OR;
- def Short_fifteen_min_OR;
- def LongSignal_fifteen_min_OR;
- def ShortSignal_fifteen_min_OR;
- def NeutralSignal_fifteen_min_OR;
- Period_fifteen_min_OR_close = close(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_OR_open = open(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_OR_high = high(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_OR_low = low(period = AggregationPeriod.FIFTEEN_MIN);
- def MyCandleSize_fifteen_min_OR = (Period_fifteen_min_OR_high - Period_fifteen_min_OR_low);
- def AverageCandle_fifteen_min_OR = Average(MyCandleSize_fifteen_min_OR, BarsBack_fifteen_min_OR);
- def Bar_fifteen_min_OR = BarNumber();
- Long_fifteen_min_OR = if Period_fifteen_min_OR_low < Period_fifteen_min_OR_low[1]
- and Period_fifteen_min_OR_close > Period_fifteen_min_OR_high[1]
- and ((Period_fifteen_min_OR_high - Period_fifteen_min_OR_low) >= (AverageCandle_fifteen_min_OR * BarMultiplier_fifteen_min_OR))
- then 1 else 0;
- Short_fifteen_min_OR = if Period_fifteen_min_OR_high > Period_fifteen_min_OR_high[1]
- and Period_fifteen_min_OR_close < Period_fifteen_min_OR_low[1]
- and ((Period_fifteen_min_OR_high - Period_fifteen_min_OR_low) >= (AverageCandle_fifteen_min_OR * BarMultiplier_fifteen_min_OR))
- then 1 else 0;
- LongSignal_fifteen_min_OR = if Long_fifteen_min_OR == 1 && Short_fifteen_min_OR == 0 then 1 else Double.NaN;
- ShortSignal_fifteen_min_OR = if Short_fifteen_min_OR == 1 && Long_fifteen_min_OR == 0 then 1 else Double.NaN;
- NeutralSignal_fifteen_min_OR = if ( Long_fifteen_min_OR == 0 && Short_fifteen_min_OR == 0 or Long_fifteen_min_OR == 1 && Short_fifteen_min_OR == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_fifteen_min_OR, "fifteen_min", Color.DARK_GREEN);
- AddLabel(ShortSignal_fifteen_min_OR, "fifteen_min", Color.DARK_RED);
- AddLabel(NeutralSignal_fifteen_min_OR, "fifteen_min", Color.WHITE);
- input BarMultiplier_hour_OR = 1.25;
- input BarsBack_hour_OR = 50;
- def Period_hour_OR_close;
- def Period_hour_OR_open;
- def Period_hour_OR_high;
- def Period_hour_OR_low;
- def Long_hour_OR;
- def Short_hour_OR;
- def LongSignal_hour_OR;
- def ShortSignal_hour_OR;
- def NeutralSignal_hour_OR;
- Period_hour_OR_close = close(period = AggregationPeriod.HOUR);
- Period_hour_OR_open = open(period = AggregationPeriod.HOUR);
- Period_hour_OR_high = high(period = AggregationPeriod.HOUR);
- Period_hour_OR_low = low(period = AggregationPeriod.HOUR);
- def MyCandleSize_hour_OR = (Period_hour_OR_high - Period_hour_OR_low);
- def AverageCandle_hour_OR = Average(MyCandleSize_hour_OR, BarsBack_hour_OR);
- def Bar_hour_OR = BarNumber();
- Long_hour_OR = if Period_hour_OR_low < Period_hour_OR_low[1]
- and Period_hour_OR_close > Period_hour_OR_high[1]
- and ((Period_hour_OR_high - Period_hour_OR_low) >= (AverageCandle_hour_OR * BarMultiplier_hour_OR))
- then 1 else 0;
- Short_hour_OR = if Period_hour_OR_high > Period_hour_OR_high[1]
- and Period_hour_OR_close < Period_hour_OR_low[1]
- and ((Period_hour_OR_high - Period_hour_OR_low) >= (AverageCandle_hour_OR * BarMultiplier_hour_OR))
- then 1 else 0;
- LongSignal_hour_OR = if Long_hour_OR == 1 && Short_hour_OR == 0 then 1 else Double.NaN;
- ShortSignal_hour_OR = if Short_hour_OR == 1 && Long_hour_OR == 0 then 1 else Double.NaN;
- NeutralSignal_hour_OR = if ( Long_hour_OR == 0 && Short_hour_OR == 0 or Long_hour_OR == 1 && Short_hour_OR == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_hour_OR, "hour", Color.DARK_GREEN);
- AddLabel(ShortSignal_hour_OR, "hour", Color.DARK_RED);
- AddLabel(NeutralSignal_hour_OR, "hour", Color.WHITE);
- input BarMultiplier_four_hours_ORs = 1.25;
- input BarsBack_four_hours_ORs = 50;
- def Period_four_hours_ORs_close;
- def Period_four_hours_ORs_open;
- def Period_four_hours_ORs_high;
- def Period_four_hours_ORs_low;
- def Long_four_hours_ORs;
- def Short_four_hours_ORs;
- def LongSignal_four_hours_ORs;
- def ShortSignal_four_hours_ORs;
- def NeutralSignal_four_hours_ORs;
- Period_four_hours_ORs_close = close(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hours_ORs_open = open(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hours_ORs_high = high(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hours_ORs_low = low(period = AggregationPeriod.FOUR_HOURS);
- def MyCandleSize_four_hours_ORs = (Period_four_hours_ORs_high - Period_four_hours_ORs_low);
- def AverageCandle_four_hours_ORs = Average(MyCandleSize_four_hours_ORs, BarsBack_four_hours_ORs);
- def Bar_four_hours_ORs = BarNumber();
- Long_four_hours_ORs = if Period_four_hours_ORs_low < Period_four_hours_ORs_low[1]
- and Period_four_hours_ORs_close > Period_four_hours_ORs_high[1]
- and ((Period_four_hours_ORs_high - Period_four_hours_ORs_low) >= (AverageCandle_four_hours_ORs * BarMultiplier_four_hours_ORs))
- then 1 else 0;
- Short_four_hours_ORs = if Period_four_hours_ORs_high > Period_four_hours_ORs_high[1]
- and Period_four_hours_ORs_close < Period_four_hours_ORs_low[1]
- and ((Period_four_hours_ORs_high - Period_four_hours_ORs_low) >= (AverageCandle_four_hours_ORs * BarMultiplier_four_hours_ORs))
- then 1 else 0;
- LongSignal_four_hours_ORs = if Long_four_hours_ORs == 1 && Short_four_hours_ORs == 0 then 1 else Double.NaN;
- ShortSignal_four_hours_ORs = if Short_four_hours_ORs == 1 && Long_four_hours_ORs == 0 then 1 else Double.NaN;
- NeutralSignal_four_hours_ORs = if ( Long_four_hours_ORs == 0 && Short_four_hours_ORs == 0 or Long_four_hours_ORs == 1 && Short_four_hours_ORs == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_four_hours_ORs, "four_hours", Color.DARK_GREEN);
- AddLabel(ShortSignal_four_hours_ORs, "four_hours", Color.DARK_RED);
- AddLabel(NeutralSignal_four_hours_ORs, "four_hours", Color.WHITE);
- input BarMultiplier_week_ORs = 1.25;
- input BarsBack_week_ORs = 50;
- def Period_week_ORs_close;
- def Period_week_ORs_open;
- def Period_week_ORs_high;
- def Period_week_ORs_low;
- def Long_week_ORs;
- def Short_week_ORs;
- def LongSignal_week_ORs;
- def ShortSignal_week_ORs;
- def NeutralSignal_week_ORs;
- Period_week_ORs_close = close(period = AggregationPeriod.WEEK);
- Period_week_ORs_open = open(period = AggregationPeriod.WEEK);
- Period_week_ORs_high = high(period = AggregationPeriod.WEEK);
- Period_week_ORs_low = low(period = AggregationPeriod.WEEK);
- def MyCandleSize_week_ORs = (Period_week_ORs_high - Period_week_ORs_low);
- def AverageCandle_week_ORs = Average(MyCandleSize_week_ORs, BarsBack_week_ORs);
- def Bar_week_ORs = BarNumber();
- Long_week_ORs = if Period_week_ORs_low < Period_week_ORs_low[1]
- and Period_week_ORs_close > Period_week_ORs_high[1]
- and ((Period_week_ORs_high - Period_week_ORs_low) >= (AverageCandle_week_ORs * BarMultiplier_week_ORs))
- then 1 else 0;
- Short_week_ORs = if Period_week_ORs_high > Period_week_ORs_high[1]
- and Period_week_ORs_close < Period_week_ORs_low[1]
- and ((Period_week_ORs_high - Period_week_ORs_low) >= (AverageCandle_week_ORs * BarMultiplier_week_ORs))
- then 1 else 0;
- LongSignal_week_ORs = if Long_week_ORs == 1 && Short_week_ORs == 0 then 1 else Double.NaN;
- ShortSignal_week_ORs = if Short_week_ORs == 1 && Long_week_ORs == 0 then 1 else Double.NaN;
- NeutralSignal_week_ORs = if ( Long_week_ORs == 0 && Short_week_ORs == 0 or Long_week_ORs == 1 && Short_week_ORs == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_week_ORs, "week", Color.DARK_GREEN);
- AddLabel(ShortSignal_week_ORs, "week", Color.DARK_RED);
- AddLabel(NeutralSignal_week_ORs, "week", Color.WHITE);
- # Extreme Reversal Series
- input BodySize_min_ER = 0.525;
- input BarsBack_min_ER = 50;
- input BodyMultiplier_min_ER = 0.25;
- def Period_min_ER_close;
- def Period_min_ER_open;
- def Period_min_ER_high;
- def Period_min_ER_low;
- def Long_min_ER;
- def Short_min_ER;
- def LongSignal_min_ER;
- def ShortSignal_min_ER;
- def NeutralSignal_min_ER;
- Period_min_ER_close = close(period = AggregationPeriod.MIN);
- Period_min_ER_open = open(period = AggregationPeriod.MIN);
- Period_min_ER_high = high(period = AggregationPeriod.MIN);
- Period_min_ER_low = low(period = AggregationPeriod.MIN);
- def Bar_min_ER = BarNumber();
- def AverageBody_min_ER = Average(BodySize_min_ER, BarsBack_min_ER);
- def MyBodySize_min_ER = AbsValue(Period_min_ER_close - Period_min_ER_open);
- def MyCandleSize_min_ER = Period_min_ER_high - Period_min_ER_low;
- def AverageCandle_min_ER = Average(MyCandleSize_min_ER, BarsBack_min_ER);
- Long_min_ER = if ((Period_min_ER_open[1] - Period_min_ER_close[1]) >= (BodySize_min_ER * (Period_min_ER_high[1] - Period_min_ER_low[1])))
- and ((Period_min_ER_high[1] - Period_min_ER_low[1]) > (AverageCandle_min_ER * BodyMultiplier_min_ER))
- and ((Period_min_ER_open[1] - Period_min_ER_close[1]) > AverageBody_min_ER)
- and (Period_min_ER_close > Period_min_ER_open) then 1 else 0;
- Short_min_ER = if ((Period_min_ER_close[1] - Period_min_ER_open[1]) >= BodySize_min_ER * (Period_min_ER_high[1] - Period_min_ER_low[1]))
- and ((Period_min_ER_high[1] - Period_min_ER_low[1]) > (AverageCandle_min_ER * BodyMultiplier_min_ER))
- and ((Period_min_ER_close[1] - Period_min_ER_open[1]) > AverageBody_min_ER)
- and (Period_min_ER_open > Period_min_ER_close) then 1 else 0;
- LongSignal_min_ER = if Long_min_ER == 1 && Short_min_ER == 0 then 1 else Double.NaN;
- ShortSignal_min_ER = if Short_min_ER == 1 && Long_min_ER == 0 then 1 else Double.NaN;
- NeutralSignal_min_ER = if ( Long_min_ER == 0 && Short_min_ER == 0 or Long_min_ER == 1 && Short_min_ER == 1) then 1 else Double.NaN;
- AddLabel(1, "Extreme Reversal Series", Color.ORANGE);
- AddLabel(LongSignal_min_ER, "min", Color.DARK_GREEN);
- AddLabel(ShortSignal_min_ER, "min", Color.DARK_RED);
- AddLabel(NeutralSignal_min_ER, "min", Color.WHITE);
- input BodySize_fifteen_min_ER = 0.525;
- input BarsBack_fifteen_min_ER = 50;
- input BodyMultiplier_fifteen_min_ER = 0.25;
- def Period_fifteen_min_ER_close;
- def Period_fifteen_min_ER_open;
- def Period_fifteen_min_ER_high;
- def Period_fifteen_min_ER_low;
- def Long_fifteen_min_ER;
- def Short_fifteen_min_ER;
- def LongSignal_fifteen_min_ER;
- def ShortSignal_fifteen_min_ER;
- def NeutralSignal_fifteen_min_ER;
- Period_fifteen_min_ER_close = close(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_ER_open = open(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_ER_high = high(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_ER_low = low(period = AggregationPeriod.FIFTEEN_MIN);
- def Bar_fifteen_min_ER = BarNumber();
- def AverageBody_fifteen_min_ER = Average(BodySize_fifteen_min_ER, BarsBack_fifteen_min_ER);
- def MyBodySize_fifteen_min_ER = AbsValue(Period_fifteen_min_ER_close - Period_fifteen_min_ER_open);
- def MyCandleSize_fifteen_min_ER = Period_fifteen_min_ER_high - Period_fifteen_min_ER_low;
- def AverageCandle_fifteen_min_ER = Average(MyCandleSize_fifteen_min_ER, BarsBack_fifteen_min_ER);
- Long_fifteen_min_ER = if ((Period_fifteen_min_ER_open[1] - Period_fifteen_min_ER_close[1]) >= (BodySize_fifteen_min_ER * (Period_fifteen_min_ER_high[1] - Period_fifteen_min_ER_low[1])))
- and ((Period_fifteen_min_ER_high[1] - Period_fifteen_min_ER_low[1]) > (AverageCandle_fifteen_min_ER * BodyMultiplier_fifteen_min_ER))
- and ((Period_fifteen_min_ER_open[1] - Period_fifteen_min_ER_close[1]) > AverageBody_fifteen_min_ER)
- and (Period_fifteen_min_ER_close > Period_fifteen_min_ER_open) then 1 else 0;
- Short_fifteen_min_ER = if ((Period_fifteen_min_ER_close[1] - Period_fifteen_min_ER_open[1]) >= BodySize_fifteen_min_ER * (Period_fifteen_min_ER_high[1] - Period_fifteen_min_ER_low[1]))
- and ((Period_fifteen_min_ER_high[1] - Period_fifteen_min_ER_low[1]) > (AverageCandle_fifteen_min_ER * BodyMultiplier_fifteen_min_ER))
- and ((Period_fifteen_min_ER_close[1] - Period_fifteen_min_ER_open[1]) > AverageBody_fifteen_min_ER)
- and (Period_fifteen_min_ER_open > Period_fifteen_min_ER_close) then 1 else 0;
- LongSignal_fifteen_min_ER = if Long_fifteen_min_ER == 1 && Short_fifteen_min_ER == 0 then 1 else Double.NaN;
- ShortSignal_fifteen_min_ER = if Short_fifteen_min_ER == 1 && Long_fifteen_min_ER == 0 then 1 else Double.NaN;
- NeutralSignal_fifteen_min_ER = if ( Long_fifteen_min_ER == 0 && Short_fifteen_min_ER == 0 or Long_fifteen_min_ER == 1 && Short_fifteen_min_ER == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_fifteen_min_ER, "fifteen_min", Color.DARK_GREEN);
- AddLabel(ShortSignal_fifteen_min_ER, "fifteen_min", Color.DARK_RED);
- AddLabel(NeutralSignal_fifteen_min_ER, "fifteen_min", Color.WHITE);
- input BodySize_hour_ER = 0.525;
- input BarsBack_hour_ER = 50;
- input BodyMultiplier_hour_ER = 0.25;
- def Period_hour_ER_close;
- def Period_hour_ER_open;
- def Period_hour_ER_high;
- def Period_hour_ER_low;
- def Long_hour_ER;
- def Short_hour_ER;
- def LongSignal_hour_ER;
- def ShortSignal_hour_ER;
- def NeutralSignal_hour_ER;
- Period_hour_ER_close = close(period = AggregationPeriod.HOUR);
- Period_hour_ER_open = open(period = AggregationPeriod.HOUR);
- Period_hour_ER_high = high(period = AggregationPeriod.HOUR);
- Period_hour_ER_low = low(period = AggregationPeriod.HOUR);
- def Bar_hour_ER = BarNumber();
- def AverageBody_hour_ER = Average(BodySize_hour_ER, BarsBack_hour_ER);
- def MyBodySize_hour_ER = AbsValue(Period_hour_ER_close - Period_hour_ER_open);
- def MyCandleSize_hour_ER = Period_hour_ER_high - Period_hour_ER_low;
- def AverageCandle_hour_ER = Average(MyCandleSize_hour_ER, BarsBack_hour_ER);
- Long_hour_ER = if ((Period_hour_ER_open[1] - Period_hour_ER_close[1]) >= (BodySize_hour_ER * (Period_hour_ER_high[1] - Period_hour_ER_low[1])))
- and ((Period_hour_ER_high[1] - Period_hour_ER_low[1]) > (AverageCandle_hour_ER * BodyMultiplier_hour_ER))
- and ((Period_hour_ER_open[1] - Period_hour_ER_close[1]) > AverageBody_hour_ER)
- and (Period_hour_ER_close > Period_hour_ER_open) then 1 else 0;
- Short_hour_ER = if ((Period_hour_ER_close[1] - Period_hour_ER_open[1]) >= BodySize_hour_ER * (Period_hour_ER_high[1] - Period_hour_ER_low[1]))
- and ((Period_hour_ER_high[1] - Period_hour_ER_low[1]) > (AverageCandle_hour_ER * BodyMultiplier_hour_ER))
- and ((Period_hour_ER_close[1] - Period_hour_ER_open[1]) > AverageBody_hour_ER)
- and (Period_hour_ER_open > Period_hour_ER_close) then 1 else 0;
- LongSignal_hour_ER = if Long_hour_ER == 1 && Short_hour_ER == 0 then 1 else Double.NaN;
- ShortSignal_hour_ER = if Short_hour_ER == 1 && Long_hour_ER == 0 then 1 else Double.NaN;
- NeutralSignal_hour_ER = if ( Long_hour_ER == 0 && Short_hour_ER == 0 or Long_hour_ER == 1 && Short_hour_ER == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_hour_ER, "hour", Color.DARK_GREEN);
- AddLabel(ShortSignal_hour_ER, "hour", Color.DARK_RED);
- AddLabel(NeutralSignal_hour_ER, "hour", Color.WHITE);
- input BodySize_four_hour_ER = 0.525;
- input BarsBack_four_hour_ER = 50;
- input BodyMultiplier_four_hour_ER = 0.25;
- def Period_four_hour_ER_close;
- def Period_four_hour_ER_open;
- def Period_four_hour_ER_high;
- def Period_four_hour_ER_low;
- def Long_four_hour_ER;
- def Short_four_hour_ER;
- def LongSignal_four_hour_ER;
- def ShortSignal_four_hour_ER;
- def NeutralSignal_four_hour_ER;
- Period_four_hour_ER_close = close(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hour_ER_open = open(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hour_ER_high = high(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hour_ER_low = low(period = AggregationPeriod.FOUR_HOURS);
- def Bar_four_hour_ER = BarNumber();
- def AverageBody_four_hour_ER = Average(BodySize_four_hour_ER, BarsBack_four_hour_ER);
- def MyBodySize_four_hour_ER = AbsValue(Period_four_hour_ER_close - Period_four_hour_ER_open);
- def MyCandleSize_four_hour_ER = Period_four_hour_ER_high - Period_four_hour_ER_low;
- def AverageCandle_four_hour_ER = Average(MyCandleSize_four_hour_ER, BarsBack_four_hour_ER);
- Long_four_hour_ER = if ((Period_four_hour_ER_open[1] - Period_four_hour_ER_close[1]) >= (BodySize_four_hour_ER * (Period_four_hour_ER_high[1] - Period_four_hour_ER_low[1])))
- and ((Period_four_hour_ER_high[1] - Period_four_hour_ER_low[1]) > (AverageCandle_four_hour_ER * BodyMultiplier_four_hour_ER))
- and ((Period_four_hour_ER_open[1] - Period_four_hour_ER_close[1]) > AverageBody_four_hour_ER)
- and (Period_four_hour_ER_close > Period_four_hour_ER_open) then 1 else 0;
- Short_four_hour_ER = if ((Period_four_hour_ER_close[1] - Period_four_hour_ER_open[1]) >= BodySize_four_hour_ER * (Period_four_hour_ER_high[1] - Period_four_hour_ER_low[1]))
- and ((Period_four_hour_ER_high[1] - Period_four_hour_ER_low[1]) > (AverageCandle_four_hour_ER * BodyMultiplier_four_hour_ER))
- and ((Period_four_hour_ER_close[1] - Period_four_hour_ER_open[1]) > AverageBody_four_hour_ER)
- and (Period_four_hour_ER_open > Period_four_hour_ER_close) then 1 else 0;
- LongSignal_four_hour_ER = if Long_four_hour_ER == 1 && Short_four_hour_ER == 0 then 1 else Double.NaN;
- ShortSignal_four_hour_ER = if Short_four_hour_ER == 1 && Long_four_hour_ER == 0 then 1 else Double.NaN;
- NeutralSignal_four_hour_ER = if ( Long_four_hour_ER == 0 && Short_four_hour_ER == 0 or Long_four_hour_ER == 1 && Short_four_hour_ER == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_four_hour_ER, "four_hour", Color.DARK_GREEN);
- AddLabel(ShortSignal_four_hour_ER, "four_hour", Color.DARK_RED);
- AddLabel(NeutralSignal_four_hour_ER, "four_hour", Color.WHITE);
- input BodySize_week_ER = 0.525;
- input BarsBack_week_ER = 50;
- input BodyMultiplier_week_ER = 0.25;
- def Period_week_ER_close;
- def Period_week_ER_open;
- def Period_week_ER_high;
- def Period_week_ER_low;
- def Long_week_ER;
- def Short_week_ER;
- def LongSignal_week_ER;
- def ShortSignal_week_ER;
- def NeutralSignal_week_ER;
- Period_week_ER_close = close(period = AggregationPeriod.WEEK);
- Period_week_ER_open = open(period = AggregationPeriod.WEEK);
- Period_week_ER_high = high(period = AggregationPeriod.WEEK);
- Period_week_ER_low = low(period = AggregationPeriod.WEEK);
- def Bar_week_ER = BarNumber();
- def AverageBody_week_ER = Average(BodySize_week_ER, BarsBack_week_ER);
- def MyBodySize_week_ER = AbsValue(Period_week_ER_close - Period_week_ER_open);
- def MyCandleSize_week_ER = Period_week_ER_high - Period_week_ER_low;
- def AverageCandle_week_ER = Average(MyCandleSize_week_ER, BarsBack_week_ER);
- Long_week_ER = if ((Period_week_ER_open[1] - Period_week_ER_close[1]) >= (BodySize_week_ER * (Period_week_ER_high[1] - Period_week_ER_low[1])))
- and ((Period_week_ER_high[1] - Period_week_ER_low[1]) > (AverageCandle_week_ER * BodyMultiplier_week_ER))
- and ((Period_week_ER_open[1] - Period_week_ER_close[1]) > AverageBody_week_ER)
- and (Period_week_ER_close > Period_week_ER_open) then 1 else 0;
- Short_week_ER = if ((Period_week_ER_close[1] - Period_week_ER_open[1]) >= BodySize_week_ER * (Period_week_ER_high[1] - Period_week_ER_low[1]))
- and ((Period_week_ER_high[1] - Period_week_ER_low[1]) > (AverageCandle_week_ER * BodyMultiplier_week_ER))
- and ((Period_week_ER_close[1] - Period_week_ER_open[1]) > AverageBody_week_ER)
- and (Period_week_ER_open > Period_week_ER_close) then 1 else 0;
- LongSignal_week_ER = if Long_week_ER == 1 && Short_week_ER == 0 then 1 else Double.NaN;
- ShortSignal_week_ER = if Short_week_ER == 1 && Long_week_ER == 0 then 1 else Double.NaN;
- NeutralSignal_week_ER = if ( Long_week_ER == 0 && Short_week_ER == 0 or Long_week_ER == 1 && Short_week_ER == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_week_ER, "week", Color.DARK_GREEN);
- AddLabel(ShortSignal_week_ER, "week", Color.DARK_RED);
- AddLabel(NeutralSignal_week_ER, "week", Color.WHITE);
- # Wick Reversal Series
- input WickMultiplier_min_WR = 2.5;
- input BodyPercentage_min_WR = .25;
- def Period_min_WR_close;
- def Period_min_WR_open;
- def Period_min_WR_high;
- def Period_min_WR_low;
- def Long_min_WR;
- def Short_min_WR;
- def LongSignal_min_WR;
- def ShortSignal_min_WR;
- def NeutralSignal_min_WR;
- Period_min_WR_close = close(period = AggregationPeriod.MIN);
- Period_min_WR_open = open(period = AggregationPeriod.MIN);
- Period_min_WR_high = high(period = AggregationPeriod.MIN);
- Period_min_WR_low = low(period = AggregationPeriod.MIN);
- Long_min_WR = if Period_min_WR_close > Period_min_WR_open
- and (Period_min_WR_open - Period_min_WR_low) >= ((Period_min_WR_close - Period_min_WR_open) * WickMultiplier_min_WR)
- and (Period_min_WR_high - Period_min_WR_close) <= ((Period_min_WR_high - Period_min_WR_low) * BodyPercentage_min_WR)
- or Period_min_WR_close < Period_min_WR_open
- and (Period_min_WR_close - Period_min_WR_low) >= ((Period_min_WR_open - Period_min_WR_close) * WickMultiplier_min_WR)
- and (Period_min_WR_high - Period_min_WR_close) <= ((Period_min_WR_high - Period_min_WR_low) * BodyPercentage_min_WR)
- or Period_min_WR_close == Period_min_WR_open and Period_min_WR_close != Period_min_WR_high
- and Period_min_WR_high - Period_min_WR_low >= Average(Period_min_WR_high - Period_min_WR_low, 50) then 1 else 0;
- Short_min_WR = if Period_min_WR_close < Period_min_WR_open
- and (Period_min_WR_high - Period_min_WR_open) >= ((Period_min_WR_open - Period_min_WR_close) * WickMultiplier_min_WR)
- and (Period_min_WR_close - Period_min_WR_low) <= ((Period_min_WR_high - Period_min_WR_low) * BodyPercentage_min_WR)
- or Period_min_WR_close > Period_min_WR_open
- and (Period_min_WR_high - Period_min_WR_close) >= ((Period_min_WR_close - Period_min_WR_open) * WickMultiplier_min_WR)
- and (Period_min_WR_close - Period_min_WR_low) <= ((Period_min_WR_high - Period_min_WR_low) * BodyPercentage_min_WR)
- or Period_min_WR_close == Period_min_WR_open and Period_min_WR_close != Period_min_WR_low
- and (Period_min_WR_high - Period_min_WR_low) >= ((Period_min_WR_close - Period_min_WR_low) * WickMultiplier_min_WR)
- and (Period_min_WR_close - Period_min_WR_low) <= ((Period_min_WR_high - Period_min_WR_low) * BodyPercentage_min_WR)
- or Period_min_WR_open == Period_min_WR_low and Period_min_WR_close == Period_min_WR_low
- and Period_min_WR_high - Period_min_WR_low >= Average(Period_min_WR_high - Period_min_WR_low, 50) then 1 else 0;
- LongSignal_min_WR = if Long_min_WR == 1 && Short_min_WR == 0 then 1 else Double.NaN;
- ShortSignal_min_WR = if Short_min_WR == 1 && Long_min_WR == 0 then 1 else Double.NaN;
- NeutralSignal_min_WR = if ( Long_min_WR == 0 && Short_min_WR == 0 or Long_min_WR == 1 && Short_min_WR == 1) then 1 else Double.NaN;
- AddLabel(1, "Wick Reversal Series", Color.ORANGE);
- AddLabel(LongSignal_min_WR, "min", Color.DARK_GREEN);
- AddLabel(ShortSignal_min_WR, "min", Color.DARK_RED);
- AddLabel(NeutralSignal_min_WR, "min", Color.WHITE);
- input WickMultiplier_fifteen_min_WR = 2.5;
- input BodyPercentage_fifteen_min_WR = .25;
- def Period_fifteen_min_WR_close;
- def Period_fifteen_min_WR_open;
- def Period_fifteen_min_WR_high;
- def Period_fifteen_min_WR_low;
- def Long_fifteen_min_WR;
- def Short_fifteen_min_WR;
- def LongSignal_fifteen_min_WR;
- def ShortSignal_fifteen_min_WR;
- def NeutralSignal_fifteen_min_WR;
- Period_fifteen_min_WR_close = close(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_WR_open = open(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_WR_high = high(period = AggregationPeriod.FIFTEEN_MIN);
- Period_fifteen_min_WR_low = low(period = AggregationPeriod.FIFTEEN_MIN);
- Long_fifteen_min_WR = if Period_fifteen_min_WR_close > Period_fifteen_min_WR_open
- and (Period_fifteen_min_WR_open - Period_fifteen_min_WR_low) >= ((Period_fifteen_min_WR_close - Period_fifteen_min_WR_open) * WickMultiplier_fifteen_min_WR)
- and (Period_fifteen_min_WR_high - Period_fifteen_min_WR_close) <= ((Period_fifteen_min_WR_high - Period_fifteen_min_WR_low) * BodyPercentage_fifteen_min_WR)
- or Period_fifteen_min_WR_close < Period_fifteen_min_WR_open
- and (Period_fifteen_min_WR_close - Period_fifteen_min_WR_low) >= ((Period_fifteen_min_WR_open - Period_fifteen_min_WR_close) * WickMultiplier_fifteen_min_WR)
- and (Period_fifteen_min_WR_high - Period_fifteen_min_WR_close) <= ((Period_fifteen_min_WR_high - Period_fifteen_min_WR_low) * BodyPercentage_fifteen_min_WR)
- or Period_fifteen_min_WR_close == Period_fifteen_min_WR_open and Period_fifteen_min_WR_close != Period_fifteen_min_WR_high
- and Period_fifteen_min_WR_high - Period_fifteen_min_WR_low >= Average(Period_fifteen_min_WR_high - Period_fifteen_min_WR_low, 50) then 1 else 0;
- Short_fifteen_min_WR = if Period_fifteen_min_WR_close < Period_fifteen_min_WR_open
- and (Period_fifteen_min_WR_high - Period_fifteen_min_WR_open) >= ((Period_fifteen_min_WR_open - Period_fifteen_min_WR_close) * WickMultiplier_fifteen_min_WR)
- and (Period_fifteen_min_WR_close - Period_fifteen_min_WR_low) <= ((Period_fifteen_min_WR_high - Period_fifteen_min_WR_low) * BodyPercentage_fifteen_min_WR)
- or Period_fifteen_min_WR_close > Period_fifteen_min_WR_open
- and (Period_fifteen_min_WR_high - Period_fifteen_min_WR_close) >= ((Period_fifteen_min_WR_close - Period_fifteen_min_WR_open) * WickMultiplier_fifteen_min_WR)
- and (Period_fifteen_min_WR_close - Period_fifteen_min_WR_low) <= ((Period_fifteen_min_WR_high - Period_fifteen_min_WR_low) * BodyPercentage_fifteen_min_WR)
- or Period_fifteen_min_WR_close == Period_fifteen_min_WR_open and Period_fifteen_min_WR_close != Period_fifteen_min_WR_low
- and (Period_fifteen_min_WR_high - Period_fifteen_min_WR_low) >= ((Period_fifteen_min_WR_close - Period_fifteen_min_WR_low) * WickMultiplier_fifteen_min_WR)
- and (Period_fifteen_min_WR_close - Period_fifteen_min_WR_low) <= ((Period_fifteen_min_WR_high - Period_fifteen_min_WR_low) * BodyPercentage_fifteen_min_WR)
- or Period_fifteen_min_WR_open == Period_fifteen_min_WR_low and Period_fifteen_min_WR_close == Period_fifteen_min_WR_low
- and Period_fifteen_min_WR_high - Period_fifteen_min_WR_low >= Average(Period_fifteen_min_WR_high - Period_fifteen_min_WR_low, 50) then 1 else 0;
- LongSignal_fifteen_min_WR = if Long_fifteen_min_WR == 1 && Short_fifteen_min_WR == 0 then 1 else Double.NaN;
- ShortSignal_fifteen_min_WR = if Short_fifteen_min_WR == 1 && Long_fifteen_min_WR == 0 then 1 else Double.NaN;
- NeutralSignal_fifteen_min_WR = if ( Long_fifteen_min_WR == 0 && Short_fifteen_min_WR == 0 or Long_fifteen_min_WR == 1 && Short_fifteen_min_WR == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_fifteen_min_WR, "fifteen_min", Color.DARK_GREEN);
- AddLabel(ShortSignal_fifteen_min_WR, "fifteen_min", Color.DARK_RED);
- AddLabel(NeutralSignal_fifteen_min_WR, "fifteen_min", Color.WHITE);
- input WickMultiplier_hour_WR = 2.5;
- input BodyPercentage_hour_WR = .25;
- def Period_hour_WR_close;
- def Period_hour_WR_open;
- def Period_hour_WR_high;
- def Period_hour_WR_low;
- def Long_hour_WR;
- def Short_hour_WR;
- def LongSignal_hour_WR;
- def ShortSignal_hour_WR;
- def NeutralSignal_hour_WR;
- Period_hour_WR_close = close(period = AggregationPeriod.HOUR);
- Period_hour_WR_open = open(period = AggregationPeriod.HOUR);
- Period_hour_WR_high = high(period = AggregationPeriod.HOUR);
- Period_hour_WR_low = low(period = AggregationPeriod.HOUR);
- Long_hour_WR = if Period_hour_WR_close > Period_hour_WR_open
- and (Period_hour_WR_open - Period_hour_WR_low) >= ((Period_hour_WR_close - Period_hour_WR_open) * WickMultiplier_hour_WR)
- and (Period_hour_WR_high - Period_hour_WR_close) <= ((Period_hour_WR_high - Period_hour_WR_low) * BodyPercentage_hour_WR)
- or Period_hour_WR_close < Period_hour_WR_open
- and (Period_hour_WR_close - Period_hour_WR_low) >= ((Period_hour_WR_open - Period_hour_WR_close) * WickMultiplier_hour_WR)
- and (Period_hour_WR_high - Period_hour_WR_close) <= ((Period_hour_WR_high - Period_hour_WR_low) * BodyPercentage_hour_WR)
- or Period_hour_WR_close == Period_hour_WR_open and Period_hour_WR_close != Period_hour_WR_high
- and Period_hour_WR_high - Period_hour_WR_low >= Average(Period_hour_WR_high - Period_hour_WR_low, 50) then 1 else 0;
- Short_hour_WR = if Period_hour_WR_close < Period_hour_WR_open
- and (Period_hour_WR_high - Period_hour_WR_open) >= ((Period_hour_WR_open - Period_hour_WR_close) * WickMultiplier_hour_WR)
- and (Period_hour_WR_close - Period_hour_WR_low) <= ((Period_hour_WR_high - Period_hour_WR_low) * BodyPercentage_hour_WR)
- or Period_hour_WR_close > Period_hour_WR_open
- and (Period_hour_WR_high - Period_hour_WR_close) >= ((Period_hour_WR_close - Period_hour_WR_open) * WickMultiplier_hour_WR)
- and (Period_hour_WR_close - Period_hour_WR_low) <= ((Period_hour_WR_high - Period_hour_WR_low) * BodyPercentage_hour_WR)
- or Period_hour_WR_close == Period_hour_WR_open and Period_hour_WR_close != Period_hour_WR_low
- and (Period_hour_WR_high - Period_hour_WR_low) >= ((Period_hour_WR_close - Period_hour_WR_low) * WickMultiplier_hour_WR)
- and (Period_hour_WR_close - Period_hour_WR_low) <= ((Period_hour_WR_high - Period_hour_WR_low) * BodyPercentage_hour_WR)
- or Period_hour_WR_open == Period_hour_WR_low and Period_hour_WR_close == Period_hour_WR_low
- and Period_hour_WR_high - Period_hour_WR_low >= Average(Period_hour_WR_high - Period_hour_WR_low, 50) then 1 else 0;
- LongSignal_hour_WR = if Long_hour_WR == 1 && Short_hour_WR == 0 then 1 else Double.NaN;
- ShortSignal_hour_WR = if Short_hour_WR == 1 && Long_hour_WR == 0 then 1 else Double.NaN;
- NeutralSignal_hour_WR = if ( Long_hour_WR == 0 && Short_hour_WR == 0 or Long_hour_WR == 1 && Short_hour_WR == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_hour_WR, "hour", Color.DARK_GREEN);
- AddLabel(ShortSignal_hour_WR, "hour", Color.DARK_RED);
- AddLabel(NeutralSignal_hour_WR, "hour", Color.WHITE);
- input WickMultiplier_four_hour_WR = 2.5;
- input BodyPercentage_four_hour_WR = .25;
- def Period_four_hour_WR_close;
- def Period_four_hour_WR_open;
- def Period_four_hour_WR_high;
- def Period_four_hour_WR_low;
- def Long_four_hour_WR;
- def Short_four_hour_WR;
- def LongSignal_four_hour_WR;
- def ShortSignal_four_hour_WR;
- def NeutralSignal_four_hour_WR;
- Period_four_hour_WR_close = close(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hour_WR_open = open(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hour_WR_high = high(period = AggregationPeriod.FOUR_HOURS);
- Period_four_hour_WR_low = low(period = AggregationPeriod.FOUR_HOURS);
- Long_four_hour_WR = if Period_four_hour_WR_close > Period_four_hour_WR_open
- and (Period_four_hour_WR_open - Period_four_hour_WR_low) >= ((Period_four_hour_WR_close - Period_four_hour_WR_open) * WickMultiplier_four_hour_WR)
- and (Period_four_hour_WR_high - Period_four_hour_WR_close) <= ((Period_four_hour_WR_high - Period_four_hour_WR_low) * BodyPercentage_four_hour_WR)
- or Period_four_hour_WR_close < Period_four_hour_WR_open
- and (Period_four_hour_WR_close - Period_four_hour_WR_low) >= ((Period_four_hour_WR_open - Period_four_hour_WR_close) * WickMultiplier_four_hour_WR)
- and (Period_four_hour_WR_high - Period_four_hour_WR_close) <= ((Period_four_hour_WR_high - Period_four_hour_WR_low) * BodyPercentage_four_hour_WR)
- or Period_four_hour_WR_close == Period_four_hour_WR_open and Period_four_hour_WR_close != Period_four_hour_WR_high
- and Period_four_hour_WR_high - Period_four_hour_WR_low >= Average(Period_four_hour_WR_high - Period_four_hour_WR_low, 50) then 1 else 0;
- Short_four_hour_WR = if Period_four_hour_WR_close < Period_four_hour_WR_open
- and (Period_four_hour_WR_high - Period_four_hour_WR_open) >= ((Period_four_hour_WR_open - Period_four_hour_WR_close) * WickMultiplier_four_hour_WR)
- and (Period_four_hour_WR_close - Period_four_hour_WR_low) <= ((Period_four_hour_WR_high - Period_four_hour_WR_low) * BodyPercentage_four_hour_WR)
- or Period_four_hour_WR_close > Period_four_hour_WR_open
- and (Period_four_hour_WR_high - Period_four_hour_WR_close) >= ((Period_four_hour_WR_close - Period_four_hour_WR_open) * WickMultiplier_four_hour_WR)
- and (Period_four_hour_WR_close - Period_four_hour_WR_low) <= ((Period_four_hour_WR_high - Period_four_hour_WR_low) * BodyPercentage_four_hour_WR)
- or Period_four_hour_WR_close == Period_four_hour_WR_open and Period_four_hour_WR_close != Period_four_hour_WR_low
- and (Period_four_hour_WR_high - Period_four_hour_WR_low) >= ((Period_four_hour_WR_close - Period_four_hour_WR_low) * WickMultiplier_four_hour_WR)
- and (Period_four_hour_WR_close - Period_four_hour_WR_low) <= ((Period_four_hour_WR_high - Period_four_hour_WR_low) * BodyPercentage_four_hour_WR)
- or Period_four_hour_WR_open == Period_four_hour_WR_low and Period_four_hour_WR_close == Period_four_hour_WR_low
- and Period_four_hour_WR_high - Period_four_hour_WR_low >= Average(Period_four_hour_WR_high - Period_four_hour_WR_low, 50) then 1 else 0;
- LongSignal_four_hour_WR = if Long_four_hour_WR == 1 && Short_four_hour_WR == 0 then 1 else Double.NaN;
- ShortSignal_four_hour_WR = if Short_four_hour_WR == 1 && Long_four_hour_WR == 0 then 1 else Double.NaN;
- NeutralSignal_four_hour_WR = if ( Long_four_hour_WR == 0 && Short_four_hour_WR == 0 or Long_four_hour_WR == 1 && Short_four_hour_WR == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_four_hour_WR, "four_hour", Color.DARK_GREEN);
- AddLabel(ShortSignal_four_hour_WR, "four_hour", Color.DARK_RED);
- AddLabel(NeutralSignal_four_hour_WR, "four_hour", Color.WHITE);
- input WickMultiplier_week_WR = 2.5;
- input BodyPercentage_week_WR = .25;
- def Period_week_WR_close;
- def Period_week_WR_open;
- def Period_week_WR_high;
- def Period_week_WR_low;
- def Long_week_WR;
- def Short_week_WR;
- def LongSignal_week_WR;
- def ShortSignal_week_WR;
- def NeutralSignal_week_WR;
- Period_week_WR_close = close(period = AggregationPeriod.WEEK);
- Period_week_WR_open = open(period = AggregationPeriod.WEEK);
- Period_week_WR_high = high(period = AggregationPeriod.WEEK);
- Period_week_WR_low = low(period = AggregationPeriod.WEEK);
- Long_week_WR = if Period_week_WR_close > Period_week_WR_open
- and (Period_week_WR_open - Period_week_WR_low) >= ((Period_week_WR_close - Period_week_WR_open) * WickMultiplier_week_WR)
- and (Period_week_WR_high - Period_week_WR_close) <= ((Period_week_WR_high - Period_week_WR_low) * BodyPercentage_week_WR)
- or Period_week_WR_close < Period_week_WR_open
- and (Period_week_WR_close - Period_week_WR_low) >= ((Period_week_WR_open - Period_week_WR_close) * WickMultiplier_week_WR)
- and (Period_week_WR_high - Period_week_WR_close) <= ((Period_week_WR_high - Period_week_WR_low) * BodyPercentage_week_WR)
- or Period_week_WR_close == Period_week_WR_open and Period_week_WR_close != Period_week_WR_high
- and Period_week_WR_high - Period_week_WR_low >= Average(Period_week_WR_high - Period_week_WR_low, 50) then 1 else 0;
- Short_week_WR = if Period_week_WR_close < Period_week_WR_open
- and (Period_week_WR_high - Period_week_WR_open) >= ((Period_week_WR_open - Period_week_WR_close) * WickMultiplier_week_WR)
- and (Period_week_WR_close - Period_week_WR_low) <= ((Period_week_WR_high - Period_week_WR_low) * BodyPercentage_week_WR)
- or Period_week_WR_close > Period_week_WR_open
- and (Period_week_WR_high - Period_week_WR_close) >= ((Period_week_WR_close - Period_week_WR_open) * WickMultiplier_week_WR)
- and (Period_week_WR_close - Period_week_WR_low) <= ((Period_week_WR_high - Period_week_WR_low) * BodyPercentage_week_WR)
- or Period_week_WR_close == Period_week_WR_open and Period_week_WR_close != Period_week_WR_low
- and (Period_week_WR_high - Period_week_WR_low) >= ((Period_week_WR_close - Period_week_WR_low) * WickMultiplier_week_WR)
- and (Period_week_WR_close - Period_week_WR_low) <= ((Period_week_WR_high - Period_week_WR_low) * BodyPercentage_week_WR)
- or Period_week_WR_open == Period_week_WR_low and Period_week_WR_close == Period_week_WR_low
- and Period_week_WR_high - Period_week_WR_low >= Average(Period_week_WR_high - Period_week_WR_low, 50) then 1 else 0;
- LongSignal_week_WR = if Long_week_WR == 1 && Short_week_WR == 0 then 1 else Double.NaN;
- ShortSignal_week_WR = if Short_week_WR == 1 && Long_week_WR == 0 then 1 else Double.NaN;
- NeutralSignal_week_WR = if ( Long_week_WR == 0 && Short_week_WR == 0 or Long_week_WR == 1 && Short_week_WR == 1) then 1 else Double.NaN;
- AddLabel(LongSignal_week_WR, "week", Color.DARK_GREEN);
- AddLabel(ShortSignal_week_WR, "week", Color.DARK_RED);
- AddLabel(NeutralSignal_week_WR, "week", Color.WHITE);
- # VWAP series
- def yyyyMmDd = GetYYYYMMDD();
- def periodIndxDay = yyyyMmDd;
- def isPeriodRolledDay = CompoundValue(1, periodIndxDay != periodIndxDay[1], yes);
- def volumeSumDay;
- def volumeVwapSumDay;
- def volumeVwap2SumDay;
- if (isPeriodRolledDay) {
- volumeSumDay = volume;
- volumeVwapSumDay = volume * vwap;
- volumeVwap2SumDay = volume * Sqr(vwap);
- } else {
- volumeSumDay = CompoundValue(1, volumeSumDay[1] + volume, volume);
- volumeVwapSumDay = CompoundValue(1, volumeVwapSumDay[1] + volume * vwap, volume * vwap);
- volumeVwap2SumDay = CompoundValue(1, volumeVwap2SumDay[1] + volume * Sqr(vwap), volume * Sqr(vwap));
- }
- def priceDay = volumeVwapSumDay / volumeSumDay;
- def deviationDay = Sqrt(Max(volumeVwap2SumDay / volumeSumDay - Sqr(priceDay), 0));
- def VWAPdevNeg1 = priceDay - deviationDay;
- def VWAPdevPos1 = priceDay + deviationDay;
- def VWAPgradientMax = 30;
- def VWAPgradientMin = -1 * VWAPgradientMax;
- # The following is the main equation for mapping ranges, which is increadibly useful in producing fine gradients from a single set of deviations. Be aware of the posibility of divde by zero errors (or near zero abnormalities like with VWWAP) for some signals. In this instance I partially manage by placing an upper limit on skew.
- def VWAPgradient = If ((((close - VWAPdevNeg1) * (VWAPgradientMax - VWAPgradientMin) / (VWAPdevPos1 - VWAPdevNeg1) + VWAPgradientMin) < VWAPgradientMax * 4 and ((close - VWAPdevNeg1) * (VWAPgradientMax - VWAPgradientMin) / (VWAPdevPos1 - VWAPdevNeg1) + VWAPgradientMin) > VWAPgradientMax * -4 ), ((close - VWAPdevNeg1) * (VWAPgradientMax - VWAPgradientMin) / (VWAPdevPos1 - VWAPdevNeg1) + VWAPgradientMin), 0);
- # Totals for directional signals
- def LongTotal;
- def ShortTotal;
- # Total Skews - Multiply signals by timeframe or probability approximation
- # This section and the entry / exit requirements sections just below are the main locations for optimizing timing. eevery short and long signal has has a multiple that can be adjusted based on probability that it has of being sucessful. The current values are non-optimal and need to be tested over longer timeframes but still see impressive results.
- LongTotal = If (IsNaN(LongSignal_min_MTFA_RM), 0, LongSignal_min_MTFA_RM) + (If (IsNaN(LongSignal_fifteen_min_MTFA_RM), 0, LongSignal_fifteen_min_MTFA_RM) * 15) + (If (IsNaN(LongSignal_hour_MTFA_RM), 0, LongSignal_hour_MTFA_RM) * 60) + (If (IsNaN(LongSignal_four_hours_MTFA_RM), 0, LongSignal_four_hours_MTFA_RM) * 240) + (If (IsNaN(LongSignal_week_MTFA_RM), 0, LongSignal_week_MTFA_RM) * 20) + If (IsNaN(LongSignal_min_OR), 0, LongSignal_min_OR) + (If (IsNaN(LongSignal_fifteen_min_OR), 0, LongSignal_fifteen_min_OR) * 15) + (If (IsNaN(LongSignal_hour_OR), 0, LongSignal_hour_OR) * 60) + (If (IsNaN(LongSignal_four_hours_ORs), 0, LongSignal_four_hours_ORs) * 240) + (If (IsNaN(LongSignal_week_ORs), 0, LongSignal_week_ORs) * 200) + If (IsNaN(LongSignal_min_ER), 0, LongSignal_min_ER) + (If (IsNaN(LongSignal_fifteen_min_ER), 0, LongSignal_fifteen_min_ER) * 15) + (If (IsNaN(LongSignal_hour_ER), 0, LongSignal_hour_ER) * 60) + (If (IsNaN(LongSignal_four_hour_ER), 0, LongSignal_four_hour_ER) * 240) + (If (IsNaN(LongSignal_week_ER), 0, LongSignal_week_ER) * 200) + If (IsNaN(LongSignal_min_WR), 0, LongSignal_min_WR) + (If (IsNaN(LongSignal_fifteen_min_WR), 0, LongSignal_fifteen_min_WR) * 15) + (If (IsNaN(LongSignal_hour_WR), 0, LongSignal_hour_WR) * 60) + (If (IsNaN(LongSignal_four_hour_WR), 0, LongSignal_four_hour_WR) * 240) + (If (IsNaN(LongSignal_week_WR), 0, LongSignal_week_WR) * 200);
- ShortTotal = If (IsNaN(ShortSignal_min_MTFA_RM), 0, ShortSignal_min_MTFA_RM) + (If (IsNaN(ShortSignal_fifteen_min_MTFA_RM), 0, ShortSignal_fifteen_min_MTFA_RM) * 15) + (If (IsNaN(ShortSignal_hour_MTFA_RM), 0, ShortSignal_hour_MTFA_RM) * 60) + (If (IsNaN(ShortSignal_four_hours_MTFA_RM), 0, ShortSignal_four_hours_MTFA_RM) * 240) + (If (IsNaN(ShortSignal_week_MTFA_RM), 0, ShortSignal_week_MTFA_RM) * 20) + If (IsNaN(ShortSignal_min_OR), 0, ShortSignal_min_OR) + (If (IsNaN(ShortSignal_fifteen_min_OR), 0, ShortSignal_fifteen_min_OR) * 15) + (If (IsNaN(ShortSignal_hour_OR), 0, ShortSignal_hour_OR) * 60) + (If (IsNaN(ShortSignal_four_hours_ORs), 0, ShortSignal_four_hours_ORs) * 240) + (If (IsNaN(ShortSignal_week_ORs), 0, ShortSignal_week_ORs) * 20) + If (IsNaN(ShortSignal_min_ER), 0, ShortSignal_min_ER) + (If (IsNaN(ShortSignal_fifteen_min_ER), 0, ShortSignal_fifteen_min_ER) * 15) + (If (IsNaN(ShortSignal_hour_ER), 0, ShortSignal_hour_ER) * 60) + (If (IsNaN(ShortSignal_four_hour_ER), 0, ShortSignal_four_hour_ER) * 240) + (If (IsNaN(ShortSignal_week_ER), 0, ShortSignal_week_ER) * 20) + If (IsNaN(ShortSignal_min_WR), 0, ShortSignal_min_WR) + (If (IsNaN(ShortSignal_fifteen_min_WR), 0, ShortSignal_fifteen_min_WR) * 15) + (If (IsNaN(ShortSignal_hour_WR), 0, ShortSignal_hour_WR) * 60) + (If (IsNaN(ShortSignal_four_hour_WR), 0, ShortSignal_four_hour_WR) * 240) + (If (IsNaN(ShortSignal_week_WR), 0, ShortSignal_week_WR) * 20) ;
- # RSI Series
- def OverBought = 70;
- def OverSold = 30;
- def rsi = reference RSI(price = close, length = 14, averageType = AverageType.WILDERS);
- def RSIgradient = if rsi > OverBought then rsi - OverBought else if rsi < OverSold then rsi - OverSold else 0;
- # Personal Bias
- # Feel free to enter your own bias.
- input Bias = 0;
- # Total w/ Bias Skew
- def NetTotal = LongTotal - ShortTotal + Bias + VWAPgradient + STDCgradient + RSIgradient;
- # Entry and Exit Conditions
- # This is another place that will have to be altered with optimizations. It is surprising how small of values you can use and # get great results. Once again default values are non-optimal.
- input ShortEntryRequirement = -200;
- input ShortExitRequirement = 200;
- input LongEntryRequirement = 200;
- input LongExitRequirement = -200;
- # Variable StopLoss and TakeProfits
- def VarStopLong = ((WideStop - NarrowStop) / (LongEntryRequirement - LongExitRequirement)) * NetTotal + NarrowStop;
- def VarStopShort = ((WideStop - NarrowStop) / (ShortEntryRequirement - ShortExitRequirement)) * NetTotal + NarrowStop;
- def VarProfitLong = ((WideProfit - NarrowProfit) / (LongEntryRequirement - LongExitRequirement)) * NetTotal + NarrowProfit;
- def VarProfitShort = ((WideProfit - NarrowProfit) / (ShortEntryRequirement - ShortExitRequirement)) * NetTotal + NarrowProfit;
- def SmoothLow = (low + low[1] + low[2] + low[3] + low[4]) / 5;
- def SmoothHigh = (high + high[1] + high[2] + high[3] + high[4]) / 5;
- plot PriceVarStopLong = If ((SmoothLow - VarStopLong) < price, (SmoothLow - VarStopLong), Double.NaN);
- plot PriceVarStopShort = If ((SmoothHigh + VarStopShort) > price, (SmoothHigh + VarStopShort), Double.NaN);
- PriceVarStopLong.SetDefaultColor(Color.DARK_GREEN);
- PriceVarStopShort.SetDefaultColor(Color.DARK_RED);
- plot PriceVarProfitLong = If ((SmoothHigh + VarProfitLong) > price, (SmoothHigh + VarProfitLong), Double.NaN);
- plot PriceVarProfitShort = If ((SmoothLow - VarProfitShort) < price, (SmoothLow - VarProfitShort), Double.NaN);
- PriceVarProfitLong.SetDefaultColor(Color.BLUE);
- PriceVarProfitShort.SetDefaultColor(Color.DARK_ORANGE);
- def IsShort;
- def IsLong;
- if (NetTotal < ShortEntryRequirement) {
- IsShort = 2; # Hold Short
- } else if (NetTotal > ShortExitRequirement) {
- IsShort = 1; # Trail Short
- } else {
- IsShort = 0; # Close Short
- }
- ;
- if (NetTotal > LongEntryRequirement) {
- IsLong = 2; # Hold Long
- } else if (NetTotal < LongExitRequirement) {
- IsLong = 1; # Trail Long
- } else {
- IsLong = 0; # Close Long
- }
- ;
- AddLabel(1, "STDC Gradient", Color.DARK_ORANGE);
- AddLabel(1, STDCgradient, Color.WHITE);
- AddLabel(1, "VWAP Gradient", Color.DARK_ORANGE);
- AddLabel(1, VWAPgradient, Color.WHITE);
- AddLabel(1, "RSI Gradient", Color.DARK_ORANGE);
- AddLabel(1, RSIgradient, Color.WHITE);
- AddLabel(1, "Skew:", Color.ORANGE);
- AddLabel(1, NetTotal, Color.WHITE);
- AddLabel(IsLong == 2, "Long Hold", Color.DARK_GREEN);
- AddLabel(IsLong == 1, "Long Trail", Color.GREEN);
- AddLabel(IsLong == 0, "Long Close", Color.GREEN);
- AddLabel(IsShort == 2, "Short Hold", Color.DARK_RED);
- AddLabel(IsShort == 1, "Short Trail", Color.RED);
- AddLabel(IsShort == 0, "Short Close", Color.RED);
- AddOrder(OrderType.BUY_TO_OPEN, IsLong == 2 and price <= SmoothLow, Min(SmoothLow , low), tickcolor = Color.DARK_GREEN, arrowcolor = Color.GREEN);
- AddOrder(OrderType.SELL_TO_CLOSE, IsLong == 2 and price > PriceVarProfitLong, Max(SmoothHigh , high), tickcolor = Color.DARK_RED, arrowcolor = Color.BLUE);
- AddOrder(OrderType.SELL_TO_CLOSE, IsLong < 2, Max(SmoothHigh , high), tickcolor = Color.DARK_RED, arrowcolor = Color.RED);
- AddOrder(OrderType.SELL_TO_CLOSE, IsShort == 2 and price < PriceVarStopLong, Max(SmoothHigh , high), tickcolor = Color.DARK_RED, arrowcolor = Color.DARK_GREEN);
- AddOrder(OrderType.SELL_TO_OPEN, IsShort == 2 and price >= SmoothHigh, Max(SmoothHigh , high), tickcolor = Color.DARK_RED, arrowcolor = Color.RED);
- AddOrder(OrderType.BUY_TO_CLOSE, IsShort == 2 and price < PriceVarProfitShort, Min(SmoothLow , low), tickcolor = Color.DARK_GREEN, arrowcolor = Color.DARK_ORANGE);
- AddOrder(OrderType.BUY_TO_CLOSE, IsShort < 2, Min(SmoothLow , low), tickcolor = Color.DARK_GREEN, arrowcolor = Color.GREEN);
- AddOrder(OrderType.BUY_TO_CLOSE, IsLong == 2 and price > PriceVarStopShort, Min(SmoothLow, low), tickcolor = Color.DARK_GREEN, arrowcolor = Color.DARK_GREEN);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement