/ES, /GC, and even FX Trading strategy

T

tradebyday

Active member
To start off I would like to extend a thank you to the community in what they have accomplished and with what they assisted me in accomplishing. Scrolling through several different threads I picked up several indicators I thought had promise and were working rather well together. I then found an indicator posted by @mc01439 and it brought everything together. The title merely shows what I have tested this strategy to be genuinely effective on, it may work on even more asset classes if you play with it a bit. My grid will be linked below with each indicator located in it set at the settings I use. If not the, case please @ me so i can fix that.

Now for the elements and rules of the strategy(these are a bit flexible as there is always room for improvement and you may have a different trading style to apply):

1. The 34 adaptiveEMA and 50EMA are treated similar to that of the ichimoku cloud (if someone wants to make it an actual cloud that would be cool to share). Trading under the cloud only shorts, trading above the cloud only longs, and trading inside the cloud is allowed either direction at user's own risk.

2. VWAP is a wonderful tool for trend identification. If VWAP is trending down, shorts only. If trending up, long only. I do trade shorts and longs on either side of the VWAP when it flattens as I find reversals back to VWAP to be lucrative, but I use the cloud to dictate if the reversal is worth it.

3. Now the oscillator 2 line cross and the blue/magenta arrows generally signal on the same candle, if not, I allow the one or the other to catch-up, UNLESS the signal is in the direction of which the Ergodic is trending(long signal while ergodic is green for example), then I enter immediately. The Ergodic does not have to be trending in the same direction when the other 2 signals are heading as it is a lagging indicator still.

4. *IF THE ARROWS SIGNAL ON A CANDLE THAT IS ALREADY HEADING IN THE SAME DIRECTION (ie, magenta short arrow signals on big red candle) I allow for a retracement of the next candle setting limit order for the open price of the signal candle, if not hit I enter at the close of that second candle. This is important due to the high volatility in price at this current time and helps eliminate big drawdowns while in the trade. On very tight ranged candles or maybe a candle that forms a hammer or doji, you can enter on that signal candle. You can trade or add on to trades when the bars paint, but I do not do this.

5. I do not have a solidified strategy for exits in place yet, but you'll notice the strategy has some very decent runners, and my goal is to capture all of the large moves as often as I can. So I am testing a SL set at 1.5* ATR from entry (generally exit before that if I get an opposite signal on a closed candle but the price has been rather erratic the past 2 weeks so it pays to have a SL just in case you're caught off guard), TP initially set at 2-3*ATR but more focused on price levels I have dictated on my chart already for S&R levels, sometimes playing multiple trades in the same move as I secure profits from level to level. Not exactly the most efficient way to capture the large moves, but I want to be transparent that I have not fully mastered this stuff. I still take profits too early at times. For those that can let them ride, you'll see some nice paydays. Any changes or patterns you notice in regards to improving either SL or exit strategy, please share and make us all better traders.

6. The time frames I trade are where the consistency comes in for the signaling. For /ES I use the 10,000 tick chart while volatility is high and price action is creating massive trends, it helps eliminate most noise. When things slow down to something similar as last year's summer, you could probably just use the 4,000 tick chart. This strategy looks very good on a 5min chart as well though, for those not liking the tick charts in here. For /GC I use the 1,000 tick chart, and the oscillator has been especially good with gold for me in the past, the signal arrows and the accompanied rules helps strengthen the reduction of losing trades.

7. For FX I have only tested this strategy with the 10,000 tick chart and it works really well, though that being said, would be difficult to trade. Maybe someone here can modify the base of this strategy to better reflect the 4hr or daily TF for more people to trade FX alongside their other ventures? I am going to continue my experimenting with lower TF like the hourly or smaller tick values in order to capture some pips early.

8. As far as any other assets like stocks, oil, etc.. I have not begun that testing so have at it! If you find something useful or interesting I encourage you all to share!

Ask if you have any questions, but study the charts and fiddle with what is there for the weekend before you do

https://tos.mx/9pv9Yv9
 
BenTen

BenTen

Administrative
Staff
VIP
Not sure how I missed this thread. That was very lengthy and detailed. Will need to take a second look tomorrow. Thank you for sharing.
 
T

tradebyday

Active member
Not sure how I missed this thread. That was very lengthy and detailed. Will need to take a second look tomorrow. Thank you for sharing.
Any feedback and adjustments are welcomed! Always on the path for perfection 😁
 
