Price Momentum Oscillator (PMO) Overload for Thinkorswim

Mightymorphinchris

Active member
Overview
In an attempt to create a fake/simulated MTF strategy that didn't repaint I came up with the PMO Overload strategy. The way I play this strategy is I wait for a signal on the 3m or 5m chart and then I wait for the 1m signal (if it hasn't already occurred). I personally prefer scalping but, that doesn't mean you can't use this for swing setups.

I would not use this on it's own without other confirming indicators as chop can potentially create many bad trade setups if you don't exit quickly.

Indicators
The strategy is utilizing 6 different PMO settings, RSI, MACD and EMA for the signals.

Code
Ruby:
################################################################
##########            Initial Config                   #########
################################################################
input securityType = { default "stocks", "forex"};
input tradetype = { "long", "short", default "both" };

def timeFrame = GetAggregationPeriod();

def CloseAllCondition = if SecondsTillTime(1559) == 0 then 1 else 0;
def EOD = if SecondsTillTime(1559) == 0 then 1 else 0;
def Active;
if securityType == securityType.stocks {
    Active = if (SecondsFromTime(0930) > 0 and SecondsTillTime(1559) > 0) then 1 else 0;
} else {
    Active = 1;
    #Active = if ((SecondsFromTime(0500) > 0 and SecondsTillTime(0800) > 0)) or ((SecondsFromTime(1700) > 0 and SecondsTillTime(2100) > 0)) then 1 else 0;
}

################################################################
##########            Global Variables                 #########
################################################################

# PMO
input pmoLowLength1 = 4;
input pmoLowLength2 = 2;
input pmoLowSignalLength = 2;
input pmoMidLength1 = 6;
input pmoMidLength2 = 3;
input pmoMidSignalLength = 4;
input pmoHighLength1 = 13;
input pmoHighLength2 = 5;
input pmoHighSignalLength = 5;
input pmoXHLength1 = 16;
input pmoXHLength2 = 13;
input pmoXHSignalLength = 10;
input pmoXXLLength1 = 45;
input pmoXXLLength2 = 60;
input pmoXXLSignalLength = 21;
input pmoXXXLLength1 = 60;
input pmoXXXLLength2 = 90;
input pmoXXXLSignalLength = 31;
input pmoEnter = .2;
input pmoEnterShort = -.2;

# RSI
input rsiLength = 65;
input rsiOverBought = 68;
input rsiOverSold = 30;
input rsiAverageType = AverageType.WILDERS;

# MACD
input macdHFastLength = 5;
input macdHSlowLength = 9;
input macdHLength = 6;
input MACDAverageType = AverageType.EXPONENTIAL;

# EMA
input ema = 18;

################################################################
##########                 EMA                       ###########
################################################################
def priceUp = if close[-1] > ExpAverage(close[-1], ema) then 1 else 0;
def priceDown = if close[-1] < ExpAverage(close[-1], ema) then 1 else 0;

################################################################
##########                 PMO                      ###########
################################################################
def PrimaryPMO_l = reference PMO(price = close[-1], length1 = pmoLowLength1, length2 = pmoLowLength2);
def PrimarySignalLine_l = ExpAverage(PrimaryPMO_l, pmoLowSignalLength);

def PrimaryPMO_m = reference PMO(price = close[-1], length1 = pmoMidLength1, length2 = pmoMidLength2);
def PrimarySignalLine_m = ExpAverage(PrimaryPMO_m, pmoMidSignalLength);

def PrimaryPMO_h = reference PMO(price = close[-1], length1 = pmoHighLength1, length2 = pmoHighLength2);
def PrimarySignalLine_h = ExpAverage(PrimaryPMO_h, pmoHighSignalLength);

def PrimaryPMO_xh = reference PMO(price = close[-1], length1 = pmoXHLength1, length2 = pmoXHLength2);
def PrimarySignalLine_xh = ExpAverage(PrimaryPMO_xh, pmoXHSignalLength);

