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

📄 indicatorbase.java

📁 java 写的股票技术分析;软件
💻 JAVA
字号:
// NMI's Java Code Viewer 6.0a
// www.trinnion.com/javacodeviewer

// Registered to Evaluation Copy                                      
// Generated PGFZKD AyTB 14 2007 15:43:34 

//source File Name:   IndicatorBase.java

package gnnt.MEBS.HQApplet.Indicator;

import gnnt.MEBS.HQApplet.*;
import java.awt.*;

// Referenced classes of package gnnt.MEBS.HQApplet.Indicator:
//            IndicatorPos

public abstract class IndicatorBase {

    String m_strIndicatorName;
    protected Rectangle m_rc;
    protected KLineData m_kData[];
    protected IndicatorPos m_pos;
    protected float m_max;
    protected float m_min;
    protected int m_iTextH;
    protected float m_data[][];
    protected String m_strParamName[];
    protected int m_iPrecision;
    public static final String INDICATOR_NAME[][] = {
        {
            "ASI", "\u7D2F\u8BA1\u632F\u8361\u6307\u6807"
        }, {
            "BIAS", "\u4E56\u79BB\u7387"
        }, {
            "BRAR", "BRAR\u80FD\u91CF\u6307\u6807"
        }, {
            "BOLL", "\u5E03\u6797\u7EBF"
        }, {
            "CCI", "\u987A\u52BF\u6307\u6807"
        }, {
            "CR", "CR\u80FD\u91CF\u6307\u6807"
        }, {
            "DMA", "\u5E73\u5747\u7EBF\u5DEE"
        }, {
            "DMI", "\u8D8B\u5411\u6307\u6807"
        }, {
            "EMV", "\u7B80\u6613\u6CE2\u52A8\u6307\u6807"
        }, {
            "EXPMA", "\u6307\u6570\u5E73\u5747\u6570"
        }, {
            "KDJ", "\u968F\u673A\u6307\u6807"
        }, {
            "MACD", "\u5E73\u6ED1\u5F02\u540C\u79FB\u52A8\u5E73\u5747\u7EBF"
        }, {
            "MIKE", "\u9EA6\u514B\u6307\u6807"
        }, {
            "OBV", "\u80FD\u91CF\u6F6E"
        }, {
            "PSY", "\u5FC3\u7406\u7EBF"
        }, {
            "ROC", "\u53D8\u52A8\u901F\u7387"
        }, {
            "RSI", "\u76F8\u5BF9\u5F3A\u5F31\u6307\u6807"
        }, {
            "SAR", "\u629B\u7269\u7EBF\u6307\u6807"
        }, {
            "TRIX", "\u4E09\u91CD\u6307\u6570\u5E73\u5747"
        }, {
            "VR", "\u6210\u4EA4\u91CF\u53D8\u5F02\u7387"
        }, {
            "W%R", "\u5A01\u5EC9\u6307\u6807"
        }, {
            "WVAD", "\u5A01\u5EC9\u53D8\u5F02\u79BB\u6563\u91CF"
        }, {
            "ORDER", "\u8BA2\u8D27\u91CF"
        }
    };

    public IndicatorBase(IndicatorPos pos, int iPrecision) {
        m_iTextH = 12;
        m_pos = pos;
        m_iPrecision = iPrecision;
    }

    public void Paint(Graphics g, Rectangle rc, KLineData data[]) {
        m_rc = rc;
        m_kData = data;
    }

    public abstract void Calculate();

    public void DrawTitle(Graphics g, int iIndex) {
        g.setFont(new Font("\u5B8B\u4F53", 0, 12));
        FontMetrics fm = g.getFontMetrics();
        g.clearRect(m_rc.x + 1, m_rc.y + 1, m_rc.width - 1, m_iTextH - 1);
        int x = m_rc.x + 1;
        int y = m_rc.y + fm.getAscent();
        g.setColor(HQApplet.rhColor.clItem);
        g.drawString(m_strIndicatorName, x, y);
        x += fm.stringWidth(m_strIndicatorName) + m_iTextH;
        if(m_data[0] == null || m_data[0].length == 0)
            return;
        if(iIndex >= m_data[0].length)
            iIndex = m_data[0].length - 1;
        for(int i = 0; i < m_strParamName.length; i++) {
            if(m_data[i] == null)
                continue;
            String str = Common.FloatToString(m_data[i][iIndex], m_iPrecision);
            if(m_strParamName[i].length() > 0)
                str = m_strParamName[i] + ":" + str;
            g.setColor(HQApplet.rhColor.clIndicator[i]);
            if(x + fm.stringWidth(str) > m_rc.x + m_rc.width)
                break;
            g.drawString(str, x, y);
            x += fm.stringWidth(str) + m_iTextH;
        }

    }

    public void DrawCursor(Graphics g1, int i) {
    }

