All Downloads are FREE. Search and download functionalities are using the official Maven repository.

quant.fans.provider.TickDataProvider Maven / Gradle / Ivy

The newest version!
package quant.fans.provider;

import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.io.CharStreams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import quant.fans.common.Utils;
import quant.fans.downloader.BasicDownloader;
import quant.fans.model.Symbol;
import quant.fans.model.Tick;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * author: eryk
 * mail: [email protected]
 * date: 15-9-3.
 * 逐笔数据
 */
public class TickDataProvider {
    private static final Logger LOG = LoggerFactory.getLogger(TickDataProvider.class);
    //http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600199&date=2015-11-16
    private static String tickHisDataURL = "http://market.finance.sina.com.cn/downxls.php?date=%s&symbol=%s";

    private static String tickRTDataURL = "http://vip.stock.finance.sina.com.cn/quotes_service/view/CN_TransListV2.php?num=10000&symbol=%s&rn=%s";

    /**
     *
     * @param symbol stock symbol
     * @param date yyyy-MM-dd
     * @return tick data list
     */
    public static List get(String symbol, String date){
        String url = String.format(tickHisDataURL, date, Symbol.getSymbol(symbol, tickHisDataURL));
        InputStream input = BasicDownloader.downloadStream(url);

        List ticks = Lists.newLinkedList();
        try {
            List lines = CharStreams.readLines(new InputStreamReader(input, "gbk"));
            for(int i = 1;i get(String symbol){
        String url = String.format(tickRTDataURL,Symbol.getSymbol(symbol,tickRTDataURL),new Date().getTime());
        String data = BasicDownloader.download(url);
        Pattern pattern = Pattern.compile("(\\(.*\\))");
        Matcher matcher = pattern.matcher(data);
        List ticks = Lists.newLinkedList();
        while(matcher.find()){
            String line = matcher.group().replaceAll("[(|)|'| ]","");
            if(!Strings.isNullOrEmpty(line)){
                String[] fields = line.split(",",4);
                Tick tick = new Tick();
                tick.date =  Utils.str2Date(Utils.getNow("yyyyMMdd") + fields[0],"yyyyMMddHH:mm:ss");
                tick.volume = Utils.getInt(fields[1])/100;
                tick.price = Utils.getDouble(fields[2]);
                tick.amount = Utils.formatDouble(tick.volume * tick.price * 100,"#.##");
                tick.type = getTickType(fields[3]);
                ticks.add(tick);
            }
        }
        return ticks;
    }

    private static Tick.Type getTickType(String type){
        if(type.equals("买盘") || type.equals("UP")){
            return Tick.Type.BUY;
        }else if(type.equals("卖盘") || type.equals("DOWN")){
            return Tick.Type.SELL;
        }else{
            return Tick.Type.MID;
        }
    }

    public static void main(String[] args) throws IOException {
        List ticks = get("600376","2015-11-16");
        for(Tick tick:ticks){
            System.out.println(tick);
        }



//        String date = "2015-09-02";
//
//        List stockList = StockMap.getStockListWithConditions();
//        for(String symbol : stockList){
//            StockData stockData = RealTimeDataProvider.get(symbol);
//            if(stockData.get("change")< -9.5){
//                continue;
//            }
//
//            List ticks = TickDataProvider.get(symbol, date);
//
//            double avgVolume = 0;
//            for(Tick tick:ticks){
//                avgVolume += tick.volume;
//            }
//            avgVolume = avgVolume/ticks.size();
//
//            int count = 0;
//            for(int i = 1 ;i avgVolume * 30 && !tick.date.contains("15:00:") && !tick.date.contains("09:30:")){
////                    bufferedWriter.write(ticks.get(i) + "\n");
//                    System.out.println(ticks.get(i));
//                    count++;
//                }
//            }
//            if(count>1){
////                bufferedWriter.write(symbol + ",平均每笔成交量:" + Utils.formatDouble(avgVolume)+ "\n");
//                System.out.println(symbol + ",平均每笔成交量:" + Utils.formatDouble(avgVolume));
//            }
//        }
////        bufferedWriter.close();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy