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

📄 draw_kline.java

📁 一份java写的期货交易程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   Draw_KLine.java

package gnnt.MEBS.HQApplet;

import gnnt.MEBS.HQApplet.Indicator.ASI;
import gnnt.MEBS.HQApplet.Indicator.BIAS;
import gnnt.MEBS.HQApplet.Indicator.BOLL;
import gnnt.MEBS.HQApplet.Indicator.BRAR;
import gnnt.MEBS.HQApplet.Indicator.CCI;
import gnnt.MEBS.HQApplet.Indicator.CR;
import gnnt.MEBS.HQApplet.Indicator.DMA;
import gnnt.MEBS.HQApplet.Indicator.DMI;
import gnnt.MEBS.HQApplet.Indicator.EMV;
import gnnt.MEBS.HQApplet.Indicator.EXPMA;
import gnnt.MEBS.HQApplet.Indicator.IndicatorBase;
import gnnt.MEBS.HQApplet.Indicator.IndicatorPos;
import gnnt.MEBS.HQApplet.Indicator.KDJ;
import gnnt.MEBS.HQApplet.Indicator.MA;
import gnnt.MEBS.HQApplet.Indicator.MACD;
import gnnt.MEBS.HQApplet.Indicator.MIKE;
import gnnt.MEBS.HQApplet.Indicator.OBV;
import gnnt.MEBS.HQApplet.Indicator.PSY;
import gnnt.MEBS.HQApplet.Indicator.ROC;
import gnnt.MEBS.HQApplet.Indicator.RSI;
import gnnt.MEBS.HQApplet.Indicator.Reserve;
import gnnt.MEBS.HQApplet.Indicator.SAR;
import gnnt.MEBS.HQApplet.Indicator.TRIX;
import gnnt.MEBS.HQApplet.Indicator.VOL;
import gnnt.MEBS.HQApplet.Indicator.VR;
import gnnt.MEBS.HQApplet.Indicator.WVAD;
import gnnt.MEBS.HQApplet.Indicator.W_R;
import gnnt.MEBS.hq.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.*;

// Referenced classes of package gnnt.MEBS.HQApplet:
//            MenuListener, HQApplet, Page_KLine, ProductData, 
//            RHColor, KLineData, CodeTable, Common

public class Draw_KLine
{

    private static int cache_m_VirtualRatio = 15;
    Page_KLine parent;
    static final int CYCLE_DAY = 1;
    static final int CYCLE_WEEK = 2;
    static final int CYCLE_MONTH = 3;
    static final int CYCLE_MIN5 = 4;
    static final int CYCLE_MIN15 = 5;
    static final int CYCLE_MIN30 = 6;
    static final int CYCLE_MIN60 = 7;
    private ProductData m_product;
    KLineData m_kData[];
    Rectangle m_rcPane[];
    IndicatorBase m_indicator[];
    IndicatorPos m_pos;
    private int m_iPos;
    private Rectangle m_rcLabel;
    int m_iPrecision;

    public Draw_KLine(Page_KLine _parent)
    {
        m_rcPane = new Rectangle[3];
        m_indicator = new IndicatorBase[3];
        m_pos = new IndicatorPos();
        m_iPos = -1;
        m_pos.m_VirtualRatio = cache_m_VirtualRatio;
        parent = _parent;
        int iPrecision = ((MenuListener) (parent)).m_applet.GetPrecision(((MenuListener) (parent)).m_applet.strCurrentCode);
        if(((MenuListener) (parent)).m_applet.isIndex(((MenuListener) (parent)).m_applet.strCurrentCode) && ((MenuListener) (parent)).m_applet.m_bShowIndexKLine == 0)
            m_indicator[0] = new MA(m_pos, 2, iPrecision);
        else
            m_indicator[0] = new MA(m_pos, Page_KLine.m_iCurKLineType, iPrecision);
        m_indicator[1] = new VOL(m_pos, 0);
        CreateIndicator();
    }

    void Paint(Graphics g, Rectangle rc, ProductData product)
    {
        m_product = product;
        if(product != null)
            m_iPrecision = ((MenuListener) (parent)).m_applet.GetPrecision(m_product.sCode);
        MakeCycleData();
        GetScreen(g, rc);
        DrawCycle(g);
        if(m_rcPane[0].width < 0)
            return;
        DrawTimeCoordinate(g);
        for(int i = 0; i < 3; i++)
            m_indicator[i].Paint(g, m_rcPane[i], m_kData);

        ((MenuListener) (parent)).m_applet.EndPaint();
        DrawCursor(-1);
        DrawLabel();
    }

