策略为王源代码项目结构介绍

Published

编译注意事项
策略为王源代码包括NetTS,StkLib,StkNet,StkUI,XpFace五个工程, 使用VS.net 2005 打开工作区Tsking_vc80.sln ,然后点生成,生成解决方案,生成成功后在trunk\Bin会生成可执行文件StkUI.exe, 运行即可。



一、工程XPFace介绍
主要是本软件的一些界面美化的类,放在了这个DLL里面。

二、工程StkLib介绍

CStDatabase功能:从物理盘读取文件数据,具体实现时是以一个接口为主(CSelfDB), 只有主接口取不到数据时,才会循环调用其它接口获取数据。

class CSelfDB : public CQianlong
class CQianlong : public IStStore:数据接口由CQianlong 来实现的。
class CStDatabase : public Object:负责对IStStore的操作,而IStStore又是通过CQianlong 来实现的

解释: IStStore有两个实现

公用实现:\StkLib\Src\StStore.cpp 实现IStStore公用接口函数(IStStore中一部分函数)

下面的实现读取物理文件部分

1.class CQianlong : public IStStore

2.class CSelfDB : public CQianlong 因为CQianlong已经实现了IStStore接口,如果有自己的数据文件,就用自己的数据文件;如果没有自己的数据文件,就使用乾隆的数据文件

3.class CShenglong : public IStStore

4.自己新加了一个大智慧的实现


这个工程是实现股票数据结构、技术指标计算的动态连接库,代码与平台无关。
其中比较重要的几个文件如下:

Database.h 取数据文件接口定义
QianLong.h 钱龙格式数据文件接口定义
SelfDB.h 自有格式数据文件接口定义,除了除权数据和行情数据外,
其他与钱龙一样
Stock.h 股票数据结构定义
Technique.h 技术指标类定义
Container.h 股票信息数据CStockInfo的数组类
Express.h 股票列表视图的列变量定义,以及自定义列的表达式计算
Strategy.h 策略定义
Profile.h 记录软件的用户配置并保存

StKLib.h 定义了历史数据下载要的网址

#define OEM_SERVER_DOMAIN "www.ninebulls.com" // 公司网站地址,

// 注:软件中历史数据下载要从该网址下载

BaseData.cpp 基本资料数据结构类实现
Database.cpp 数据文件读写实现 。本地数据类,提供对磁盘数据的操作接口,包括股票信息,各种周期K线数据,资料,权息资料的读取和安装。包括:class IStStore和class CStDatabase : public Object

DRData.cpp 除权数据结构数组类实现
KData.cpp K线数据结构数组类实现
Report.cpp 行情数据结构数组类实现
Minute.cpp 行情分时数据结构数组类实现
Outline.cpp 行情额外数据结构数组类实现
QianLong.cpp 钱龙数据文件读写实现
SelfDB.cpp 自有格式数据文件读写实现
Stock.cpp 股票数据结构实现
StStore.cpp 数据文件读写实现
TechCL.cpp 自有技术指标
TechEnergy.cpp 能量类技术指标
TechKLine.cpp K线叠加类技术指标
Technique.cpp 技术指标基类
TechSwing.cpp 摆动类技术指标
TechTrend.cpp 趋势类技术指标
TechOther.cpp 其它类技术指标
Container.cpp 股票信息数据CStockInfo的数组类实现
Express.cpp 股票列表视图的列变量定义,以及自定义列的表达式

计算实现

Strategy.cpp 策略定义实现
Profile.cpp 记录软件的用户配置并保存工程StkLib的几个全局静态变量:

定义了历史数据下载的网址: 2019/05/20 by freeman

需要用户登录才行

