Verniman thinkscript strategy for /ES Entry signals

STB

Member
I have been watching this guy for awhile trying to figure out how his thinkscript strategy works for trade confirmation. It is almost always profitable. He only shorts under VWAP and longs over, only trades from 9:30 to noon and then from 13:30 till close. He also uses $adspd for direction & I also believe he uses volume & high or low $tick readings for trade entry’s. Still not sure what is triggering his order closes. Was curious if anyone would be interested in trying to figure out with me how his strategy works. His blog is https://verniman.blogspot.com/ if anyone is interested.

biq5gRN.png
 
Last edited by a moderator:

MHCain

New member
VIP
I've filled him for awhile and have asked a couple of questions. Its not a mechanical trading signal. Its based on his intuition. 1) I trust him but no real way to know for sure (Trades). 3min chart, Volume Profile (day), Vwap, Time Sales <25. SnP - Advanced Decline $ADSP(?), some sort of Trend Regression Channel. No clue what the upper numbers mean. He looks for volume breakout from balance, volume at high/Low, Swap bounce, and AD trend. I hope this helps but he does explain all of this on his page. Great info on there.
 

STB

Member
I've filled him for awhile and have asked a couple of questions. Its not a mechanical trading signal. Its based on his intuition. 1) I trust him but no real way to know for sure (Trades). 3min chart, Volume Profile (day), Vwap, Time Sales <25. SnP - Advanced Decline $ADSP(?), some sort of Trend Regression Channel. No clue what the upper numbers mean. He looks for volume breakout from balance, volume at high/Low, Swap bounce, and AD trend. I hope this helps but he does explain all of this on his page. Great info on there.


I would think it is mechanical because he has that thinkscript strategy plotting open and close orders on his charts.

zu7Jiv1.jpg
 
Last edited:

akshata

New member
@STB - I just started with him and happy to work with you to figure it out. Based on information here, I have got the Volume, Trend and Market internals code (need to verify next week when I start to get in details) and can then have Profile coded too. Feel free to DM me
 

STB

Member
@akshata - Were you able to figure out how the think script strategy opens an order on an intrabar? His strat seems to be able to enter an order before the bar closes.

zu7Jiv1.jpg
 
Last edited:

CaptainVine

New member
VIP
I've been watching and wondering the same thing. Idk how exactly he isolates the HVE lines. I'm not positive but I think the indicator sold by eminiplayer might be the same thing. I see it floating around on stocktwits & some dudes are killing it. It's not regular S&R or other "zones" you see. Verniman tells you quite a bit right on his blog & suggests a couple books. He also has a course and some youtube vidi's
 

Prison Mike

Member
HVE- high volume.....? At first glance from looking at his stuff i assume it paints a line at levels of high, HVE and low volume, LVE, based off of volume profile? But it doesn’t look that way in the picture you posted.

That would be helpful seeing that volume profile doesn’t work for mobile.
 

Prison Mike

Member
@STB thanks for showing us his blog. Been listening to the videos he has posted on “auction theory.” Good stuff.

Also gave me some insight in to ParadiseTrading and how he trades. Seems similar
 

STB

Member
I have not been able to duplicate his exact trades but I have something close. If anyone would like to add to it and share that would be great. I still can not figure out how he gets his entries to signal intrabar :unsure:.
Also this has only been tested on today's trading range so take caution as it is a work in progress.

FEQ0WwP.jpg


Code:
###### TIME ######

input zoneStartAM = 930;
input zoneEndAM = 1200;
input zoneStartPM = 1330;
input zoneEndPM = 1600;
input zoneEndclose = 1609;
input type = {default NOTRADE, REVERSAL};
def highBar;
def lowBar;
def highBar2;
def lowBar2;

switch (type){
case NOTRADE:
    highBar = if SecondsTillTime(zoneStartAM) <= 0 and SecondsTillTime(zoneEndAM) >= 0 then HighestAll(open) else Double.NaN;
    lowBar = if SecondsTillTime(zoneStartAM) <= 0 and SecondsTillTime(zoneEndAM) >= 0 then LowestAll(close) else Double.NaN;
case REVERSAL:
    lowBar = if SecondsTillTime(zoneStartAM) <= 0 and SecondsTillTime(zoneEndAM) >= 0 then HighestAll(open) else Double.NaN;
    highBar = if SecondsTillTime(zoneStartAM) <= 0 and SecondsTillTime(zoneEndAM) >= 0 then LowestAll(close) else Double.NaN;
}