    private void GetScreen(Graphics g, Rectangle rc)
    {
        g.setFont(new Font("宋体", 0, 14));
        FontMetrics fm = g.getFontMetrics();
        int iHeight = fm.getHeight();
        int x = rc.x + 4 * iHeight;
        int width = rc.width - 4 * iHeight - 2;
        m_rcPane[0] = new Rectangle(x, rc.y, width, (rc.height - iHeight) / 2);
        m_rcPane[1] = new Rectangle(x, rc.y + m_rcPane[0].height, width, (rc.height - iHeight) / 4);
        m_rcPane[2] = new Rectangle(x, m_rcPane[1].y + m_rcPane[1].height, width, (rc.height - iHeight) / 4);
        g.setColor(HQApplet.rhColor.clGrid);
        g.drawRect(m_rcPane[0].x, m_rcPane[0].y, width, rc.height - iHeight);
        g.drawLine(m_rcPane[1].x, m_rcPane[1].y, m_rcPane[1].x + width, m_rcPane[1].y);
        g.drawLine(m_rcPane[2].x, m_rcPane[2].y, m_rcPane[1].x + width, m_rcPane[2].y);
        int iIndex = -1;
        if(m_iPos != -1)
            iIndex = m_pos.m_Begin + m_iPos;
        if(m_kData != null)
            m_pos.GetScreen(m_rcPane[0].width, m_kData.length);
        else
            m_pos.GetScreen(m_rcPane[0].width, 0);
        if(m_iPos != -1)
            if(iIndex >= m_pos.m_Begin && iIndex <= m_pos.m_End)
                m_iPos = iIndex - m_pos.m_Begin;
            else
                m_iPos = -1;
        if(((MenuListener) (parent)).m_applet.m_iKLineCycle >= 4 && ((MenuListener) (parent)).m_applet.m_iKLineCycle <= 7)
            m_rcLabel = new Rectangle(rc.x + 1, rc.y + iHeight, x - 1, iHeight * 19);
        else
            m_rcLabel = new Rectangle(rc.x + 1, rc.y + iHeight, x - 1, iHeight * 18);
    }

    private void DrawTimeCoordinate(Graphics g)
    {
        if(m_kData == null || m_kData.length == 0)
            return;
        g.setFont(new Font("宋体", 0, 14));
        FontMetrics fm = g.getFontMetrics();
        int iHeight = fm.getHeight();
        Rectangle rc = new Rectangle(m_rcPane[2].x, m_rcPane[2].y + m_rcPane[2].height, m_rcPane[2].width, iHeight);
        int iStringWidth;
        switch(((MenuListener) (parent)).m_applet.m_iKLineCycle)
        {
        case 3: // '\003'
            iStringWidth = fm.stringWidth("2004-10");
            break;

        case 1: // '\001'
        case 2: // '\002'
            iStringWidth = fm.stringWidth("2004-10-10");
            break;

        default:
            iStringWidth = fm.stringWidth("10-30 09:40");
            break;
        }
        int step = (int)(((double)iStringWidth * 1.5D) / (double)m_pos.m_Ratio) + 1;
        int scrcount = (m_pos.m_End - m_pos.m_Begin) + 1;
        int count = (m_pos.m_End - m_pos.m_Begin) / step;
        int y = rc.y + fm.getAscent();
        int x = (int)((float)rc.x + m_pos.m_Ratio / 2.0F);
        g.setColor(HQApplet.rhColor.clGrid);
        g.drawLine(x, rc.y, x, rc.y + 5);
        String str = TimeToString(((MenuListener) (parent)).m_applet.m_iKLineCycle, m_kData[m_pos.m_Begin].date);
        g.setColor(HQApplet.rhColor.clNumber);
        g.drawString(str, x, y);
        for(int i = 1; i < count; i++)
        {
            x = (int)((float)rc.x + (float)(i * step) * m_pos.m_Ratio + m_pos.m_Ratio / 2.0F);
            g.setColor(HQApplet.rhColor.clGrid);
            g.drawLine(x, rc.y, x, rc.y + 5);
            str = TimeToString(((MenuListener) (parent)).m_applet.m_iKLineCycle, m_kData[i * step + m_pos.m_Begin].date);
            x -= iStringWidth / 2;
            g.setColor(HQApplet.rhColor.clNumber);
            g.drawString(str, x, y);
        }

        if(count > 0)
        {
            x = rc.x + (int)((float)scrcount * m_pos.m_Ratio - m_pos.m_Ratio / 2.0F);
            g.setColor(HQApplet.rhColor.clGrid);
            g.drawLine(x, rc.y, x, rc.y + 5);
            str = TimeToString(((MenuListener) (parent)).m_applet.m_iKLineCycle, m_kData[m_pos.m_End].date);
            if(count > 1 || x + iStringWidth > rc.x + rc.width)
                x -= iStringWidth;
            g.setColor(HQApplet.rhColor.clNumber);
            g.drawString(str, x, y);
        }
    }

