Hi,
This is an indicator that is going to closely analyse tick volume or 'Volumes' in MT4 on the 1 min chart i.e. try to capture a surge in incoming ticks . Primarily, I am looking to detect 'Volume threshold/Price range" anomalies.
The indicator is a simple one, it is just that I have provided an extensive explanation so as to be clear.
-Please read the requirements carefully.
-I would prefer the indicator to be completed as early as possible.
- The code be accessible and reasonably well commented, so that I can understand it .
- Be as resource efficient as possible as I intend to use this on 28 currency pair 1 min charts at the same time.
Brief explanation - - the 'Volume threshold/Price range' anomaly or volumes change over a given price range -
Volume threshold = how much did the 'Volumes' count change by during the last volumes update
Price range = a specified price range. Example = 0.1 pip or 0.2 pips
Note - After much study,research and also coding in C# on another platform (I do not know mql4). I have realised that at times a 'big packet of volumes' would suddenly show up, lets call this a "volume packet'. To be more specific - the "volumes' count in MT4 is not always the amount of changes in Bid and Ask price , some times (not often) a volume packet of 10 etc would show up without a corresponding change in price. This 'volume packet' also needs to be detected.
Hence, the value must be obtained from the MT4 Volumes as it is in the platform, as opposed to manually trying to record the number of bid and ask price changes, this is important.
Section 1 - Data and Calculation explanation -
Back to the Volume/price anomaly explanation.
This part below mainly explains the primary data to be extracted and calculated. Other 'items that need to be calculated later on' will be based on the data calculated below -
Chart - 1 min EUR/USD
User specified options -
Volume threshold = 100
Price range = 0.1 pips (Note - indicator should be able to calculate 0.1 pips for both 5 and 3 decimal currency pairs)
Volumes Packet threshold = 10
Time1 = 10:00:00
Volume = 242
Candle high = 1.13019
Candle Low = 1.13010
What I am interested in is the tick activity for the duration of @10:00 for a given specified price range. Lets assume specified price range = 0.1 pips. Of course, the indicator works in real-time/Live and needs to have the data stored for the period for which it was online/connected to the server i.e. from when logged in and until the platform is shutdown.
@ 10:00:00 = no volume
@ 10:00:01 = no volume
@ 10:00:02 = New volumes = 1,Total Volumes count = 1, Candle open Price = 1.13014
@ 10:00:03 = no new volume, Total Volumes count = 1,
@ 10:00:04 = no new volume, Total Volumes count = 1,
@ 10:00:05 = a new 'volume packet' of 19 arrives. Now Total Volumes count = 20. This has triggered the Volumes Packet threshold of 10 and hence needs to be logged an detected.
@ 10:00:06 = New volume = 1,Total volumes count to 21
.......
@10:00:27 = Total Volumes count = 50 i.e. during the last 21 seconds volume has increased by 29 over several New Volumes updates.
@10:00:28 (or on the next volumes entry/update) =New volumes = 100, Total Volumes count rises up to 150. During this time price has changed by just 0.1 pips . This is what I am interested in i.e. a sudden surge in the volume count by 100 while price has just moved by 0.1 pips. This needs to be detected and logged as it meets the 'Volume Threshold" and 'Price range' Criteria.
.......
@10:00:59 = Total Volumes count = 242 i.e. during the last 31 seconds volume has increased by 92 over several New Volumes updates.
Note = It is important to note that in reality, because volumes primarily deal with price updates and several price updates can occur in a second, a sequential second by second time stamp reference such as above will most likely not be accurate. It would more or less need to be analysed by change in 'volume updates' as opposed to change in volumes per second.
Example =
Volume update 1 = 1 , Total volumes count = 1, price change = 0.2 pips (1.13014 - 1.13016)
volume update 2 = 19, Total volumes count = 20 ,price change = 0.1 pips .(1.13016 - 1.13015). Gets detected as it triggers the Volumes Packet Threshold, which is independent of price range.
.....
volume update 10 = 100, Total volumes count = 150, price range = 0.1 (1.13018-1.13019). This needs to be detected and logged as it meets the 'Volume Threshold" value of 100 and 'Price range' Criteria of 0.1 pips.
If price range is set to 0.3 pips and Volume threshold = 100. The indicator will be triggered if - over the span of movement over the last 0.3 pip range the total volumes count has increased by 100.
NOTE - It is a 'Price range' that needs to be considered i.e. for a price range of 0.3 the price can change 100 times etc in between 1.13010 and 1.13013, it is valid as long is stays within the range. The moment the price goes below 1.13010 or above 1.13013 a new entry should be started.
The price to be considered is with respect to the bid price or chart price.
Section 2 - What the indicator should display -
In all of the cases below - the user will be able to customise features such as colour,font, font size, histogram size and color etc
NOTE-----1) and 2) are 'on chart elements' i.e. the indicator values needs to be plotted on the chart
1) 3 levels of Volumes threshold(VT)/price range(PR). Each can be customised to the user's requirements and can be switched off if required.
Level 1 - VT = 50, PR = 0.1 , display colour = blue
Level 2 - VT = 100, PR = 0.1 , display colour = green
Level 3 - VT = 150, PR = 0.1 , display colour = red
The highest level recorded VT Value(NOT the input Threshold VT value) in the specified display colour will be displayed on the chart .
2) 3 Levels of packet value (PV). Each can be customised to the user's requirements and can be switched off if required.
Level 1 - PV = 5 , display colour = blue
Level 2 - PV = 10 , display colour = green
Level 3 - PV = 15, display colour = red
The highest level recorded PV Value(NOT the input Threshold PV value) in the specified display colour will be displayed on the chart .
3) MM ratio.
This is only for those candles that have VT and PR values.
MM ratio formula = (recorded VT value/Total Volume of the candle). MM ratio can be SWITCHED ON OR OFF depending on the user.
NOTE - if a candle has 1) and 2) values. 1) will take priority over 2) i.e. 1) will be displayed and 2) will not be shown.
NOTE----4) and 5) are 'data window' indicator elements or are histograms that will be shown in the indicator window. The user can choose to display i.e. either 3) or 4). BOTH CAN BE SWITCHED OFF ALSO AT THE SAME TIME. This is so that I can find out what are the ideal values for 1) and 2).
4) a histogram showing the highest VT/PR values for a given candle. Example if the Recorded VT value is 200, the histogram value = 200.
5) a Histogram showing the highest PV values for a given candle.
NOTE - For the ON chart displays for 1) ,2) and 5) I am open to suggestions. For now I am thinking of a the following -
- a short white line showing the price level on the left side of the candle (from the center of the candle body through to the outside of the left side of the candle body, till it meets the next candle to its left. So the line will be only 1 candle in length ). This is the price level when the indicator was triggered.
- the recorded VT or PV along side the MM ratio value will be displayed on the chart i.e. above or below the candle.
VT and MM value will be displayed in the following format. VT/MM ratio i.e. if VT = 100 and Total Volume of the candle = 400. The displayed value will be = 100/0.25
IF MM ratio value is switched off only VT value will be displayed.
If the candle is bullish = VT/MMratio or PV value will be displayed above the high of the candle.
If the candle is bearish = VT/MMratio or PV value will be displayed below the low of the candle.
The distance should be 0.1 or 0.2 pips above or below the high or low of the candle i.e. the User should be able to specify this.