【acuistock】acuistock启动
自用股票行情软件
开发工具:Netbeans 8.2
开发平台:Netbeans Platform
数据源:面向A股市场,支持多数据源(同一时间只能选择一个数据源),首先支持的是免费的Tushare
中国股票市场是由三部分组成:A股市场、B股市场和H股市场。
A股
也称为人民币普通股票、流通股、社会公众股、普通股。是指那些在中国大陆注册、在中国大陆上市的普通股票。以人民币认购和交易。
B股
也称为人民币特种股票。是指那些在中国大陆注册、在中国大陆上市的特种股票。以人民币标明面值,只能以外币认购和交易。其中,沪市B股需要用美金才能交易;深市B股必须用港币交易。
H股
也称为国企股,是指国有企业在香港 (Hong Kong) 上市的股票。
通过证券代码判断证券属于上证还是深证。
前面是000的,或者002还有300就是属于深交所的,前面是主板,后面是中小企业板.300的是属于创业板.
前面是600,或者是601的就是上交所的证券.
切换数据源时会对现有的图表造成影响,简单的方法是重新打开现有的ChartFrame;复杂的方法是让ChartFrame监听数据源改变事件并相应处理

new LayoutManager() {
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public void layoutContainer(Container parent) {
// 计算客户区域
int right = (int) ChartData.dataOffset.right; // 右方数据偏移
int bottom = (int) ChartData.dataOffset.bottom; // 下方数据偏移
Insets insets = parent.getInsets(); // 父控件的内嵌矩形(ChartFrame)
int w = parent.getWidth() - insets.left - insets.right - right;
int h = parent.getHeight() - insets.top - insets.bottom - bottom;
// 设置四个子控件所占区域
// sPane与grid占据的区域一致
grid.setBounds(insets.left, insets.top, w, h);
dateAxis.setBounds(insets.left, insets.top + h, w, bottom);
priceAxis.setBounds(insets.left + w, insets.top, right, insets.bottom + h);
sPane.setBounds(insets.left, insets.top, w, h);
}
}
- grid/sPane区域的宽度和高度都会随窗体大小的变化而变化
- dateAxis的高度固定,宽度随窗体宽度的变化而变化
- priceAxis的宽度固定,高度随窗体高度的变化而变化

new LayoutManager() {
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public void layoutContainer(Container parent) {
// 计算客户区域
Insets insets = parent.getInsets();
int x = insets.left;
int y = insets.top;
int w = parent.getWidth() - insets.left - insets.right;
int h = parent.getHeight() - insets.top - insets.bottom;
// 指标面板的高度是固定的,图表高度是客户区高度去掉指标高度剩下的部分
int indicatorsHeight = indicatorsPanel.getPanelHeight();
int chartHeight = h - indicatorsHeight;
indicatorsPanel.setBounds(x, y + chartHeight, w, indicatorsHeight);
chartPanel.setBounds(x, y, w, chartHeight);
Point dp = new Point(0, 50);
Point p = label.getLocation();
if (!dp.equals(p)) {
label.setBounds(p.x, p.y, width + 2, height * lines + 2);
} else {
label.setBounds(dp.x, dp.y, width + 2, height * lines + 2);
}
}
}

new LayoutManager() {
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public void layoutContainer(Container parent) {
int width = parent.getWidth();
int height = parent.getHeight();
stockInfo.setBounds(0, 0, width, stockInfo.getPreferredSize().height);
annotationPanel.setBounds(0, 2, width - 4, height - 4);
overlayToolboxes.setLocation(0, stockInfo.getPreferredSize().height + 1);
}
}
- 采用富途FTAPI
- 面向A股市场
- 是否需要保留本地缓存?