P

Playstation

Active member
VIP
These 2 market days I haven't been trading much, but it's been 2 revolutionary knowledge acquired that made me rethink my set up. Yours is one of them. Well done my man.
 
T

tradebyday

Active member
With the events taking place this weekend, the market halting (twice) and a double gapped opening, you HAVE to let your bias filter your trades. From the night session on 3/8 into this morning (3/9) you probably shouldn't even be trading from a risk standpoint, but in regards to my strategy, you should have turned off all indicators besides volume and VWAP, and unless you know how to trade price action or are just feeling lucky, probably should have turned off the screen too. A day like today shows there is no holy grail, and you have to be aware of what is happening in the market, even if you're an algorithmic trader. It's all about risk management 🙂
 
T

tradebyday

Active member
Also I have discovered that the ehler's arrows I have in my strategy work really well for the 10,000 tick chart /NQ, 10,000 tick chart /GC, 4,000 tick chart /RTY, and 2,000 tick chart on /SI. Maybe add a few rules, like only trading when above/below the cloud I posted above? Shows some promise over the last few days
 
madeinnyc

madeinnyc

Member
Excellent write up and detail! Anyone else here trade the /NQ?
 
haxen

haxen

New member
With the events taking place this weekend, the market halting (twice) and a double gapped opening, you HAVE to let your bias filter your trades. From the night session on 3/8 into this morning (3/9) you probably shouldn't even be trading from a risk standpoint, but in regards to my strategy, you should have turned off all indicators besides volume and VWAP, and unless you know how to trade price action or are just feeling lucky, probably should have turned off the screen too. A day like today shows there is no holy grail, and you have to be aware of what is happening in the market, even if you're an algorithmic trader. It's all about risk management 🙂

Hello, what are your recommended settings for VWAP and its band for /ES?
 
T

tradebyday

Active member
Hello, what are your recommended settings for VWAP and its band for /ES?
I just run standard VWAP with upper and lower bands disabled, but sometimes I look at charts with a weekly VWAP
 
T

tradebyday

Active member
Ok I have shoved the two main indicators for my strategy into a single strategy while I compile data for backtesting purposes. In doing so I have noticed something that I am unsure can be accomplished. Right now the strategy enters when both my "ehler's arrows" and oscillator cross on the same candle. One change I wish to make is for the strategy to trade when the two indicators signal within 1 candle of each other (ultimately creating a 3 candle window of opportunity). Is this possible? I am including the code I have crudely pasted together to make this work. If you run it, just change all the plot settings to not show any of the lines, arrows, etc. for chart reading purposes. Any help is appreciated! (HINT I am running this on /ES 10,000 tick chart still)
Code:
# hint: <b>Ehler's Mesa Adaptive Moving Average</b> using Ray's clean version
# of the homodyne discriminator.
#
 
# MIT License
# Copyright (c) <2010> <Radford Juang>
#
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
#
#The above copyright notice and this permission notice shall be included in
#all copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.

# mc01439 added MVTI from TASC May 2019 issue for bar coloring to be used as a double confirmation.

 
script WMA_Smooth {
    input price = hl2;
    plot smooth = (4 * price
+ 3 * price[1]
+ 2 * price[2]
+ price[3]) / 10;
}
 
