/* ===========================================================
* TradeManager : a application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.ui.tradingday;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;
import org.trade.core.util.TradingCalendar;
import org.trade.core.valuetype.Date;
import org.trade.core.valuetype.ValueTypeException;
import org.trade.dictionary.valuetype.BarSize;
import org.trade.dictionary.valuetype.ChartDays;
import org.trade.persistent.dao.Contract;
import org.trade.persistent.dao.Tradestrategy;
import org.trade.ui.widget.ComboItem;
import org.trade.ui.widget.DecodeComboBoxRenderer;
/**
*/
public class FilterBackTestPane extends JPanel {
private static final long serialVersionUID = -4696247761711464150L;
private JComboBox<ComboItem> strategyBarSizeChartHistComboBox = null;
private JList<ComboItem> contractsHistList = null;
private JSpinner spinnerStart = new JSpinner();
private JSpinner spinnerEnd = new JSpinner();
private ComboItem comboItemAll = new ComboItem(null, "All");
private static final String DATEFORMAT = "MM/dd/yyyy";
public FilterBackTestPane(ZonedDateTime startDate, ZonedDateTime endDate,
List<Tradestrategy> strategyBarSizeChartHistItems, List<Tradestrategy> contractItems)
throws ValueTypeException {
Vector<ComboItem> items = new Vector<ComboItem>();
for (Tradestrategy item : strategyBarSizeChartHistItems) {
String label = item.getStrategy().getName() + " " + BarSize.newInstance(item.getBarSize()).getDisplayName()
+ " " + ChartDays.newInstance(item.getChartDays()).getDisplayName();
ComboItem comboItem = new ComboItem(item, label.trim());
items.add(comboItem);
}
DefaultListModel<ComboItem> listModel = new DefaultListModel<ComboItem>();
listModel.addElement(comboItemAll);
for (Tradestrategy item : contractItems) {
String label = item.getContract().getSymbol();
ComboItem comboItem = new ComboItem(item, label);
listModel.addElement(comboItem);
}
JLabel dateStartLabel = new JLabel("From Date: ");
dateStartLabel.setHorizontalAlignment(SwingConstants.RIGHT);
dateStartLabel.setHorizontalTextPosition(SwingConstants.RIGHT);
JLabel dateEndLabel = new JLabel("To Date: ");
dateEndLabel.setHorizontalAlignment(SwingConstants.RIGHT);
dateEndLabel.setHorizontalTextPosition(SwingConstants.RIGHT);
JLabel jLabel1 = new JLabel("Combinations: ");
jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT);
JLabel jLabel2 = new JLabel("Contracts: ");
jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel2.setHorizontalTextPosition(SwingConstants.RIGHT);
spinnerStart.setModel(new SpinnerDateModel());
JSpinner.DateEditor de = new JSpinner.DateEditor(spinnerStart, DATEFORMAT);
spinnerStart.setEditor(de);
spinnerStart.setValue((new Date(startDate)).getDate());
spinnerEnd.setModel(new SpinnerDateModel());
JSpinner.DateEditor de1 = new JSpinner.DateEditor(spinnerEnd, DATEFORMAT);
spinnerEnd.setEditor(de1);
spinnerEnd.setValue((new Date(endDate)).getDate());
strategyBarSizeChartHistComboBox = new JComboBox<ComboItem>(items);
strategyBarSizeChartHistComboBox.setRenderer(new DecodeComboBoxRenderer());
strategyBarSizeChartHistComboBox.setEditable(true);
contractsHistList = new JList<ComboItem>(listModel);
contractsHistList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
contractsHistList.setLayoutOrientation(JList.VERTICAL);
contractsHistList.setVisibleRowCount(-1);
contractsHistList.setCellRenderer(new DecodeComboBoxRenderer());
contractsHistList.setSelectedValue(comboItemAll, true);
JScrollPane listScroller = new JScrollPane(contractsHistList);
listScroller.setPreferredSize(new Dimension(50, 150));
GridBagLayout gridBagLayout1 = new GridBagLayout();
JPanel jPanel1 = new JPanel(gridBagLayout1);
this.setLayout(new BorderLayout());
jPanel1.add(dateStartLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 20, 5));
jPanel1.add(dateEndLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 20, 5));
jPanel1.add(jLabel1, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 20, 5));
jPanel1.add(jLabel2, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 20, 5));
jPanel1.add(spinnerStart, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST,
GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 20), 20, 5));
jPanel1.add(spinnerEnd, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST,
GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 20), 20, 5));
jPanel1.add(strategyBarSizeChartHistComboBox, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 20), 20, 5));
jPanel1.add(listScroller, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST,
GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 20), 20, 5));
this.add(jPanel1);
}
/**
* Method getSelectedStrategyBarSizeChartHist
*
* @return Tradestrategy
*/
public Tradestrategy getSelectedStrategyBarSizeChartHist() {
ComboItem comboItem = (ComboItem) strategyBarSizeChartHistComboBox.getSelectedItem();
if (null == comboItem)
return null;
Tradestrategy tradestrategy = ((Tradestrategy) comboItem.getValue());
return tradestrategy;
}
/**
* Method getSelectedContracts
*
* @return List<Contract>
*/
public List<Contract> getSelectedContracts() {
List<Contract> contracts = new ArrayList<Contract>(0);
List<ComboItem> comboItems = contractsHistList.getSelectedValuesList();
if (null == comboItems)
return contracts;
for (ComboItem item : comboItems) {
if (comboItemAll.equals(item))
return new ArrayList<Contract>(0);
Tradestrategy tradestrategy = (Tradestrategy) item.getValue();
contracts.add(tradestrategy.getContract());
}
return contracts;
}
/**
* Method getSelectedStartDate
*
* @return ZonedDateTime
*/
public ZonedDateTime getSelectedStartDate() {
ZonedDateTime startDate = TradingCalendar
.getZonedDateTimeFromMilli(((java.util.Date) spinnerStart.getValue()).getTime());
startDate = TradingCalendar.getDateAtTime(startDate, 0, 0, 0);
ZonedDateTime endDate = TradingCalendar
.getZonedDateTimeFromMilli(((java.util.Date) spinnerEnd.getValue()).getTime());
endDate = TradingCalendar.getDateAtTime(endDate, 23, 59, 59);
if (endDate.isBefore(startDate)) {
startDate = TradingCalendar.getDateAtTime(endDate, 0, 0, 0);
spinnerStart.setValue((new Date(startDate)).getDate());
}
return startDate;
}
/**
* Method getSelectedEndDate
*
* @return ZonedDateTime
*/
public ZonedDateTime getSelectedEndDate() {
ZonedDateTime startDate = TradingCalendar
.getZonedDateTimeFromMilli(((java.util.Date) spinnerStart.getValue()).getTime());
startDate = TradingCalendar.getDateAtTime(startDate, 0, 0, 0);
ZonedDateTime endDate = TradingCalendar
.getZonedDateTimeFromMilli(((java.util.Date) spinnerEnd.getValue()).getTime());
endDate = TradingCalendar.getDateAtTime(endDate, 23, 59, 59);
if (endDate.isBefore(startDate)) {
startDate = TradingCalendar.getDateAtTime(endDate, 0, 0, 0);
spinnerStart.setValue((new Date(startDate)).getDate());
}
return endDate;
}
}