Australian (ASX) Stock Market Forum

Minimum market volume for trading?

Joined
4 May 2008
Posts
7
Reactions
0
Are there any rules of thumb to determine minimum liquidity requirement for a stock to be tradeable - some say $500,000 worth daily - and others $200,000.

As our EOD data does not include either number of shares or number of transactions, we are left with bare vol or vol times price.
But what value of either?
 
Are there any rules of thumb to determine minimum liquidity requirement for a stock to be tradeable - some say $500,000 worth daily - and others $200,000.

As our EOD data does not include either number of shares or number of transactions, we are left with bare vol or vol times price.
But what value of either?

Depends on your style of trading and position size. If you trade in $50,000 blocks, I'd say 200,000 is way too small. If slippage is a big factor in your method, 200,000 is probably too small, even with a small position size.

Also, don't ignore raw volume. A 2c stock with 200k turnover is probably quite liquid, whereas a $100 stock with a 200k turnover isn't going to be very liquid at all.
 
thanks, Tech a and Wayne.

Wayne, your point about vol in relation to price is very well taken. Thanks.
 
An Algorithm for CFD Minimum market volume for trading

Using both Tech-a's calculation of average vol and Wayne's consideration of price to volume, here is a possible calculation of variable position size for CFDs written in 'pseudo' Amibroker afl. Grammatically wrong for afl, yes. But I hope I've got the signs right!!


//Possible Position Sizing Algorithm for CFDs (ie includes margining
calculation),
//in which share volume is considered in relation to share price.

//Input parameters:

ActualCapitalAvailable=cap;
PercentToRiskPerTrade=perc;//Standard figure would be 2%
CFDMarginPercent=marg;
GuaranteedStopLossPercentFromEntry=GSL;
TradeablePercent=TradPerc;//explained below

//Then:

AmountAvailableToRisk=cap*(perc/100);
TheoreticalAvailableMarginedCapital=(cap*(perc/100))*(100/marg);

