Tears In The Profile

An idea on how you can plot approximate support and resistance levels based on the presence of larger step-downs.

Picture shows with lighting highlights the brown support lines based on the last 2 day’s profile (96x 30 mins) where the stepdifference was greater than 6.

It may be worth placing more permanent lines over those levels for over time the sample would cease including those areas.

Use it as a helper with preparing for the day.

double start=iOpen(symbol,30,market_profile_length);
double step = FSize*10*Point/8;
    for (i=market_profile_length; i>=0; i--)  
      for (j=30; j>=0; j--) { 
         if (High[i]>start+j*step && Low[i]<start+j*step) mpu[j]++;
         if (High[i]>start-j*step && Low[i]<start-j*step) mpd[j]++;
   }

  for (i=30; i>=0; i--) { 
      if (mpu[i]>0) { ObjectCreate("Qxt 7"+DoubleToStr(i), OBJ_TEXT, 0, Time[0], start+i*step+.0002); 
                     ObjectSetText("Qxt 7"+DoubleToStr(i), "       "+IntegerToString(NormalizeDouble(mpu[i],4),1), 12, "Arial Black", indicator_color3);
                        
                        if (MathAbs(mpu[i]-mpu[i+1])>stepdifference){
                                    ObjectCreate(0,"Qxt5_1"+DoubleToStr(i),OBJ_TREND,0,Time[10],start+i*step+.0002-17*Point,Time[1],start+i*step+.0002-17*Point);
                                    ObjectSetInteger(0,"Qxt5_1"+DoubleToStr(i),OBJPROP_RAY_RIGHT,false);
                                    ObjectSet("Qxt5_1"+DoubleToStr(i),OBJPROP_COLOR,Brown);
                                    ObjectSet("Qxt5_1"+DoubleToStr(i),OBJPROP_WIDTH, 2);}
                                    
                     }
      if (mpd[i]>0) { ObjectCreate("Qxt 9"+DoubleToStr(i), OBJ_TEXT, 0, Time[0], start-i*step+.0002); 
                     ObjectSetText("Qxt 9"+DoubleToStr(i), "      "+IntegerToString(NormalizeDouble(mpd[i],4),1), 12, "Arial Black", indicator_color3);
                     
                             if (MathAbs(mpd[i]-mpd[i+1])>stepdifference){
                                    ObjectCreate(0,"Qxt5_1"+DoubleToStr(i),OBJ_TREND,0,Time[10],start-i*step+.0002-34*Point,Time[1],start-i*step+.0002-34*Point);
                                    ObjectSetInteger(0,"Qxt5_1"+DoubleToStr(i),OBJPROP_RAY_RIGHT,false);
                                    ObjectSet("Qxt5_1"+DoubleToStr(i),OBJPROP_COLOR,Brown);
                                    ObjectSet("Qxt5_1"+DoubleToStr(i),OBJPROP_WIDTH, 2);}

                     }
       }

(Taken from the MQL4 Code, “99-Lines”)

Managed Accounts

So I have a lot of connections on LinkedIn, so I get all kinds of “statements” shuffled in to the digest.

There are things I immediately hit the unfollow button on, these are the obvious scams. You know, mostly cell phone screen shots with no obvious duration shown, just a piece meal with a REAL flag Photoshopped over.

Do I keep the connections? I let them look at what I am doing and give them a chance to do the right thing. I only delete the aggressive jerk types and the total frauds.

I’ve been trading for a long time to know what is realistic / attainable.

Today I saw a “Managed Accounts” list with I believe 10-12 different accounts and just a percentage for “gains” in an excel chart.

Scammiest thing ever. I wanted to immediately unfollow, but then after losing the post altogether I felt regret for not taking a screen shot.

There are a number of things to talk about here.

One single percentage is totally meaningless: is that increase on the balance or the equity (for these two things rarely are equal)? Was there any capital injection for instance to avoid a margin call? This would raise the balance too, you know.

I myself trade like a fund. It is not impossible to trade 10 different accounts and have all trades settled by the end of the day. These accounts would not be called managed accounts, but rather traded accounts.