script Phase_Accumulation {
# This is Ehler's Phase Accumulation code. It has a full cycle delay.
# However, it computes the correction factor to a very high degree.
#
    input price = hl2;
 
    rec Smooth;
    rec Detrender;
    rec Period;
    rec Q1;
    rec I1;
    rec I1p;
    rec Q1p;
    rec Phase1;
    rec Phase;
    rec DeltaPhase;
    rec DeltaPhase1;
    rec InstPeriod1;
    rec InstPeriod;
    def CorrectionFactor;
 
    if BarNumber() <= 5
    then {
        Period = 0;
        Smooth = 0;
        Detrender = 0;
        CorrectionFactor = 0;
        Q1 = 0;
        I1 = 0;
        Q1p = 0;
        I1p = 0;
        Phase = 0;
        Phase1 = 0;
        DeltaPhase1 = 0;
        DeltaPhase = 0;
        InstPeriod = 0;
        InstPeriod1 = 0;
    } else {
        CorrectionFactor = 0.075 * Period[1] + 0.54;
 
# Smooth and detrend my smoothed signal:
        Smooth = WMA_Smooth(price);
        Detrender = ( 0.0962 * Smooth
+ 0.5769 * Smooth[2]
- 0.5769 * Smooth[4]
- 0.0962 * Smooth[6] ) * CorrectionFactor;
 
# Compute Quadrature and Phase of Detrended signal:
        Q1p = ( 0.0962 * Detrender
+ 0.5769 * Detrender[2]
- 0.5769 * Detrender[4]
- 0.0962 * Detrender[6] ) * CorrectionFactor;
        I1p = Detrender[3];
 
# Smooth out Quadrature and Phase:
        I1 = 0.15 * I1p + 0.85 * I1p[1];
        Q1 = 0.15 * Q1p + 0.85 * Q1p[1];
 
# Determine Phase
        if I1 != 0
        then {
# Normally, ATAN gives results from -pi/2 to pi/2.
# We need to map this to circular coordinates 0 to 2pi
 
            if Q1 >= 0 and I1 > 0
            then { # Quarant 1
                Phase1 = ATan(AbsValue(Q1 / I1));
            } else if Q1 >= 0 and I1 < 0
            then { # Quadrant 2
                Phase1 = Double.Pi - ATan(AbsValue(Q1 / I1));
            } else if Q1 < 0 and I1 < 0
            then { # Quadrant 3
                Phase1 = Double.Pi + ATan(AbsValue(Q1 / I1));
            } else { # Quadrant 4
                Phase1 = 2 * Double.Pi - ATan(AbsValue(Q1 / I1));
            }
        } else if Q1 > 0
        then { # I1 == 0, Q1 is positive
            Phase1 = Double.Pi / 2;
        } else if Q1 < 0
        then { # I1 == 0, Q1 is negative
            Phase1 = 3 * Double.Pi / 2;
        } else { # I1 and Q1 == 0
            Phase1 = 0;
        }
 
# Convert phase to degrees
        Phase = Phase1 * 180 / Double.Pi;
 
        if Phase[1] < 90 and Phase > 270
        then {
# This occurs when there is a big jump from 360-0
            DeltaPhase1 = 360 + Phase[1] - Phase;
        } else {
            DeltaPhase1 = Phase[1] - Phase;
        }
 
# Limit our delta phases between 7 and 60
        if DeltaPhase1 < 7
        then {
            DeltaPhase = 7;
        } else if DeltaPhase1 > 60
        then {
            DeltaPhase = 60;
        } else {
            DeltaPhase = DeltaPhase1;
        }
 
# Determine Instantaneous period:
        InstPeriod1 =
-1 * (fold i = 0 to 40 with v=0 do
if v < 0 then
v
else if v > 360 then
-i
else
v + GetValue(DeltaPhase, i, 41)
);
 
        if InstPeriod1 <= 0
        then {
            InstPeriod = InstPeriod[1];
        } else {
            InstPeriod = InstPeriod1;
        }
 
        Period = 0.25 * InstPeriod + 0.75 * Period[1];
    }
    plot DC = Period;
}
 
