Hi Klaus,
I still run JBT (mostly in Forward Test mode). The only indicator I use is
Force (Tension). Is your improvement meant to create a better (more
efficient) framework to optimize parameters Period, Scale, Entry, and Exit?
Best,
Ali
On Sunday, July 31, 2016 at 1:16:40 PM UTC-7, Klaus wrote:
>
> Hi,
>
> I am not sure, whether there is still anyone using JBooktrader.
> However, I would like to report on some smaller improvements, I recently
> made.
>
> a) Sometimes it does not make sense to analyze all possible combinations
> of parameters in optimization.
> (e.g., if the parameters are symmetrical this would lead to a double
> analysis)
> For this I added a method to strategy.java
>
> // KS: added 160727 - to exclude incorrect parameter value
> combinations
>
> public boolean eligible() {
>
> return true;
>
> }
>
> This can now be overloaded in your strategy as you like.
> In the call-method of the OptimizerWorker I added a corresponding
> if-statement:
>
>
>
> if (strategy.eligible()) {
>
> strategy.setMarketBook(marketBook);
>
> strategy.setIndicatorManager(indicatorManager);
>
> strategy.setIndicators();
>
> strategies.add(strategy);
>
> }
>
> else {
>
> // System.out.println("Strategy excluded");
>
> }
>
>
> The inner part of the if is the original code.
>
> b) It is sometimes also possible to work with a reduced dataset (I
> typically gather all the data (24/7) and then just extract the relevant
> data. - However, often it is also sufficient to use more coarse-grained
> data for optimization. (this leads to very significant speed-ups) - Of
> course this depends on your specific indicators whether that is meaningful,
> and in many cases at least the parameter values need to be adapted in order
> to make use of such an approach.
>
> I use a simple R-script in order to make this extraction. The following
> script extracts only the entries with second "00" and also restrict the
> time of day. - You can adapt it easily to your need.
> A downside of the primitive script is: at the end the first 10 lines need
> to reinserted (and the line from the dataframe removed)
> #!/usr/bin/env Rscript
> args = commandArgs(trailingOnly=TRUE)
> # print("Reached 1")
> if (length(args)!=1) {stop("the filename needs to be given", call.=FALSE)}
> # print("reached 2")
> df <- read.table(args[1], skip=10, sep=",",
> col.names=c("Date","Time","Balance","Price","Volume"),colClasses=c("character","character","numeric","numeric","numeric"))
> # print("reached 3")
> dfr=df[df$Time>"080000" & df$Time<"170000" & endsWith( df$Time,"00"),]
> write.table(dfr, file = paste(args[1],"B",sep=""),sep=",", quote = FALSE,
> row.names = FALSE)
>
> In order for such an approach to work, it is also necessary to adapt the
> MIN_SAMPLE_SIZE definition in the IndicatorManager-class. (originally
> 60*60, here set to 10)
>
> private static final long MIN_SAMPLE_SIZE = 10;// 60*60; 1 hour worth
> of samples
> Actually, a much better approach would be to proclaim the need for data in
> units of time by the various indicators, the framework would gather this
> and take it into account. But this would have required deeper changes.
>
> Again, whether such a scaling is useful appropriate depends very much on
> your specific strategy and indicators.
>
> I hope someone finds this useful.
>
> Klaus
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"JBookTrader" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.