Mike,

Yup...I saw earlier that start had become final so I changed it to setup and terminate which you commented should be extended. I also removed the @Start annotation and are not observing any duplicate activation.

I'll remove my broker setter too.

As I was mentioning to Eric earlier, I would really like to see some interfaces for TradeSystem....not just a base class. Maybe the number of interfaces prior to the last refactoring was a bit excessive, but having no interfaces I don't think is a good idea.

I just migrated to using the SeriesSourceToIterator... data util but that seems not to have fixed my earlier problem of onCandle not being called. Didn't see this functionality so I wrote that iterator. There is so much functionality lying around AQ that I have no clue what it really does.

As to my trade system...you can essentially ignore any of the engine stuff...I think it would be a perfectly valid test if you simply commented out anything rule engine related in that system class and put in sysouts instead. I actually tried that already to see if any of the engine setup was causing the problem but I observe the same behavior when the class essentially does nothing. The onCandle method is still not being called. I was looking at all the different java contexts in the samples but couldn't figure out what would make a difference. Would it matter how I load the system? I use the SpringContextBuilder.build and pass a factory file and then call start on the context.

HC


Mike Kroutikov wrote:
Its most likely a context problem... I will get to it shortly. If you can provide a simpler reproduction, that would be helpful (i.e. maybe SampleTradeSystem with just few changes?).

Please, update from the head: TradeSystemBase has been changed slightly: rename your start()/stop() to onStart()/onStop().

minor thing: you can just use brokerService from the base class, no need to request it second time... unless you need it as a setter elsewhere....

And be careful with @Start annotation: AQ context will execute *all* methods annotated with @Start, even if one routes control to another. So when you switch to "onStart()", make sure you do not annotate it.

Thanks for using this, and especially for the choice to live dangerously! You comments, feedback, and contributions are very needed.

-Mike

On Jan 18, 2008 10:24 PM, Henry Canterburry < canterburry@gmail.com> wrote:
Mike...yes...I do live dangerously but it's because I see all the good
things you guys are cranking out and I don't want to miss out on the
latest. I am seeing however how it causes me headaches tho :-)

Yes, I am using the TradeSystemBase from simple and I primarily based my
strategy off of SampleTradeSystem:

@TradeSystem
public class RuleBaseTradeSystem extends TradeSystemBase {

   private String[] ruleFiles;
   private String[] flowFiles;
   private StatefulEngine engine;
   private String description;
   private String name;
   private String flowID;

   private Account account;
   @Inject
   private IStoreService storeService;

   private IBroker broker;

   @Inject(name="broker")
   public void setBroker(IBroker broker) {
       this.broker = broker;
   }

   @Start
   public void start() throws Exception {

       log.info ("start(): RuleBaseTradeSystem started...");

       subscribeToCandleStream(
               new InstrumentSpecification(new Symbol("^GSPC")),
               TimeFrame.TIMEFRAME_1_DAY );

       DecisionRequest request = new DecisionRequest();
       request.addRequestObject("account", account);
       request.addRequestObject("orders", new
NamedCollection<Order>("orders"));
       request.addRequestObject("constraints", new
NamedCollection<OrderConstraint>("constraints"));
       request.setRuleflowID(this.flowID);

       DecisionResponse response = engine.execute(request);
   }

   public void setAccount(Account account) {
       this.account = account;
   }

   public RuleBaseTradeSystem(String name,
           String description,
           String[] ruleFiles) throws Exception {

       this.name = name;
       this.description = description;
       this.ruleFiles = ruleFiles;
       this.engine =
RuleServiceFactory.getInstance ().newStatefulEngine(ruleFiles);
   }

   public RuleBaseTradeSystem(String name,
           String description,
           String[] ruleFiles,
           String[] ruleFlowFiles,
           String flowID) throws Exception {

       this.name = name;
       this.description = description;
       this.ruleFiles = ruleFiles;
       this.flowFiles = ruleFlowFiles;
       this.engine =
RuleServiceFactory.getInstance().newStatefulEngine(ruleFiles,
ruleFlowFiles);
       this.flowID = flowID;
   }

   public String getDescription() {
       return description;
   }

   public String getName() {
       return name;
   }