If you manage an account, that means that you are using means of protection other than stop losses. Most likely hedging infrequently.

In my video titled “Yie Are Kung-Fu /30 K Profit Factor?!” I show both a monthly Balance and an Equity statement.

When you are managing an account, you always have a net position size which is either positive and negative, and seldom are without any holdings at all. You would be rolling in and out of longs and shorts, and would have an exposure on balance.

Sure, money making is the ultimate goal, just like when you are day-trading, but your objectives would multiply – you would want to:

  • align your naked exposure best fit with the perceived next move
  • gain and not lose equity vs balance
  • build up equity with short term, quick roll in & outs occupying little to no margin
  • pay attention to which holding side would contribute swap for overnight holding
  • pay attention to margin usage, hedge when you find it wise / necessary
  • inject capital only on last resort
  • use dynamic sizing giving weight temporarily to higher conviction

All off numbers can be attributed any sense in the light of an examined period. There are mere changes towards an ideal state that may never be accomplished.

So, let’s pull up the statement from the end of January, we’re curious about the holdings and the equity here.

If you add up the short positions held, it was 1.85 lots. Since my calculated Trading Size was 4.5 lots, you can see that the account was not heavily burdened, and the Equity/Balance Ratio speaks of 32% draw down with the nominal value expressed as Floating.

This Friday has a lot more to go, but for the sake of this article, I do a “one week later comparison” with its current state.

For the current week the following things can be said:

  • the balance grew by 1,097.59
  • the equity grew by 1,538.40
  • the draw down decreased to 25.44%
  • on balance I am currently 1.45 lots long after taking on 2.85 lots long and closing 0.45 lots short
  • due to equity growth, trading size is now at 5 lots

and we are not even discussing margin percentages at this point.

As you can see, one single percentage number would not paint any realistic picture, not even the shade of it.

Fund management is all about realizing when market changes occur and making beneficial alterations.

This is why it is worth celebrating when an indicator weakness gets corrected to be able to more accurately interpret in the future to bring about better bottom line numbers.

For instance, a reversal divergence wasn’t picked up before, so I had to allow for the comparison high to be lower by a few pips – it is now.

The following call had to be eliminated, for the RSI sequence’s last 2 values were too close to each other for a usable reference point.

And it is correct now.

Further changes may be necessary, but I never said otherwise. Development is a process just as managing an account.

Axel S

A present.

Channelin’ The House

In order to start channeling, the Alex Foley aka the market has to trade in the E-32 for an Axel S. E-32 itself would become one end of the channel and the distance doubled would be the other end.

In the example above you can see that the encounter with the E-16 viaduct brought on the channeling move.

#property copyright "by Macdulio" 
#property link      "forexfore.blog" 
#property description "Axel S"

#property indicator_chart_window
#property indicator_buffers 9

int lookback = 300;

