📄 feed.java
字号:
* @see net.sourceforge.eclipsetrader.core.IFeed#start() */ public void start() { if (!running) { streams.clear(); pendingStreams.clear(); client.addListener(clientListener); try { client.login(15 * 1000); for (Iterator iter = subscribedSecurities.iterator(); iter.hasNext(); ) requestTickStream((Security)iter.next()); } catch(Exception e) { log.error(e, e); } running = true; } } /* (non-Javadoc) * @see net.sourceforge.eclipsetrader.core.IFeed#stop() */ public void stop() { if (running && client.isLoggedIn()) { client.removeListener(clientListener); try { for (Iterator iter = subscribedSecurities.iterator(); iter.hasNext(); ) cancelTickStream((Security)iter.next()); } catch(Exception e) { log.error(e, e); } streams.clear(); pendingStreams.clear(); running = false; } } /* (non-Javadoc) * @see net.sourceforge.eclipsetrader.core.IFeed#snapshot() */ public void snapshot() { SimpleDateFormat usDateTimeParser = new SimpleDateFormat("MM/dd/yyyy h:mma"); SimpleDateFormat usDateParser = new SimpleDateFormat("MM/dd/yyyy"); SimpleDateFormat usTimeParser = new SimpleDateFormat("h:mma"); NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); // Builds the url for quotes download StringBuffer url = new StringBuffer("http://quote.yahoo.com/download/javasoft.beans?symbols="); for (Iterator iter = subscribedSecurities.iterator(); iter.hasNext();) { Security security = (Security)iter.next(); url = url.append(security.getCode() + "+"); } if (url.charAt(url.length() - 1) == '+') url.deleteCharAt(url.length() - 1); url.append("&format=sl1d1t1c1ohgvbap"); // Read the last prices String line = ""; try { HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); IPreferenceStore store = CorePlugin.getDefault().getPreferenceStore(); if (store.getBoolean(CorePlugin.PREFS_ENABLE_HTTP_PROXY)) { client.getHostConfiguration().setProxy(store.getString(CorePlugin.PREFS_PROXY_HOST_ADDRESS), store.getInt(CorePlugin.PREFS_PROXY_PORT_ADDRESS)); if (store.getBoolean(CorePlugin.PREFS_ENABLE_PROXY_AUTHENTICATION)) client.getState().setProxyCredentials(AuthScope.ANY, new UsernamePasswordCredentials(store.getString(CorePlugin.PREFS_PROXY_USER), store.getString(CorePlugin.PREFS_PROXY_PASSWORD))); } HttpMethod method = new GetMethod(url.toString()); method.setFollowRedirects(true); client.executeMethod(method); BufferedReader in = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream())); while ((line = in.readLine()) != null) { String[] item = line.split(","); if (line.indexOf(";") != -1) item = line.split(";"); Double open = null, high = null, low = null, close = null; Quote quote = new Quote(); // 2 = Date // 3 = Time try { GregorianCalendar c = new GregorianCalendar(TimeZone.getTimeZone("EST"), Locale.US); usDateTimeParser.setTimeZone(c.getTimeZone()); usDateParser.setTimeZone(c.getTimeZone()); usTimeParser.setTimeZone(c.getTimeZone()); String date = stripQuotes(item[2]); if (date.indexOf("N/A") != -1) date = usDateParser.format(Calendar.getInstance().getTime()); String time = stripQuotes(item[3]); if (time.indexOf("N/A") != -1) time = usTimeParser.format(Calendar.getInstance().getTime()); c.setTime(usDateTimeParser.parse(date + " " + time)); c.setTimeZone(TimeZone.getDefault()); quote.setDate(c.getTime()); } catch (Exception e) { System.out.println(e.getMessage() + ": " + line); } // 1 = Last price or N/A if (item[1].equalsIgnoreCase("N/A") == false) quote.setLast(numberFormat.parse(item[1]).doubleValue()); // 4 = Change // 5 = Open if (item[5].equalsIgnoreCase("N/A") == false) open = new Double(numberFormat.parse(item[5]).doubleValue()); // 6 = Maximum if (item[6].equalsIgnoreCase("N/A") == false) high = new Double(numberFormat.parse(item[6]).doubleValue()); // 7 = Minimum if (item[7].equalsIgnoreCase("N/A") == false) low = new Double(numberFormat.parse(item[7]).doubleValue()); // 8 = Volume if (item[8].equalsIgnoreCase("N/A") == false) quote.setVolume(numberFormat.parse(item[8]).intValue()); // 9 = Bid Price if (item[9].equalsIgnoreCase("N/A") == false) quote.setBid(numberFormat.parse(item[9]).doubleValue()); // 10 = Ask Price if (item[10].equalsIgnoreCase("N/A") == false) quote.setAsk(numberFormat.parse(item[10]).doubleValue()); // 11 = Close Price if (item[11].equalsIgnoreCase("N/A") == false) close = new Double(numberFormat.parse(item[11]).doubleValue()); // 0 = Code String symbol = stripQuotes(item[0]); for (Iterator iter = subscribedSecurities.iterator(); iter.hasNext();) { Security security = (Security) iter.next(); if (symbol.equalsIgnoreCase(security.getCode())) security.setQuote(quote, open, high, low, close); } } in.close(); } catch (Exception e) { System.out.println(e.getMessage() + ": " + line); e.printStackTrace(); } } private String stripQuotes(String s) { if (s.startsWith("\"")) s = s.substring(1); if (s.endsWith("\"")) s = s.substring(0, s.length() - 1); return s; } void requestTickStream(Security security) throws OTException { if (!client.isLoggedIn()) pendingStreams.add(security); else { String symbol = security.getQuoteFeed().getSymbol(); if (symbol == null || symbol.length() == 0) symbol = security.getCode(); String exchange = security.getQuoteFeed().getExchange(); if (exchange == null || exchange.length() == 0) exchange = "Q"; int id = client.requestEquityInit(new OTDataEntity(exchange, symbol)); streams.put(String.valueOf(id), security); log.debug(String.valueOf(id) + " / Request Equity Init " + security); id = client.requestTodaysOHL(new OTDataEntity(exchange, symbol)); streams.put(String.valueOf(id), security); log.debug(String.valueOf(id) + " / Request Today's OHL " + security); id = client.requestTickStream(new OTDataEntity(exchange, symbol), OTConstants.OT_TICK_TYPE_LEVEL1); streams.put(String.valueOf(id), security); log.debug(String.valueOf(id) + " / Request Tick stream " + security); } } public void cancelTickStream(Security security) throws OTException { String[] keys = (String[])streams.keySet().toArray(new String[0]); for (int i = 0; i < keys.length; i++) { if (security.equals(streams.get(keys[i]))) { client.cancelTickStream(Integer.parseInt(keys[i])); streams.remove(keys[i]); log.debug(String.valueOf(keys[i]) + " / Request cancel Tick stream " + security); } } pendingStreams.remove(security); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -