The long time JBTers are aware of this problem: when multiple people run the same strategy in the same time frame, their results may be different. For the benefit of everyone, I'd like to explain why this happens, and perhaps someone would come up with an idea to improve the consistency.
When JBT runs in the "trade" and "forward test" mode, it's driven by a timer which fires 1 time per second. Every time the timer fires, JBT calculates the depth balance as the midpoint between the lowest and the highest depth balance observed during that second. This midpoint balance is what gets fed to the indicators, which ultimately generate trading signals. This approach works fairly well. We've run multiple multi-user tests in the past, and I am also regularly checking my results with another JBTer who runs the same strategies. Most of the time, the results match well, with occasional exceptions. Here is why these exceptions occur: The timer uses the computer clock, and obviously, everyone's clock is different. When user A samples 1-second interval, it may be, say, 10:00:05.200 to 10:00:06.200 real time period. By "real time", I mean the most precise, atomic time, which is the same for everyone. At the same time, user B sample could be 10:00:05.900 to 10:00:06.900, measured by the same atomic clock. So, users A and B are "out of phase" by about 700 milliseconds. As a consequence, their min/max depth balance observations would differ by small amount. Now, imagine that some strategy triggers a long trade when the indicator value exceeds 100. Because of the small differences, the indicator for user A may reach 100.01 and trigger a trade, while the same indicator for user B may reach 99.99 and drop off, never triggering a trade. An additional source of the differences is the PC clock drift, which may cause JBT to sample overlapping periods, or to have gaps in the samples. Here are a couple of ideas that I have to improve the multi-user consistency: 1. Instead of the midpoint depth balance, use a 1-second average (or an exponential average) of the depth balance. 2. Instead of using the PC clock, obtain the atomic time from a time server (such as the US Naval Observatory time server), and trigger depth balance sampling based on the changes in that atomic clock. This would involve continuous polling of the time server, multiple times per second. This is easy to do in Java, but it may not be reliable, as the server may go down. The server may also deny service, if the requests are deemed to be too frequent. If you have any other ideas, feel free to share with the group. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "JBookTrader" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jbooktrader?hl=en -~----------~----~----~----~------~----~------~--~---
