Discussion:
[JBookTrader] Trading Schedule and Exclusion
Ali Farahani
2014-10-07 05:34:50 UTC
Permalink
Hello Eugene,

I am using the Trading Schedule of:

TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25",
"America/New_York");

The indicator I am using (Force) only becomes available starting at 10:05.
I am trying to also monitor Force between 9:30 and 10:05, so I changed the
Trading Schedule (in StrategyES) and added the following exclusion:

TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25",
"America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");

So I am getting the "Exclusion period must be within trading period in
trading schedule." message (from TradingSchedule).

Other than modifying the TradingSchedule class OR using 9:31 instead of
9:30 in the exclusion statement, is there a better way of accomplishing
this objective?

Kind regards,

Ali
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Eugene Kononov
2014-10-07 13:08:08 UTC
Permalink
Hi Ali,

The indicators are calculated for the entire duration of the period in
which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.

E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25",
"America/New_York");
The indicator I am using (Force) only becomes available starting at 10:05.
I am trying to also monitor Force between 9:30 and 10:05, so I changed the
TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25",
"America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period in
trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead of
9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Gmail
2014-10-07 16:06:02 UTC
Permalink
Hi Eugene,

Thanks for the clarification. I'm not by my PC right now, I'll send you the Force code later today. The code is a simple combination of BalanceVelocity and PriceVelocity. I combined them into a Force Indicator to be able to view the curve on the chart.

Many thanks,

Ali
Post by Eugene Kononov
Hi Ali,
The indicators are calculated for the entire duration of the period in which market data is available, regardless of the trading schedule. The only thing that trading schedule controls is the time interval when the onBookSnapshot() method is invoked. If you don't see the indicator values before the trading schedule starts, the problem is in the indicator itself. The most likely explanation is that your indicator needs a history of market data which spans over the trading interval. For example, if you record from 9am, and the indicator needs 60 minutes of data to calculate its values, the first calculated indicator value would be at 10am. If you post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25", "America/New_York");
TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period in trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead of 9:30 in the exclusion statement, is there a better way of accomplishing this objective?
Kind regards,
Ali
--
You received this message because you are subscribed to the Google Groups "JBookTrader" group.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "JBookTrader" group.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Ali Farahani
2014-10-07 23:59:34 UTC
Permalink
Hello Eugene,

The indicator I am using is a variation of Tension, as follows:

public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;

public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}

@Override
public void calculate() {

MarketSnapshot snapshot = marketBook.getSnapshot();

// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;

// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;

// force
value = balanceVelocity - scaleFactor * priceVelocity;
}

Thanks again,

Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send you
the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period in
which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25",
"America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25",
"America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period in
trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead of
9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Eugene Kononov
2014-10-08 00:26:55 UTC
Permalink
Yeah, this looks perfectly fine, Ali. Please post a chart so that we can
see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send you
the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period in
which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25",
"America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25",
"America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period in
trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead of
9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Ali Farahani
2014-10-08 00:48:25 UTC
Permalink
Eugene,

The indicator values are calculated correctly by JBT as you have described
here (regardless of the trading schedule). Maybe my misunderstanding is
related to onBookSnapshot(). You had mentioned that "... The only thing
that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?

Thank you again for your time.

Ali
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we can
see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send you
the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period in
which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25",
"America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25",
"America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period in
trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead of
9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Eugene Kononov
2014-10-08 00:57:44 UTC
Permalink
Yeah, now I think I understand what you want. There is no built-in
mechanism for the functionality that you want. However, there is an easy
work around.

1. Create a copy of your trading strategy.
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove (or
comment out) the order placing code, which is the goLong(), goShort(), and
goFlat() methods.

As a result, this would be your "monitoring" strategy. It would calclulate
the indicator values, but would never trade.
Post by Ali Farahani
Eugene,
The indicator values are calculated correctly by JBT as you have described
here (regardless of the trading schedule). Maybe my misunderstanding is
related to onBookSnapshot(). You had mentioned that "... The only thing
that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?
Thank you again for your time.
Ali
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we can
see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send you
the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period in
which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05",
"15:25", "America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30",
"15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period in
trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead
of 9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Ali Farahani
2014-10-08 01:10:21 UTC
Permalink
This makes sense. Thanks for all your help.

Ali
Post by Eugene Kononov
Yeah, now I think I understand what you want. There is no built-in
mechanism for the functionality that you want. However, there is an easy
work around.
1. Create a copy of your trading strategy.
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove (or
comment out) the order placing code, which is the goLong(), goShort(), and
goFlat() methods.
As a result, this would be your "monitoring" strategy. It would calclulate
the indicator values, but would never trade.
Post by Ali Farahani
Eugene,
The indicator values are calculated correctly by JBT as you have
described here (regardless of the trading schedule). Maybe my
misunderstanding is related to onBookSnapshot(). You had mentioned that
"... The only thing that trading schedule controls is the time interval
when the onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?
Thank you again for your time.
Ali
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we can
see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send
you the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period in
which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05",
"15:25", "America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30",
"15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period
in trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead
of 9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Ali Farahani
2014-10-08 05:54:33 UTC
Permalink
Eugene,

I am also trying another approach: I created the "monitoring" strategy with
9:30 to 16:00 trading schedule. I created my trading strategy by Extending
the "monitoring" strategy and made its trading schedule from 10:05 to
15:25. Hopefully this makes sense and would work (without any unintended
consequences).

Thanks.

Ali
Post by Ali Farahani
This makes sense. Thanks for all your help.
Ali
Post by Eugene Kononov
Yeah, now I think I understand what you want. There is no built-in
mechanism for the functionality that you want. However, there is an easy
work around.
1. Create a copy of your trading strategy.
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove (or
comment out) the order placing code, which is the goLong(), goShort(), and
goFlat() methods.
As a result, this would be your "monitoring" strategy. It would
calclulate the indicator values, but would never trade.
Post by Ali Farahani
Eugene,
The indicator values are calculated correctly by JBT as you have
described here (regardless of the trading schedule). Maybe my
misunderstanding is related to onBookSnapshot(). You had mentioned that
"... The only thing that trading schedule controls is the time interval
when the onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?
Thank you again for your time.
Ali
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we
can see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send
you the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period
in which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05",
"15:25", "America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30",
"15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period
in trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31 instead
of 9:30 in the exclusion statement, is there a better way of accomplishing
this objective?
Kind regards,
Ali
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Eugene Kononov
2014-10-08 11:52:53 UTC
Permalink
Yes, this will work, too.
Post by Ali Farahani
Eugene,
I am also trying another approach: I created the "monitoring" strategy
with 9:30 to 16:00 trading schedule. I created my trading strategy by
Extending the "monitoring" strategy and made its trading schedule from
10:05 to 15:25. Hopefully this makes sense and would work (without any
unintended consequences).
Thanks.
Ali
Post by Ali Farahani
This makes sense. Thanks for all your help.
Ali
Post by Eugene Kononov
Yeah, now I think I understand what you want. There is no built-in
mechanism for the functionality that you want. However, there is an easy
work around.
1. Create a copy of your trading strategy.
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove
(or comment out) the order placing code, which is the goLong(), goShort(),
and goFlat() methods.
As a result, this would be your "monitoring" strategy. It would
calclulate the indicator values, but would never trade.
Post by Ali Farahani
Eugene,
The indicator values are calculated correctly by JBT as you have
described here (regardless of the trading schedule). Maybe my
misunderstanding is related to onBookSnapshot(). You had mentioned that
"... The only thing that trading schedule controls is the time interval
when the onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?
Thank you again for your time.
Ali
On Tue, Oct 7, 2014 at 5:26 PM, Eugene Kononov <
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we
can see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send
you the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period
in which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05",
"15:25", "America/New_York");
The indicator I am using (Force) only becomes available starting at
10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30",
"15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading period
in trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31
instead of 9:30 in the exclusion statement, is there a better way of
accomplishing this objective?
Kind regards,
Ali
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Ali Farahani
2014-10-10 01:58:05 UTC
Permalink
Hi Eugene,

Since "The indicators are calculated for the entire duration of the period
in which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked.", does this mean that I could access
the value of the Indicator if I put it inside another method (of Strategy
class)? Before I did some work on this, I wanted to make sure it was doable.

Thanks you,