//but assuming Guaranteed Stop Loss which then becomes margin level
ActualAvailableMarginedCapital=AvailCap=IIf(marg<GSL,(cap*(perc/100))*(100/marg
),(cap*(perc/100))*(100/GSL);


//Now assume that in order not to move the market one does not trade more than
a certain percentage,
//not of total volume, but of approximate number of shares. I dont know what
that amount is,
//but suspect it would be less than 10% of number of shares - call it
TradeablePercent (included above in Input Parameters).

EstimatedAveragedSharePrice=EstPrice=WMA((H+L+C)/3,3);
AveragedDailyVolume=EstVol=WMA(V,3);
ThereforeEstimatedNUMBERofShares=NumbShares=EstVol/EstPrice;
MaximumTradeableNumber=MaxTrdNumb=NumbShares*(TradPerc/100);
ThereforeValueOfMaxTrdNumb=MaxTrdVal=MaxTrdNumb*C;
RealTradeableVal=RealVal=IIf(MaxTrdVal<AvailCap,MaxTrdVal,AvailCap);

RealTradeableNumberOfShares=RealNum=RealVal/C;
 
Here is the algorithm actually implemented in afl:

_SECTION_BEGIN("position size2");
//Possible Position Sizing Algorithm for CFDs (ie includes margining calculation),
//in which share volume is considered in relation to share price.

//Input parameters:

ActualCapitalAvailable=20000;
PercentToRiskPerTrade=2;//Standard figure would be 2%
CFDMarginPercent=5;
GuaranteedStopLossPercentFromEntry=5;
TradeablePercent=7.5;//explained below

//Then:

AmountAvailableToRisk=ActualCapitalAvailable*(PercentToRiskPerTrade/100);
TheoreticalAvailableMarginedCapital=(ActualCapitalAvailable*(PercentToRiskPerTrade/100))*(100/CFDMarginPercent);

//but assuming Guaranteed Stop Loss which then becomes margin level
ActualAvailableMarginedCapital=
IIf(CFDMarginPercent>GuaranteedStopLossPercentFromEntry,
(ActualCapitalAvailable*(PercentToRiskPerTrade/100))*(100/CFDMarginPercent),
(ActualCapitalAvailable*(PercentToRiskPerTrade/100))*(100/GuaranteedStopLossPercentFromEntry));


//Now assume that in order not to move the market one does not trade more than a certain percentage,
//not of total volume, but of approximate number of shares. I dont know what that amount is,
//but suspect it would be less than 10% of number of shares - call it TradeablePercent (included above in Input Parameters).

EstimatedAveragedSharePrice=WMA((H+L+C)/3,3);
AveragedDailyVolume=WMA(V,3);
EstimatedNUMBERofShares=AveragedDailyVolume/EstimatedAveragedSharePrice;
MaximumTradeableNumber=EstimatedNUMBERofShares*(TradeablePercent/100);
ValueOfMaxTrdNumb=MaximumTradeableNumber*C;
RealTradeableVal=IIf(ValueOfMaxTrdNumb<ActualAvailableMarginedCapital,ValueOfMaxTrdNumb,ActualAvailableMarginedCapital);
RealTradeableNumberOfShares=RealTradeableVal/C;

Plot(RealTradeableNumberOfShares,"No. to buy",colorBlue,styleHistogram);

Filter=RealTradeableNumberOfShares>0;
AddColumn(C,"close");
AddColumn(V,"volume");
AddColumn(MaximumTradeableNumber,"max no to buy");
AddColumn(RealTradeableNumberOfShares,"actual no shares to buy");
AddColumn(RealTradeableVal,"value of shares to buy");


This can be used either as an exploration filter or inserted as a plot.
 
Here is revised amibroker code for version 2 of this Position Sizer, which corrects a serious error in the first posting (reversing the first comparison in the first IIF statement), and now allowing parameters to be varied from the Parameter Window.

_SECTION_BEGIN("position size2");
//Possible Position Sizing Algorithm for CFDs (ie includes margining calculation),
//in which share volume is considered in relation to share price.

//Input parameters:

ActualCapitalAvailable=Param("Available capital",50000,5000,500000);
PercentToRiskPerTrade=Param("Risk %",2,1,15);
CFDMarginPercent=Param("Percent cash to margin",10,3,100);
GuaranteedStopLossPercentFromEntry=Param("GSL % from entry",5,5,20);
TradeablePercent=Param("Tradeable %",7.5,.001,15);//explained below

//Then:

AmountAvailableToRisk=ActualCapitalAvailable*(PercentToRiskPerTrade/100);
TheoreticalAvailableMarginedCapital=(ActualCapitalAvailable*(PercentToRiskPerTrade/100))*(100/CFDMarginPercent);

//but assuming Guaranteed Stop Loss which then becomes margin level
ActualAvailableMarginedCapital=
IIf(CFDMarginPercent<GuaranteedStopLossPercentFromEntry,
(ActualCapitalAvailable*(PercentToRiskPerTrade/100))*(100/CFDMarginPercent),
(ActualCapitalAvailable*(PercentToRiskPerTrade/100))*(100/GuaranteedStopLossPercentFromEntry));


//Now assume that in order not to move the market one does not trade more than a certain percentage,
//not of total volume, but of approximate number of shares. I dont know what that amount is,
//but suspect it would be less than 10% of number of shares - call it TradeablePercent (included above in Input Parameters).

EstimatedAveragedSharePrice=C;
AveragedDailyVolume=V;
EstimatedNUMBERofShares=AveragedDailyVolume/EstimatedAveragedSharePrice;
MaximumTradeableNumber=EstimatedNUMBERofShares*(TradeablePercent/100);
ValueOfMaxTrdNumb=MaximumTradeableNumber*C;
RealTradeableVal=IIf(ValueOfMaxTrdNumb<ActualAvailableMarginedCapital,ValueOfMaxTrdNumb,ActualAvailableMarginedCapital);
RealTradeableNumberOfShares=RealTradeableVal/C;

Plot(RealTradeableNumberOfShares,"No. to buy",colorBlue,styleHistogram);

Filter=RealTradeableNumberOfShares>0;
AddColumn(C,"close");
AddColumn(V,"volume");
AddColumn(MaximumTradeableNumber,"max no to buy");
AddColumn(RealTradeableNumberOfShares,"actual no shares to buy");
AddColumn(RealTradeableVal,"value of shares to buy");
_SECTION_END();
 
Top