script Ehler_MAMA {
    input price = hl2;
    input FastLimit = 0.5;
    input SlowLimit = 0.05;
 
 
    rec Period;
    rec Period_raw;
    rec Period_cap;
    rec Period_lim;
 
    rec Smooth;
    rec Detrender;
    rec I1;
    rec Q1;
    rec jI;
    rec jQ;
    rec I2;
    rec Q2;
    rec I2_raw;
    rec Q2_raw;
 
    rec Phase;
    rec DeltaPhase;
    rec DeltaPhase_raw;
    rec alpha;
    rec alpha_raw;
 
    rec Re;
    rec Im;
    rec Re_raw;
    rec Im_raw;
 
    rec SmoothPeriod;
    rec vmama;
    rec vfama;
 
    def CorrectionFactor = Phase_Accumulation(price).CorrectionFactor;
 
    if BarNumber() <= 5
    then {
        Smooth = 0;
        Detrender = 0;
 
        Period = 0;
        Period_raw = 0;
        Period_cap = 0;
        Period_lim = 0;
        I1 = 0;
        Q1 = 0;
        I2 = 0;
        Q2 = 0;
        jI = 0;
        jQ = 0;
        I2_raw = 0;
        Q2_raw = 0;
        Re = 0;
        Im = 0;
        Re_raw = 0;
        Im_raw = 0;
        SmoothPeriod = 0;
        Phase = 0;
        DeltaPhase = 0;
        DeltaPhase_raw = 0;
        alpha = 0;
        alpha_raw = 0;
        vmama = 0;
        vfama = 0;
    } else {
# Smooth and detrend my smoothed signal:
        Smooth = WMA_Smooth(price);
        Detrender = ( 0.0962 * Smooth
+ 0.5769 * Smooth[2]
- 0.5769 * Smooth[4]
- 0.0962 * Smooth[6] ) * CorrectionFactor;
 
        Q1 = ( 0.0962 * Detrender
+ 0.5769 * Detrender[2]
- 0.5769 * Detrender[4]
- 0.0962 * Detrender[6] ) * CorrectionFactor;
        I1 = Detrender[3];
 
        jI = ( 0.0962 * I1
+ 0.5769 * I1[2]
- 0.5769 * I1[4]
- 0.0962 * I1[6] ) * CorrectionFactor;
 
        jQ = ( 0.0962 * Q1
+ 0.5769 * Q1[2]
- 0.5769 * Q1[4]
- 0.0962 * Q1[6] ) * CorrectionFactor;
 
# This is the complex conjugate
        I2_raw = I1 - jQ;
        Q2_raw = Q1 + jI;
 
        I2 = 0.2 * I2_raw + 0.8 * I2_raw[1];
        Q2 = 0.2 * Q2_raw + 0.8 * Q2_raw[1];
 
        Re_raw = I2 * I2[1] + Q2 * Q2[1];
        Im_raw = I2 * Q2[1] - Q2 * I2[1];
 
        Re = 0.2 * Re_raw + 0.8 * Re_raw[1];
        Im = 0.2 * Im_raw + 0.8 * Im_raw[1];
 
# Compute the phase
        if Re != 0 and Im != 0
        then {
            Period_raw = 2 * Double.Pi / ATan(Im / Re);
        } else {
            Period_raw = 0;
        }
 
        if Period_raw > 1.5 * Period_raw[1]
        then {
            Period_cap = 1.5 * Period_raw[1];
        } else if Period_raw < 0.67 * Period_raw[1] {
            Period_cap = 0.67 * Period_raw[1];
        } else {
            Period_cap = Period_raw;
        }
 
        if Period_cap < 6
        then {
            Period_lim = 6;
        } else if Period_cap > 50
        then {
            Period_lim = 50;
        } else {
            Period_lim = Period_cap;
        }
 
        Period = 0.2 * Period_lim + 0.8 * Period_lim[1];
        SmoothPeriod = 0.33 * Period + 0.67 * SmoothPeriod[1];
 
        if I1 != 0
        then {
            Phase = ATan(Q1 / I1);
        } else if Q1 > 0
        then { # Quadrant 1:
            Phase = Double.Pi / 2;
        } else if Q1 < 0
        then { # Quadrant 4:
            Phase = -Double.Pi / 2;
        } else { # Both numerator and denominator are 0.
            Phase = 0;
        }
 
        DeltaPhase_raw = Phase[1] - Phase;
        if DeltaPhase_raw < 1
        then {
            DeltaPhase = 1;
        } else {
            DeltaPhase = DeltaPhase_raw;
        }
 
        alpha_raw = FastLimit / DeltaPhase;
        if alpha_raw < SlowLimit
        then {
            alpha = SlowLimit;
        } else {
            alpha = alpha_raw;
        }
        vmama = alpha * price + (1 - alpha) * vmama[1];
        vfama = 0.5 * alpha * vmama + (1 - 0.5 * alpha) * vfama[1];
    }
 
    plot MAMA = vmama;
    plot FAMA = vfama;
 
}
 
declare upper;
input price = hl2;
input FastLimit = 0.5;
input SlowLimit = 0.05;
 
plot MAMA = Ehler_MAMA(price, FastLimit, SlowLimit).MAMA;
MAMA.SetLineWeight(1);
MAMA.SetDefaultColor(Color.Cyan);
plot FAMA = Ehler_MAMA(price, FastLimit, SlowLimit).FAMA;
FAMA.SetLineWeight(1);
FAMA.SetDefaultColor(Color.Yellow);
 
plot Crossing = Crosses((MAMA < FAMA), yes);
Crossing.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
Crossing.SetDefaultColor(Color.CYAN);
Crossing.SetLineWeight(3);
 
