/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.core.ats.engines; import org.eclipsetrader.core.instruments.ISecurity; import org.eclipsetrader.core.trading.IAccount; import org.eclipsetrader.core.trading.IBroker; import org.eclipsetrader.core.trading.IOrderMonitor; import org.eclipsetrader.core.trading.IOrderSide; import org.eclipsetrader.core.trading.IOrderType; import org.eclipsetrader.core.trading.Order; import org.mozilla.javascript.Context; import org.mozilla.javascript.ScriptableObject; public abstract class BaseOrderFunction extends ScriptableObject { private static final long serialVersionUID = 7916839001932000909L; public static final int Buy = 0; public static final int Sell = 1; public static final int Limit = 0; public static final int Market = 1; public static final String PROPERTY_ACCOUNT = "account"; public static final String PROPERTY_BROKER = "broker"; public static final String PROPERTY_INSTRUMENT = "instrument"; private IBroker broker; private IAccount account; private ISecurity instrument; protected IOrderType type; protected IOrderSide side; protected long quantity; protected Double price; protected String text; private IOrderMonitor monitor; public BaseOrderFunction() { } public BaseOrderFunction(IBroker broker, IAccount account, ISecurity instrument) { this.broker = broker; this.account = account; this.instrument = instrument; } public double jsGet_type() { if (type == IOrderType.Limit) { return Limit; } if (type == IOrderType.Market) { return Market; } return -1; } public void jsSet_type(Object arg) { switch ((int) Context.toNumber(arg)) { case Limit: type = IOrderType.Limit; break; case Market: type = IOrderType.Market; break; } } public double jsGet_side() { if (side == IOrderSide.Buy) { return Buy; } if (side == IOrderSide.Sell) { return Sell; } return -1; } public void jsSet_side(Object arg) { switch ((int) Context.toNumber(arg)) { case Buy: side = IOrderSide.Buy; break; case Sell: side = IOrderSide.Sell; break; } } public double jsGet_quantity() { return quantity; } public void jsSet_quantity(Object arg) { quantity = (int) Context.toNumber(arg); } public double jsGet_price() { return price; } public void jsSet_price(Object arg) { price = Context.toNumber(arg); } public String jsGet_text() { return text; } public void jsSet_text(Object arg) { text = Context.toString(arg); } public Object jsFunction_send() throws Exception { Order order = new Order(account, type, side, instrument, quantity, price); order.setReference(text); monitor = broker.prepareOrder(order); monitor.submit(); return null; } public Object jsFunction_cancel() throws Exception { if (monitor != null) { monitor.cancel(); } return null; } }