def PrimaryPMO_xxl = reference PMO(price = close[-1], length1 = pmoXXLLength1, length2 = pmoXXLLength2);
def PrimarySignalLine_xxl = ExpAverage(PrimaryPMO_xxl, pmoXXLSignalLength);

def PrimaryPMO_xxxl = reference PMO(price = close[-1], length1 = pmoXXXLLength1, length2 = pmoXXXLLength2);
def PrimarySignalLine_xxxl = ExpAverage(PrimaryPMO_xxxl, pmoXXXLSignalLength);

# RSI
def rsiClose = close[-1];
def NetChgAvg = MovingAverage(rsiAverageType, rsiClose - rsiClose[1], rsiLength);
def TotChgAvg = MovingAverage(rsiAverageType, AbsValue(rsiClose - rsiClose[1]), rsiLength);
def ChgRatio = if TotChgAvg != 0 then NetChgAvg / TotChgAvg else 0;
def RSI = 50 * (ChgRatio + 1);

################################################################
##########                 MACD                      ###########
################################################################
def macDValue_h = MovingAverage(MACDAverageType, close[-1], macdHFastLength) - MovingAverage(MACDAverageType, close[-1], macdHSlowLength);
def macDAvg_h = MovingAverage(MACDAverageType, macDValue_h, macdHLength);

def macDLong = if macDValue_h > macDAvg_h then 1 else 0;
def macDShort = if macDValue_h < macDAvg_h then 1 else 0;

################################################################
##########                 CALC                      ###########
################################################################
def pmoCrossBelowExit = if PrimaryPMO_xh crosses below pmoEnter then 1 else 0;
def pmoCrossAboveExit = if PrimaryPMO_xh crosses above pmoEnterShort then 1 else 0;

#################################################################
############          SCAN Variables                    #########
#################################################################
plot Uptrend;
plot DownTrend;

if (tradetype == tradetype.long or tradetype == tradetype.both) and priceUp {
    if (PrimaryPMO_xxxl > PrimarySignalLine_xxxl or PrimaryPMO_xxxl <= pmoEnter) and (PrimaryPMO_xxl > PrimarySignalLine_xxl or PrimaryPMO_xxl <= pmoEnter) and (PrimaryPMO_xh > PrimarySignalLine_xh or PrimaryPMO_xh <= pmoEnter) and PrimaryPMO_h > PrimarySignalLine_h and PrimaryPMO_m > PrimarySignalLine_m and PrimaryPMO_l > PrimarySignalLine_l and macdLong {
        Uptrend = 1;
    } else {
        Uptrend = 0;
    }
} else {
    Uptrend = 0;
}

if (tradetype == tradetype.short or tradetype == tradetype.both) and priceDown {
    if (PrimaryPMO_xxxl < PrimarySignalLine_xxxl or PrimaryPMO_xxxl >= pmoEnterShort) and (PrimaryPMO_xxl < PrimarySignalLine_xxl or PrimaryPMO_xxl >= pmoEnterShort) and (PrimaryPMO_xh < PrimarySignalLine_xh or PrimaryPMO_xh >= pmoEnterShort) and PrimaryPMO_h < PrimarySignalLine_h and PrimaryPMO_m < PrimarySignalLine_m and PrimaryPMO_l < PrimarySignalLine_l and macdShort {
        DownTrend = 1;
    } else {
        DownTrend = 0;
    }
} else {
    DownTrend = 0;
}

Uptrend.Hide();
DownTrend.Hide();

plot ExitUpTrend;
plot ExitDownTrend;

#Exit UpTrend
if RSI >= rsiOverBought {
    ExitUpTrend = 1;
} else if pmoCrossBelowExit {
    ExitUpTrend = 1;
} else {
    ExitUpTrend = if PrimaryPMO_xxxl < PrimarySignalLine_xxxl and PrimaryPMO_xxl < PrimarySignalLine_xxl and PrimaryPMO_xh < PrimarySignalLine_xh and PrimaryPMO_h < PrimarySignalLine_h and PrimaryPMO_m < PrimarySignalLine_m and PrimaryPMO_l < PrimarySignalLine_l then 1 else 0;
}

