Dukascopy
 
 
Wiki JStore Search Login

Euro Ask / Bid Volume ratios too high -- an interesting fact
 Post subject: Euro Ask / Bid Volume ratios too high -- an interesting fact Post rating: 0   New post Posted: Mon 13 May, 2013, 20:40 
User avatar

User rating: 98
Joined: Mon 23 Jul, 2012, 02:02
Posts: 656
Location: United States, Durham, NC
In EURUSD...
If you develop a simple strategy and backtest it, looking at
the average AskVolume/BidVolume ratio, you'll find that
that ratio is consistently significantly greater than the
expected average value of 1.0.

You'll need to develop some simple averager over time
and average each Pip's AskVolume/BidVolume ratio. Just
do it with some Circular Buffer; it's not that hard.

Do it in onTick and calculate a ratio on every tick, which
you then average for a while. Heck, you might even be able
to do this in Visual JForex for all I know ;-)

Once in a while, print out the Average Ratio.

In fact, it appears from my tests, that Inside Ask/Bid Volume ratios
range from 5% to 25% higher (i.e. 1.05 - 1.25 or so) typically.

In looking for variations in Ask/Bid Volume ratios as a predictor,
I typically develop a Reference Average which corrects for
this fairly "constant bias offset" of Volume which favors
the Ask side of the market.

Even when looking at tier volumes further out, (which is impossible
in backtesting), in a live DOM feed scenario, the general fact appears
to be that there is this Excess Volume on the Ask side of the
market.

Just an interesting factoid which surprised me.

My theory is that there is a constant "psychological bias" of most
players toward being Long. IF that were true, then you might expect
the DOM's sizes to be skewed in that way. <speculation>

Any comments, or theories, or anyone finds that this is not true?

HyperScalper


 
 Post subject: Re: Euro Ask / Bid Volume ratios too high -- an interesting fact Post rating: 0   New post Posted: Mon 13 May, 2013, 21:37 
User avatar

User rating: 98
Joined: Mon 23 Jul, 2012, 02:02
Posts: 656
Location: United States, Durham, NC
I realized it's not fair to ask you to code it all up, so I put together
a Strategy which you can use as a starting point.

Here's a typical run on EURUSD using buffer size of 2000 and print every
2000 ticks, using the Historical Tester. It should work OK, but feel free to
hack the following code to your Heart's Desire :)

Sample output is shown further down.

package com.fs.strategy;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

import com.dukascopy.api.Configurable;
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.Period;

public class AskBidVolumeRatios implements IStrategy {
   
   public static final long serialVersionUID = 5L; // increment on significant change
   
   @Configurable("Instrument")
   public Instrument selectedInstrument = Instrument.EURUSD;
   @Configurable("Circular Buffer Length")
   public int bufferLength = 2000;
   @Configurable("Tick Count per Print")
   public int tickCountPerPrint = 2000;
   IContext context;
   IConsole console;
   Set<Instrument> instruments = new HashSet<Instrument>();
   
   MovingAveragerCircular sizeRatioAverager = null;
   double pip = 0.0001d; // replaced
   
   @Override
   public void onStart(IContext context) throws JFException {
      this.context = context;
      this.console = context.getConsole();
      print("onStart");
      instruments.add(selectedInstrument);
      pip = selectedInstrument.getPipValue();
      context.setSubscribedInstruments(instruments, true);
      if (bufferLength<10) bufferLength = 10; // arbitrary minimum
      if (tickCountPerPrint<100) tickCountPerPrint=100; // arbitrary minimum
      sizeRatioAverager = new MovingAveragerCircular(bufferLength);
   }

   int printCount = 0;

   @Override
   public void onTick(final Instrument instrumentArg, final ITick tick) throws JFException {
      if (instrumentArg==null || (false==instrumentArg.equals(selectedInstrument))) return;
      
      double bidVolume = tick.getBidVolume();
      double askVolume = tick.getAskVolume();
      
      double ratio = (askVolume / bidVolume);
      sizeRatioAverager.addData(ratio);
      
      printCount++; if (printCount>500000) printCount=0; // overflow
      
      if ( (printCount % tickCountPerPrint) == 0) {
         Double avgRatioDbl = sizeRatioAverager.getAvg();
         if (avgRatioDbl!=null) {
            print("Moving Average AskVol/BidVol ratio: "+normalizeDouble(avgRatioDbl.doubleValue(),4));
         }
      }
   }
   @Override
   public void onBar(Instrument instrument, Period period, IBar askBar,
         IBar bidBar) throws JFException {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void onMessage(IMessage message) throws JFException {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void onAccount(IAccount account) throws JFException {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void onStop() throws JFException {
      print("onStop");
   }
   final private void print(final String msg) {
      if (console==null) return;
      console.getOut().println(msg);
   }
   
   public class MovingAveragerCircular {
      int length;
      int pointer;
      Double[] dataArray = null;
      final Object mutex = new Object();
      
      public MovingAveragerCircular(final int lengthArg) {
         length = lengthArg;
         dataArray = new Double[length];
         pointer = 0;
         for (int i=0; i<length; i++) {
            dataArray[i] = null;
         }
      }
      
      final public void addData(final double data) {
         synchronized(mutex) {
            if (pointer>=length) pointer=0; // circular pointer
            dataArray[pointer++] = new Double(data);
         }
      }
      
      final public Double getAvg() {
         double sum = 0.0d;
         int n = 0;
         Double dataItem = null;
         synchronized(mutex) {
            for (int i=0; i<length; i++) {
               dataItem = dataArray[i];
               if (dataItem!=null) {
                  sum += dataItem.doubleValue();
                  n++;
               }
            }
         }
         if (n==0) {
            return null;
         }
         else {
            return new Double(sum / n);
         }
      }
   }

   final HashMap<Integer,DecimalFormat> decimalFormats = new HashMap<Integer,DecimalFormat>();
   // avoid recalculating the pattern and DecimalFormat object each time
    final private double normalizeDouble(double operand, int digits) {
       if (digits<0) throw new RuntimeException("normalizeDouble digits<0");
       Integer formatsKey = new Integer(digits);
       DecimalFormat formatter = decimalFormats.get(formatsKey);
       if (formatter==null) {
           String pattern = digits==0?"0":"0.";
           for(int i=0;i<digits;i++){
               pattern += "0"; // e.g. 2 yields "0.00"
           }
           formatter = new DecimalFormat(pattern);
           decimalFormats.put(formatsKey,formatter); // cache format
       }
        // use Double's constructor to parse string
        Double result = new Double(formatter.format(operand)).doubleValue();
        double output = result.doubleValue();
        //System.out.println("normalizeDouble operand: "+operand+" digits: "+digits+" pattern["+pattern+"] output: "+output);
        return (output);
    }
   

}




2013-05-13 20:28:34   Moving Average AskVol/BidVol ratio: 1.2533
2013-05-13 20:28:34   Moving Average AskVol/BidVol ratio: 1.2895
2013-05-13 20:28:34   Moving Average AskVol/BidVol ratio: 1.2866
2013-05-13 20:28:34   Moving Average AskVol/BidVol ratio: 1.2987
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.3538
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.2432
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.2919
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.3009
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.4112
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.5819
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.3175
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.4739
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.3863
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.4213
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.3308
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.3984
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.2152
2013-05-13 20:28:33   Moving Average AskVol/BidVol ratio: 1.2967
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.4042
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.2373
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.3888
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.3372
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.347
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.2687
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.1921
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.2785
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.2554
2013-05-13 20:28:32   Moving Average AskVol/BidVol ratio: 1.3855
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.4494
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.3377
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.288
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2621
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2837
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2822
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2285
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2231
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.1765
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.196
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2151
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2374
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2157
2013-05-13 20:28:31   Moving Average AskVol/BidVol ratio: 1.2818
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.2285
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.2334
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.0912
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.0377
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.1473
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.2253
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.5056
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.319
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.4123
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.5219
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.481
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.333
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.438
2013-05-13 20:28:30   Moving Average AskVol/BidVol ratio: 1.4483
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.4213
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.5961
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.5898
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.3673
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.5418
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.4429
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.37
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.3096
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.3584
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.2747
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.2743
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.2882
2013-05-13 20:28:29   Moving Average AskVol/BidVol ratio: 1.2791
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.3118
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.3585
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.242
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.2493
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.3715
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.3092
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.2372
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.1571
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.2528
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.1972
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.247
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.1641
2013-05-13 20:28:28   Moving Average AskVol/BidVol ratio: 1.1722
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.1639
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2556
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.3228
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2663
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.3887
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.3562
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.3536
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2462
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2659
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.31
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2241
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2841
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.2377
2013-05-13 20:28:27   Moving Average AskVol/BidVol ratio: 1.215
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.204
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.2856
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.2914
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3026
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.2553
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3137
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3911
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.2928
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3548
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3921
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3531
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.261
2013-05-13 20:28:26   Moving Average AskVol/BidVol ratio: 1.3289
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.1896
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.1869
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.1983
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.2558
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.3234
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.266
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.2218
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.3991
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.3967
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.3847
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.3935
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.44
2013-05-13 20:28:25   Moving Average AskVol/BidVol ratio: 1.5515
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.6336
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.4124
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2592
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.12
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.4267
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.4213
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2091
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2442
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2869
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2272
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.42
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2085
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.2801
2013-05-13 20:28:24   Moving Average AskVol/BidVol ratio: 1.3282
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2345
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2468
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2427
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.0964
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2756
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.17
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.323
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2307
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2543
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.1486
2013-05-13 20:28:23   Moving Average AskVol/BidVol ratio: 1.2469
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.3558
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.329
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.4261
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.3746
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.2904
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.2059
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.3075
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.1873
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.2668
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.2495
2013-05-13 20:28:22   Moving Average AskVol/BidVol ratio: 1.372
2013-05-13 20:28:21   Moving Average AskVol/BidVol ratio: 1.3
2013-05-13 20:28:21   Moving Average AskVol/BidVol ratio: 1.247
2013-05-13 20:28:21   Moving Average AskVol/BidVol ratio: 1.2707
2013-05-13 20:28:21   Moving Average AskVol/BidVol ratio: 1.3357
2013-05-13 20:28:21   Moving Average AskVol/BidVol ratio: 1.2237
2013-05-13 20:28:20   Moving Average AskVol/BidVol ratio: 1.2035
2013-05-13 20:28:20   Moving Average AskVol/BidVol ratio: 1.2346
2013-05-13 20:28:16   Moving Average AskVol/BidVol ratio: 1.1051
2013-05-13 20:27:52   Moving Average AskVol/BidVol ratio: 1.1556
2013-05-13 20:27:27   onStart


I'd be interested to know if this is just wrong, or if anybody has any ideas
why this would be the case. In fact, I've done fairly extensive testing, with
more complex code which marks on the charts where anomalous ratios
exist, and I saw this constant bias everywhere, so I had to correct for it
with a midline Reference Average ratio above and below which I looked
for patterns.

HyperScalper


 

Jump to:  

cron
  © 1998-2025 Dukascopy® Bank SA
On-line Currency forex trading with Swiss Forex Broker - ECN Forex Brokerage,
Managed Forex Accounts, introducing forex brokers, Currency Forex Data Feed and News
Currency Forex Trading Platform provided on-line by Dukascopy.com