    final void DrawCoordinate(Graphics g, int precision) {
        if(m_max <= m_min)
            return;
        g.setFont(new Font("\u5B8B\u4F53", 0, 12));
        FontMetrics fm = g.getFontMetrics();
        m_iTextH = fm.getHeight();
        int top = m_rc.y + fm.getHeight();
        if(top >= m_rc.y + m_rc.height)
            return;
        float unit = 100F;
        switch(precision) {
        case 2: // '\002'
            unit = 0.1F;
            break;

        case 3: // '\003'
            unit = 0.01F;
            break;

        default:
            unit = 10F;
            break;
        }
        float minUnit = unit;
        int step[] = {
            2, 5, 2
        };
        int height = (int)((unit * (float)m_rc.height) / (m_max - m_min));
        for(int i = 0; height < fm.getHeight() * 2; i = ++i % 3) {
            unit *= step[i];
            if(i == 1)
                unit /= 2.0F;
            height = (int)((unit * (float)m_rc.height) / (m_max - m_min));
        }

        float max = (float)(int)(m_max / minUnit / (unit / minUnit)) * unit;
        for(float value = max; value <= m_max && value >= m_min;) {
            int y = (int)((float)top + ((m_max - value) * (float)(m_rc.height - fm.getHeight())) / (m_max - m_min));
            if(y < top + fm.getHeight() || y > m_rc.y + m_rc.height) {
                value -= unit;
            } else {
                g.setColor(HQApplet.rhColor.clGrid);
                g.drawLine(m_rc.x - 3, y, m_rc.x, y);
                Common.DrawDotLine(g, m_rc.x, y, m_rc.x + m_rc.width, y);
                String text = Common.FloatToString(value, precision);
                int xx = m_rc.x - 3 - fm.stringWidth(text);
                int yy = (y - fm.getHeight() / 2) + fm.getAscent();
                g.setColor(HQApplet.rhColor.clNumber);
                g.drawString(text, xx, yy);
                value -= unit;
            }
        }

    }

    final void GetValueMaxMin(float data[], int iFirst) {
        if(data == null)
            return;
        int begin = m_pos.m_Begin > iFirst ? m_pos.m_Begin : iFirst;
        int end = m_pos.m_End;
        for(int i = begin; i <= end; i++) {
            if(i >= data.length)
                break;
            if(data[i] > m_max)
                m_max = data[i];
            if(data[i] < m_min)
                m_min = data[i];
        }

    }

    final void DrawLine(Graphics g, float data[], int iFirst, Color color) {
        if(data == null)
            return;
        if(iFirst > m_kData.length)
            return;
        if(m_max - m_min <= 0.0F || m_rc.height - m_iTextH <= 0)
            return;
        int begin = m_pos.m_Begin > iFirst ? m_pos.m_Begin : iFirst;
        int end = m_pos.m_End;
        if(begin > end)
            return;
        float valuex = (float)m_rc.x + m_pos.m_Ratio / 2.0F + (float)(begin - m_pos.m_Begin) * m_pos.m_Ratio;
        float valuey = (m_max - m_min) / (float)(m_rc.height - m_iTextH);
        g.setColor(color);
        for(int i = begin + 1; i <= end; i++) {
            if(i >= data.length)
                break;
            if(m_max >= data[i - 1] && data[i - 1] >= m_min && m_max >= data[i] && data[i] >= m_min)
                g.drawLine((int)valuex, m_rc.y + m_iTextH + (int)((m_max - data[i - 1]) / valuey), (int)(valuex + m_pos.m_Ratio), m_rc.y + m_iTextH + (int)((m_max - data[i]) / valuey));
            valuex += m_pos.m_Ratio;
        }

    }

    protected void AverageClose(int iParam, float data[]) {
        if(m_kData == null || m_kData.length == 0)
            return;
        int n = iParam;
        if(n > m_kData.length || n < 1)
            return;
        float preClose = 0.0F;
        double sum = 0.0D;
        for(int i = 0; i < n - 1; i++)
            sum += m_kData[i].closePrice;

        for(int i = n - 1; i < m_kData.length; i++) {
            sum -= preClose;
            sum += m_kData[i].closePrice;
            data[i] = (float)(sum / (double)n);
            preClose = m_kData[(i - n) + 1].closePrice;
        }

    }

    protected void AverageHigh(int iParam, float data[]) {
        if(m_kData == null || m_kData.length == 0)
            return;
        int n = iParam;
        if(n > m_kData.length || n < 1)
            return;
        float preHigh = 0.0F;
        double sum = 0.0D;
        for(int i = 0; i < n - 1; i++)
            sum += m_kData[i].highPrice;

        for(int i = n - 1; i < m_kData.length; i++) {
            sum -= preHigh;
            sum += m_kData[i].highPrice;
            data[i] = (float)(sum / (double)n);
            preHigh = m_kData[(i - n) + 1].highPrice;
        }

    }

    protected void AverageLow(int iParam, float data[]) {
        if(m_kData == null || m_kData.length == 0)
            return;
        int n = iParam;
        if(n > m_kData.length || n < 1)
            return;
        float preLow = 0.0F;
        double sum = 0.0D;
        for(int i = 0; i < n - 1; i++)
            sum += m_kData[i].lowPrice;

        for(int i = n - 1; i < m_kData.length; i++) {
            sum -= preLow;
            sum += m_kData[i].lowPrice;
            data[i] = (float)(sum / (double)n);
            preLow = m_kData[(i - n) + 1].lowPrice;
        }

    }

    static void Average(int begin, int iCount, int n, float source[], float destination[]) {
        if(source == null || destination == null)
            return;
        if(n > iCount - begin || n < 1)
            return;
        float prevalue = 0.0F;
        double sum = 0.0D;
        for(int i = iCount - 1; i > iCount - n; i--)
            sum += source[i];

        for(int i = iCount - 1; i >= (begin + n) - 1; i--) {
            sum -= prevalue;
            sum += source[(i - n) + 1];
            prevalue = source[i];
            destination[i] = (float)(sum / (double)n);
        }

    }

}

⌨️ 快捷键说明

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