NexusFi: Find Your Edge


Home Menu

 





How to use volume in your trading


Discussion in Traders Hideout

Updated
      Top Posters
    1. looks_one cunparis with 187 posts (146 thanks)
    2. looks_two josh with 38 posts (49 thanks)
    3. looks_3 RJay with 34 posts (15 thanks)
    4. looks_4 Silvester17 with 29 posts (24 thanks)
      Best Posters
    1. looks_one Fat Tails with 1.5 thanks per post
    2. looks_two josh with 1.3 thanks per post
    3. looks_3 cunparis with 0.8 thanks per post
    4. looks_4 Silvester17 with 0.8 thanks per post
    1. trending_up 406,285 views
    2. thumb_up 485 thanks given
    3. group 157 followers
    1. forum 677 posts
    2. attach_file 202 attachments




 
Search this Thread

How to use volume in your trading

  #371 (permalink)
 
cunparis's Avatar
 cunparis 
Paris, France
 
Experience: Advanced
Platform: Market Delta & Ninjatrader
Trading: ES
Posts: 2,565 since Jun 2009
Thanks Given: 1,162
Thanks Received: 2,093


Lynx21 View Post
Personally, I would say don't get to carried away with volume. Traders tend to fall into two camps in regards to volume, those that love it and those that think it's useless. I fall into the latter... For every buyer, there has to be a seller, volume is just the the unit of a trade taken place, it gives you no other information. If price is going down your indicators will tell you it's selling volume, if price is going up then your indicators will tell you that it's buying volume. That's pretty useless really because you have no idea on what side the trading is actually take place.

If a trade is at the ask, can we not say that the buyer conceded to the seller's price? Is this not useful information?

Follow me on Twitter Started this thread Reply With Quote
Thanked by:

Can you help answer these questions
from other members on NexusFi?
Better Renko Gaps
The Elite Circle
Pivot Indicator like the old SwingTemp by Big Mike
NinjaTrader
PowerLanguage & EasyLanguage. How to get the platfor …
EasyLanguage Programming
MC PL editor upgrade
MultiCharts
Trade idea based off three indicators.
Traders Hideout
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
Spoo-nalysis ES e-mini futures S&P 500
29 thanks
Just another trading journal: PA, Wyckoff & Trends
24 thanks
Tao te Trade: way of the WLD
24 thanks
Bigger Wins or Fewer Losses?
21 thanks
GFIs1 1 DAX trade per day journal
17 thanks
  #372 (permalink)
Andrew
sea side
 
Posts: 217 since Dec 2009
Thanks Given: 86
Thanks Received: 25

Lynx,

But a lot of time when price on heavy volume is up (or vice verse), it's just place where big/smart money reversed, i.e. already sold their longs to those who are buying and sometimes in addition to that sold also their newly established shorts again to those who continue to buy believing market is going to go higher. Is that correct ?

Krgds,
Andrew


Lynx21 View Post
A good example would be heavy volume as price is moving it... if you start trying to buy a break on this, you leave yourself in a position of a strong possiblity of being stuck long in the market by buying the top of the move. Never be the first to buy, and never be the first to sell


Reply With Quote
  #373 (permalink)
 
Zondor's Avatar
 Zondor 
Portland Oregon, United States
 
Experience: Beginner
Platform: NinjatraderŽ
Broker: CQG, Kinetick
Trading: Gameplay KlownbineŽ Trading of Globex
Posts: 1,333 since Jul 2009
Thanks Given: 1,246
Thanks Received: 2,731


I was getting irksome runtime errors when trying to convert some NT6.5 Level II volume indicators to work with NT7. Here is the solution.

First of all, I cannot recommend highly enough the use of "try catch final' error trapping during development. Diagnostic Print statements can eventually be commented out, but the error traps WITH ERROR RECOVERY should be left in the production version unless someone can show me that they cause a performance penalty. Error trapping was a big help to me in solving this problem.

Typically we will put the Level 2 data from OnMarketDepth events into a list. But this will not work the same in NT7 as in NT6.5.
  • In NT6.5, the rows.insert method seems to implicitly add a row to the list if needed to accommodate the item that is being inserted.
  • In NT7, this is not the case. It seems that you must explicitly create enough row objects to hold anything that you would want to insert. Inserts will fail if e.position is less than rows. count. An index out of range error will be generated. If it is not trapped and handled, the indicator will crash.