double e16d1[], e16d2[], e16d3[], e16d4[], E16[], RSI2[];
double E32L[], AxelU[], AxelU1[], AxelL[], AxelL2[];
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   SetIndexBuffer(0,AxelU);
   SetIndexStyle(0,DRAW_LINE,4,1,clrCyan); 

   SetIndexBuffer(1,AxelL);
   SetIndexStyle(1,DRAW_LINE,4,1,clrYellow); 
   
    SetIndexBuffer(2,AxelU1);
   SetIndexStyle(2,DRAW_LINE,1,1,clrCyan); 
  
  SetIndexBuffer(3,E32L);
   SetIndexStyle(3,DRAW_LINE,3,3,clrYellow);   
  
   SetIndexBuffer(4,e16d1);
   SetIndexStyle(4,DRAW_LINE,1,1,clrBlue);  
      SetIndexBuffer(5,e16d2);
   SetIndexStyle(5,DRAW_LINE,1,1,clrBlue);  
  
  SetIndexBuffer(6,e16d3);
   SetIndexStyle(6,DRAW_LINE,1,1,clrRed);  
      SetIndexBuffer(7,e16d4);
   SetIndexStyle(7,DRAW_LINE,1,1,clrGreen);  
    
 SetIndexBuffer(8,AxelL2);
   SetIndexStyle(8,DRAW_LINE,1,1,clrYellow); 

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{

   int    i;             // Number of counted bars
  
   
  string symbol = Symbol();
  
    ArrayResize(E16, Bars);   
 ArrayInitialize(E16, EMPTY_VALUE); 
   ArrayResize(e16d1, Bars);   
 ArrayInitialize(e16d1, EMPTY_VALUE);  
    ArrayResize(e16d2, lookback);   
 ArrayInitialize(e16d2, EMPTY_VALUE); 
    ArrayResize(e16d3, lookback);   
 ArrayInitialize(e16d3, EMPTY_VALUE);  
    ArrayResize(e16d4, lookback);   
 ArrayInitialize(e16d4, EMPTY_VALUE); 
    ArrayResize(E16, lookback);   
 ArrayInitialize(E16, EMPTY_VALUE);  
    ArrayResize(RSI2, lookback);   
 ArrayInitialize(RSI2, EMPTY_VALUE);  
     ArrayResize(AxelU, lookback);   
 ArrayInitialize(AxelU, EMPTY_VALUE); 
      ArrayResize(AxelU1, lookback);   
 ArrayInitialize(AxelU1, EMPTY_VALUE); 
      ArrayResize(AxelL, lookback);   
 ArrayInitialize(AxelL, EMPTY_VALUE); 
      ArrayResize(AxelL2, lookback);   
 ArrayInitialize(AxelL2, EMPTY_VALUE); 
 
       ArrayResize(E32L, Bars);  
  ArrayInitialize(E32L, EMPTY_VALUE);  
 

//--------------------------------------------------------------------
        

for (i = lookback ; i >=0; i--) {

   if (Period()==30) E16[i]=iMA(NULL,0,32,0,MODE_EMA, PRICE_MEDIAN,i);       
   else E16[i]=iMA(NULL,0,16,0,MODE_EMA, PRICE_MEDIAN,i);
          
   if (Period()==60) E32L[i]=iMA(NULL,0,32,0,MODE_EMA, PRICE_MEDIAN,i);
   else E32L[i]=iMA(NULL,0,32*2,0,MODE_EMA, PRICE_MEDIAN,i);
   
         e16d1[i]=E16[i]+450*Point;
         
         e16d2[i]=E16[i]-450*Point;
           
        if (iMA(NULL,60,67,0,MODE_EMA, PRICE_HIGH,0)>iMA(NULL,60,207,0,MODE_EMA, PRICE_HIGH,0)) e16d4[i]=e16d2[i];
        if (iMA(NULL,60,67,0,MODE_EMA, PRICE_HIGH,0)<iMA(NULL,60,207,0,MODE_EMA, PRICE_HIGH,0)) e16d3[i]=e16d1[i];
        
     AxelU[i]=E32L[i]+280*Point;
     AxelU1[i]=AxelU[i]+280*Point;
    
     AxelL[i]=E32L[i]-280*Point;
     AxelL2[i]=AxelL[i]-280*Point;
   
} 
  return(0);
  }

Should work both on 60 and 30M


Add on from the super saver menu: RSI2 30M

Basics – Support & Resistance

Support and Resistance can be found on the chart due to the volatility breach they caused in a direction = due to the manner price left a level (in a hurry).

On the image above to find support and resistance zones automatically, my software utilizes the breach of the dotted brackets, which are 10-pip displacements. I also invented a logical switch for “fresh green pop / fresh red pop” to find the most relevant ones.

hdn[i]=Low[i+1]-100*Point; hup[i]=High[i+1]+100*Point;

The width I use is

1. from the open of the break away candle to

2. to 4.4 pips beyond the outer point of the candle

I add some displacement is the recent history was nosebleed selling / buying (RSI just hit the floor / ceiling)

The width I use is

1. from 3 pips beyond the open of the break away candle to

2. to 11.4 pips beyond the outer point of the candle