switch (type){
case NOTRADE:
    highBar2 = if SecondsTillTime(zoneStartPM) <= 0 and SecondsTillTime(zoneEndPM) >= 0 then HighestAll(open) else Double.NaN;
    lowBar2 = if SecondsTillTime(zoneStartPM) <= 0 and SecondsTillTime(zoneEndPM) >= 0 then LowestAll(close) else Double.NaN;
case REVERSAL:
    lowBar2 = if SecondsTillTime(zoneStartPM) <= 0 and SecondsTillTime(zoneEndPM) >= 0 then HighestAll(open) else Double.NaN;
    highBar2 = if SecondsTillTime(zoneStartPM) <= 0 and SecondsTillTime(zoneEndPM) >= 0 then LowestAll(close) else Double.NaN;
}



###### TIME END #####

def adspdl = low("$adspd");
def adspdh = high("$adspd");
def adspdc = close("$adspd");
def volspd = close("$volspd");

def HMA = MovingAverage(AverageType.HULL, close, 21);

input numDevDn = -2.0;
input numDevUp = 2.0;
input timeFrame = {default DAY, WEEK, MONTH};

def cap = getAggregationPeriod();
def errorInAggregation =
    timeFrame == timeFrame.DAY and cap >= AggregationPeriod.WEEK or
    timeFrame == timeFrame.WEEK and cap >= AggregationPeriod.MONTH;
assert(!errorInAggregation, "timeFrame should be not less than current chart aggregation period");

def yyyyMmDd = getYyyyMmDd();
def periodIndx;
switch (timeFrame) {
case DAY:
    periodIndx = yyyyMmDd;
case WEEK:
    periodIndx = Floor((daysFromDate(first(yyyyMmDd)) + getDayOfWeek(first(yyyyMmDd))) / 7);
case MONTH:
    periodIndx = roundDown(yyyyMmDd / 100, 0);
}
def isPeriodRolled = compoundValue(1, periodIndx != periodIndx[1], yes);

def volumeSum;
def volumeVwapSum;
def volumeVwap2Sum;

if (isPeriodRolled) {
    volumeSum = volume;
    volumeVwapSum = volume * vwap;
    volumeVwap2Sum = volume * Sqr(vwap);
} else {
    volumeSum = compoundValue(1, volumeSum[1] + volume, volume);
    volumeVwapSum = compoundValue(1, volumeVwapSum[1] + volume * vwap, volume * vwap);
    volumeVwap2Sum = compoundValue(1, volumeVwap2Sum[1] + volume * Sqr(vwap), volume * Sqr(vwap));
}
def price = volumeVwapSum / volumeSum;
def deviation = Sqrt(Max(volumeVwap2Sum / volumeSum - Sqr(price), 0));

def VWAP = price;



AssignPriceColor(if adspdl < adspdl[1] && close < vwap && close< hma && volume > volume[1] then Color.RED else if adspdh > adspdh[1] && close > vwap && close > hma && volume>volume[1] then Color.GREEN else Color.GRAY);


####LONGS####

AddOrder(OrderType.BUY_TO_OPEN,secondsTillTime(zoneStartAM) <= 0 && secondsTillTime(zoneEndAM) >= 0 and adspdh > adspdh[1] && close > vwap && vwap>vwap[1]&&  volume>volume[1] ,  name = "Buy open AM @"+open[-1], 1, Color.ORANGE, Color.green);

AddOrder(OrderType.BUY_TO_OPEN,secondsTillTime(zoneStartpM) <= 0 && secondsTillTime(zoneEndpM) >= 0 and adspdh > adspdh[1] && close > vwap && vwap>vwap[1]&&  volume>volume[1] ,  name = "Buy open AM @"+open[-1], 1, Color.ORANGE, Color.green);



##SHORTS###

AddOrder(OrderType.sell_TO_OPEN,secondsTillTime(zoneStartAM) <= 0 && secondsTillTime(zoneEndAM) >= 0 and adspdl < adspdl[1] && close < vwap && vwap<vwap[1]&& volume>volume[1] ,  name = "Sell open AM @"+open[-1], 1, Color.ORANGE, Color.RED);

AddOrder(OrderType.sell_TO_OPEN,secondsTillTime(zoneStartpM) <= 0 && secondsTillTime(zoneEndpM) >= 0 and adspdl < adspdl[1] && close < vwap  && volume>volume[1] , name = "Sell open PM @"+open[-1], 1, Color.ORANGE, Color.RED);

####Close orders######

addorder(orderType.SELL_TO_CLOSE,  adspdh < adspdh[1], name = "Sell close @"+open[-1],1,color.orange, color.red);

addorder(orderType.buy_TO_CLOSE,  adspdl > adspdl[1],name = "Buy close @"+open[-1],1,color.orange, color.red);

###Market close orders####

addorder(orderType.buy_TO_CLOSE,  secondsTillTime(zoneEndclose) <= 0 , name = "Buy Market Close @"+open[-1],1,color.orange, color.red);

addorder(orderType.sell_TO_CLOSE,  secondsTillTime(zoneEndclose) <= 0 ,  name = "Sell Market Close @"+open[-1],1,color.orange, color.red);
 
Last edited:

Similar threads

Top