# Exit DownTrend
if RSI <= rsiOverSold {
    ExitDownTrend = 1;
} else if pmoCrossAboveExit {
    ExitDownTrend = 1;
} else {
    ExitDownTrend = if PrimaryPMO_xxxl > PrimarySignalLine_xxxl and PrimaryPMO_xxl > PrimarySignalLine_xxl and PrimaryPMO_xh > PrimarySignalLine_xh and PrimaryPMO_h > PrimarySignalLine_h and PrimaryPMO_m > PrimarySignalLine_m and PrimaryPMO_l > PrimarySignalLine_l then 1 else 0;
}

ExitUpTrend.Hide();
ExitDownTrend.Hide();

def LongBuy = if Uptrend == 1 and Uptrend[1] == 0 then 1 else 0;
def LongExit = if ExitUpTrend == 1 and ExitUpTrend[1] == 0 then 1 else 0;

def ShortSell = if DownTrend == 1 and DownTrend[1] == 0 then 1 else 0;
def ShortExit = if ExitDownTrend == 1 and ExitDownTrend[1] == 0 then 1 else 0;


#################################################################
############          NOTIFICATIONS                     #########
#################################################################
def bar = BarNumber();

def longSignal = if Uptrend == 1 and ExitUpTrend == 0 then 1 else 0;
Alert(longSignal == 1, "MTF Uptrend", Alert.BAR, Sound.Ring);

def shortSignal = if DownTrend == 1 and ExitDownTrend == 0 then 1 else 0;
Alert(shortSignal == 1, "MTF Downtrend", Alert.BAR, Sound.Ding);

################################################################
##########                 BUY                       ###########
################################################################

AddOrder(OrderType.BUY_AUTO, LongBuy == 1 and (tradetype == tradetype.long or tradetype == tradetype.both) and Active, price = close, tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "BUY");
AddOrder(OrderType.SELL_TO_CLOSE, LongExit == 1 and (tradetype == tradetype.long or tradetype == tradetype.both), price = open[-1], tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA, name = "Sell To Close");
AddOrder(OrderType.SELL_TO_CLOSE, EOD or CloseAllCondition, price = close, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA, name = "SELL EOD");

################################################################
##########                 SELL                      ###########
################################################################

AddOrder(OrderType.SELL_AUTO, ShortSell == 1 and (tradetype == tradetype.short or tradetype == tradetype.both) and Active, price = close, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA, name = "SELL");
AddOrder(OrderType.BUY_TO_CLOSE, ShortExit == 1 and (tradetype == tradetype.short or tradetype == tradetype.both), price = open[-1], tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "Buy To Close");
AddOrder(OrderType.BUY_TO_CLOSE, EOD or CloseAllCondition, price = close, tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "BUY EOD");

Screenshot
j31scL5.png


Share

http://tos.mx/OZE6LWd
 

BullInvestr

New member
Overview
In an attempt to create a fake/simulated MTF strategy that didn't repaint I came up with the PMO Overload strategy. The way I play this strategy is I wait for a signal on the 3m or 5m chart and then I wait for the 1m signal (if it hasn't already occurred). I personally prefer scalping but, that doesn't mean you can't use this for swing setups.

I would not use this on it's own without other confirming indicators as chop can potentially create many bad trade setups if you don't exit quickly.

Indicators
The strategy is utilizing 6 different PMO settings, RSI, MACD and EMA for the signals.

Code
Ruby:
################################################################
##########            Initial Config                   #########
################################################################
input securityType = { default "stocks", "forex"};
input tradetype = { "long", "short", default "both" };

def timeFrame = GetAggregationPeriod();

def CloseAllCondition = if SecondsTillTime(1559) == 0 then 1 else 0;
def EOD = if SecondsTillTime(1559) == 0 then 1 else 0;
def Active;
if securityType == securityType.stocks {
    Active = if (SecondsFromTime(0930) > 0 and SecondsTillTime(1559) > 0) then 1 else 0;
} else {
    Active = 1;
    #Active = if ((SecondsFromTime(0500) > 0 and SecondsTillTime(0800) > 0)) or ((SecondsFromTime(1700) > 0 and SecondsTillTime(2100) > 0)) then 1 else 0;
}