CSPString CStProfile::GetMainServerDomain()
{
CSPString strResult;
char szMainServerDomainFmt[] = "%sin%su%sls%sco%s";

// ninebul ninebulls.comls.co m

// ^ ^^ ^ ^ ^
strResult.Format( szMainServerDomainFmt, "n", "eb", "l", ".", "m" );
strResult = "tsking.cn"; //old
strResult = "ninebulls.com"; //modify temp by freeman 2019/05/20
return strResult;
}
g_stockcontainer:AfxGetStockContainer() 可以得到该变量的引用, 该变量记录所有股票的行情信息和基本信息,CStockInfo的数组。
g_domaincontainer:AfxGetDomainContainer() 可以得到该变量的引用,
该变量记录所有板块的信息。
g_groupcontainer:AfxGetGroupContainer() 可以得到该变量的引用,该
变量记录所有分组的信息。
g_stdatabase:AfxGetDB() 可以得到该变量的引用,该变量实现了本软件的
数据文件接口。
_stprofile:AfxGetProfile() 可以得到该变量的引用,该变量记录当前软
件的一些设置。



三、工程StkNet介绍

这个工程向外提供了几个类:

CStkReceiver:行情服务器和通视驱动的数据包在这个类里面处理。

// 通视处理数据

LRESULT CStkReceiver::OnStkReceiverTsdata(

UINT wFileType, // 文件类型, 参见 StockDrv.H




LONG lPara)







CNetDatabase:用来连接数据服务器并下载数据.功能:获取数据服务列表;选定其中一个数据服务器;登陆数据服务器;下载股票代码表、日K线数据、财务表、除权表、F10资料等

static CNetSTKDRV gNetTSDLL;用来加载NetTS.DLL从而用来连接行情服务器,因为NetTS.DLL就是用作连接行情服务器的。

static CSTKDRVContainer gSTOCKDLL; 用来加载通视驱动获取行情数据,具体包括通视驱动容器和某个通视驱动

这个工程是实现网络数据自动下载功能的动态连接库。其中比较重要的几个文件如下:
NetDB.h 一些数据下载,安装的接口
HttpClt.h HTTP协议客户端类
InfoZip.h 压缩/解压缩Zip文件
Markup.h XML解析
XMLDoc.h XML辅助
secret.h 主要包括一些注册机的加密算法和读取硬盘序列号的类。
NetDB.cpp CNetDatabase类的实现,一些数据下载,安装的接口实现

从数据服务器下载代码表、日线等 2019/05/20 by freeman
HttpClt.cpp HTTP协议客户端类实现

定义了数据服务器下载的网址
InfoZip.cpp 压缩/解压缩
Markup.cpp XML解析实现
Secret.cpp 加密文件,读取硬盘系列号等
XMLDoc.cpp XML辅助实现
secret.cpp 主要包括一些注册机的加密算法和读取硬盘序列号的类实 现。 其中工程中的

Tongshi Files为支持通视卡行情的实现程序

src\StkNet\Src\STKDRV.cpp提供了两个类

1.CSTKDRV:主要用来加载通视驱动

2.CNetSTKDRV:用来加载NetTs.dll


其中工程中的Yongxin Files为支持清华永新卡行情的实现程序
其中工程中的Receiver Files为本软件的行情接收的实现程序。

CSTKDRVContainer提供的是全推的接口,那么在初始化完成后就可以被动等待接收数据了,接收数据是在CStkReceiver::OnStkReceiverTsdata()里完成的

其中将通视卡和清 华永新卡的数据结构转换成本软件内的通用数据结构,报价(REPORT)、分时(MINUTE)、额外(OUTLINE)、K线(KDATA)、除权信息(DRDATA)

工 程StkNet的全局静态变量:
g_sview:AfxGetSView()可以得到该变量的引用,该变量记录注册信息。



四、工程StkUI介绍

STKUI是属于单文档多视图的程序结构。

该工程生成最终可执行文件,主要是软件的界面。主要几个文件如下:

BaseView.cpp 基本资料视图
ChildFrm.cpp 子窗口框架
MainFrm.cpp 主框架,响应菜单命令
StkUI.cpp 应用程序类,主程序初始化,初始数据读取等
StaticDoc.cpp 文档类
WizardView.cpp 向导视图
SimuView.cpp 策略视图
MarketView.cpp 实时行情视图
SListView.cpp 股票列表视图
StockGraph.cpp 技术指标视图画图类
DrawTech.cpp 画具体技术指标的函数,属于CGraphView类的方法
GraphView.cpp 技术指标视图
StrategyView.cpp 策略树视图
GroupView.cpp 股票分组树视图
TechsView.cpp 技术指标树视图

 