ObjectCreate(0,"SING3_1"+i,OBJ_TREND,0,Time[i],Low[i]-114*Point,Time[0],Low[i]-114*Point);
                          ObjectSetInteger(0,"SING3_1"+i,OBJPROP_RAY_RIGHT,false);
                          ObjectSet("SING3_1"+i,OBJPROP_COLOR,Lime);
                          ObjectSet("SING3_1"+i,OBJPROP_WIDTH, 3);  
ObjectCreate(0,"SING3_2"+i,OBJ_TREND,0,Time[i],Open[i]-30*Point,Time[0],Open[i]-30*Point);
                          ObjectSetInteger(0,"SING3_2"+i,OBJPROP_RAY_RIGHT,false);
                          ObjectSet("SING3_2"+i,OBJPROP_COLOR,Lime);
                          ObjectSet("SING3_2"+i,OBJPROP_WIDTH, 3);  

The label plays a windmill around the end of the trigger candle

ObjectCreate("SINGRock"+DoubleToStr(i), OBJ_TEXT, 0, Time[i], Low[i]-10*Point); ObjectCreate("SINGRocky"+DoubleToStr(i), OBJ_TEXT, 0, Time[i], Low[i]-10*Point);
                                if (Close[0]>Open[i]-30*Point) {ObjectSetText("SINGRock"+DoubleToStr(i), " Support", 14, "Impact", clrWhite); ObjectSetText("SINGRocky"+DoubleToStr(i), "Support", 14, "Impact", clrNavy);}
                                else {ObjectSetText("SINGRock"+DoubleToStr(i), " Resistance", 14, "Impact", clrWhite); ObjectSetText("SINGRocky"+DoubleToStr(i), "Resistance", 14, "Impact", clrNavy);

So let’s carry over these two ideas for drawing support and resistance:

  1. the line is merely a starting point of a moratorium zone, and would be placed on the candle’s open, not its wick
  2. you need volatility expansion to highlight an area, a simple trickle away does not result in a support/resistance level no matter how long the price spent there

…so your lines are drawn in accurately on your hourly chart, you are eyeing the next level up

…and this is what happens…

…baby bummer, for you knew all along about the channel target on the left (thanks to my free TOS present earlier), you are conscious of the wave structure and have not used outrageous size… you are in good shape… time to average down that bet!

Price is almost there & life is almost fair>

…the necessary correction to the RSI2 30M was made.

Channel Target on CloseLines 60-60

the difference comes from using an E-32 channel VS E-36 on TOS in part

…potential mean reversion from here…

The Projected Distance beam is of course a potential support. So is the Comfort Levels overbought neckline.

Doctrine of the Forex Day Trader

– for optimal performance –

Identify a crash and play it

The two kind of crashes are the Viaduct Crash (hitting and reversing off the 45-pips displacement of E16 / 74 pips displacement of E32) out of a not sustainable buying selling and the End of the Line Crash (SSC) out of 3 tries have transpired: no more tries, switch sides.

A near miss of the Viaduct is a steering away move back to the MAs

Get the size in

If the crash is to happen against your holding direction, round up the holdings to your personal risk tolerance level (maximum unhedged holding size) scaling in more and more. If a viaduct crash happened and the reaction is visible, take on a full size hedge at market.

If the crash was in the direction of your holdings

  • get out of your in the money holdings
  • place 2x 1/2 size of your remaining holdings pending 2 and 8 pips from the furthest point of the “Bam / Scorching” section (“3rd” attempt)
  • perhaps add another quarter 16 pips out (consider the overall market direction)
  • perhaps add another quarter 27 pips out (consider the overall market direction)
Overall market direction is currently dollar negative, this won’t change until the daily PSAR gets violated and a 4th day is still making progress beyond the PSAR limit.

Aim for lucid targets

Aim for the safety lines – plug the target code in for the cropper: 0.28 for shorts, 2.8 for longs. With higher conviction you can plug in 0.38 / 3.8 for 10 pips extra. The Channel targets give you a good idea of what is possible / likely.

Trail

Plug in the trail stop code with 32-pips tolerance: 3 for shorts 0.3 for longs

Do not touch the trade

Rinse and repeat


What to make of the multiplying Karma police? Starting to look like a crime scene. Politia = Pulis = 3 hourly closes on the other side of Mr. Maroon.

It turned out to be an extended length Wave 2.


…an example of Viaduct 1 breaking & Viaduct 2 holding.

The Wave 3 projection is the black tip of the white spear.

Buy To Sell To – TOS

ThinkOrSwim script

Draws an E36 channel adjusted to fractals and projects the opposite end of the channel as a target.

I made this ages ago, but it is worth sharing because of the idea being instrument independent… and now on to the MT4 interpretation.

Image shows the origin of the LEMAs – here they still had clouds associated to them.
input length = 36;
input price = close;
input reversalAmount = 0.6;
input showonlytoday = yes;
input displace = .9;

def ZZG =  reference ZigZagHighLow(price, price, reversalAmount, 0, 1, 0);


def ZZG2 =  if showonlytoday and !IsNaN(close(period = "DAY")[-12]) then Double.NaN else reference ZigZagHighLow(price, price, reversalAmount, 0, 1, 0);

def zzSave = if !IsNaN(ZZG) then price else GetValue(zzSave, 1);
def chg = (price / GetValue(zzSave, 1) - 1) * 100;
def isUp = chg >= 0;

def flipu = if isUp == yes and isUp[1] == no then 1 else 0;
def flipd = if isUp == no and isUp[1] == yes then 1 else 0;

def EMA = ExpAverage(price, length);

def upval = if flipd then high[1] - EMA[1] else if flipu[22] != 1 and Sum(flipu, 22) < 2 then upval[1] else upval[1] * .8;

def upval2 = if flipd then high[1] - EMA[1] else upval2[1];

def dval = if flipu then EMA[1] - low[1] else  if flipd[22] != 1 and Sum(flipd, 22) < 2 then dval[1] else dval[1] * .8;
def dval2 = if flipu then EMA[1] - low[1] else dval2[1];

def EMAP = if upval > 0 then EMA + upval * displace  else EMAP[1] ;
def EMAP2 = if upval2 > 0 then EMA + upval2 * displace  else EMAP2[1] ;
def EMAD = if dval > 0 then EMA - dval * displace  else EMAD[1];
def EMAD2 = if dval2 > 0 then EMA - dval2 * displace else EMAD2[1];

def ema2 = if EMAP > .02 then EMAP else Double.NaN;

def ema3 = if EMAD > .02 then EMAD else Double.NaN;

plot ema44 = if EMAP2 > .02 then EMAP2 else Double.NaN;
ema44.SetLineWeight(4);
ema44.SetDefaultColor(Color.RED);

plot ema4 = if EMAP2 > .02 then EMAP2 else Double.NaN;
ema4.SetLineWeight(2);
ema4.SetPaintingStrategy(PaintingStrategy.DASHES);
ema4.SetDefaultColor(Color.YELLOW);

plot ema55 = if EMAD2 > .02 then EMAD2 else Double.NaN;
ema55.SetLineWeight(4);
ema55.SetDefaultColor(Color.BLUE);

plot ema5 = if EMAD2 > .02 then EMAD2 else Double.NaN;
ema5.SetLineWeight(2);
ema5.SetPaintingStrategy(PaintingStrategy.DASHES);
ema5.SetDefaultColor(Color.YELLOW);

input TF = {default "1 HOUR",  "78 MIN",  "4 HOURS", "DAY", "WEEK", "MONTH"};
def CI = ( ( Log(Sum(TrueRange(high(period = TF), close(period = TF), low(period = TF)), 14) / (Highest(if high(period = TF) >= close(period = TF)[1] then high(period = TF) else close(period = TF)[1], 14) - Lowest( if low(period = TF) <= close(period = TF)[1] then low(period = TF) else close(period = TF)[1], 14))) / Log(10)) / (Log(14) / Log(10))) * 100;
input TFS = {default "DAY", "WEEK", "MONTH"};

def  slkf =  reference StochasticFull(77, 22, 9, 0, high, low, close, 1, "SMA").FullK;
def diff = 100 - (75 - (slkf - (88 - CI))) * .8;

def dhi14 = Highest(high(period = "DAY"), 14);

def dlo14 = Lowest(low(period = "DAY"), 14);

def dei80 =  dhi14 - ((dhi14 - dlo14) / 100 * 19);

def dos20 = dhi14 - ((dhi14 - dlo14) / 100 * 79);

def top = (dei80[2] - dos20[1]) * .7 + dos20;

def bot =  (dei80[2] - dos20[1]) * .3 + dos20;

def ave = (top + bot) / 2;

plot dcr = if Crosses(if showonlytoday and !IsNaN(close(period = "DAY")[-12]) then Double.NaN else diff, 62, CrossingDirection.BELOW) and CI > 34 and high < ema4 then high else Double.NaN;
dcr.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
dcr.SetLineWeight(4);
dcr.AssignValueColor(if close > ave then Color.Red else Color.Yellow);

plot ucr = if Crosses(if showonlytoday and !IsNaN(close(period = "DAY")[-12]) then Double.NaN else diff, 34, CrossingDirection.ABOVE) and low > ema5 then low else Double.NaN;
ucr.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
ucr.SetLineWeight(4);
ucr.AssignValueColor(if close < ave then Color.DARK_GREEN else Color.GREEN);

AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else flipd, high, "CHANNEL RE-ENTRY", CreateColor(0, 162, 232), yes);
AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else flipd, ema5, Concat("CH TGT:", ema5), CreateColor(0, 162, 232), no);