################################################################
##########            Global Variables                 #########
################################################################

# PMO
input pmoLowLength1 = 4;
input pmoLowLength2 = 2;
input pmoLowSignalLength = 2;
input pmoMidLength1 = 6;
input pmoMidLength2 = 3;
input pmoMidSignalLength = 4;
input pmoHighLength1 = 13;
input pmoHighLength2 = 5;
input pmoHighSignalLength = 5;
input pmoXHLength1 = 16;
input pmoXHLength2 = 13;
input pmoXHSignalLength = 10;
input pmoXXLLength1 = 45;
input pmoXXLLength2 = 60;
input pmoXXLSignalLength = 21;
input pmoXXXLLength1 = 60;
input pmoXXXLLength2 = 90;
input pmoXXXLSignalLength = 31;
input pmoEnter = .2;
input pmoEnterShort = -.2;

# RSI
input rsiLength = 65;
input rsiOverBought = 68;
input rsiOverSold = 30;
input rsiAverageType = AverageType.WILDERS;

# MACD
input macdHFastLength = 5;
input macdHSlowLength = 9;
input macdHLength = 6;
input MACDAverageType = AverageType.EXPONENTIAL;

# EMA
input ema = 18;

################################################################
##########                 EMA                       ###########
################################################################
def priceUp = if close[-1] > ExpAverage(close[-1], ema) then 1 else 0;
def priceDown = if close[-1] < ExpAverage(close[-1], ema) then 1 else 0;

################################################################
##########                 PMO                      ###########
################################################################
def PrimaryPMO_l = reference PMO(price = close[-1], length1 = pmoLowLength1, length2 = pmoLowLength2);
def PrimarySignalLine_l = ExpAverage(PrimaryPMO_l, pmoLowSignalLength);

def PrimaryPMO_m = reference PMO(price = close[-1], length1 = pmoMidLength1, length2 = pmoMidLength2);
def PrimarySignalLine_m = ExpAverage(PrimaryPMO_m, pmoMidSignalLength);

def PrimaryPMO_h = reference PMO(price = close[-1], length1 = pmoHighLength1, length2 = pmoHighLength2);
def PrimarySignalLine_h = ExpAverage(PrimaryPMO_h, pmoHighSignalLength);

def PrimaryPMO_xh = reference PMO(price = close[-1], length1 = pmoXHLength1, length2 = pmoXHLength2);
def PrimarySignalLine_xh = ExpAverage(PrimaryPMO_xh, pmoXHSignalLength);

def PrimaryPMO_xxl = reference PMO(price = close[-1], length1 = pmoXXLLength1, length2 = pmoXXLLength2);
def PrimarySignalLine_xxl = ExpAverage(PrimaryPMO_xxl, pmoXXLSignalLength);

def PrimaryPMO_xxxl = reference PMO(price = close[-1], length1 = pmoXXXLLength1, length2 = pmoXXXLLength2);
def PrimarySignalLine_xxxl = ExpAverage(PrimaryPMO_xxxl, pmoXXXLSignalLength);

# RSI
def rsiClose = close[-1];
def NetChgAvg = MovingAverage(rsiAverageType, rsiClose - rsiClose[1], rsiLength);
def TotChgAvg = MovingAverage(rsiAverageType, AbsValue(rsiClose - rsiClose[1]), rsiLength);
def ChgRatio = if TotChgAvg != 0 then NetChgAvg / TotChgAvg else 0;
def RSI = 50 * (ChgRatio + 1);

################################################################
##########                 MACD                      ###########
################################################################
def macDValue_h = MovingAverage(MACDAverageType, close[-1], macdHFastLength) - MovingAverage(MACDAverageType, close[-1], macdHSlowLength);
def macDAvg_h = MovingAverage(MACDAverageType, macDValue_h, macdHLength);

