⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw_kline.java

📁 java 写的股票技术分析;软件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        if(vector.size() > 0) {
            TradeTimeVO timeRange[] = Common.getTimeRange(code, ((MenuListener) (parent)).m_applet);
            int totalMin = TradeTimeVO.GetIndexFromTime(((MenuListener) (parent)).m_applet.m_iTime / 100, timeRange);
            int iLen = totalMin / 5;
            if(totalMin % 5 > 0)
                iLen++;
            dataList = new KLineData[iLen];
            int iCur = 0;
            for(int i = 0; i < iLen; i++) {
                int hhmm = TradeTimeVO.GetTimeFromIndex(i * 5 + 4, timeRange);
                long cTime = (long)((MenuListener) (parent)).m_applet.m_iDate * 10000L + (long)hhmm;
                if(iCur < vector.size()) {
                    data = (KLineData)vector.elementAt(iCur);
                    if(cTime == data.date) {
                        dataList[i] = data;
                        iCur++;
                        continue;
                    }
                }
                dataList[i] = new KLineData();
                dataList[i].date = cTime;
                if(i == 0) {
                    dataList[i].balancePrice = fPreClosePrice;
                    dataList[i].openPrice = dataList[i].highPrice = dataList[i].lowPrice = dataList[i].closePrice = fPreClosePrice;
                    dataList[i].reserveCount = 0;
                    dataList[i].totalAmount = 0L;
                    dataList[i].totalMoney = 0.0D;
                } else {
                    dataList[i].balancePrice = dataList[i - 1].balancePrice;
                    dataList[i].openPrice = dataList[i].highPrice = dataList[i].lowPrice = dataList[i].closePrice = dataList[i - 1].closePrice;
                    dataList[i].reserveCount = dataList[i - 1].reserveCount;
                    dataList[i].totalAmount = 0L;
                    dataList[i].totalMoney = 0.0D;
                }
            }

        }
        return dataList;
    }

    private void MakeWeek() {
        CodeTable codeTable = (CodeTable)((MenuListener) (parent)).m_applet.m_htProduct.get(m_product.sCode);
        Vector vector = new Vector();
        KLineData data = null;
        for(int i = 0; i < m_kData.length; i++) {
            boolean bNewWeek;
            if(data != null) {
                Calendar c1 = Calendar.getInstance();
                c1.set((int)data.date / 10000, ((int)data.date / 100) % 100 - 1, (int)data.date % 100);
                int iWeek1 = c1.get(7);
                Calendar c2 = Calendar.getInstance();
                c2.set((int)m_kData[i].date / 10000, ((int)m_kData[i].date / 100) % 100 - 1, (int)m_kData[i].date % 100);
                int iWeek2 = c2.get(7);
                if(iWeek1 >= iWeek2) {
                    bNewWeek = true;
                } else {
                    c1.add(5, 7);
                    if(c1.before(c2))
                        bNewWeek = true;
                    else
                        bNewWeek = false;
                }
            } else {
                bNewWeek = true;
            }
            if(bNewWeek) {
                if(data != null) {
                    if(data.totalAmount > 0L)
                        if(codeTable != null)
                            data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount / (double)codeTable.fUnit);
                        else
                            data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount);
                    vector.addElement(data);
                }
                data = new KLineData();
                data.closePrice = m_kData[i].closePrice;
                data.date = m_kData[i].date;
                data.highPrice = m_kData[i].highPrice;
                data.lowPrice = m_kData[i].lowPrice;
                data.openPrice = m_kData[i].openPrice;
                data.balancePrice = m_kData[i].balancePrice;
                data.totalAmount = m_kData[i].totalAmount;
                data.totalMoney = m_kData[i].totalMoney;
                data.reserveCount = m_kData[i].reserveCount;
            } else {
                data.date = m_kData[i].date;
                if(m_kData[i].highPrice > data.highPrice)
                    data.highPrice = m_kData[i].highPrice;
                if(m_kData[i].lowPrice < data.lowPrice)
                    data.lowPrice = m_kData[i].lowPrice;
                data.closePrice = m_kData[i].closePrice;
                data.balancePrice = m_kData[i].balancePrice;
                data.totalAmount += m_kData[i].totalAmount;
                data.totalMoney += m_kData[i].totalMoney;
                data.reserveCount = m_kData[i].reserveCount;
            }
        }

        if(data != null) {
            if(data.totalAmount > 0L)
                if(codeTable != null)
                    data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount / (double)codeTable.fUnit);
                else
                    data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount);
            vector.addElement(data);
        }
        m_kData = new KLineData[vector.size()];
        for(int i = 0; i < vector.size(); i++)
            m_kData[i] = (KLineData)vector.elementAt(i);

    }

    private void MakeMonth() {
        Vector vector = new Vector();
        KLineData data = null;
        int iCurMonth = -1;
        CodeTable codeTable = (CodeTable)((MenuListener) (parent)).m_applet.m_htProduct.get(m_product.sCode);
        for(int i = 0; i < m_kData.length; i++) {
            int iMonth = (int)m_kData[i].date / 100;
            if(iMonth != iCurMonth) {
                if(data != null) {
                    if(data.totalAmount > 0L)
                        if(codeTable != null)
                            data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount / (double)codeTable.fUnit);
                        else
                            data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount);
                    vector.addElement(data);
                }
                data = new KLineData();
                data.closePrice = m_kData[i].closePrice;
                data.highPrice = m_kData[i].highPrice;
                data.lowPrice = m_kData[i].lowPrice;
                data.openPrice = m_kData[i].openPrice;
                data.balancePrice = m_kData[i].balancePrice;
                data.totalAmount = m_kData[i].totalAmount;
                data.totalMoney = m_kData[i].totalMoney;
                data.reserveCount = m_kData[i].reserveCount;
                data.date = iMonth * 100;
                iCurMonth = iMonth;
            } else {
                if(m_kData[i].highPrice > data.highPrice)
                    data.highPrice = m_kData[i].highPrice;
                if(m_kData[i].lowPrice < data.lowPrice)
                    data.lowPrice = m_kData[i].lowPrice;
                data.closePrice = m_kData[i].closePrice;
                data.balancePrice = m_kData[i].balancePrice;
                data.totalAmount += m_kData[i].totalAmount;
                data.totalMoney += m_kData[i].totalMoney;
                data.reserveCount = m_kData[i].reserveCount;
            }
        }

        if(data != null) {
            if(data.totalAmount > 0L)
                if(codeTable != null)
                    data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount / (double)codeTable.fUnit);
                else
                    data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount);
            vector.addElement(data);
        }
        m_kData = new KLineData[vector.size()];
        for(int i = 0; i < vector.size(); i++)
            m_kData[i] = (KLineData)vector.elementAt(i);

    }

    private void MakeMinCycle(int iMin) {
        Vector vector = new Vector();
        KLineData data = null;
        long curDate = -1L;
        CodeTable codeTable = (CodeTable)((MenuListener) (parent)).m_applet.m_htProduct.get(m_product.sCode);
        for(int i = 0; i < m_kData.length; i++) {
            long date = GetCurrentDateTime(m_kData[i].date, iMin);
            if(date != curDate) {
                if(data != null) {
                    if(data.totalAmount > 0L)
                        if(codeTable != null)
                            data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount / (double)codeTable.fUnit);
                        else
                            data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount);
                    vector.addElement(data);
                }
                data = new KLineData();
                data.closePrice = m_kData[i].closePrice;
                data.highPrice = m_kData[i].highPrice;
                data.lowPrice = m_kData[i].lowPrice;
                data.openPrice = m_kData[i].openPrice;
                data.balancePrice = m_kData[i].balancePrice;
                data.totalAmount = m_kData[i].totalAmount;
                data.totalMoney = m_kData[i].totalMoney;
                data.reserveCount = m_kData[i].reserveCount;
                data.date = date;
                curDate = date;
            } else {
                if(m_kData[i].highPrice > data.highPrice)
                    data.highPrice = m_kData[i].highPrice;
                if(m_kData[i].lowPrice < data.lowPrice)
                    data.lowPrice = m_kData[i].lowPrice;
                data.closePrice = m_kData[i].closePrice;
                data.balancePrice = m_kData[i].balancePrice;
                data.totalAmount += m_kData[i].totalAmount;
                data.totalMoney += m_kData[i].totalMoney;
                data.reserveCount = m_kData[i].reserveCount;
            }
        }

        if(data != null) {
            if(data.totalAmount > 0L)
                if(codeTable != null)
                    data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount / (double)codeTable.fUnit);
                else
                    data.balancePrice = (float)(data.totalMoney / (double)data.totalAmount);
            vector.addElement(data);
        }
        m_kData = new KLineData[vector.size()];
        for(int i = 0; i < vector.size(); i++)
            m_kData[i] = (KLineData)vector.elementAt(i);

    }

    private long GetCurrentDateTime(long date, int iMin) {
        int iIndex = Common.GetTimeIndexFromTime((int)(date % 10000L), ((MenuListener) (parent)).m_applet.m_timeRange);
        iIndex = ((iIndex + 1) / iMin + 1) * iMin - 1;
        if(iIndex >= TradeTimeVO.GetTotalMinute(((MenuListener) (parent)).m_applet.m_timeRange))
            iIndex = TradeTimeVO.GetTotalMinute(((MenuListener) (parent)).m_applet.m_timeRange) - 1;
        int iTime = Common.GetTimeFromTimeIndex(iIndex, ((MenuListener) (parent)).m_applet.m_timeRange);
        return (date / 10000L) * 10000L + (long)iTime;
    }

    boolean KeyPressed(KeyEvent e) {
        int iKeyCode = e.getKeyCode();
        boolean bResult = false;
        switch(iKeyCode) {
        default:
            break;

        case 119: // 'w'
            ChangeCycle();
            bResult = true;
            break;

        case 38: // '&'
            bResult = ChangeRatio(true);
            if(!bResult)
                break;
            if(!ChangeRatio(true))
                parent.setMenuEnable("zoomin", false);
            else
                ChangeRatio(false);
            parent.setMenuEnable("zoomout", true);
            break;

        case 40: // '('
            bResult = ChangeRatio(false);
            if(!bResult)
                break;
            if(!ChangeRatio(false))
                parent.setMenuEnable("zoomout", false);
            else
                ChangeRatio(true);
            parent.setMenuEnable("zoomin", true);
            break;

        case 37: // '%'
            if(e.isControlDown()) {
                m_pos.m_EndPos += m_pos.m_ScreenCount;
                m_iPos -= m_pos.m_ScreenCount;
                bResult = true;
                break;
            }
            if(e.isShiftDown()) {
                if(m_pos.m_Begin > 0) {
                    m_pos.m_EndPos++;
                    m_iPos--;
                    bResult = true;
                }
            } else {
                bResult = ChangePos(true);
            }
            break;

        case 39: // '\''
            if(e.isControlDown()) {
                m_pos.m_EndPos -= m_pos.m_ScreenCount;
                m_iPos += m_pos.m_ScreenCount;
                bResult = true;
                break;
            }
            if(e.isShiftDown()) {
                if(m_pos.m_Begin < m_pos.m_MaxPos) {
                    m_pos.m_EndPos--;
                    m_iPos++;
                    bResult = true;
                }
            } else {
                bResult = ChangePos(false);
            }
            break;

        case 27: // '\033'
            if(m_iPos != -1) {
                DrawCursor(-1);
                ((MenuListener) (parent)).m_applet.Repaint(m_rcLabel);
                m_iPos = -1;
                bResult = true;
            }
            break;

        case 36: // '$'
            ChangeIndicator(false);
            bResult = true;
            break;

        case 35: // '#'
            ChangeIndicator(true);
            bResult = true;
            break;
        }
        return bResult;
    }

    void ChangeKLineType(int iType) {
        int iPrecision = ((MenuListener) (parent)).m_applet.GetPrecision(((MenuListener) (parent)).m_applet.strCurrentCode);
        m_indicator[0] = new MA(m_pos, iType, iPrecision);
        ((MenuListener) (parent)).m_applet.repaint();
    }

    void ChangeCycle() {
        if(((MenuListener) (parent)).m_applet.m_iKLineCycle >= 7)
            ((MenuListener) (parent)).m_applet.m_iKLineCycle = 1;
        else
            ((MenuListener) (parent)).m_applet.m_iKLineCycle++;
        m_iPos = -1;
        m_pos.m_EndPos = 0;
        m_pos.m_MaxPos = 0;
        m_pos.m_End = 0;
        m_pos.m_Begin = 0;
        parent.AskForKLine();
    }

    boolean ChangeRatio(boolean b) {
        if(b) {
            if(m_pos.m_VirtualRatio >= 60)
                return false;
            m_pos.m_VirtualRatio = m_pos.m_VirtualRatio + 1;
        } else {
            if(m_pos.m_VirtualRatio <= 2)
                return false;
            m_pos.m_VirtualRatio = m_pos.m_VirtualRatio - 1;
        }
        cache_m_VirtualRatio = m_pos.m_VirtualRatio;
        return true;
    }

    private void DrawCycle(Graphics g) {
        String str = "";
        switch(((MenuListener) (parent)).m_applet.m_iKLineCycle) {
        case 1: // '\001'
            str = ((MenuListener) (parent)).m_applet.getShowString("DayLine");
            break;

        case 2: // '\002'
            str = ((MenuListener) (parent)).m_applet.getShowString("WeekLine");
            break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -