4evermaat:
Why ? you have Bid and Ask why do you need the spread to be stored ? Volume[0] should return the tick count for the current bar.
For mt4 build 509, I implemented the following code so that I could print the bid, ask, and volume of each incoming tick on a backtest or in live trading.
on dukascopy tick data using Birt's csv2fxt with UseRealSpreads=true and this is the output (for 1 second of data)
This is correct behavior. It shows the bid/ask/and volume to floating point precision. The volume stores the variable spread, but that was done when using the csv2fxt 0.43.
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
For mt4 build 509, I implemented the following code so that I could print the bid, ask, and volume of each incoming tick on a backtest or in live trading.
on dukascopy tick data using Birt's csv2fxt with UseRealSpreads=true and this is the output (for 1 second of data)
21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67923 1.67885 0.00038 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67923 1.67880 0.00043 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67922 1.67880 0.00042 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67916 1.67880 0.00036 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67914 1.67881 0.00033 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67922 1.67887 0.00035 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67922 1.67889 0.00033 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67919 1.67892 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67922 1.67892 0.00030 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67922 1.67895 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67920 1.67893 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67918 1.67893 0.00025 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67921 1.67893 0.00028 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67927 1.67893 0.00034 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67921 1.67894 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67917 1.67894 0.00023 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67921 1.67894 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67919 1.67891 0.00028 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67917 1.67891 0.00026 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67916 1.67891 0.00025 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67917 1.67888 0.00029 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67917 1.67893 0.00024 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67917 1.67890 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67915 1.67890 0.00025 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67916 1.67888 0.00028 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67913 1.67888 0.00025 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67903 1.67888 0.00015 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67910 1.67888 0.00022 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67913 1.67888 0.00025 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67919 1.67888 0.00031 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67916 1.67889 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67918 1.67891 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67919 1.67893 0.00026 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67926 1.67893 0.00033 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67936 1.67893 0.00043 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67934 1.67894 0.00040 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67932 1.67897 0.00035 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67923 1.67897 0.00026 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67932 1.67897 0.00035 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67928 1.67901 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67926 1.67899 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67927 1.67900 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67924 1.67900 0.00024 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67926 1.67897 0.00029 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67925 1.67893 0.00032 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67921 1.67893 0.00028 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67920 1.67893 0.00027 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67919 1.67890 0.00029 21:28:56 2013.11.04 23:59 TickPrinter509 GBPAUD,M1: 1.67921 1.67892 0.00029
This is correct behavior. It shows the bid/ask/and volume to floating point precision. The volume stores the variable spread, but that was done when using the csv2fxt 0.43.
but now check out the revised code to compile in mt4 build 600:
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- //---- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- //---- return; } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void OnTick() { if ( Volume[0] < 0 ) Print( DoubleToStr( Ask, Digits ), " ", DoubleToStr( Bid, Digits ), " ", DoubleToStr( Volume[0], Digits ), " " ); else Print( DoubleToStr( Ask, Digits ), " ", DoubleToStr( Bid, Digits ), " ", IntegerToString( Volume[0], 0 ), " " ); return; } //+------------------------------------------------------------------+
And look at the output for the same ticks.
21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67923 1.67885 163208757249 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67923 1.67880 184683593730 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67922 1.67880 180388626435 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67916 1.67880 154618822660 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67913 1.67881 137438953477 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67922 1.67887 150323855366 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67921 1.67889 137438953479 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67918 1.67892 111669149704 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67921 1.67892 124554051593 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67921 1.67895 111669149706 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67919 1.67893 111669149707 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67918 1.67893 107374182412 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67920 1.67893 115964117005 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67927 1.67893 146028888078 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67920 1.67894 111669149711 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67917 1.67894 98784247824 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67920 1.67894 111669149713 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67918 1.67891 115964117010 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67916 1.67891 107374182419 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67915 1.67891 103079215124 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67917 1.67888 124554051605 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67917 1.67893 103079215126 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67916 1.67890 111669149719 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67914 1.67890 103079215128 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67916 1.67888 120259084313 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67913 1.67888 107374182426 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67903 1.67888 64424509467 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67910 1.67888 94489280540 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67913 1.67888 107374182429 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67919 1.67888 133143986206 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67915 1.67889 111669149727 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67917 1.67891 111669149728 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67918 1.67893 107374182433 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67925 1.67893 137438953506 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67935 1.67893 180388626467 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67934 1.67894 171798691876 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67932 1.67897 150323855397 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67922 1.67897 107374182438 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67932 1.67897 150323855399 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67927 1.67901 111669149736 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67925 1.67899 111669149737 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67926 1.67900 111669149738 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67924 1.67900 103079215147 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67925 1.67897 120259084332 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67925 1.67893 137438953517 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67920 1.67893 115964117038 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67919 1.67893 111669149743 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67918 1.67890 120259084336 21:28:51 2013.11.04 23:59 TickPrinter GBPAUD.,M1: 1.67920 1.67892 120259084337
You can see the volume figures are messed up (should be stored variable spread, which is much smaller number....less than 0). Why is this happening? and how can I get it fixed? I also tried running tickprinter509 on the b600 terminal and the results are identical to the b600 test above.
I also noticed that the bid price on the majority of the ticks are 1/10 of a pip lower (0.00001) on the b600 test run. The exact same ticks.
Also, which function should be used: DoubleToStr or DoubleToString?
edit: the title of this thread is misleading. Originally I thought it was the doubleToStr function that was not correct. But now I suspect it could be how the newer mt4 is handling/storing information in the volume field (as an int vs as a double).