Re: keyboard shortcuts for trading
Posted: Mon Apr 06, 2020 8:22 pm
+1
A forum for all Bookmap discussions
http://bookmap.com/forum/
AndreyR wrote: ↑Thu Aug 08, 2019 5:49 amHi all,
you may want to implement these features yourself.
Use Simplified interface, create a KeyEventDispatcher object and assign keys to desired actions.
Here's an example:
Code: Select all
package com.bookmap.api.simple.simplified; import java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.List; import velox.api.layer1.annotations.Layer1ApiVersion; import velox.api.layer1.annotations.Layer1ApiVersionValue; import velox.api.layer1.annotations.Layer1SimpleAttachable; import velox.api.layer1.annotations.Layer1StrategyName; import velox.api.layer1.annotations.Layer1TradingStrategy; import velox.api.layer1.common.Log; import velox.api.layer1.data.ExecutionInfo; import velox.api.layer1.data.InstrumentInfo; import velox.api.layer1.data.OrderInfoUpdate; import velox.api.layer1.simplified.Api; import velox.api.layer1.simplified.CustomModule; import velox.api.layer1.simplified.OrdersListener; import velox.api.layer1.simplified.InitialState; import velox.api.layer1.data.OrderSendParameters; import velox.api.layer1.data.SimpleOrderSendParametersBuilder; @Layer1SimpleAttachable @Layer1StrategyName("Send Order By Key") @Layer1ApiVersion(Layer1ApiVersionValue.VERSION1) @Layer1TradingStrategy public class SendOrderByKey implements CustomModule, OrdersListener { Api api; private String alias; private KeyEventDispatcher customDispatcher; List<OrderInfoUpdate> list = new ArrayList<>(); String orderAliasTarget; String orderAliasStop; int updateCount; @Override public void initialize(String alias, InstrumentInfo info, Api api, InitialState initialState) { this.alias = alias; this.api = api; listenForKey(); } @Override public void stop() { KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(customDispatcher); } private void sendMarketOrber (boolean isBuy ) { if (isBuy) { SimpleOrderSendParametersBuilder shortOrderSendParameters = new SimpleOrderSendParametersBuilder (alias, false, 1); shortOrderSendParameters.setSize(10); shortOrderSendParameters.setBuy(isBuy); OrderSendParameters shortOrder = shortOrderSendParameters.build(); api.sendOrder(shortOrder); } else { SimpleOrderSendParametersBuilder OrderSendParameters = new SimpleOrderSendParametersBuilder (alias, false, 1); OrderSendParameters.setLimitPrice(6300); OrderSendParameters.setSize(10); OrderSendParameters.setBuy(isBuy); OrderSendParameters.setTakeProfitOffset(5); OrderSendParameters.setStopLossOffset(6); OrderSendParameters.setStopLossClientId(isBuy?"longStop":"shortStop"); OrderSendParameters.setTakeProfitClientId(isBuy?"longTarget":"shortTarget"); OrderSendParameters orderParam = OrderSendParameters.build(); orderAliasStop = OrderSendParameters.getStopLossClientId(); orderAliasTarget= OrderSendParameters.getTakeProfitClientId(); api.sendOrder(orderParam); } } private void listenForKey() { customDispatcher = new KeyEventDispatcher() { @Override public boolean dispatchKeyEvent(KeyEvent e) { switch (e.getID()) { case KeyEvent.KEY_PRESSED: if (e.getKeyChar() == 'b') { sendMarketOrber(true); } if (e.getKeyChar() == 's') { sendMarketOrber(false); } break; case KeyEvent.KEY_RELEASED: break; case KeyEvent.KEY_TYPED: break; } return false; } }; KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(customDispatcher); } @Override public void onOrderUpdated(OrderInfoUpdate orderInfoUpdate) { list.add(orderInfoUpdate); Log.info("UPDATE " + updateCount++); } @Override public void onOrderExecuted(ExecutionInfo executionInfo) { // TODO Auto-generated method stub } }