   @Override
   public void onCandle(Candle candle) throws Exception {
       this.engine.onCandle(candle);
   }


   @Override
   public void onQuote(Quote quote) throws Exception {
       this.engine.onQuote(quote);
   }



   @Override
   public void stop() {
       super.stop();
       destroy();
   }

   public void destroy(){
       this.engine.destroy ();
       this.engine = null;
   }



}

Mike Kroutikov wrote:
> Henry, you like to live dangerously :). This stuff is 1 day old. Not
> even discussed/approved.
>
> Are you using base class for your TS? If yes, which one? Did you just
> re-worked "SampleTradeSystem" ?
>
> -Mike
>
> On Jan 18, 2008 4:04 PM, Henry Canterburry < canterburry@gmail.com
> <mailto:canterburry@gmail.com>> wrote:
>
>     I have refactored my working back testing strategy into the new
>     HEAD TradeSystem implementation. I looked at the SampleTradeSystem
>     and configuration to derive this.
>
>     I have created a new DaoCandleIteratatorSource to pull quotes from
>     the DB and "stream" them. This seems to be working, I see data
>     being passed from my tables when I debug. The @Start method in my
>     strategy is called, however, the onCandle method in my strategy
>     isn't being called at all even though the context iterates over my
>     DaoCandeIteratorSource and pulls Candles.
>
>     I do have this statement in my start():
>
>         subscribeToCandleStream(
>                     new InstrumentSpecification(new Symbol("^GSPC")),
>                     TimeFrame.TIMEFRAME_1_DAY);
>
>     Any ideas?
>
>     Thanks
>     HC
>
>     Here is my configuration file (I also have a stand alone strategy
>     config file with just my strategy defined in it):
>     <?xml version="1.0" encoding="UTF-8"?>
>     <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
>     " http://www.springframework.org/dtd/spring-beans-2.0.dtd"
>     <http://www.springframework.org/dtd/spring-beans-2.0.dtd >>
>     <beans>
>
>
>         <bean id="broker" class="org.activequant.broker2.MockBroker" />
>         <bean id="reportingService"
>     class=" org.activequant.container.report.MockReportingService" />
>         <bean id="storeService"
>     class="org.activequant.util.store.MockStore" />
>
>         <!--  DATA ACCESS -->
>         <bean
>     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>             <property name="locations">
>                 <list>
>
>     <value>classpath:data/database/database.properties</value>
>
>     <value>classpath:application/backtest/exits/config.properties</value>
>                 </list>
>             </property>
>         </bean>
>         <import resource="classpath:dao/hibernate/dao-hibernate.xml"/>
>         <bean id="candleSeriesSource"
>     class="org.activequant.data.retrieval.integration.series.DaoCandleIteratorSource">
>             <constructor-arg ref="candleDao"/>
>         </bean>
>         <!--  DATA ACCESS END -->
>
>         <bean id="default"
>     class="org.activequant.container.context.DefaultBeanList">
>             <constructor-arg ref="broker" />
>         </bean>
>
>         <!-- REPLAY -->
>         <bean id="replayService"
>     class="org.activequant.data.util.MarketDataReplayService" >
>             <property name="candleSeriesDataSource"
>     ref="candleSeriesSource" />
>             <property name="startTimeStamp" value="20071205"/>
>             <property name="endTimeStamp" value="20071211"/>
>         </bean>
>         <bean id="runner"
>     class="org.activequant.container.context.BacktestRunner">
>             <constructor-arg ref="replayService" />
>         </bean>
>         <!-- REPLAY END -->
>
>         <!-- ACCOUNT -->
>         <bean id="accountDao"
>     class="org.activequant.dao.mock.MockAccountDao " />
>         <bean id="accountLookup"
>     class="org.activequant.util.spring.AccountLookup">
>             <property name="accountDao" ref="accountDao"/>
>             <property name="accountId" value="1"/>
>         </bean>
>         <!--  ACCOUNT END -->
>
>         <bean id="replayService.candleSubscriptionSource "
>     class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
>     </beans>
>
>     _______________________________________________
>     ccapi mailing list
>     ccapi@activestocks.de <mailto:ccapi@activestocks.de>