AddCloud(if high[1] > ema44[1] and close < ema44 then ema44 else Double.NaN, ema5, Color.BLUE, Color.BLUE);

AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else flipu, low, "CHANNEL RE-ENTRY", Color.RED, no);
AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else flipu, ema4, Concat("CH TGT:", ema4), Color.RED, yes);

AddCloud(if low[1] < ema5[1] and close > ema5 then ema4 else Double.NaN, ema5, Color.BLUE, Color.BLUE);

def aim = if flipd then ema5 else if flipu then ema4 else aim[1];

def cmem = if flipu or flipd then 0 else if Crosses(aim, close, CrossingDirection.ANY) then 1 else Double.NaN;
def cmemh = if cmem != cmem[1] then cmem else cmemh[1];

plot chaim = if aim > .02 then aim else Double.NaN;
chaim.SetStyle(Curve.SHORT_DASH);
chaim.AssignValueColor(if cmemh > 0 then Color.BLACK else Color.YELLOW);
chaim.SetLineWeight(3);

AddLabel(aim > .02, Concat("CURRENT CHANNEL TARGET TO AIM FOR: ", aim), if aim < close then Color.RED else Color.GREEN);

def distance = (ema2 + ema4) / 2 - (ema3 + ema5) / 2;

def dc = Crosses(high[1], ema2[1], CrossingDirection.BELOW) or Crosses(high[1], ema4[1], CrossingDirection.BELOW);
def uc = Crosses(low[1], ema3[1], CrossingDirection.ABOVE) or Crosses(low[1], ema5[1], CrossingDirection.ABOVE);

