Liquidity Filter

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #46451 quote
    juanj
    Participant
    Master

    Good Day Guys

    I am in the process of developing a screener and am trying to find an effective way to filter out low liquidity stocks.

    I am thinking about using a volume filter (Average[x](volume) > 1000) and maybe a gap screener (maximum x amount of gaps in last x days).

    But I would appreciate any ideas or if someone maybe already developed a nice liquidity filter I would appreciate if you can share it.

    Thanks

    #46500 quote
    juanj
    Participant
    Master

    @Nicolas, your input, and experience will be appreciated.

    #46563 quote
    Nicolas
    Keymaster
    Master

    You can check the Market Capitalization with this code:

    marketcap = close*volume>=300000000//market cap

    Of course, you can adapt the ‘300000000’ to filter more or less the stocks you want to find.

    juanj thanked this post
    #46615 quote
    juanj
    Participant
    Master

    Thank You Nicolas.

    Only problem with that is that as you know not all tradable instruments have volume available.

    I do make use of the Market Cap column in the screener window though when sorting the results.

    However was hoping of a more versatile technique to measure liquidity using price action for example.

    #46642 quote
    Nicolas
    Keymaster
    Master

    Rough early morning ideas:

    _ check how many times a short term ATR has crossed a long term averaged one within the last X periods.

    _ check Rate Of Change behavior compared to long term one.

    Without Volumes, it’s all about price VS time.

    #46654 quote
    juanj
    Participant
    Master

    Great ideas! So how would we incorporate that?

    Do a few tests using known liquid and illiquid stocks and measure behavior or expected ranges using something like the below?

    ATR Crosses:

    NearATR = AverageTrueRange[3]
    LongATR = AverageTrueRange[21]
    ATRCross = 0
    
    For i = 1 to 50 Do
    If (NearATR crosses over LongATR) or (NearATR crosses under LongATR) Then
    ATRCross = ATRCross + 1
    EndIf
    Next
    
    //Return ATRCross As "ATRCross"

    Rate of change:

    EMAperiod = 13
    ROCperiod = 21
     
    EMA = exponentialaverage[EMAperiod](close)
    SRoC = ( EMA - EMA[ROCperiod] ) / ( EMA[ROCperiod] ) * 100
    
    AverageSROC = Average[21](SROC)

     

    #46665 quote
    Nicolas
    Keymaster
    Master

    I would recommend something like this instead for the ATR crosses:

    NearATR = AverageTrueRange[7]
    LongATR = average[100](nearATR)//AverageTrueRange[21]
    ATRCross = 0
     
    For i = 1 to 50 Do
    If (NearATR[i] crosses over LongATR[i]) Then
    ATRCross = ATRCross + 1
    EndIf
    Next
     
    Return ATRCross As "ATRCross"
    juanj thanked this post
    ATR-crossing-count.png ATR-crossing-count.png
    #46672 quote
    juanj
    Participant
    Master

    Yes, I like that, noticed that I forgot to specify the [i] in my code (typed it out without PRT open).

    Now I just need to look up a few stocks to get an idea of an acceptable Average ATRCross value.

Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.

Liquidity Filter


ProScreener: Market Scanners & Detection

New Reply
Author
author-avatar
juanj @juanj Participant
Summary

This topic contains 7 replies,
has 2 voices, and was last updated by juanj
8 years, 5 months ago.

Topic Details
Forum: ProScreener: Market Scanners & Detection
Language: English
Started: 09/18/2017
Status: Active
Attachments: 1 files
Logo Logo
Loading...