The necessary number of rows can be created by a routine that calls the rows.Add method within OnMarketDepth, This should either run only once upon program startup, or should test to make sure there are no more than the required number of rows before it adds any more. You don't want the row.Count to inflate with a bunch of empty rows. It's a lot easier to add them than to remove them.

Meanwhile in OnMarketDepth and graphics plot routines that use Level II data, it is a very wise idea to trap and handle errors using try{ catch{} and to put a return statement in the catch, better to miss a few ticks of data than to crash the indicator.

Follow me on Twitter Visit my NexusFi Trade Journal Reply With Quote
Thanked by:
  #374 (permalink)
 Prtester 
SE-Asia
 
Experience: Intermediate
Platform: NinjaTrader
Broker: Amp
Trading: ES
Posts: 151 since Jun 2009
Thanks Given: 66
Thanks Received: 124


Zondor View Post
was getting irksome runtime errors when trying to convert some NT6.5 Level II volume indicators to work with NT7. Here is the solution.

First of all, I cannot recommend highly enough the use of "try catch final' error trapping during development. Diagnostic Print statements can eventually be commented out, but the error traps WITH ERROR RECOVERY should be left in the production version unless someone can show me that they cause a performance penalty. Error trapping was a big help to me in solving this problem.

Typically we will put the Level 2 data from OnMarketDepth events into a list. But this will not work the same in NT7 as in NT6.5.

I
  • n NT6.5, the rows.insert method seems to implicitly add a row to the list if needed to accommodate the item that is being added.
  • In NT7, this is not the case. It seems that you must explicitly create enough row objects to hold anything that you would want to insert. Inserts will fail if e.position is less than rows. count. An index out of range error will be generated. If it is not trapped and handled, the indicator will crash.

The necessary number of rows can be created by a routine that calls the rows.Add method within OnMarketDepth, This should either run only once upon program startup, or should test to make sure there are no more than the required number of rows before it adds any more. You don't want the row.Count to inflate with a bunch of empty rows. It's a lot easier to add them than to remove them.

Meanwhile in OnMarketDepth and graphics plot routines that use Level II data, it is a very wise idea to trap and handle errors using try{ catch{} and to put a return statement in the catch, better to miss a few ticks of data than to crash the indicator.

That explain the bend knees of my system, can you post a simple strip down example of what you point in here.

Reply With Quote
  #375 (permalink)
 
Zondor's Avatar
 Zondor 
Portland Oregon, United States
 
Experience: Beginner
Platform: NinjatraderŽ
Broker: CQG, Kinetick
Trading: Gameplay KlownbineŽ Trading of Globex
Posts: 1,333 since Jul 2009
Thanks Given: 1,246
Thanks Received: 2,731

I will post this soon. Needs to be refined a little.

Follow me on Twitter Visit my NexusFi Trade Journal Reply With Quote
  #376 (permalink)
 
Zondor's Avatar
 Zondor 
Portland Oregon, United States
 
Experience: Beginner
Platform: NinjatraderŽ
Broker: CQG, Kinetick
Trading: Gameplay KlownbineŽ Trading of Globex
Posts: 1,333 since Jul 2009
Thanks Given: 1,246
Thanks Received: 2,731

This seems to work pretty good. Try it and let me know how it works for you!

I recommend that you also add error traps to the other major modules of your program, including OnBarUpdate() and any custom Plot() methods you have added. If any methods other than OnMarketDepth ask for anything from the lists before the rows have been inserted in OnMarketDepth() there will be a runtime error. To avoid this you can insert the following code into any method that is having that problem. Then the needed rows will be inserted right there, instead of waiting for OnMarketDepth() to do it. By the time OnMarketDepth() triggers, enough rows will already exist so that no more will be created.


#if NT7
if(rows.Count<5) // Keep that number, 5, low so we won't do this routine more than once.
//The only way there can be more than 5 of these rows if the insertion routine below has already run.
//Create as many rows as you will need for your Level II data.
//I don't know if you can get more than 20 rows of Level 2 data so 22 rows should be enough.
{ int idx =0;
for (idx = 0; idx < 22/2; idx++)
{ //insert placeholder objects of type LadderRowrows into the list at positions [idx]
askRows.Insert(idx, new LadderRow((int)0,(int) 0, ""));
bidRows.Insert(idx, new LadderRow((int)0,(int) 0, ""));
}
}
}
#endif


Change "DOM Bands" in the Print statements to the name of YOUR program. Here goes!

//=============================================================================================
//These Lists need to have been declared as variables in the variables region:
//private List<LadderRow> askRows = new List<LadderRow>();
//private List<LadderRow> bidRows = new List<LadderRow>();


protected override void OnMarketDepth(MarketDepthEventArgs e)
{
// try, catch will handle any runtime errors, preventing the program from crashing
try{ // this { is the start of the area that is being monitored for errors
// there may be runtime errors when this starts up in NT7
{

List<LadderRow> rows = null;

// Checks to see if the Market Data is of the Ask type
if (e.MarketDataType == MarketDataType.Ask)
rows = askRows;

// Checks to see if the Market Data is of the Bid type
else if (e.MarketDataType == MarketDataType.Bid)
rows = bidRows;

if (rows == null)
return;

#if NT7 // This switch will prevent the bracketed code from being compiled in NT6.5.
// In NT7, MUST explcitly create list rows before inserting into them, to prevent runtime error
{ // Could also have used the Add method but this is more fun.
if(rows.Count<5) //Create as many rows as you will need for your Level II data. I don't think you can get more than 20 rows of Level 2 data, so 22 rows should be enough.
{ int idx =0;
for (idx = 0; idx < 22/2; idx++)
{ //insert placeholder objects of type LadderRowrows into the list
askRows.Insert(idx, new LadderRow((int)0,(int) 0, ""));
bidRows.Insert(idx, new LadderRow((int)0,(int) 0, ""));
}
}
}
#endif
// In NT7, insertion will fail if there is not already an empty row to insert into


// Checks to see if the action taken by the Ask data was an insertion into the ladder
if (e.Operation == Operation.Insert)
{
rows.Insert(e.Position, new LadderRow((int)e.Price,(int) e.Volume, e.MarketMaker));
Print("Rowcount, DOM_Bands7 = "+rows.Count);
}
/* Checks to see if the action taken by the Ask data was a removal of itself from the ladder
Note: Due to the multi threaded architecture of the NT core, race conditions could occur
-> check if e.Position is within valid range */
else if (e.Operation == Operation.Remove && e.Position < rows.Count)
rows.RemoveAt(e.Position);

/* Checks to see if the action taken by the Ask data was to update of data already on the ladder
Note: Due to the multi threaded architecture of the NT core, race conditions could occur
-> check if e.Position is within valid range */
else if (e.Operation == Operation.Update && e.Position < rows.Count)
{
rows[e.Position].MarketMaker = e.MarketMaker;
rows[e.Position].Price = e.Price;
rows[e.Position].Volume =(int) e.Volume;
}

// Calling ChartControl.Refresh() will cause the Level II data to update real-time. Adding
// this delay routine will prevent CPU utilization from going through the roof. Setting a
// really high value will effectly delay the update until the next tick arrives which could
// be a really long time is the market is really slow. This may or may not matter to some.




}
} //This is the end of the region that is being monitored for runtime errors
catch (Exception ex){
// Following is what we do if there is an error, sure beats crashing the indicator
Print("Trapped exception in DOM_Bands.OnMarketDepth(): " + ex.Message);
return; //prevents the indicator from crashing
}
}
private class LadderRow //for futures there is no Market Maker, but we can still use this to populate the lists
{
public string MarketMaker; // relevant for stocks only
public double Price;
public int Volume;

public LadderRow(double myPrice, int myVolume, string myMarketMaker)
{
MarketMaker = myMarketMaker;
Price = myPrice;
Volume = myVolume;
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++==

Follow me on Twitter Visit my NexusFi Trade Journal Reply With Quote
Thanked by:
  #377 (permalink)
 
ZTR's Avatar
 ZTR 
 
Experience: Advanced
Platform: NinjaTrader7
Broker: Mirus RCG/Zen-Fire
Trading: CL & 6e, looking at ES, ZB and AU again.
Posts: 2,096 since Nov 2009
Thanks Given: 1,099
Thanks Received: 1,393


Lynx21 View Post
Personally, I would say don't get to carried away with volume. Traders tend to fall into two camps in regards to volume, those that love it and those that think it's useless.

What about Supply and Demand, not just traded volume? Several time in the last weeks I saw reversals based on the DOM_Bands Indicator. When the DOM got very heavy [30,000 total] the market traded in a range (I'm showing a tick chart, which I now shun). But it does illustrate the point: when large Supply = large Demand, or Supply>>Demand, or Supply<<Demand it can mean something to later price action.

There were times when there was what I call a Throw-Over or Throw-Under: The book is really biased in one direction and Dom_Bands show the delta line crossing the bid or ask cumulative total line. This week they were reversals. (Once Zondor make his modification to DOM_bands this data will be saved with the GomRecorder and I'll show examples after they happen again.)

When the delta rides one of the other lines then moves toward the other with a defined slope it means the available Supply or demand is being consumed resulting in traded volume and a price trend. Twice on the chart you can see this happen as the price moves from 1136 to 1138 around 11:27 am PST & after a sell off, the next up trend from 1136 to 1138 at 12:05 to 12:22 pm. Chart have fractal relationships so this happens on all time frames.

Attached Thumbnails
Click image for larger version

Name:	ES 03-10  1_7_2010 (233 Tick)1235.jpg
Views:	326
Size:	258.3 KB
ID:	6827  
Visit my NexusFi Trade Journal Reply With Quote
Thanked by:
  #378 (permalink)
 
Zondor's Avatar
 Zondor 
Portland Oregon, United States
 
Experience: Beginner
Platform: NinjatraderŽ
Broker: CQG, Kinetick
Trading: Gameplay KlownbineŽ Trading of Globex
Posts: 1,333 since Jul 2009
Thanks Given: 1,246
Thanks Received: 2,731

For those of us using bid ask volumes and cumulative delta, be aware that the accuracy of the data that we are relying on is questionable.

See this thread at Traders Laboratory (I believe that free registration is required to get in).

Zenfire and DTN Feed Different? - Page 4

FulcrumTrader is claiming that the data from DTNIQ matches that from the CME, but that Zenfire doesn't. Esignal, IB, Tradestation, and TT are also mentioned in other posts as not being accurate.

Anyone care to comment on this?

Follow me on Twitter Visit my NexusFi Trade Journal Reply With Quote
  #379 (permalink)
 
cunparis's Avatar
 cunparis 
Paris, France
 
Experience: Advanced
Platform: Market Delta & Ninjatrader
Trading: ES
Posts: 2,565 since Jun 2009
Thanks Given: 1,162
Thanks Received: 2,093


Zondor View Post
FulcrumTrader is claiming that the data from DTNIQ matches that from the CME, but that Zenfire doesn't. Esignal, IB, Tradestation, and TT are also mentioned in other posts as not being accurate.

I read that too. But I already have Ninja & Tradestation and I hesitate to add Investor RT & IQFeed.

I wonder how bad is the difference?

in any case, I think that's not the biggest issue with Ninja.. the biggest issue is that you have to record it real time. My NT crashed on Friday and I had to restart it. I missed data during that time. That sucks cause with Zenfire you have no way to get it back. with IQFeed & Investor RT you can get 30 days history on the bid/ask.

Ninja really needs to improve on this. I heard for NT 7.0 the bid ask isn't usable, I don't remember the details but it's disappointing. This is actually one of the only reasons I keep tradestation..

Follow me on Twitter Started this thread Reply With Quote
  #380 (permalink)
 
ZTR's Avatar
 ZTR 
 
Experience: Advanced
Platform: NinjaTrader7
Broker: Mirus RCG/Zen-Fire
Trading: CL & 6e, looking at ES, ZB and AU again.
Posts: 2,096 since Nov 2009
Thanks Given: 1,099
Thanks Received: 1,393


I posted about ZenFire a while back

Visit my NexusFi Trade Journal Reply With Quote




Last Updated on April 21, 2016


© 2024 NexusFi™, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Privacy Policy - Downloads - Top
no new posts