plot Crossing1 = Crosses((MAMA > FAMA), yes);
Crossing1.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
Crossing1.SetDefaultColor(Color.MAGENTA);
Crossing1.SetLineWeight(3);
 
input labels = yes;
AddLabel(labels, Concat("  MAMA: ", Concat("",
if MAMA > FAMA then "Bull  " else "Bear  ")),
 
if MAMA > FAMA then Color.GREEN else Color.RED);
#addcloud (MAMA, FAMA);
DefineGlobalColor("Bullish", Color.BLUE);
DefineGlobalColor("Bearish", Color.MAGENTA);
AddCloud(MAMA, FAMA, globalColor("Bullish"), globalColor("Bearish"));

MAMA.AssignValueColor(if MAMA > FAMA then Color.CYAN else Color.ORANGE);
FAMA.AssignValueColor(if MAMA > FAMA then Color.BLUE else Color.MAGENTA);
 
Alert(Crossing, "FAMA crosses above MAMA", alert.bar, sound.bell);
Alert(Crossing1,"FAMA crosses below MAMA", alert.bar, sound.bell);

#AddVerticalLine(Crossing1, close, Color.RED, Curve.SHORT_DASH);
#AddVerticalLine(Crossing, close, Color.GREEN, Curve.SHORT_DASH);

#################################################################################
#MVTI
input CCILength = 21;
input CCILimit = 100;
input ADXLength = 8;
input ADXTrend = 15;

def ADX = reference ADX(length = ADXLength);
def DIPlus = reference DIPlus(length = ADXLength);
def DIMinus = reference DIMinus(length = ADXLength);

def Tr = if ADX < ADXTrend then 0 else
  if Tr[1] == 1 and DIPlus > DIMinus then 1 else
  if Tr[1] <= 0 and DIPlus > DIMinus and ADX > ADX[1] then 1 else
  if Tr[1] == -1 and DIMinus > DIPlus then -1 else
  if Tr[1] >= 0 and DIMinus > DIPlus and ADX > ADX[1] then -1
  else 0;

def CCI = CCI(21, CCILimit, CCILimit).CCI;
def OverBought = CCILimit;
def OverSold = -CCILimit;

def OB = if (CCI > OverBought) then 1 else 0;
def OS = if (CCI < OverSold) then 1 else 0;

DefineGlobalColor("StrongUp", Color.GREEN);
DefineGlobalColor("Up", Color.LIGHT_GREEN);
DefineGlobalColor("Neutral", Color.GRAY);
DefineGlobalColor("Down", Color.DOWNTICK);
DefineGlobalColor("StrongDown", Color.RED);

#madiff.SetPaintingStrategy(paintingStrategy.HISTOGRAM);

#madiff.AssignValueColor(
#if (Tr == 1 and OB == 1) then
 # GlobalColor("StrongUp")
#else if Tr == 1 then
 # GlobalColor("Up")
#else if Tr == -1 and OS == 0 then
 # GlobalColor("Down")
#else if (Tr == -1 and OS == 1) then
 # GlobalColor("StrongDown")
#else   
#  GlobalColor("Neutral"));

def sUP = Tr == 1 and OB == 1;
def UP = Tr == 1;
def DOWN = Tr == -1 and OS == 0;
def sDOWN = Tr == -1 and OS == 1;
def TRENDside = !sUP and !UP and !DOWN and !sDOWN;



AddLabel(labels and sUP, "                    MVTI = Strong Up                     ", Color.GREEN);
AddLabel(labels and UP, "                         MVTI = UP                          ", Color.LIGHT_GREEN);
AddLabel(labels and DOWN, "                    MVTI = DOWN                    ", Color.DOWNTICK);
AddLabel(labels and sDOWN, "                MVTI Strong = Down                 ", Color.RED);
AddLabel(labels and TRENDside, "                 MVTI = NO TREND                 ", Color.GRAY);

AssignPriceColor(if UP or sUP then Color.GREEN else if DOWN or sDOWN then Color.RED else  Color.GRAY);

#WT_LB Short Name TV