def macDLong = if macDValue_h > macDAvg_h then 1 else 0;
def macDShort = if macDValue_h < macDAvg_h then 1 else 0;

################################################################
##########                 CALC                      ###########
################################################################
def pmoCrossBelowExit = if PrimaryPMO_xh crosses below pmoEnter then 1 else 0;
def pmoCrossAboveExit = if PrimaryPMO_xh crosses above pmoEnterShort then 1 else 0;

#################################################################
############          SCAN Variables                    #########
#################################################################
plot Uptrend;
plot DownTrend;

if (tradetype == tradetype.long or tradetype == tradetype.both) and priceUp {
    if (PrimaryPMO_xxxl > PrimarySignalLine_xxxl or PrimaryPMO_xxxl <= pmoEnter) and (PrimaryPMO_xxl > PrimarySignalLine_xxl or PrimaryPMO_xxl <= pmoEnter) and (PrimaryPMO_xh > PrimarySignalLine_xh or PrimaryPMO_xh <= pmoEnter) and PrimaryPMO_h > PrimarySignalLine_h and PrimaryPMO_m > PrimarySignalLine_m and PrimaryPMO_l > PrimarySignalLine_l and macdLong {
        Uptrend = 1;
    } else {
        Uptrend = 0;
    }
} else {
    Uptrend = 0;
}

if (tradetype == tradetype.short or tradetype == tradetype.both) and priceDown {
    if (PrimaryPMO_xxxl < PrimarySignalLine_xxxl or PrimaryPMO_xxxl >= pmoEnterShort) and (PrimaryPMO_xxl < PrimarySignalLine_xxl or PrimaryPMO_xxl >= pmoEnterShort) and (PrimaryPMO_xh < PrimarySignalLine_xh or PrimaryPMO_xh >= pmoEnterShort) and PrimaryPMO_h < PrimarySignalLine_h and PrimaryPMO_m < PrimarySignalLine_m and PrimaryPMO_l < PrimarySignalLine_l and macdShort {
        DownTrend = 1;
    } else {
        DownTrend = 0;
    }
} else {
    DownTrend = 0;
}

Uptrend.Hide();
DownTrend.Hide();

plot ExitUpTrend;
plot ExitDownTrend;

#Exit UpTrend
if RSI >= rsiOverBought {
    ExitUpTrend = 1;
} else if pmoCrossBelowExit {
    ExitUpTrend = 1;
} else {
    ExitUpTrend = if PrimaryPMO_xxxl < PrimarySignalLine_xxxl and PrimaryPMO_xxl < PrimarySignalLine_xxl and PrimaryPMO_xh < PrimarySignalLine_xh and PrimaryPMO_h < PrimarySignalLine_h and PrimaryPMO_m < PrimarySignalLine_m and PrimaryPMO_l < PrimarySignalLine_l then 1 else 0;
}

# Exit DownTrend
if RSI <= rsiOverSold {
    ExitDownTrend = 1;
} else if pmoCrossAboveExit {
    ExitDownTrend = 1;
} else {
    ExitDownTrend = if PrimaryPMO_xxxl > PrimarySignalLine_xxxl and PrimaryPMO_xxl > PrimarySignalLine_xxl and PrimaryPMO_xh > PrimarySignalLine_xh and PrimaryPMO_h > PrimarySignalLine_h and PrimaryPMO_m > PrimarySignalLine_m and PrimaryPMO_l > PrimarySignalLine_l then 1 else 0;
}

ExitUpTrend.Hide();
ExitDownTrend.Hide();

def LongBuy = if Uptrend == 1 and Uptrend[1] == 0 then 1 else 0;
def LongExit = if ExitUpTrend == 1 and ExitUpTrend[1] == 0 then 1 else 0;

def ShortSell = if DownTrend == 1 and DownTrend[1] == 0 then 1 else 0;
def ShortExit = if ExitDownTrend == 1 and ExitDownTrend[1] == 0 then 1 else 0;


#################################################################
############          NOTIFICATIONS                     #########
#################################################################
def bar = BarNumber();

