package org.apache.activemq.book.ch2.portfolio;
import java.util.Hashtable;
import java.util.Map;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMapMessage;
public class Publisher {
protected int MAX_DELTA_PERCENT = 1;
protected Map<String, Double> LAST_PRICES = new Hashtable<String, Double>();
protected static int count = 10;
protected static int total;
protected static String brokerURL = "tcp://localhost:61616";
protected static transient ConnectionFactory factory;
protected transient Connection connection;
protected transient Session session;
protected transient MessageProducer producer;
public Publisher() throws JMSException {
factory = new ActiveMQConnectionFactory(brokerURL);
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
producer = session.createProducer(null);
}
public void close() throws JMSException {
if (connection != null) {
connection.close();
}
}
public static void main(String[] args) throws JMSException {
Publisher publisher = new Publisher();
while (total < 1000) {
for (int i = 0; i < count; i++) {
publisher.sendMessage(args);
}
total += count;
System.out.println("Published '" + count + "' of '" + total + "' price messages");
try {
Thread.sleep(1000);
} catch (InterruptedException x) {
}
}
publisher.close();
}
protected void sendMessage(String[] stocks) throws JMSException {
int idx = 0;
while (true) {
idx = (int)Math.round(stocks.length * Math.random());
if (idx < stocks.length) {
break;
}
}
String stock = stocks[idx];
Destination destination = session.createTopic("STOCKS." + stock);
Message message = createStockMessage(stock, session);
System.out.println("Sending: " + ((ActiveMQMapMessage)message).getContentMap() + " on destination: " + destination);
producer.send(destination, message);
}
protected Message createStockMessage(String stock, Session session) throws JMSException {
Double value = LAST_PRICES.get(stock);
if (value == null) {
value = new Double(Math.random() * 100);
}
// lets mutate the value by some percentage
double oldPrice = value.doubleValue();
value = new Double(mutatePrice(oldPrice));
LAST_PRICES.put(stock, value);
double price = value.doubleValue();
double offer = price * 1.001;
boolean up = (price > oldPrice);
MapMessage message = session.createMapMessage();
message.setString("stock", stock);
message.setDouble("price", price);
message.setDouble("offer", offer);
message.setBoolean("up", up);
return message;
}
protected double mutatePrice(double price) {
double percentChange = (2 * Math.random() * MAX_DELTA_PERCENT) - MAX_DELTA_PERCENT;
return price * (100 + percentChange) / 100;
}
}
package org.apache.activemq.book.ch2.portfolio;
import javax.jms.Connection;
public class Consumer {
private static String brokerURL = "tcp://localhost:61616";
private static transient ConnectionFactory factory;
private transient Connection connection;
private transient Session session;
public Consumer() throws JMSException {
factory = new ActiveMQConnectionFactory(brokerURL);
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
}
public void close() throws JMSException {
if (connection != null) {
connection.close();
}
}
public static void main(String[] args) throws JMSException {
Consumer consumer = new Consumer();
for (String stock : args) {
Destination destination = consumer.getSession().createTopic("STOCKS." + stock);
MessageConsumer messageConsumer = consumer.getSession().createConsumer(destination);
messageConsumer.setMessageListener(new Listener());
}
}
public Session getSession() {
return session;
}
}
package org.apache.activemq.book.ch2.portfolio;
import java.text.DecimalFormat;
public class Listener implements MessageListener {
public void onMessage(Message message) {
try {
MapMessage map = (MapMessage)message;
String stock = map.getString("stock");
double price = map.getDouble("price");
double offer = map.getDouble("offer");
boolean up = map.getBoolean("up");
DecimalFormat df = new DecimalFormat( "#,###,###,##0.00" );
System.out.println(stock + "\t" + df.format(price) + "\t" + df.format(offer) + "\t" + (up?"up":"down"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
在金融市场中,股票市场的预测和投资组合选择是投资者和金融分析师关注的核心问题。这篇由Huang和Jane在2009年发表的文章“基于ARX、灰色系统和粗集理论的混合模型用于股票市场预测与投资组合选择”提出了一个新的...
PCA(主成分分析)在股票投资组合管理中的应用 PCA是一种多变量分析方法,其主要目的是在具有大量相互关联变量的数据集中降低维度,同时最大化线性组合的方差。这种方法适用于观察值之间没有分组、变量没有被分成y...
Node.js,Backbone,Gulp和Browserify Boilerplate应用程序。 该应用程序旨在成为使用Express和Backbone启动Node.js项目的样板。 要运行,只需运行“ npm install”和“ bower install”(用于引导程序依赖项),...
在本文“Mean-Risk portfolio optimization with prior PCA-based stock selection”中,作者Cristinca Fulga和Silvia Dedu提出了一种集成的投资组合选择方法,该方法结合了风险估计和均值风险框架下的优化。...
股票买卖最佳时机leetcode 50 加元金融(问题集 8 webtrack 2020) 描述: C$50 Finance,一个网络应用程序,您可以通过它管理股票投资组合。 该工具允许您检查真实股票、实际价格和投资组合价值,它还可以让您通过...
"stock-portfolio" 是一个专为此目的设计的应用程序,它允许用户实时监控其股票投资组合的历史表现。这个应用程序的核心是利用JavaScript编程语言,这使得它可以在Web浏览器上无缝运行,为用户提供方便快捷的方式来...
stock_portfolio [FLAGS] [OPTIONS] --stocks FLAGS: -d, --desc Used with order by option to sort in descending order -h, --help Prints help information -g, --show-groupby Show quantities and ...
语言:English (United States) 实时跟踪多个投资组合。 您还将获得有关每种股票的深入信息。 股票行情,多个监视列表。 多股票投资组合股票投资组合旨在通过简单的漂亮界面从您喜欢的chrome浏览器中单击来跟踪多个...
投资组合股票投资组合跟踪器作为Web应用程序。 实时跟踪您的投资并查看其性能。 注册并登录您的帐户添加,编辑和删除您的库存查看您的投资组合表现演示版内置Python-核心程式设计语言Django-后端引导程序-前端...
股票投资组合应用 网络应用程序,允许用户检索美国股票价格并通过其累计价值跟踪股票投资组合 部署在: : 组合页面: : 视频演示功能(单击图片): 特征 用户可以通过简单地输入相关的代码来搜索他们选择的...
Java代码 JStock is a free stock market software for 26 countries. It provides Stock watchlist, Intraday stock price snapshot, Stock indicator editor, Stock indicator scanner and Portfolio management.
名称:RMI BrokerTool ... 完整实现所有功能,包括stock 和 portfolio。 MVC范式,RMI带回调,客户端同步刷新。 内容:src文件夹 -- 所有源代码 server.bat -- 服务端 client.bat -- 客户端
投资组合经理 意图 建立一个可以跟踪并提供有关个人或家庭财务利益的见解的投资组合经理 ... (venv) userid@host portfoliomanager % pip install -r requirements.txt 设定伺服器 (venv) userid@host por
股票投资组合应用一个股票投资组合应用程序,您可以在其中管理您的股票投资组合。 您可以通过iexcloud.io提供的集成API平台轻松搜索股票行情。 您可以根据自己的喜好轻松添加,编辑或删除股票行情。...
#Stock Porfolio-效果跟踪器 ##目标为用户的股票投资组合创建一个实用的性能跟踪器。 跟踪器将使用户能够登录,获取有关当前和潜在库存头寸的实时更新。 用户将能够输入股票报价器来获得当前的市场报价,以及使用户...
本项目“automatic-stock-portfolio-generator”就是利用Python实现的一个功能,它根据用户的风险承受能力、投资期限和投资金额来智能生成个性化的股票投资组合。 首先,我们要理解投资组合的概念。投资组合是投资...
本地股票投资组合应用背景如今,对于股票投资者而言,您始终拥有来自多个经纪人的多个帐户。 出于不同原因而分离投资组合是有益的。 但是,您可能仍希望在中心位置查看完整投资的概况,以便可以获取投资的实时和历史...
明智地通过机器学习+金融进行投资 InVisement使用机器学习和资产定价学科为所有人提供对冲基金服务。我们的使命是使过去只用于退款客户的对冲基金服务民主化。您将找到股票的内在估值和公允价格,关注最新的财经新闻...