| | |
| | | throw string("截图出错"); |
| | | } |
| | | |
| | | list<TradeData> resultList = captureLevel2TradeData(mat, index); |
| | | list<TradeData*> resultList = captureLevel2TradeData(mat, index); |
| | | long processTime = clock() - start; |
| | | data_callback(index, code, start, processTime, resultList, context); |
| | | cout << "时间消耗:" << processTime << endl; |
| | |
| | | |
| | | } |
| | | } |
| | | Sleep(2); |
| | | Sleep(50); |
| | | } |
| | | } |
| | | |
| | |
| | | return inited; |
| | | } |
| | | |
| | | list<TradeData> L2DataCapture::captureLevel2TradeData(cv::Mat& oimg, int identify) { |
| | | list<TradeData*> L2DataCapture::captureLevel2TradeData(cv::Mat& oimg, int identify) { |
| | | if (oimg.rows == 0 || oimg.cols == 0) { |
| | | throw ERROR_CODE_CAPTURE_FAIL; |
| | | } |
| | | |
| | | clock_t starttime = clock(); |
| | | |
| | | list<TradeData> resultList = captureLevel2TradeData(openCLExcuter[identify], oimg, identify); |
| | | list<TradeData*> resultList = captureLevel2TradeData(openCLExcuter[identify], oimg, identify); |
| | | |
| | | std::cout << "-------L2行情识别结束任务: threadid-" << std::this_thread::get_id() << " 序号:" << identify << " CODE:" << gpCodes[identify] << " 耗时:" << clock() - starttime << " 数据量:" << resultList.size() << endl; |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | list<TradeData> L2DataCapture::captureLevel2TradeData(OpenCLExcuter* openCLExcuter, cv::Mat& oimg, int identify) |
| | | list<TradeData*> L2DataCapture::captureLevel2TradeData(OpenCLExcuter* openCLExcuter, cv::Mat& oimg, int identify) |
| | | { |
| | | |
| | | if (oimg.cols <= 0 || oimg.rows <= 0) { |
| | |
| | | std::cout << "分隔完成: threadid-" << std::this_thread::get_id() << " 耗时:" << time_3 - time_2 << "总耗时:" << time_3 - time_1 << endl; |
| | | |
| | | //结果初始化 |
| | | list<TradeData> resultList; |
| | | list<TradeData*> resultList; |
| | | for (int i = 0; i < rowDataList.size(); i++) { |
| | | TradeData td = TradeData(); |
| | | TradeData *td = new TradeData; |
| | | resultList.push_back(td); |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | int i = 0; |
| | | for (list<TradeData>::iterator ele = resultList.begin(); ele != resultList.end(); ++ele) { |
| | | for (list<TradeData*>::iterator ele = resultList.begin(); ele != resultList.end(); ++ele) { |
| | | switch (notNumberResult[i * 3]) |
| | | { |
| | | case 0: |
| | | (*ele).cancelTimeUnit = TIME_SECOND; break; |
| | | (*ele)->cancelTimeUnit = TIME_SECOND; break; |
| | | case 1: |
| | | (*ele).cancelTimeUnit = TIME_MINITE; break; |
| | | (*ele)->cancelTimeUnit = TIME_MINITE; break; |
| | | case 2: |
| | | (*ele).cancelTimeUnit = TIME_HOUR; break; |
| | | (*ele)->cancelTimeUnit = TIME_HOUR; break; |
| | | |
| | | default: |
| | | break; |
| | |
| | | switch (notNumberResult[i * 3 + 1]) |
| | | { |
| | | case 0: |
| | | (*ele).limitPrice = LIMIT_PRICE_NORMAL; break; |
| | | (*ele)->limitPrice = LIMIT_PRICE_NORMAL; break; |
| | | case 1: |
| | | (*ele).limitPrice = LIMIT_PRICE_UP; break; |
| | | (*ele)->limitPrice = LIMIT_PRICE_UP; break; |
| | | case 2: |
| | | (*ele).limitPrice = LIMIT_PRICE_DOWN; break; |
| | | (*ele)->limitPrice = LIMIT_PRICE_DOWN; break; |
| | | |
| | | default: |
| | | break; |
| | |
| | | switch (notNumberResult[i * 3 + 2]) |
| | | { |
| | | case OPERATE_BUY: |
| | | (*ele).operateType = OPERATE_BUY; |
| | | (*ele)->operateType = OPERATE_BUY; |
| | | break; |
| | | case OPERATE_BUY_CANCEL: |
| | | (*ele).operateType = OPERATE_BUY_CANCEL; |
| | | (*ele)->operateType = OPERATE_BUY_CANCEL; |
| | | break; |
| | | case OPERATE_SELL: |
| | | (*ele).operateType = OPERATE_SELL; |
| | | (*ele)->operateType = OPERATE_SELL; |
| | | break; |
| | | case OPERATE_SELL_CANCEL: |
| | | (*ele).operateType = OPERATE_SELL_CANCEL; |
| | | (*ele)->operateType = OPERATE_SELL_CANCEL; |
| | | break; |
| | | case OPERATE_OPERATE_ERROR: |
| | | (*ele).operateType = OPERATE_OPERATE_ERROR; |
| | | (*ele)->operateType = OPERATE_OPERATE_ERROR; |
| | | break; |
| | | }; |
| | | |
| | |
| | | |
| | | index++; |
| | | } |
| | | |
| | | free(rowSplitDataOneLevel); |
| | | |
| | | |
| | | clock_t time_32 = clock(); |
| | |
| | | } |
| | | |
| | | //循环读取数字 |
| | | list<TradeData>::iterator tradeEle; |
| | | list<TradeData*>::iterator tradeEle; |
| | | index = 0; |
| | | for (tradeEle = resultList.begin(); tradeEle != resultList.end(); tradeEle++) { |
| | | uchar* lineData = numberResult[index]; |
| | |
| | | num.append(to_string(lineData[12 + 2])).append(to_string(lineData[13 + 2])).append(to_string(lineData[14 + 2])).append(to_string(lineData[15 + 2])).append(to_string(lineData[16 + 2])); |
| | | |
| | | |
| | | (*tradeEle).time = time; |
| | | (*tradeEle).num = stoi(num); |
| | | (*tradeEle).price = price; |
| | | (*tradeEle).index = index; |
| | | (*tradeEle).cancelTime = stoi(cancelTime); |
| | | (*tradeEle)->time = time; |
| | | (*tradeEle)->num = stoi(num); |
| | | (*tradeEle)->price = price; |
| | | (*tradeEle)->index = index; |
| | | (*tradeEle)->cancelTime = stoi(cancelTime); |
| | | |
| | | //释放内存 |
| | | free(lineData); |
| | |
| | | img.release(); |
| | | rowDataList.clear(); |
| | | list<int*>().swap(rowDataList); |
| | | free(rowSplitDataOneLevel); |
| | | |
| | | return resultList; |
| | | } |
| | | |
| | |
| | | zeroData[r * _NUMBER_GP_CODE_WIDTH + c] = ImgUtil::NUMS_GP_CODE[0].data.ptr<uchar>(r)[c]; |
| | | } |
| | | } |
| | | int num_length_per_ele = 6; |
| | | int num_length_per_ele = 7; |
| | | int ele_count_per_line = 6; |
| | | int line_number_count = ele_count_per_line * num_length_per_ele; |
| | | unsigned char* totalNumberData = (unsigned char*)malloc(sizeof(unsigned char) * (_NUMBER_GP_CODE_HEIGHT * 1) * _NUMBER_GP_CODE_WIDTH * 10 * line_number_count); |
| | |
| | | //循环读取数字 |
| | | uchar* lineData = numberResult[0]; |
| | | string sellOneTime = ""; |
| | | sellOneTime.append(to_string(lineData[0])).append(to_string(lineData[1])); |
| | | sellOneTime.append(to_string(lineData[1])).append(to_string(lineData[2])); |
| | | sellOneTime.append(":"); |
| | | sellOneTime.append(to_string(lineData[2])).append(to_string(lineData[3])); |
| | | sellOneTime.append(to_string(lineData[3])).append(to_string(lineData[4])); |
| | | sellOneTime.append(":"); |
| | | sellOneTime.append(to_string(lineData[4])).append(to_string(lineData[5])); |
| | | sellOneTime.append(to_string(lineData[5])).append(to_string(lineData[6])); |
| | | |
| | | string buyOneTime = ""; |
| | | buyOneTime.append(to_string(lineData[6])).append(to_string(lineData[7])); |
| | | buyOneTime.append(to_string(lineData[num_length_per_ele*1+1])).append(to_string(lineData[num_length_per_ele * 1 + 2])); |
| | | buyOneTime.append(":"); |
| | | buyOneTime.append(to_string(lineData[8])).append(to_string(lineData[9])); |
| | | buyOneTime.append(to_string(lineData[num_length_per_ele * 1 + 3])).append(to_string(lineData[num_length_per_ele * 1 + 4])); |
| | | buyOneTime.append(":"); |
| | | buyOneTime.append(to_string(lineData[10])).append(to_string(lineData[11])); |
| | | buyOneTime.append(to_string(lineData[num_length_per_ele * 1 + 5])).append(to_string(lineData[num_length_per_ele * 1 + 6])); |
| | | |
| | | |
| | | string sellOnePrice = ""; |
| | | for (int i = 0; i < 6; i++) |
| | | for (int i = 0; i < num_length_per_ele; i++) |
| | | { |
| | | sellOnePrice.append(to_string(lineData[12 + i])); |
| | | if (i == 3) { |
| | | sellOnePrice.append(to_string(lineData[num_length_per_ele * 2 + i])); |
| | | if (i == num_length_per_ele - 3) { |
| | | sellOnePrice.append("."); |
| | | } |
| | | } |
| | | |
| | | string sellOneNum = ""; |
| | | for (int i = 0; i < 6; i++) |
| | | for (int i = 0; i < num_length_per_ele; i++) |
| | | { |
| | | sellOneNum.append(to_string(lineData[18 + i])); |
| | | sellOneNum.append(to_string(lineData[num_length_per_ele * 3 + i])); |
| | | } |
| | | |
| | | string buyOnePrice = ""; |
| | | for (int i = 0; i < 6; i++) |
| | | for (int i = 0; i < num_length_per_ele; i++) |
| | | { |
| | | buyOnePrice.append(to_string(lineData[24 + i])); |
| | | if (i == 3) { |
| | | buyOnePrice.append(to_string(lineData[num_length_per_ele * 4 + i])); |
| | | if (i == num_length_per_ele - 3) { |
| | | buyOnePrice.append("."); |
| | | } |
| | | } |
| | | |
| | | string buyOneNum = ""; |
| | | for (int i = 0; i < 6; i++) |
| | | for (int i = 0; i < num_length_per_ele; i++) |
| | | { |
| | | buyOneNum.append(to_string(lineData[30 + i])); |
| | | buyOneNum.append(to_string(lineData[num_length_per_ele * 5 + i])); |
| | | } |
| | | |
| | | //释放内存 |
| | |
| | | } |
| | | |
| | | //捕获level2的盘口数据 |
| | | list<TradeData> L2DataCapture::captureLevel2TradeData(HWND hwnd, int index) throw(int) { |
| | | list<TradeData*> L2DataCapture::captureLevel2TradeData(HWND hwnd, int index) throw(int) { |
| | | clock_t starttime = clock(); |
| | | cv::Mat img = CaptureUtil::capture(hwnd); |
| | | |
| | |
| | | std::map<string, TradeData> map; |
| | | */ |
| | | try { |
| | | list<TradeData> resultList = captureLevel2TradeData(img, index); |
| | | list<TradeData*> resultList = captureLevel2TradeData(img, index); |
| | | return resultList; |
| | | } |
| | | catch (int code) { |
| | | |
| | | } |
| | | list<TradeData> tempList; |
| | | list<TradeData*> tempList; |
| | | return tempList; |
| | | } |