def stup = if dc then high[1] + distance / 2 else stup[1];

plot stupper = if showonlytoday and !IsNaN(close(period = "DAY")[-20]) then Double.NaN else if stup > .02 then stup else Double.NaN;
stupper.AssignValueColor(if close > EMA then Color.RED else Color.DARK_RED);

def LEMAU = ExpAverage(high, 36 * 23);
def LEMAL = ExpAverage(low, 36 * 23);

def prevdmove = (high(period = "Day")[1] - low(period = "Day")[1]) / ((high(period = "Day")[1] + low(period = "Day")[1] + close(period = "Day")[1]) / 3) * 100;

AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else stupper[1] != stupper[2] and stupper < LEMAU, stupper[1], Concat("SELL TO:", stupper), if prevdmove < 1 then Color.RED else Color.GRAY, yes);

def stdn = if uc then low[1] - distance / 2 else stdn[1];

plot stlower = if showonlytoday and !IsNaN(close(period = "DAY")[-20]) then Double.NaN else if stdn > .02 then stdn else Double.NaN;
stlower.AssignValueColor(if close < EMA then Color.MAGENTA else Color.PLUM);

AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else stlower[1] != stlower[2] and stlower > LEMAL, stlower[1], Concat("BUY TO:", stlower), if prevdmove < 1 then Color.MAGENTA else Color.GRAY, no);