def longSignal = if Uptrend == 1 and ExitUpTrend == 0 then 1 else 0;
Alert(longSignal == 1, "MTF Uptrend", Alert.BAR, Sound.Ring);

def shortSignal = if DownTrend == 1 and ExitDownTrend == 0 then 1 else 0;
Alert(shortSignal == 1, "MTF Downtrend", Alert.BAR, Sound.Ding);

################################################################
##########                 BUY                       ###########
################################################################

AddOrder(OrderType.BUY_AUTO, LongBuy == 1 and (tradetype == tradetype.long or tradetype == tradetype.both) and Active, price = close, tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "BUY");
AddOrder(OrderType.SELL_TO_CLOSE, LongExit == 1 and (tradetype == tradetype.long or tradetype == tradetype.both), price = open[-1], tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA, name = "Sell To Close");
AddOrder(OrderType.SELL_TO_CLOSE, EOD or CloseAllCondition, price = close, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA, name = "SELL EOD");

################################################################
##########                 SELL                      ###########
################################################################

AddOrder(OrderType.SELL_AUTO, ShortSell == 1 and (tradetype == tradetype.short or tradetype == tradetype.both) and Active, price = close, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA, name = "SELL");
AddOrder(OrderType.BUY_TO_CLOSE, ShortExit == 1 and (tradetype == tradetype.short or tradetype == tradetype.both), price = open[-1], tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "Buy To Close");
AddOrder(OrderType.BUY_TO_CLOSE, EOD or CloseAllCondition, price = close, tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "BUY EOD");

Screenshot
j31scL5.png


Share

http://tos.mx/OZE6LWd
Hey Chris, Ive been following your other strategy that has an issue with repainting. I myself have been trying to code away around it but can't seem to find a solution either, Im interested in this Strat as well as I of course love trying new things, just curious if you've had any issue with repainting? I always wait for the candle to close before taking any signal regardless of strategy.
 

Mightymorphinchris

Active member
Hey Chris, Ive been following your other strategy that has an issue with repainting. I myself have been trying to code away around it but can't seem to find a solution either, Im interested in this Strat as well as I of course love trying new things, just curious if you've had any issue with repainting? I always wait for the candle to close before taking any signal regardless of strategy.
As long as the candle closes with the signal it will not repaint. If the candle is still open though then the signal may possibly go away. The biggest problem with this strategy is that it will give a lot more signals and can be an issue in chop. That's why I put this strategy on the 1m, 3m and 5m and wait for the larger time frames to confirm the move first.
 

BullInvestr

New member
So im liking this strat, I added some code to show all buy and sell signals and im noticing some signals appearing a few bars after which really isn't a big deal if you can read price action, which imo should always come before any indicator. Im using tick charts using 1000, 2000, 4000 I also use level 2 data. so far there was a buy signal and near a marked level of support but I could see on the Level 2 a wall of sellers so I skipped. as of right now im looking for confluence on all tick charts and price action. Ill trade it a couple of days and report back with what im finding.
 

Mightymorphinchris

Active member
So im liking this strat, I added some code to show all buy and sell signals and im noticing some signals appearing a few bars after which really isn't a big deal if you can read price action, which imo should always come before any indicator. Im using tick charts using 1000, 2000, 4000 I also use level 2 data. so far there was a buy signal and near a marked level of support but I could see on the Level 2 a wall of sellers so I skipped. as of right now im looking for confluence on all tick charts and price action. Ill trade it a couple of days and report back with what im finding.
I'm not sure what you mean by "to show all buy and sell signals". The strategy should show buy and sell signals by default. I'm guessing i'm misinterpreting what you're saying.
 

BullInvestr

New member

So just by watching it today here's what ive found, this can a profitable strategy if used correctly, if used incorrectly I know this will result in losses. Im going to continue watching the market using this strategy and make an actual trading plan based around it which ill share with everyone here. however as of right now I can tell you the first rule of it will be that this strategy needs to be confluent with price action. if you're unfamiliar with price action and DOM I would highly suggest learning that first as it will prevent choppy signals.

