📄 stock.c
字号:
#include <windows.h>
#include <memory.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include "stock.h"
#include "Fstrcv.h"
#include "index.h"
#include "stockrcv.h"
#include "stock.h"
#include "demo.h"
extern HWND hWndBak;
extern UINT MsgBak;
extern FILE *fp;
int Factor;
int factor[4]={ 1,10,100,1000 };
unsigned char nunit;
RCV_REPORT_STRUCTEx ReportData;
RCV_MINUTE_STRUCTEx m_Minute[240];
RCV_DATA ReceiveData;
void SendIndexMessage(int Market)
{
int j=0;
ReportData.m_wMarket=Market;
memcpy(ReportData.m_szLabel,QL_Index.IndexCode,strlen(QL_Index.IndexCode));
memcpy(ReportData.m_szName,"",0);
if(Market==SH_MARKET_EX)
{
ReportData.m_szLabel[8]='\0';
if(strcmp(ReportData.m_szLabel,"1A0001")==0)memcpy(ReportData.m_szName,"上证指数",8);
if(strcmp(ReportData.m_szLabel,"1A0002")==0)memcpy(ReportData.m_szName,"上证A股",8);
if(strcmp(ReportData.m_szLabel,"1A0003")==0)memcpy(ReportData.m_szName,"上证B股",8);
if(strcmp(ReportData.m_szLabel,"1B0001")==0)memcpy(ReportData.m_szName,"上证工业",8);
if(strcmp(ReportData.m_szLabel,"1B0002")==0)memcpy(ReportData.m_szName,"上证商业",8);
if(strcmp(ReportData.m_szLabel,"1B0004")==0)memcpy(ReportData.m_szName,"上证地产",8);
if(strcmp(ReportData.m_szLabel,"1B0005")==0)memcpy(ReportData.m_szName,"公共事业",8);
if(strcmp(ReportData.m_szLabel,"1B0006")==0)memcpy(ReportData.m_szName,"上证综合",8);
if(strcmp(ReportData.m_szLabel,"1B0007")==0)memcpy(ReportData.m_szName,"上证30",8);
}
if(Market==SZ_MARKET_EX)
{
ReportData.m_szLabel[4]='\0';
if(strcmp(ReportData.m_szLabel,"2A01")==0)memcpy(ReportData.m_szName,"成分指数",8);
if(strcmp(ReportData.m_szLabel,"2A02")==0)memcpy(ReportData.m_szName,"成分A股",8);
if(strcmp(ReportData.m_szLabel,"2A03")==0)memcpy(ReportData.m_szName,"成分B股",8);
if(strcmp(ReportData.m_szLabel,"2B01")==0)memcpy(ReportData.m_szName,"深证工业",8);
if(strcmp(ReportData.m_szLabel,"2B02")==0)memcpy(ReportData.m_szName,"深证商业",8);
if(strcmp(ReportData.m_szLabel,"2B03")==0)memcpy(ReportData.m_szName,"深证金融",8);
if(strcmp(ReportData.m_szLabel,"2B04")==0)memcpy(ReportData.m_szName,"深证地产",8);
if(strcmp(ReportData.m_szLabel,"2B05")==0)memcpy(ReportData.m_szName,"深证事业",8);
if(strcmp(ReportData.m_szLabel,"2B06")==0)memcpy(ReportData.m_szName,"深证综合",8);
if(strcmp(ReportData.m_szLabel,"2B07")==0)memcpy(ReportData.m_szName,"深证基金",8);
if(strcmp(ReportData.m_szLabel,"2C01")==0)memcpy(ReportData.m_szName,"深证指数",8);
if(strcmp(ReportData.m_szLabel,"2C02")==0)memcpy(ReportData.m_szName,"深证A股",8);
if(strcmp(ReportData.m_szLabel,"2C03")==0)memcpy(ReportData.m_szName,"深证B股",8);
}
ReportData.m_fLastClose=(float)(QL_Index.LastCloseIndex/1000.0);
ReportData.m_fOpen=(float)(QL_Index.OpenIndex/1000.0);
ReportData.m_fHigh=(float)(QL_Index.HighestIndex/1000.0);
ReportData.m_fLow=(float)(QL_Index.LowestIndex/1000.0);
ReportData.m_fNewPrice=(float)(QL_Index.LatestIndex/1000.0);
ReportData.m_fVolume=(float)QL_Index.Volume;
ReportData.m_fAmount=(float)(QL_Index.Amount*100.0);
for(j=0;j<3;j++)
{
ReportData.m_fBuyPrice[j]=0;
ReportData.m_fBuyVolume[j]=0;
ReportData.m_fSellPrice[j]=0;
ReportData.m_fSellVolume[j]=0;
}
ReceiveData.m_wDataType=0;
ReceiveData.m_nPacketNum=1;
ReceiveData.m_File.m_dwAttrib=0;
ReceiveData.m_File.m_dwLen=0;
ReceiveData.m_File.m_dwSerialNo=0;
memcpy(ReceiveData.m_File.m_szFileName,"",0);
ReceiveData.m_bDISK=0;
ReceiveData.m_pReport=&ReportData;
SendMessage(hWndBak,MsgBak,RCV_REPORT,(LPARAM)&ReceiveData);
// lpFunction = GetProcAddress(hLibrary, "CtrlIntr");
// (* lpFunction)(0);
}
void SendStockMessage(int Market)
{
ReportData.m_wMarket=Market;
sprintf(ReportData.m_szLabel,"%04ld",tn.StockNo);
memcpy(ReportData.m_szName,tn.StockName,strlen(tn.StockName));
ReportData.m_fLastClose=Divide100(tn.LastClose);
ReportData.m_fOpen=Divide100(tn.Open);
ReportData.m_fHigh=Divide100(tn.Highest);
ReportData.m_fLow=Divide100(tn.Lowest);
ReportData.m_fNewPrice=Divide100(tn.Newest);
ReportData.m_fVolume=(float)tn.Volume;
ReportData.m_fAmount=(float)(tn.Amount*10000.0);
ReportData.m_fBuyPrice[0]=(float)(tn.Buy/100.0);
ReportData.m_fBuyVolume[0]=(float)(tn.BuyHands1);
ReportData.m_fSellPrice[0]=(float)(tn.Sell/100.0);
ReportData.m_fSellVolume[0]=(float)(tn.SellHands1);
ReportData.m_fBuyPrice[1]=(float)(tn.BuyPrice2/100.0);
ReportData.m_fBuyVolume[1]=(float)(tn.BuyHands2);
ReportData.m_fSellPrice[1]=(float)(tn.SellPrice2/100.0);
ReportData.m_fSellVolume[1]=(float)(tn.SellHands2);
ReportData.m_fBuyPrice[2]=(float)(tn.BuyPrice3/100.0);
ReportData.m_fBuyVolume[2]=(float)(tn.BuyHands3);
ReportData.m_fSellPrice[2]=(float)(tn.SellPrice3/100.0);
ReportData.m_fSellVolume[2]=(float)(tn.SellHands3);
ReceiveData.m_wDataType=FILE_HTML_EX;
ReceiveData.m_nPacketNum=1;
ReceiveData.m_File.m_dwAttrib=0;
ReceiveData.m_File.m_dwLen=0;
ReceiveData.m_File.m_dwSerialNo=0;
memcpy(ReceiveData.m_File.m_szFileName,"",0);
ReceiveData.m_bDISK=0;
ReceiveData.m_pReport=&ReportData;
SendMessage(hWndBak,MsgBak,RCV_REPORT,(LPARAM)&ReceiveData);
// lpFunction = GetProcAddress(hLibrary, "CtrlIntr");
// (* lpFunction)(0);
}
void ReceiveIndex(int Market)
{
int j;
memmove(uIndex.Str, rs.Info, rs.InfoLength);
if(uIndex.Index.DataType == 0)
{
Factor = uIndex.Index.LineNumber & 0x60;
Factor >>= 5;
uIndex.Index.LineNumber &= 0x1f;
memmove(QL_Index.IndexCode, uIndex.Index.IndexCode, 6);
QL_Index.IndexCode[6] = '\0';
ExpandData(&QL_Index.LastCloseIndex, uIndex.Index.LastCloseIndex, Factor);
ExpandData(&QL_Index.OpenIndex, uIndex.Index.OpenIndex, Factor);
ExpandData(&QL_Index.HighestIndex, uIndex.Index.HighestIndex, Factor);
ExpandData(&QL_Index.LowestIndex, uIndex.Index.LowestIndex, Factor);
ExpandData(&QL_Index.LatestIndex, uIndex.Index.LatestIndex, Factor);
ExpandData(&QL_Index.Volume, uIndex.Index.Volume, 3);
nunit=(uIndex.Index.Unit >> 4) & 0x0f;
for(j=0; j<4; j++)
{
if(nunit & 0x01)
{
QL_Index.Volume *= factor[j];
nunit>>=1;
break;
}
}
ExpandData(&QL_Index.Amount,uIndex.Index.Amount,3);
nunit=(uIndex.Index.Unit) & 0x0f;
for(j=0;j<4;j++)
{
if(nunit&0x01)
{
QL_Index.Amount *= factor[j];
break;
}
nunit>>=1;
}
SendIndexMessage(Market);
}
}
int MinNumber=0;
unsigned char MinLabelBak[7]="";
void ReceiveMin()
{
// int j;
struct tm when;
time_t now,Time;
unsigned long l=0;
int Market=0;
unsigned char Label[7];
unsigned char Data[36];
if(rs.Info[0]=0x16)
Market=SH_MARKET_EX;
else
if(rs.Info[0]=0x26)
Market=SZ_MARKET_EX;
else return;
time( &now );
when = *localtime( &now );
memmove(Data, rs.Info, rs.InfoLength);
if(Market==SH_MARKET_EX)
{
memcpy(Label,Data+1,6);
Label[6]='\0';
}else
if(Market==SZ_MARKET_EX)
{
memcpy(Label,Data+1,4);
Label[4]='\0';
}
if(strcmp(MinLabelBak,Label)!=0)
{
ReceiveData.m_wDataType=FILE_MINUTE_EX;
ReceiveData.m_nPacketNum=MinNumber;
ReceiveData.m_File.m_dwAttrib=0;
ReceiveData.m_File.m_dwLen=0;
ReceiveData.m_File.m_dwSerialNo=0;
memcpy(ReceiveData.m_File.m_szFileName,"",0);
ReceiveData.m_bDISK=0;
ReceiveData.m_pMinute=m_Minute;
SendMessage(hWndBak,MsgBak,RCV_FILEDATA,(LPARAM)&ReceiveData);
// fprintf(fp,"Label=%s\n",MinLabelBak);
// fprintf(fp,"-------------------------------------------------Number=%d--\n",MinNumber);
////////////////////////////
memcpy(MinLabelBak,Label,7);
memcpy(m_Minute[0].m_head.m_szLabel,Label,7);
m_Minute[0].m_head.m_dwHeadTag=EKE_HEAD_TAG;
m_Minute[0].m_head.m_wMarket=Market;
Time=0;
*((unsigned char *)&Time+0)=Data[7];
*((unsigned char *)&Time+1)=Data[8];
if(Time<120)
{
when.tm_hour=9;
when.tm_min=30;
when.tm_min+=Time;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[1].m_time=mktime(&when);
when.tm_hour=9;
when.tm_min=30;
when.tm_min+=Time+1;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[2].m_time=mktime(&when);
}else
{
when.tm_hour=13;
when.tm_min=0;
when.tm_min+=Time-120;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[1].m_time=mktime(&when);
when.tm_hour=13;
when.tm_min=0;
when.tm_min+=Time+1-120;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[2].m_time=mktime(&when);
}
memcpy(&l,Data+10,4);
m_Minute[1].m_fPrice=(float)(l/1000.0);
memcpy(&l,Data+14,4);
m_Minute[1].m_fVolume=(float)(l/100.0);
memcpy(&l,Data+18,4);
m_Minute[1].m_fAmount=(float)(l/10000.0);
memcpy(&l,Data+22,4);
m_Minute[2].m_fPrice=(float)(l/1000.0);
memcpy(&l,Data+26,4);
m_Minute[2].m_fVolume=(float)(l/100.0);
memcpy(&l,Data+30,4);
m_Minute[2].m_fAmount=(float)(l/10000.0);
MinNumber=3;
/* fprintf(fp,"/n%s:\n",Label);
fprintf(fp,"1:\n");
fprintf(fp," m_time=%d\n",m_Minute[1].m_time);
fprintf(fp," m_fPrice=%7.2f\n",m_Minute[1].m_fPrice);
fprintf(fp," m_fVolume=%7.2f\n",m_Minute[1].m_fVolume);
fprintf(fp," m_fAmount=%7.2f\n",m_Minute[1].m_fAmount);
*/
}else
{
Time=0;
*((unsigned char *)&Time+0)=Data[7];
*((unsigned char *)&Time+1)=Data[8];
if(Time<120)
{
when.tm_hour=9;
when.tm_min=30;
when.tm_min+=Time;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[MinNumber].m_time=mktime(&when);
when.tm_hour=9;
when.tm_min=30;
when.tm_min+=Time+1;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[MinNumber+1].m_time=mktime(&when);
}else
{
when.tm_hour=13;
when.tm_min=0;
when.tm_min+=Time-120;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[MinNumber].m_time=mktime(&when);
when.tm_hour=13;
when.tm_min=0;
when.tm_min+=Time+1-120;
when.tm_hour+=(when.tm_min/60);
when.tm_min=(when.tm_min%60);
m_Minute[MinNumber+1].m_time=mktime(&when);
}
memcpy(&l,Data+10,4);
m_Minute[MinNumber].m_fPrice=(float)(l/1000.0);
memcpy(&l,Data+14,4);
m_Minute[MinNumber].m_fVolume=(float)(l/100.0);
memcpy(&l,Data+18,4);
m_Minute[MinNumber].m_fAmount=(float)(l/10000.0);
memcpy(&l,Data+22,4);
m_Minute[MinNumber+1].m_fPrice=(float)(l/1000.0);
memcpy(&l,Data+26,4);
m_Minute[MinNumber+1].m_fVolume=(float)(l/100.0);
memcpy(&l,Data+30,4);
m_Minute[MinNumber+1].m_fAmount=(float)(l/10000.0);
/* fprintf(fp,"%d:\n",MinNumber);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -