stock_frame

 

package frame;

import read_out.ExcelReader;
import math.*;
import map_test.gf;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.UIManager;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import java.awt.List;
import javax.swing.JList;
import javax.swing.JTextArea;


public class stock_frame extends JFrame {

    private JPanel contentPane;
    private JTextField historyMaxPrice;
    private JTextField param1;
    private JTextField historyMinPrice;
    private JTextField param2;
    private JTextField forecasteMaxPrice;
    private JTextField forecasteMinPrice;
    private JTextField dataFrom;
    private JLabel labeImage = new JLabel("New label");  
    private int i=0;
    private int time=1;
    private JTextArea textArea = new JTextArea();
    /** *//**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    stock_frame frame = new stock_frame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /** *//**
     * Create the frame.
     */
    public stock_frame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 620, 787);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JLabel lblMaxprice = new JLabel("HistoryMaxPrice");
        lblMaxprice.setBounds(33, 33, 100, 15);
        contentPane.add(lblMaxprice);
       
        historyMaxPrice = new JTextField();
        historyMaxPrice.setText("42");
        historyMaxPrice.setBounds(143, 30, 82, 28);
        contentPane.add(historyMaxPrice);
        historyMaxPrice.setColumns(10);
       
        JLabel lblMinprice = new JLabel("HistoryMaxPrice");
        lblMinprice.setToolTipText("");
        lblMinprice.setBounds(33, 70, 100, 15);
        contentPane.add(lblMinprice);
       
        param1 = new JTextField();
        param1.setText("3");
        param1.setBounds(143, 96, 82, 28);
        contentPane.add(param1);
        param1.setColumns(10);
       
        JButton btnNe = new JButton("BeginTacitly");
        btnNe.addMouseListener(new MouseAdapter() {
      
         public void mouseClicked(MouseEvent arg0) {
          StringObj doc_out=new StringObj();
          String docFrom=dataFrom.getText();
          
          File file = new File(docFrom);
            ExcelReader readExcel = new ExcelReader(file);
            try {
             readExcel.open();
            } catch (IOException e) {
             e.printStackTrace();
            }
            readExcel.setSheetNum(0); // 设置读取索引为0的工作表
            // 总行数
            int count = readExcel.getRowCount();
           
            double test_excel[]=new double [count] ;
           
            for (int i = 0; i < count; i++) {
             String[] rows = readExcel.readExcelLine(i);
             test_excel[i]=Double.parseDouble(rows[4]);
            
            }
          
           
          
          ArrayList<PriceNow> test_3=new ArrayList<PriceNow>(test_excel.length);
          for(int i=0;i<test_excel.length;i++)
          {
           test_3.add(new PriceNow());
           
          }
          
          for(int i=0;i<test_excel.length;i++)
          {
           test_3.get(i).value=test_excel[i];
           System.out.print(test_3.get(i).value+"  ");
           
          }
          //add 8/26 begin
          
          double historyMax=Double.parseDouble(historyMaxPrice.getText());
          double historyMin=Double.parseDouble(historyMinPrice.getText());
          
          ////tacitly mix min
          
          double tacitlyMax=test_3.get(0).value+(historyMax-test_3.get(0).value)/2;
          double tacitlyMix=historyMin;
          
          double forecastMax=Double.parseDouble(forecasteMaxPrice.getText());;
          double forecastMix=Double.parseDouble(forecasteMinPrice.getText());;
          
          
          int paramB=Integer.parseInt(param1.getText());
          double paramL=Double.parseDouble(param2.getText());
          
         
          //add 8/26 over
          ArrayList<PriceNow> out=new ArrayList<PriceNow>();
             //forecast
          MoneyMenagement.moneyMenagementRecount_forFrame(paramB,test_3,tacitlyMax,tacitlyMix,30,100000,paramL,out,doc_out);
          
          
          
          gf gf_test=new gf();
          gf_test.getDataSet2(test_3,out);
          try {
     gf_test.main_run(i);
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
          
          labeImage.setBounds(240, 105, 9999, 9999);
       // labeImage=null;
       //labeImage = new JLabel("New label");  
       labeImage.setIcon(new ImageIcon("D:\\pic\\gf"+String.valueOf(i)+".jpg"));
             labeImage.setBounds(240, 105,1024,768);
             contentPane.add(labeImage);
             textArea.setText(doc_out.doc_out);
            
            
             contentPane.repaint();
            
             i++;
          
         }
        });
        btnNe.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        btnNe.setBounds(33, 274, 138, 28);
        contentPane.add(btnNe);
       
        JButton btnClose = new JButton("close");
        btnClose.addMouseListener(new MouseAdapter() {
         @Override
         public void mouseClicked(MouseEvent arg0) {
           System.exit(0);

          
         }
        });
        btnClose.setBounds(33, 390, 93, 23);
        contentPane.add(btnClose);
       
        historyMinPrice = new JTextField();
        historyMinPrice.setText("10");
        historyMinPrice.setColumns(10);
        historyMinPrice.setBounds(143, 63, 82, 28);
        contentPane.add(historyMinPrice);
       
        JLabel lblPra = new JLabel("param1");
        lblPra.setToolTipText("");
        lblPra.setBounds(33, 103, 100, 15);
        contentPane.add(lblPra);
       
        JLabel lblParam = new JLabel("param2");
        lblParam.setToolTipText("");
        lblParam.setBounds(33, 136, 100, 15);
        contentPane.add(lblParam);
       
        param2 = new JTextField();
        param2.setText("0.03");
        param2.setColumns(10);
        param2.setBounds(143, 129, 82, 28);
        contentPane.add(param2);
       
        JLabel lbtMaxPrice = new JLabel("ForecasteMaxPrice");
        lbtMaxPrice.setBounds(271, 32, 153, 15);
        contentPane.add(lbtMaxPrice);
       
        JLabel lblForecastemaxprice = new JLabel("ForecasteMinPrice");
        lblForecastemaxprice.setToolTipText("");
        lblForecastemaxprice.setBounds(271, 69, 153, 15);
        contentPane.add(lblForecastemaxprice);
       
        forecasteMaxPrice = new JTextField();
        forecasteMaxPrice.setText("20");
        forecasteMaxPrice.setColumns(10);
        forecasteMaxPrice.setBounds(398, 26, 82, 28);
        contentPane.add(forecasteMaxPrice);
       
        forecasteMinPrice = new JTextField();
        forecasteMinPrice.setText("10");
        forecasteMinPrice.setColumns(10);
        forecasteMinPrice.setBounds(398, 63, 82, 28);
        contentPane.add(forecasteMinPrice);
       
        JButton btnBeginforecast = new JButton("BeginForecast");
        btnBeginforecast.addMouseListener(new MouseAdapter() {
         @Override
         public void mouseClicked(MouseEvent arg0) {
          
          StringObj doc_out=new StringObj();
          String docFrom=dataFrom.getText();
          
          File file = new File(docFrom);
          ExcelReader readExcel = new ExcelReader(file);
          try {
           readExcel.open();
          } catch (IOException e) {
           e.printStackTrace();
          }
          readExcel.setSheetNum(0); // 设置读取索引为0的工作表
          // 总行数
          int count = readExcel.getRowCount();
         
          double test_excel[]=new double [count] ;
         
          for (int i = 0; i < count; i++) {
           String[] rows = readExcel.readExcelLine(i);
           test_excel[i]=Double.parseDouble(rows[4]);
          
          }
        
        
        
        ArrayList<PriceNow> test_3=new ArrayList<PriceNow>(test_excel.length);
        for(int i=0;i<test_excel.length;i++)
        {
         test_3.add(new PriceNow());
         
        }
        
        for(int i=0;i<test_excel.length;i++)
        {
         test_3.get(i).value=test_excel[i];
         System.out.print(test_3.get(i).value+"  ");
         
        }
        //add 8/26 begin
        
        double historyMax=Double.parseDouble(historyMaxPrice.getText());
        double historyMin=Double.parseDouble(historyMinPrice.getText());
        
        ////tacitly mix min
        
        double tacitlyMax=test_3.get(0).value+(historyMax-test_3.get(0).value)/2;
        double tacitlyMix=historyMin;
        
        double forecastMax=Double.parseDouble(forecasteMaxPrice.getText());;
        double forecastMix=Double.parseDouble(forecasteMinPrice.getText());;
        
        
        int paramB=Integer.parseInt(param1.getText());
        double paramL=Double.parseDouble(param2.getText());
        
       
        //add 8/26 over
        ArrayList<PriceNow> out=new ArrayList<PriceNow>();
           //forecast
        MoneyMenagement.moneyMenagementRecount_forFrame(paramB,test_3,forecastMax,forecastMix,30,100000,paramL,out,doc_out);
        
        gf gf_test=new gf();
      gf_test.getDataSet2(test_3,out);
      try {
    gf_test.main_run(i);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
      
      labeImage.setBounds(240, 105, 9999, 9999);
   // labeImage=null;
   //labeImage = new JLabel("New label");  
   labeImage.setIcon(new ImageIcon("D:\\pic\\gf"+String.valueOf(i)+".jpg"));
         labeImage.setBounds(240, 105,1024,768);
         contentPane.add(labeImage);
        
         textArea.setText(doc_out.doc_out);
         contentPane.repaint();
        
         i++;
            
         }
        });
        btnBeginforecast.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent arg0) {
         }
        });
        btnBeginforecast.setBounds(33, 314, 138, 28);
        contentPane.add(btnBeginforecast);
       
        JLabel lblDatafrom = new JLabel("DataFrom:");
        lblDatafrom.setToolTipText("");
        lblDatafrom.setBounds(33, 207, 100, 15);
        contentPane.add(lblDatafrom);
       
        dataFrom = new JTextField();
        dataFrom.setText("d:\\\\test_excel\\\\ExpData2.xls");
        dataFrom.setColumns(10);
        dataFrom.setBounds(33, 234, 192, 28);
        contentPane.add(dataFrom);
       
        JButton btnForecastfortimes = new JButton("ForecastForTimes");
        btnForecastfortimes.addMouseListener(new MouseAdapter() {
         @Override
         public void mouseClicked(MouseEvent arg0) {
          
          StringObj doc_out=new StringObj();
 String docFrom=dataFrom.getText();
          
          File file = new File(docFrom);
          ExcelReader readExcel = new ExcelReader(file);
          try {
           readExcel.open();
          } catch (IOException e) {
           e.printStackTrace();
          }
          readExcel.setSheetNum(0); // 设置读取索引为0的工作表
          // 总行数
          int count = readExcel.getRowCount();
         
          double test_excel[]=new double [time+1] ;
         
          for (int i = 0; i < time; i++) {
           if(count>=time)
           {
            String[] rows = readExcel.readExcelLine(i);
            test_excel[i]=Double.parseDouble(rows[4]);
           }
          
          }
        
        
        
        ArrayList<PriceNow> test_3=new ArrayList<PriceNow>(test_excel.length);
        for(int i=0;i<test_excel.length;i++)
        {
         test_3.add(new PriceNow());
         
        }
        
        for(int i=0;i<test_excel.length;i++)
        {
         test_3.get(i).value=test_excel[i];
         System.out.print(test_3.get(i).value+"  ");
         
        }
        //add 8/26 begin
        
        double historyMax=Double.parseDouble(historyMaxPrice.getText());
        double historyMin=Double.parseDouble(historyMinPrice.getText());
        
        ////tacitly mix min
        
        double tacitlyMax=test_3.get(0).value+(historyMax-test_3.get(0).value)/2;
        double tacitlyMix=historyMin;
        
        double forecastMax=Double.parseDouble(forecasteMaxPrice.getText());;
        double forecastMix=Double.parseDouble(forecasteMinPrice.getText());;
        
        
        int paramB=Integer.parseInt(param1.getText());
        double paramL=Double.parseDouble(param2.getText());
        
       
        //add 8/26 over
        ArrayList<PriceNow> out=new ArrayList<PriceNow>();
           //forecast
        MoneyMenagement.moneyMenagementRecount_forFrame(paramB,test_3,forecastMax,forecastMix,30,100000,paramL,out,doc_out);
        
        gf gf_test=new gf();
      gf_test.getDataSet2(test_3,out);
      try {
    gf_test.main_run(i);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
      
         // JLabel labeImage = new JLabel("New label");
             //labeImage.setIgnoreRepaint(true);
       
       labeImage.setBounds(240, 105, 9999, 9999);
       // labeImage=null;
       //labeImage = new JLabel("New label");  
       labeImage.setIcon(new ImageIcon("D:\\pic\\gf"+String.valueOf(i)+".jpg"));
             labeImage.setBounds(240, 105,1024,768);
             contentPane.add(labeImage);
             textArea.setText(doc_out.doc_out);
             contentPane.repaint();
            
             i++;
             time++;
           
         }
        });
        btnForecastfortimes.setBounds(33, 354, 138, 28);
        contentPane.add(btnForecastfortimes);
       
    
     
        textArea.setBounds(33, 438, 138, 294);
        contentPane.add(textArea);
       

    }
}

 

from sklearn.metrics.pairwise import cosine_similarity # 计算所有股票的持仓相似度 def calculate_daily_positions_consine_similarity(df): df = df.copy() all_dates = pd.date_range(start=df['date'].min(), end=df['date'].max(), name='date').strftime("%Y-%m-%d") all_clients = df['client_id'].unique() all_instruments = df['instrument_id'].unique() full_panel = pd.MultiIndex.from_product( [all_dates, all_clients, all_instruments], names=['date', 'client_id', 'instrument_id'] ).to_frame(index=False) merged = full_panel.merge( df, on=['date', 'client_id', 'instrument_id'], how='left' ) # 填充缺失日期 merged['cum_qty'] = merged.groupby(['client_id', 'instrument_id'])['cum_qty'].ffill() merged = merged.fillna(0) merged['position_type'] = np.where( merged['cum_qty'] > 0, 'long', np.where(merged['cum_qty'] < 0, 'short', 'neutral') ) # 计算每日持仓统计 merged['is_long'] = (merged['position_type'] == 'long') merged['is_short'] = (merged['position_type'] == 'short') daily_stats = merged.groupby(['client_id', 'date']).agg( long_qty=('cum_qty', lambda s: s[s > 0].sum()), short_qty=('cum_qty', lambda s: abs(s[s < 0].sum())) ).reset_index() daily_stats["total_qty"] = daily_stats["long_qty"] + daily_stats["short_qty"] merged = merged.merge(daily_stats, on=['client_id', 'date']) merged["posion_weight"] = merged["cum_qty"] / merged["total_qty"] merged["posion_weight"] = merged["posion_weight"].fillna(0) # 计算持仓余弦相似度 def calculate_cosine_similarity(client_group): client_group = client_group.sort_values('date') results = [] stock_matrix = client_group.pivot(index='date', columns='instrument_id', values='posion_weight').fillna(0) similarity_matrix = cosine_similarity(stock_matrix.values) # 计算每日相似度(与前一日比较) for i in range(1, len(stock_matrix)): current_date = stock_matrix.index[i] results.append({ 'date': current_date, 'pos_sim': similarity_matrix[i, i-1] }) # # 计算每日相似度(与前一日比较) # for i in range(1, len(stock_matrix)): # current_date = stock_matrix.index[i] # prev_date = stock_matrix.index[i-1] # # 计算总相似度 # pos_vec1 = stock_matrix.loc[prev_date].values.reshape(1, -1) # pos_vec2 = stock_matrix.loc[current_date].values.reshape(1, -1) # pos_sim = cosine_similarity(pos_vec1, pos_vec2)[0][0] if long_total[prev_date] > 0 and long_total[current_date] > 0 else 0 # results.append({ # 'date': current_date, # 'pos_sim': pos_sim # }) return pd.DataFrame(results) # 每个client,每日,根据所有股票仓位,可以计算相似性 similarity_results = merged.groupby(['client_id']).apply(calculate_cosine_similarity).reset_index() return similarity_results final_daily_stats = daily_stats.merge( similarity_results, on=['client_id', 'date'], how='left' ) return final_daily_stats # 计算每日持仓余弦相似性 daily_positions_cos = calculate_daily_positions_consine_similarity(multi_cpty_df[(multi_cpty_df["client_id"] == "ABRH400")]) daily_positions_cos 你误解了我的意思,不过没关系,现在再看看这个代码,你能理解了么
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值