五、 NetTS

这个工程是负责和行情服务器的通信的类库。是一个MFC dll 类。对外提供了下面的函数给主程序调用:

Stock_Init 弹出行情服务器登陆窗口,以便用户点击“连接”后台行情服务器

Stock_Init_Nodialog 不弹出行情服务器登陆窗口,其他与上面一样

Stock_Quit @ 3

GetTotalNumber @ 4

GetStockByNoEx @ 5

GetStockByCodeEx @ 6

SetupReceiver @ 7

GetStockDrvInfo @ 8

IsEngineWorking 表明行情服务器是否已经连接上,是否在工作状态

RequestStockData @ 10

SetAutoReport @ 11

主要涉及策略为王的网络模块,包括服务器的连接,服务器代理的设置
主要信息的保存,数据包的发送,接受,来不及处理的数据包的缓存.

主要类介绍如下:

TW.cpp 主要功能:根据请求数据结构构造出发送二进制数据流;根据收到的二进制数据解析为struct结构
CTSCache 数据包的分割,提取,缓存到文件,文件中数据包的恢复
CQSProfile 关于QuoteServer和Proxy的系统设置的保存和恢复。功能:读取配置文件信息,主要是ip,port,user,password,用户选择的socket类型5项信息。2019/05/20
CProxySetDlg 代理设置对话框

WinTrace 痕迹追踪对象

CSPTime 基本数据时间的操作
CProxySocket 代理连接的处理类,包括HTTP代理,Socks4,Socks5等几种类型。功能:根据传入的参数(主机地址和端口号)连接行情服务器,成功返回true。2019/05/20

功能:读取配置信息->根据配置信息确定socket连接类型(代理、不使用代理)->连接行情服务器->连接是否成功 2019/05/20

Stockdrv.cpp 功能:NetTs.dll 对外暴露的api在里面实现。主要调用CTWSocket,cpp 里面的功能

1.在stkui主界面选择连接行情服务器时,调用int WINAPI Stock_Init(HWND hWnd,UINT Msg,int nWorkMode)弹出登录窗口;

2.在弹出的行情登陆窗口,点击“连接”按钮调用int WINAPI Stock_Init_Nodialog(HWND hWnd,UINT Msg,int nWorkMode,

const char * szAddress, UINT nPort, const char * szUser, const char * szPasswd )连接行情服务器。


tw.h文件中的函数主要涉及到一些数据的基本结构
TSWnd.cpp:CTSWnd 类, 句柄管理及消息的存储和分发;此类用来处理注册进来的窗口句柄,消息号,向句柄发送消息和数据
CTWSocket CProxySocket进一步的封装,数据的请求等均在这里进行处理。负责和行情服务器的通信,具体功能包括登陆行情服务器,是否正在工作状态,让第三方程序发起向服务请求数据的相关函数 2019/06/08 by freeman


base64.h文件,加解密中的一种算法转换

流程说明:

1.用户点击“连接Internet”行情服务器时,程序调用Stockdrv.cpp->Stock_Init()弹出行情登陆窗口。

2.用户点击“登陆窗口->连接”按钮时,程序调用Stockdrv.cpp->Stock_Init_Nodialog()开始连接行情服务器。

3.连接行情服务器执行如下动作:

3.1加载配置文件:CQSProfile.cpp->AfxGetQSProfile().LoadProfile();主要目的是获取用户设置的ip,port

,user,pass,协议类型,是否使用代理5个参数。

3.2 尝试连接行情服务器:src\NetTS\ProxySocket.cpp->ConnectThroughProxy(m_strHostAddress, m_nHostPort)),连接成功返回true。此时只带ip和端口号两个参数。

3.3 连接成功后,开始用户登录:src\NetTS\TWSocket.cpp->CTWSocket::Login(LPCTSTR lpszUser, LPCTSTR lpszPasswd) 客户端发送用户信息,服务器需按约定格式返回信息。