something else ive found by watching it today and looking through the past, the 4000 tick chart treats this strategy well, paired with price action you could probably make a fair amount daily. again, ive only looked at it a few hours and some past performance where of course everything is subjected to being hindsight and "of course I wouldn't have taken that fake signal" but so far ive found that if you wait for the 4000 tick signal to close (usually it will retrace to or near the entry the signal gives) and you can get a good 3-5 point trade. (I personally prefer 3-5 trades a day aiming for 3-5 points). this looks capable of 10+ points but greed will get you killed so set your targets set your stops make your bread and get on with the next trade.

Im going to continue watching this and when I formulate a real and tradable plan, I will share it here.
 

Mightymorphinchris

Active member

So just by watching it today here's what ive found, this can a profitable strategy if used correctly, if used incorrectly I know this will result in losses. Im going to continue watching the market using this strategy and make an actual trading plan based around it which ill share with everyone here. however as of right now I can tell you the first rule of it will be that this strategy needs to be confluent with price action. if you're unfamiliar with price action and DOM I would highly suggest learning that first as it will prevent choppy signals.

something else ive found by watching it today and looking through the past, the 4000 tick chart treats this strategy well, paired with price action you could probably make a fair amount daily. again, ive only looked at it a few hours and some past performance where of course everything is subjected to being hindsight and "of course I wouldn't have taken that fake signal" but so far ive found that if you wait for the 4000 tick signal to close (usually it will retrace to or near the entry the signal gives) and you can get a good 3-5 point trade. (I personally prefer 3-5 trades a day aiming for 3-5 points). this looks capable of 10+ points but greed will get you killed so set your targets set your stops make your bread and get on with the next trade.

Im going to continue watching this and when I formulate a real and tradable plan, I will share it here.
Thanks for the feedback and insight. Interesting it repainted on the tick chart, I haven't used this on a tick chart yet and haven't experienced repainting on the 1m 3m or 5m (assuming the candle closes with the signal that is).

I'm guessing you swing trade on the 4000 tick chart? Are you using any other smaller TF's or tick amounts for intrabar trading?
 
Last edited:

omwup

New member
Thanks for the feedback and insight. Interesting it repainted on the tick chart, I haven't used this on a tick chart yet and haven't experienced repainting on the 1m 3m or 5m (assuming the candle closes with the signal that is).

I'm guessing you swing trade on the 4000 tick chart? Are you using any other smaller TF's or tick amounts for intrabar trading?
I am going to try this tomorrow morning at the open.. just to confirm, I see the script has buy/sell orders but those are just for reference entry points and not actually buying on your behalf since I also see the profits being aggregated on the charts lol.
 

fernandesj

New member
VIP
I have posted screenshots of the following from Oct 15, 2021 - 5 min 1 day chart

Futures: S&P (/es) DOW (/ym) NASDAQ (/nq) Russel (/RTY) and the VIX (/vx)
  • This strategy looks very promising. However I have only tested it this week (10/1- 1015) and only on a 5 min chart.
  • This works both as short and long trades
  • The only modification I made was to change the active hours 6:00 hrs EST to 18:30 hrs EST since the futures trade 24x5
  • The only issue I noticed was that the Alerts didnt seem to be working for me.
Does any one know how to take this strategy (or any strategy from TOS) and apply it to any auto trading tool in TOS?

I would be remiss if I didn't thank Mightymorphinchris for this excellent strategy

xFnezsr.png

0Td4Y1W.png
2PFTYOs.png
HArUvGn.png
hJNssiS.png
 
Last edited:

Mightymorphinchris

Active member
I have posted screenshots of the following from Oct 15, 2021 - 5 min 1 day chart

Futures: S&P (/es) DOW (/ym) NASDAQ (/nq) Russel (/RTY) and the VIX (/vx)
  • This strategy looks very promising. However I have only tested it this week (10/1- 1015) and only on a 5 min chart.
  • This works both as short and long trades
  • The only modification I made was to change the active hours 6:00 hrs EST to 18:30 hrs EST since the futures trade 24x5
  • The only issue I noticed was that the Alerts didnt seem to be working for me.