input Channel_Length = 21; #10
input Average_Length = 34; #10
input over_bought_1 = 60;
input over_bought_2 = 53;
input over_sold_1 = -60;
input over_sold_2 = -53;
input show_bubbles = yes;
input show_sec_bbls = no;
input show_alerts = yes;
def ap = hlc3;
def esa = ExpAverage(ap, Channel_Length);
def d = ExpAverage(AbsValue(ap - esa), Channel_Length);
def ci = (ap - esa) / (0.015 * d);
def tci = ExpAverage(ci, Average_Length);
def wt1 = tci;
def wt2 = SimpleMovingAvg(wt1, 4);
#def zero = 0;
plot zero = 0;
zero.SetDefaultColor( Color.GRAY );
plot obLevel1 = over_bought_1;
obLevel1.SetDefaultColor(Color.RED);
plot osLevel1 = over_sold_1;
osLevel1.SetDefaultColor(Color.GREEN);
plot  obLevel2 = over_bought_2;
obLevel2.SetDefaultColor(Color.RED);
obLevel2.SetStyle(Curve.SHORT_DASH);
plot  osLevel2 = over_sold_2;
osLevel2.SetDefaultColor(Color.GREEN);
osLevel2.SetStyle(Curve.SHORT_DASH);

plot wt1_1 = wt1;
wt1_1.SetDefaultColor(Color.GREEN);
plot wt2_1 = wt2;
wt2_1.SetDefaultColor(Color.RED);
wt2_1.SetStyle(Curve.POINTS);
plot wt3 = (wt1 - wt2);
wt3.SetDefaultColor(Color.BLUE);
wt3.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
def signal1 = wt1 crosses above wt2 and wt1 < over_sold_2;
plot Signal = if signal1  then (signal1 * over_sold_2) else Double.NaN;
Signal.SetDefaultColor(Color.GREEN);
Signal.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
Signal.SetLineWeight(3);
Signal.HideTitle();
def signal2 = wt1 crosses below wt2 and wt1 > over_bought_2;
plot Signal2_ = if signal2  then (signal2 * over_bought_2) else Double.NaN;
Signal2_.SetDefaultColor(Color.RED);
Signal2_.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
Signal2_.SetLineWeight(3);
Signal2_.HideTitle();

# Moving Average Cloud
# Mobius
# Modified Prior by BenTen
# Modified again by TradeByDay

input price1 = close;
input fastLength = 34;
input slowLength = 50;

plot FastMA = AdaptiveEMA( price, fastLength);
plot SlowMA = LegacyEMA( price, slowLength);
FastMA.SetDefaultColor(GetColor(1));
SlowMA.SetDefaultColor(GetColor(2));

plot ArrowUp = if FastMA crosses above SlowMA
               then low
               else double.nan;
     ArrowUP.SetPaintingStrategy(PaintingStrategy.Arrow_UP);
     ArrowUP.SetLineWeight(3);
     ArrowUP.SetDefaultColor(Color.Green);
plot ArrowDN = if FastMA crosses below SlowMA
               then high
               else double.nan;
     ArrowDN.SetPaintingStrategy(PaintingStrategy.Arrow_DOWN);
     ArrowDN.SetLineWeight(3);
     ArrowDN.SetDefaultColor(Color.Red);
Alert(ArrowUp, " ", Alert.Bar, Sound.Chimes);
Alert(ArrowDN, " ", Alert.Bar, Sound.Bell);

AddCloud(FastMA, SlowMA, Color.GREEN, Color.RED);

AddOrder(OrderType.BUY_AUTO, wt3 crosses above 0 and MAMA crosses above FAMA);
AddOrder(OrderType.Sell_AUTO, wt3 crosses below 0 and MAMA crosses below FAMA);

#End Code
 
T

tradebyday

Active member
Turned the Impulse study into a strategy for anyone that wants it https://tos.mx/VEwUx48 ... Going to be testing the conditions of it in reference to the rest of my strategy, but it is really nice on its own. Just gets killed in ranging markets. Very ideal for tick charts
 
T

tradebyday

Active member
Modified the impulse strategy to use the oscillator and the ergodic instead of the MACD and EMA in the original. Works MUCH better, but can always be improved https://tos.mx/Q1H0XOj . Let me know what y'all think and whether or not there may be better indicators out there to plug in this!
 
Billions

Billions

Active member
2019 Donor
VIP
Modified the impulse strategy to use the oscillator and the ergodic instead of the MACD and EMA in the original. Works MUCH better, but can always be improved https://tos.mx/Q1H0XOj . Let me know what y'all think and whether or not there may be better indicators out there to plug in this!
HI what does _100(-500) mean? And can you tell me how you use this best?
 

Similar threads

Top