    private String TimeToString(int iCycle, long date)
    {
        String str;
        switch(iCycle)
        {
        case 1: // '\001'
        case 2: // '\002'
            str = String.valueOf(date);
            if(str.length() >= 8)
                str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
            break;

        case 3: // '\003'
            str = String.valueOf(date / 100L);
            if(str.length() >= 6)
                str = str.substring(0, 4) + "-" + str.substring(4, 6);
            break;

        default:
            str = String.valueOf(date);
            if(str.length() >= 12)
            {
                str = str.substring(4);
                str = str.substring(0, 2) + "-" + str.substring(2, 4) + " " + str.substring(4, 6) + ":" + str.substring(6, 8);
            }
            break;
        }
        return str;
    }

    private void MakeCycleData()
    {
        if(m_product == null)
            return;
        if(1 == ((MenuListener) (parent)).m_applet.m_iKLineCycle || 2 == ((MenuListener) (parent)).m_applet.m_iKLineCycle || 3 == ((MenuListener) (parent)).m_applet.m_iKLineCycle)
            MakeTodayDayLine();
        else
            MakeToday5MinLine();
        if(m_kData == null)
            return;
        switch(((MenuListener) (parent)).m_applet.m_iKLineCycle)
        {
        case 2: // '\002'
            MakeWeek();
            break;

        case 3: // '\003'
            MakeMonth();
            break;

        case 5: // '\005'
            MakeMinCycle(15);
            break;

        case 6: // '\006'
            MakeMinCycle(30);
            break;

        case 7: // '\007'
            MakeMinCycle(60);
            break;
        }
    }

    private void MakeTodayDayLine()
    {
        if(m_product.realData == null || m_product.realData.curPrice < 0.001F)
        {
            m_kData = m_product.dayKLine;
            return;
        }
        int iNum;
        if(m_product.dayKLine == null)
            iNum = 0;
        else
            iNum = m_product.dayKLine.length;
        if(iNum > 0 && m_product.dayKLine[iNum - 1].date > (long)((MenuListener) (parent)).m_applet.m_iDate)
        {
            m_kData = m_product.dayKLine;
            return;
        }
        if(iNum > 0 && m_product.dayKLine[iNum - 1].date == (long)((MenuListener) (parent)).m_applet.m_iDate)
        {
            if(m_product.realData.totalAmount <= 0L)
            {
                m_kData = m_product.dayKLine;
                return;
            }
            iNum--;
        }
        m_kData = new KLineData[iNum + 1];
        for(int i = 0; i < iNum; i++)
            m_kData[i] = m_product.dayKLine[i];

        m_kData[iNum] = new KLineData();
        m_kData[iNum].date = ((MenuListener) (parent)).m_applet.m_iDate;
        m_kData[iNum].openPrice = m_product.realData.openPrice;
        m_kData[iNum].highPrice = m_product.realData.highPrice;
        m_kData[iNum].lowPrice = m_product.realData.lowPrice;
        m_kData[iNum].closePrice = m_product.realData.curPrice;
        m_kData[iNum].balancePrice = m_product.realData.balancePrice;
        m_kData[iNum].totalAmount = m_product.realData.totalAmount;
        m_kData[iNum].totalMoney = m_product.realData.totalMoney;
        m_kData[iNum].reserveCount = m_product.realData.reserveCount;
    }

⌨️ 快捷键说明

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