Ali
Post by Eugene Kononov
Yes, this will work, too.
Post by Ali Farahani
Eugene,
I am also trying another approach: I created the "monitoring" strategy
with 9:30 to 16:00 trading schedule. I created my trading strategy by
Extending the "monitoring" strategy and made its trading schedule from
10:05 to 15:25. Hopefully this makes sense and would work (without any
unintended consequences).
Thanks.
Ali
Post by Ali Farahani
This makes sense. Thanks for all your help.
Ali
Post by Eugene Kononov
Yeah, now I think I understand what you want. There is no built-in
mechanism for the functionality that you want. However, there is an easy
work around.
1. Create a copy of your trading strategy.
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove
(or comment out) the order placing code, which is the goLong(), goShort(),
and goFlat() methods.
As a result, this would be your "monitoring" strategy. It would
calclulate the indicator values, but would never trade.
Post by Ali Farahani
Eugene,
The indicator values are calculated correctly by JBT as you have
described here (regardless of the trading schedule). Maybe my
misunderstanding is related to onBookSnapshot(). You had mentioned that
"... The only thing that trading schedule controls is the time interval
when the onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?
Thank you again for your time.
Ali
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we
can see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll send
you the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the period
in which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked. If you don't see the indicator values
before the trading schedule starts, the problem is in the indicator itself.
The most likely explanation is that your indicator needs a history of
market data which spans over the trading interval. For example, if you
record from 9am, and the indicator needs 60 minutes of data to calculate
its values, the first calculated indicator value would be at 10am. If you
post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05",
"15:25", "America/New_York");
The indicator I am using (Force) only becomes available starting
at 10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30",
"15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading
period in trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31
instead of 9:30 in the exclusion statement, is there a better way of
accomplishing this objective?
Kind regards,
Ali
--
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,
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Eugene Kononov
2014-10-10 02:23:22 UTC
Permalink
Yes, that would work, as well.Ali Farahani <***@gmail.com> wrote:Hi Eugene,

Since "The indicators are calculated for the entire duration of the period in which market data is available, regardless of the trading schedule. The only thing that trading schedule controls is the time interval when the onBookSnapshot() method is invoked.", does this mean that I could access the value of the Indicator if I put it inside another method (of Strategy class)? Before I did some work on this, I wanted to make sure it was doable.

Thanks you,

Ali

On Wednesday, October 8, 2014 4:52:54 AM UTC-7, Eugene Kononov wrote:
Yes, this will work, too.

On Wed, Oct 8, 2014 at 1:54 AM, Ali Farahani <***@gmail.com> wrote:
Eugene,

I am also trying another approach: I created the "monitoring" strategy with 9:30 to 16:00 trading schedule. I created my trading strategy by Extending the "monitoring" strategy and made its trading schedule from 10:05 to 15:25. Hopefully this makes sense and would work (without any unintended consequences).

Thanks.

Ali


On Tue, Oct 7, 2014 at 6:10 PM, Ali Farahani <***@gmail.com> wrote:
This makes sense. Thanks for all your help.

Ali


On Tue, Oct 7, 2014 at 5:57 PM, Eugene Kononov <***@gmail.com> wrote:
Yeah, now I think I understand what you want. There is no built-in mechanism for the functionality that you want. However, there is an easy work around. 

1. Create a copy of your trading strategy. 
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove (or comment out) the order placing code, which is the goLong(), goShort(), and goFlat() methods.

As a result, this would be your "monitoring" strategy. It would calclulate the indicator values, but would never trade.

On Tue, Oct 7, 2014 at 8:48 PM, Ali Farahani <***@gmail.com> wrote:
Eugene,

The indicator values are calculated correctly by JBT as you have described here (regardless of the trading schedule). Maybe my misunderstanding is related to onBookSnapshot(). You had mentioned that "... The only thing that trading schedule controls is the time interval when the onBookSnapshot() method is invoked." I think I now understand the disconnect. The logic I had expected to execute is currently inside onBookSnapshot(); no wonder it only got executed after the start of the trading schedule. I am simply trying to monitor the value of the force before the start of the trading schedule. Any suggestions on which of the Strategy methods I should override to have this code run (similar to how onBookSnapshot() runs)?

Thank you again for your time.

Ali


On Tue, Oct 7, 2014 at 5:26 PM, Eugene Kononov <***@gmail.com> wrote:
Yeah, this looks perfectly fine, Ali. Please post a chart so that we can see the original problem where the indicator values are not calculated until the start of the trading schedule.