AddChartBubble(if showonlytoday and !IsNaN(close(period = "DAY")[-8]) then Double.NaN else CI[2] < 34 and CI[3] > 34, close[2], "CI GUIDANCE", if prevdmove < 1 then Color.MAGENTA else Color.GRAY, no);

def stdn2 = if uc then stdn[1] else stdn2[1];

plot stlower2 = if showonlytoday and !IsNaN(close(period = "DAY")[-20]) then Double.NaN else if stdn2 > .02 then stdn2 else Double.NaN;
stlower2.SetDefaultColor(Color.BLUE);

AddCloud(if high > ema4 then high else Double.NaN, low, Color.GREEN, Color.BLACK);
AddCloud(if low < ema5 then high else Double.NaN, low, Color.RED, Color.BLACK);
AddCloud(if high > ema4 then high else Double.NaN, low, Color.GREEN, Color.BLACK);
AddCloud(if low < ema5 then high else Double.NaN, low, Color.RED, Color.BLACK);

AddLabel(high > ema4, "ABOVE CHANNEL BUYING!!!", Color.GREEN);
AddLabel(low < ema5, "BELOW CHANNEL SELLING!!!", Color.RED);

AddLabel(yes, Concat("DISTANT CHANNEL RISK: ", if AbsValue(close - ema4) > AbsValue(close - ema5) then AbsValue(close - ema4) else AbsValue(close - ema5)), Color.MAGENTA);

input TF2 = {default "4 HOURS", "DAY", "WEEK"};
def price2 = hl2(period = TF);
input length2 = 88;

def realPart = fold indexR = 0 to length2 with accuR = 0 do accuR + GetValue(price2, indexR, length2 - 1) * Cos(2 * Double.Pi * indexR / length2);
def imagPart = fold indexI = 0 to length2 with accuI = 0 do accuI + GetValue(price2, indexI, length2 - 1) * Sin(2 * Double.Pi * indexI / length2);
def phase1 = if AbsValue(realPart) > 0.001 then ATan(imagPart / realPart) else (Double.Pi / 2 * Sign(imagPart));
def phase2 = if realPart < 0 then phase1 + Double.Pi else phase1;
def phase = if phase2 < 0 then phase2 + 2 * Double.Pi else if phase2 > 2 * Double.Pi then phase2 - 2 * Double.Pi else phase2;

def "Sine Wave" = Cos(phase);
def "Lead Wave" = Cos(phase + Double.Pi / 4);
def ZeroLine = 0;


def support = if "Lead Wave" crosses above "Sine Wave" then low else support[1];
def resistance = if "Lead Wave" crosses below "Sine Wave" then high else resistance[1];
plot s = support;
plot r = resistance;

AddCloud(if low < r and close > r then stupper else Double.NaN, r, Color.CYAN, Color.CYAN);
AddCloud(if high>s and close < s then s else Double.NaN, stlower, Color.CYAN, Color.CYAN);

AddCloud(if low < s and close > s then stupper else Double.NaN, s, Color.CYAN, Color.CYAN);
AddCloud(if high>r and close < r then r else Double.NaN, stlower, Color.CYAN, Color.CYAN);
The differences between the two fractal finding methods are undeniable.

The MT4 version is under the name “CloseLines”.

After changing the displacement to 1.13 ->

Daily Checklist

  1. Where is support? Where is resistance?
  2. What wave this might be?

Continuation Bets

  1. Is there a continuation divergence play in progress / coming up?
  2. Is there a W / M in effect?

Reversal Bets

Reversal Bets

  1. Was there a Stretch encounter for a snap back? Bottom E16 Viaduct rejection = bull trend back on
  2. Draw up the Wave 3 terminal displacements
  3. SSC: place pending orders for holdings at the anticipated reversal zone

…& managed to bring the Karma Police’s attention on me by screwing up the wave count. Viaduct or Die!