Does any one know how to take this strategy (or any strategy from TOS) and apply it to any auto trading tool in TOS?

I would be remiss if I didn't thank Mightymorphinchris for this excellent strategy

xFnezsr.png

0Td4Y1W.png
2PFTYOs.png
HArUvGn.png
hJNssiS.png
Thanks for the feedback! Let me know if you find any better settings for the strategy inputs, additional conditions that would improve the strategy or your favorite security to trade it on during your testing.

Regarding auto trading:
This was relayed to me though I have not tried it out yet though i plan to this week https://github.com/TreyThomas93/python-trading-bot-with-thinkorswim

There's a discord server for support with it.
 

fernandesj

New member
VIP
Thanks for the feedback! Let me know if you find any better settings for the strategy inputs, additional conditions that would improve the strategy or your favorite security to trade it on during your testing.

Regarding auto trading:
This was relayed to me though I have not tried it out yet though i plan to this week https://github.com/TreyThomas93/python-trading-bot-with-thinkorswim

There's a discord server for support with it.
I tried to set up the Application (with MongoDB etc.) its really challenging
 

Mightymorphinchris

Active member
I am going to try this tomorrow morning at the open.. just to confirm, I see the script has buy/sell orders but those are just for reference entry points and not actually buying on your behalf since I also see the profits being aggregated on the charts lol.
Thinkorswim can't automatically trade on your behalf. The signals are just signals, while the labels up top showing trade count, w/l ratio, total profits, etc. are just hypothetical if you were to follow the signals and of course get perfect entries and exits.
 

BullInvestr

New member
So ive been trading with this for a rough two weeks. it definitely can generate some great signals but can also hurt you bad when trading in the chop. as of lately weve seen more range bound charts on the /ES than trending. if looking at a 4000 tick chart would see we are in a range with a small micro structure.

Heres what Ive found to help weed out the false signals, this won't prevent you from ever having a losing trade but will prevent you from trading chop.

1: Learn price action or apply your price action skills.

2: make sure all signals are confluent with your price action (if theres a buy signal when the market is clearly bearish, of course make sure you have a reversal pattern and reversal candlesticks have shown up).

3: if you're new to price action or just learning. Just stay with the trend. try your best to find entry around the 21 ema on a signal and look to find a confluent candle stick pattern within 2-5 bars of the signal.

So far thats all I got, basically price action... I would like to actually put this to the test when theres better moves intraday and not the overnight session.
 

fernandesj

New member
VIP
Thanks for the feedback! Let me know if you find any better settings for the strategy inputs, additional conditions that would improve the strategy or your favorite security to trade it on during your testing.

Regarding auto trading:
This was relayed to me though I have not tried it out yet though i plan to this week https://github.com/TreyThomas93/python-trading-bot-with-thinkorswim

There's a discord server for support with it.
Hello @Mightymorphinchris were you ever able to set up the github project with the MongoDB?
 

fernandesj

New member
VIP
I haven't been using it with real money yet just simulated. Trying to work on a way to have it trade a 1m chart and not depend on the scanner which has a 3-5 minute refresh delay.
I do believe the autotrade works best with the stock(s)/Futures you choose to trade for the day.

For example pick 5 stocks that you want to trade and set up the strategy, in this case PMO overload, based on the signals generated (buy long or sell short).

On another note: @Mightymorphinchris could you please look at this strategy and let me know if the the audio alerts are working for you. They are not generating any audible alerts. It is possible that I may have an older copy of the strategy?
 

BullInvestr

New member
I do believe the autotrade works best with the stock(s)/Futures you choose to trade for the day.

For example pick 5 stocks that you want to trade and set up the strategy, in this case PMO overload, based on the signals generated (buy long or sell short).

On another note: @Mightymorphinchris could you please look at this strategy and let me know if the the audio alerts are working for you. They are not generating any audible alerts. It is possible that I may have an older copy of the strategy?
I haven't been able to get the audio alerts to work either for some reason, I deleted the code and recoded and still nothing.
 

Similar threads

Top