On Tue, Oct 7, 2014 at 7:59 PM, Ali Farahani <***@gmail.com> wrote:
Hello Eugene,

The indicator I am using is a variation of Tension, as follows:

public class Force extends Indicator {
    private final double fastMultiplier, slowMultiplier;
    private double fastBal, slowBal, fastPrice, slowPrice;
    private final double scaleFactor;

    public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
        super(fastPeriod, slowPeriod, scaleFactor);
        fastMultiplier = 2.0 / (fastPeriod + 1.0);
        slowMultiplier = 2.0 / (slowPeriod + 1.0);
        this.scaleFactor = scaleFactor;
    }

    @Override
    public void calculate() {
   
    MarketSnapshot snapshot = marketBook.getSnapshot();

    // balance
        double balance = snapshot.getBalance();
        fastBal += (balance - fastBal) * fastMultiplier;
        slowBal += (balance - slowBal) * slowMultiplier;
        double balanceVelocity = fastBal - slowBal;

     // price
        double price = snapshot.getPrice();
        fastPrice += (price - fastPrice) * fastMultiplier;
        slowPrice += (price - slowPrice) * slowMultiplier;
        double priceVelocity = fastPrice - slowPrice;
        
     // force
        value = balanceVelocity - scaleFactor * priceVelocity;
    }

Thanks again,

Ali


On Tue, Oct 7, 2014 at 9:06 AM, Gmail <***@gmail.com> wrote:
Hi Eugene,

Thanks for the clarification. I'm not by my PC right now, I'll send you the Force code later today. The code is a simple combination of BalanceVelocity and PriceVelocity. I combined them into a Force Indicator to be able to view the curve on the chart.

Many thanks,

Ali


On Oct 7, 2014, at 6:08 AM, Eugene Kononov <***@gmail.com> wrote:

Hi Ali,

The indicators are calculated for the entire duration of the period in which market data is available, regardless of the trading schedule. The only thing that trading schedule controls is the time interval when the onBookSnapshot() method is invoked. If you don't see the indicator values before the trading schedule starts, the problem is in the indicator itself. The most likely explanation is that your indicator needs a history of market data which spans over the trading interval. For example, if you record from 9am, and the indicator needs 60 minutes of data to calculate its values, the first calculated indicator value would be at 10am. If you post your indicator code, perhaps I can spot a problem.

E.


On Tue, Oct 7, 2014 at 1:34 AM, Ali Farahani <***@gmail.com> wrote:
Hello Eugene,

I am using the Trading Schedule of:

TradingSchedule tradingSchedule = new TradingSchedule("10:05", "15:25", "America/New_York");

The indicator I am using (Force) only becomes available starting at 10:05. I am trying to also monitor Force between 9:30 and 10:05, so I changed the Trading Schedule (in StrategyES) and added the following exclusion:

TradingSchedule tradingSchedule = new TradingSchedule("09:30", "15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");

So I am getting the "Exclusion period must be within trading period in trading schedule." message (from TradingSchedule).

Other than modifying the TradingSchedule class OR using 9:31 instead of 9:30 in the exclusion statement, is there a better way of accomplishing this objective?

Kind regards,

Ali
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 ***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Ali Farahani
2014-10-10 03:18:45 UTC
Permalink
Thank you, Eugene.
Post by Eugene Kononov
Yes, that would work, as well.
Hi Eugene,
Since "The indicators are calculated for the entire duration of the period
in which market data is available, regardless of the trading schedule. The
only thing that trading schedule controls is the time interval when the
onBookSnapshot() method is invoked.", does this mean that I could access
the value of the Indicator if I put it inside another method (of Strategy
class)? Before I did some work on this, I wanted to make sure it was doable.
Thanks you,
Ali
Post by Eugene Kononov
Yes, this will work, too.
Post by Ali Farahani
Eugene,
I am also trying another approach: I created the "monitoring" strategy
with 9:30 to 16:00 trading schedule. I created my trading strategy by
Extending the "monitoring" strategy and made its trading schedule from
10:05 to 15:25. Hopefully this makes sense and would work (without any
unintended consequences).
Thanks.
Ali
Post by Ali Farahani
This makes sense. Thanks for all your help.
Ali
Post by Eugene Kononov
Yeah, now I think I understand what you want. There is no built-in
mechanism for the functionality that you want. However, there is an easy
work around.
1. Create a copy of your trading strategy.
2. Change the trading interval to "09:30", "15:25".
3. In the onBookSnapshot() method, leave everything as is, but remove
(or comment out) the order placing code, which is the goLong(), goShort(),
and goFlat() methods.
As a result, this would be your "monitoring" strategy. It would
calclulate the indicator values, but would never trade.
Post by Ali Farahani
Eugene,
The indicator values are calculated correctly by JBT as you have
described here (regardless of the trading schedule). Maybe my
misunderstanding is related to onBookSnapshot(). You had mentioned that
"... The only thing that trading schedule controls is the time interval
when the onBookSnapshot() method is invoked." I think I now understand the
disconnect. The logic I had expected to execute is currently inside
onBookSnapshot(); no wonder it only got executed after the start of the
trading schedule. I am simply trying to monitor the value of the force
before the start of the trading schedule. Any suggestions on which of the
Strategy methods I should override to have this code run (similar to how
onBookSnapshot() runs)?
Thank you again for your time.
Ali
Post by Eugene Kononov
Yeah, this looks perfectly fine, Ali. Please post a chart so that we
can see the original problem where the indicator values are not calculated
until the start of the trading schedule.
Post by Ali Farahani
Hello Eugene,
public class Force extends Indicator {
private final double fastMultiplier, slowMultiplier;
private double fastBal, slowBal, fastPrice, slowPrice;
private final double scaleFactor;
public Force(int fastPeriod, int slowPeriod, int scaleFactor) {
super(fastPeriod, slowPeriod, scaleFactor);
fastMultiplier = 2.0 / (fastPeriod + 1.0);
slowMultiplier = 2.0 / (slowPeriod + 1.0);
this.scaleFactor = scaleFactor;
}
@Override
public void calculate() {
MarketSnapshot snapshot = marketBook.getSnapshot();
// balance
double balance = snapshot.getBalance();
fastBal += (balance - fastBal) * fastMultiplier;
slowBal += (balance - slowBal) * slowMultiplier;
double balanceVelocity = fastBal - slowBal;
// price
double price = snapshot.getPrice();
fastPrice += (price - fastPrice) * fastMultiplier;
slowPrice += (price - slowPrice) * slowMultiplier;
double priceVelocity = fastPrice - slowPrice;
// force
value = balanceVelocity - scaleFactor * priceVelocity;
}
Thanks again,
Ali
Post by Gmail
Hi Eugene,
Thanks for the clarification. I'm not by my PC right now, I'll
send you the Force code later today. The code is a simple combination of
BalanceVelocity and PriceVelocity. I combined them into a Force Indicator
to be able to view the curve on the chart.
Many thanks,
Ali
Hi Ali,
The indicators are calculated for the entire duration of the
period in which market data is available, regardless of the trading
schedule. The only thing that trading schedule controls is the time
interval when the onBookSnapshot() method is invoked. If you don't see the
indicator values before the trading schedule starts, the problem is in the
indicator itself. The most likely explanation is that your indicator needs
a history of market data which spans over the trading interval. For
example, if you record from 9am, and the indicator needs 60 minutes of data
to calculate its values, the first calculated indicator value would be at
10am. If you post your indicator code, perhaps I can spot a problem.
E.
Post by Ali Farahani
Hello Eugene,
TradingSchedule tradingSchedule = new TradingSchedule("10:05",
"15:25", "America/New_York");
The indicator I am using (Force) only becomes available starting
at 10:05. I am trying to also monitor Force between 9:30 and 10:05, so I
changed the Trading Schedule (in StrategyES) and added the following
TradingSchedule tradingSchedule = new TradingSchedule("09:30",
"15:25", "America/New_York");
tradingSchedule.setExclusion("09:30", "10:05");
So I am getting the "Exclusion period must be within trading
period in trading schedule." message (from TradingSchedule).
Other than modifying the TradingSchedule class OR using 9:31
instead of 9:30 in the exclusion statement, is there a better way of
accomplishing this objective?
Kind regards,
Ali
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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,
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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
<javascript:>.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
--
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 jbooktrader+***@googlegroups.com.
To post to this group, send email to ***@googlegroups.com.
Visit this group at http://groups.google.com/group/jbooktrader.
For more options, visit https://groups.google.com/d/optout.
Loading...