-
Notifications
You must be signed in to change notification settings - Fork 94
/
index2.html
537 lines (512 loc) · 30.2 KB
/
index2.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
<!DOCTYPE html>
<html lang="zh"
>
<head>
<title>vn.py</title>
<!-- Using the latest rendering mode for IE -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/images/favicon.png" rel="icon">
<link rel="canonical" href="">
<meta name="author" content="用Python的交易员" />
<!-- Open Graph tags -->
<meta property="og:site_name" content="vn.py" />
<meta property="og:type" content="website"/>
<meta property="og:title" content="vn.py"/>
<meta property="og:url" content=""/>
<meta property="og:description" content="vn.py"/>
<!-- Bootstrap -->
<link rel="stylesheet" href="/theme/css/bootstrap.readable.min.css" type="text/css"/>
<link href="/theme/css/font-awesome.min.css" rel="stylesheet">
<link href="/theme/css/pygments/monokai.css" rel="stylesheet">
<link rel="stylesheet" href="/theme/css/style.css" type="text/css"/>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?e8c7573f82d43fa50c895a8e28c49ceb";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/" class="navbar-brand">
<img src="/images/favicon.png" width=""/> vn.py </a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li><a href="/pages/quickstart.html">
Quick Start
</a></li>
<li><a href="/pages/blog.html">
日志
</a></li>
<li><a href="/pages/screenshot.html">
截图
</a></li>
<li><a href="/pages/community.html">
社区
</a></li>
<li><a href="/pages/api.html">
API接口
</a></li>
<li><a href="/pages/download.html">
下载
</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="/archives.html"><i class="fa fa-th-list"></i><span class="icon-label">Archives</span></a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
</div> <!-- /.navbar -->
<!-- Banner -->
<style>
#banner{
background-image:url("/images/banner.png");
}
</style>
<div id="banner">
<div class="container">
<div class="copy">
<h1>vn.py</h1>
<p class="intro">Developed by traders, for traders.</p>
</div>
</div>
</div><!-- End Banner -->
<div class="container">
<div class="row">
<div class="col-sm-9">
<article>
<h2><a href="/talib-tutorial.html">使用TA-Lib在vn.trader上开发CTA交易策略</a></h2>
<div class="summary"><h2>TA-Lib简介</h2>
<p>作为一套被业界广泛应用的开源技术分析库(包含技术指标计算和K线模式识别等),TA-Lib自2001年发布以来已经有了十多年的历史。TA-Lib中一共包含大约125个技术指标的计算函数,同时提供了包括C/C++、Java、Perl、Python等多种语言的API。</p>
<h2>有什么用</h2>
<p>简单来说TA-Lib就是提供了一堆经过长期实践检验的技术指标计算函数。基于现成的计算函数,开发新策略雏形、快速验证某个灵感的时间可以大幅缩短,否则想象一下每开发个策略都要自己实现要用的技术指标,未免太浪费时间。</p>
<p>但是除此以外,TA-Lib还可以有一些其他的用法,举两个例子。</p>
<p><strong>百科全书 </strong></p>
<p>坚持每天收盘后选一个自己没用过的指标,输入数据,画个图、跑个回测,开发量化策略很很多其他的技术一样都是熟能生巧。</p>
<p>另外,所有的技术指标在被开发出来的时候,背后都有一定的金融逻辑原理(行为金融学)的支撑,生搬硬套固然不可取,但是放着前人经验完全不看,整天凭自己的空想就弄个机器学习算法在数据上瞎折腾岂不是更浪费时间?</p>
<p><strong>Alpha库</strong></p>
<p>很大一部分CTA类的策略可以总结为几个简单的逻辑框架,比如趋势策略通常可以分解成以下部分:趋势信号(通常是基于某几个参数计算出来的指标值超过某个阈值)、信号过滤(和趋势信号类似)、出场方案(固定点数/百分比的止盈和止损,移动止损)。</p>
<p>因此把逻辑框架的代码搭好后,就可以通过机器学习算法来实现一种自动的策略开发方式:</p>
<ol>
<li>
<p>从TA-Lib中选取两个指标分别作为趋势信号和信号过滤,结合止损、止盈方案 ...</p></li></ol>
<a class="btn btn-default btn-xs" href="/talib-tutorial.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/blog-2016-plan.html">2016年vn.py项目计划</a></h2>
<div class="summary"><p>首先要感谢所有vn.py用户,是你们的热情让vn.py项目在2015年从最初单纯的交易API接口Python封装一步步成长为现在较为全面的交易程序开发框架。</p>
<p>截止2016年2月15日,vn.py项目在Github上收获了583个Star和362个Fork,且已有6位贡献者提交了代码。项目的用户包括:私募基金,证券自营、资管,期货公司,高校的金融研究院系,个人投资者等,机构用户加起来至少20多家(和作者交流过的)。</p>
<h2>总结一下项目当前取得的进展</h2>
<ol>
<li>
<p>较为丰富的Python交易和数据API接口,基本覆盖了国内所有常规交易品种(股票、期货、期权),具体包括:</p>
<ul>
<li>CTP(vn.ctp)</li>
<li>飞马(vn.femas)</li>
<li>LTS(vn.lts)</li>
<li>金仕达黄金(vn.ksgold)</li>
<li>金仕达期权(vn.ksotp)</li>
<li>通联数据(vn.datayes)</li>
</ul>
</li>
<li>
<p>简洁易用的事件驱动引擎(vn.event),作为事件驱动型交易程序的核心</p>
</li>
<li>
<p>针对如何使用API和事件驱动引擎开发交易程序的示例(vn.demo)</p>
</li>
<li>
<p>开箱即用的实盘交易平台vn ...</p></li></ol>
<a class="btn btn-default btn-xs" href="/blog-2016-plan.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-8.html">Python量化交易平台开发教程系列8-顶层GUI界面开发(2)</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<h2>前言</h2>
<p>接上一篇,主要分为两块:展示动态语言特性简化GUI开发的组件以及功能调用组件。</p>
<h2>动态语言的方便之处</h2>
<div class="highlight"><pre><span></span><span class="c1">########################################################################</span>
<span class="k">class</span> <span class="nc">AccountMonitor</span><span class="p">(</span><span class="n">QtGui</span><span class="o">.</span><span class="n">QTableWidget</span><span class="p">):</span>
<span class="sd">"""用于显示账户"""</span>
<span class="n">signal</span> <span class="o">=</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">pyqtSignal</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">Event</span><span class="p">()))</span>
<span class="n">dictLabels</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'AccountID'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'投资者账户'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'PreBalance'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'昨结'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'Withdraw'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'出金'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'Deposit'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'入金'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'FrozenCash'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'冻结资金'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'FrozenMargin'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'冻结保证金'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'FrozenCommission'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">u'冻结手续费'</span>
<span class="n">dictLabels</span><span class="p">[</span><span class="s1">'FrozenTransferFee ...</span></pre></div>
<a class="btn btn-default btn-xs" href="/basic-tutorial-8.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-7.html">Python量化交易平台开发教程系列7-顶层GUI界面开发(1)</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<h2>前言</h2>
<p>终于有时间来写第一篇顶层GUI界面开发相关的教程了,之前实在是事情太多,跟各位读者抱个歉。</p>
<p>整合底层接口的各项功能到中层引擎中后,当我们开发顶层应用时(GUI或者策略算法),只需知道中层引擎对外提供的主动API函数以及事件引擎中相关的事件类型和数据形式即可。</p>
<p>在GUI和策略算法这两个主要类型的顶层应用中,作者选择先介绍GUI开发的原因是:目前国内支持用户定制化开发GUI界面的量化平台少之又少,而包含一个比较全面的GUI开发教程的则据我所知还没有。随着国内越来越多的衍生品推出(期权、分级基金、未来的反向基金),很多新型的交易策略从全自动转向了半自动,经常需要交易员的手动干预(启动暂停策略、盘中微调参数等),以及投资组合层面的风险管理(期权希腊值、分级基金行业暴露等),这种情况下传统上仅支持策略算法开发的量化交易平台变得越发难以满足交易员的需求(包括作者本人),所以估计这方面的文章更能填补当前市场需求的空缺(笑...)。</p>
<h2>PyQt</h2>
<p>目前Python上主要的GUI开发工具包括:tkinter、PyQt、PyGTK和wxPython,笔者选择PyQt的主要原因是:</p>
<ol>
<li>
<p>Anaconda中已经包含(早期版本中包含的是LGPL协议的Pyside,稳定性不如PyQt)</p>
</li>
<li>
<p>另一个内置GUI库tkinter的功能太弱</p>
</li>
</ol>
<p>网上对这四款GUI开发工具比较分析的文章很多,有兴趣的读者可以自己搜搜看。</p>
<p>接下来的几篇GUI开发教程会假设读者已经对PyQt开发有了一定的了解,主要针对和量化交易平台开发相关的部分,需要补充基础知识的读者建议参考以下资源:</p>
<ol>
<li>
<p>zetcode.com,上面的教程简单明了,从头到尾做一遍对PyQt的工作原理基本就有个全面的了解了</p>
</li>
<li>
<p>Rapid ...</p></li></ol>
<a class="btn btn-default btn-xs" href="/basic-tutorial-7.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-6.html">Python量化交易平台开发教程系列6-中层引擎设计</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<h2>前言</h2>
<p>中层引擎在设计上主要是为了进一步封装底层接口所暴露出的API函数,使得其更容易被上层的GUI和策略组件调用。本篇的内容会相对简单,主要以LTS接口DEMO为例介绍一些设计方面的思路。</p>
<p>相关的示例都是基于vn.demo中的LTS接口DEMO,发布在:
<a href="https://github.com/vnpy/vnpy/tree/master/vn.demo/ltsdemo">https://github.com/vnpy/vnpy/tree/master/vn.demo/ltsdemo</a></p>
<h2>中层引擎设计</h2>
<h3>构造函数</h3>
<div class="highlight"><pre><span></span><span class="c1">########################################################################</span>
<span class="k">class</span> <span class="nc">MainEngine</span><span class="p">:</span>
<span class="sd">"""主引擎,负责对API的调度"""</span>
<span class="c1">#----------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""Constructor"""</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ee</span> <span class="o">=</span> <span class="n">EventEngine</span><span class="p">()</span> <span class="c1"># 创建事件驱动引擎</span>
<span class="bp">self</span><span class="o">.</span><span class="n">md</span> <span class="o">=</span> <span class="n">DemoMdApi</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ee</span><span class="p">)</span> <span class="c1"># 创建API接口</span>
<span class="c1">#self.md = DemoL2Api(self.ee) # 如果使用L2行情就改为这行</span>
<span class="bp">self</span><span class="o">.</span><span class="n">td</span> <span class="o">=</span> <span class="n">DemoTdApi ...</span></pre></div>
<a class="btn btn-default btn-xs" href="/basic-tutorial-6.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-5.html">Python量化交易平台开发教程系列5-底层接口对接</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<h2>前言</h2>
<p>从本篇教程开始,所有的开发都会在Python环境中进行(谢天谢地可以和C++说再见了)。</p>
<p><strong>通常情况下,一个交易程序的架构会由以下三个部分组成:</strong></p>
<ul>
<li>
<p>底层接口:负责对接行情和交易API,将数据推送到系统核心中,以及发送指令(下单、数据请求等)</p>
</li>
<li>
<p>中层引擎:用于整合程序中的各个组件(包括底层接口、数据库接口等等)到一个对象中,便于顶层UI调用</p>
</li>
<li>
<p>顶层GUI:用于显示数据和调用中层引擎暴露的主动函数,实现各项具体功能</p>
</li>
</ul>
<p><img alt="AlgoTrader架构" src="http://7x2w1m.com1.z0.glb.clouddn.com/%E6%95%99%E7%A8%8B5algotrader_%E6%9E%84%E6%9E%B6.png" /></p>
<p><strong>上面这张图展示的是国外的一款开源交易平台AlgoTrader的架构:</strong></p>
<ul>
<li>
<p>两边的Adapters代表的是底层接口(左边数据,右边交易)</p>
</li>
<li>
<p>红色圆柱形中包括的是中层引擎架构,事件驱动方面使用了Esper复杂事件处理(CEP)引擎,同时内置了一些常用的功能引擎,如期权定价引擎、外汇对冲模块、投资组合管理模块等</p>
</li>
<li>
<p>上方的Strategy1、2等代表的是顶层应用(算法策略、GUI界面等),通过调用中层引擎的功能来实现用户所需的业务</p>
</li>
</ul>
<p><strong>vn.py和AlgoTrader的比较:</strong></p>
<p>这里对两个项目做一个简单的比较。</p>
<p>vn.py优势:</p>
<ul>
<li>
<p>语言易用:Java语言比Python啰嗦</p>
</li>
<li>
<p>架构简洁 ...</p></li></ul>
<a class="btn btn-default btn-xs" href="/basic-tutorial-5.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/blog-20150420.html">2015/4/20 项目开发日志</a></h2>
<div class="summary"><h2>目前项目状态</h2>
<p>差不多一个多月的时间,完成了CTP API的vn.ctp封装,以及用于展示如何使用vn.py框架开发的vn.demo,两者均已发布到github上。</p>
<p>接下来将会发布几篇和vn.demo相关的教程。</p>
<h2>vn.demo介绍</h2>
<p>该demo主要用于展示如何使用vn.py框架开发交易平台,使用了vn.event和vn.lts模块。</p>
<p><img alt="enter image description here" src="http://7x2w1m.com1.z0.glb.clouddn.com/%E6%95%99%E7%A8%8B4vndemo.jpg" /></p>
<h2>如何使用</h2>
<p>常规用户可以直接运行exe文件夹下的demoMain.exe。</p>
<p>对开发有兴趣的用户需要根据vnpy.org的教程3安装相关的开发环境,然后通过demoMain.py和demoMain.pyw(无cmd界面)运行。</p>
<h2>实现功能</h2>
<p>demo的实现参考了盈佳和尔易的LTS交易平台,功能如下:</p>
<ol>
<li>
<p>行情、持仓、账户、成交、报单的监控</p>
</li>
<li>
<p>平台的日志记录</p>
</li>
<li>
<p>下单交易,实现了LTS提供的所有订单类型和交易类型</p>
</li>
<li>
<p>双击报单监控中的单元格撤单,以及下单交易组件一键全撤</p>
</li>
</ol>
<h2>文件说明</h2>
<ul>
<li>demoApi.py主要包含了程序的底层接口,对vn.lts中的API进行了简化封装</li>
<li>demoEngine.py主要包含了程序的中间层,负责调用底层接口</li>
<li>demoUi ...</li></ul>
<a class="btn btn-default btn-xs" href="/blog-20150420.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-4.html">Python量化交易平台开发教程系列4-事件驱动引擎原理和使用</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<h2>前言</h2>
<p>从这篇开始,后面的教程都会基于Python(终于可以跟C++说再见了)。</p>
<p>经过上一篇复杂繁琐的API编译后,我们已经有了一个可以在Python环境中用来收行情和发单的接口,但是尽管作者在Github上也放了简单的API功能测试代码作为接口使用方法的示例,绝大部分读者应该对于如何用这个接口去开发自己的交易系统毫无头绪。</p>
<p>类似的情况也常常发生于当我们从万得、恒生、网上的其他开源项目(比如pyctp)等等拿到开发接口和文档示例后:</p>
<p>看了半天觉得似乎上面讲的都懂。</p>
<p><img alt="enter image description here" src="http://7x2w1m.com1.z0.glb.clouddn.com/%E6%95%99%E7%A8%8B4%E6%8E%A5%E5%8F%97%E6%8C%91%E6%88%98.jpg" /></p>
<p>但要写个自己的系统依旧不知道从何处下手。</p>
<p><img alt="enter image description here" src="http://7x2w1m.com1.z0.glb.clouddn.com/%E6%95%99%E7%A8%8B4%E4%B8%8D%E7%9F%A5%E6%89%80%E6%8E%AA.jpg" /></p>
<p>所以在搞定交易接口后,我们开发交易系统的第一步就是要弄清楚系统的工作原理,在读完这篇教程后,你应该至少不会再对如何写一个交易系统茫然无措了。</p>
<h2>事件驱动</h2>
<h3>计算机程序分类</h3>
<p>所有的计算机程序都可以大致分为两类:脚本型(单次运行)和连续运行型(直到用户主动退出)。</p>
<p><strong>脚本型</strong></p>
<p>脚本型的程序包括最早的批处理文件以及使用Python做交易策略回测等等,这类程序的特点是在用户启动后会按照编程时设计好的步骤一步步运行,所有步骤运行完后自动退出。</p>
<p><strong>连续运行型</strong></p>
<p>连续运行型的程序包含了操作系统和绝大部分我们日常使用的软件等等,这类程序启动后会处于一个无限循环中连续运行,直到用户主动退出时才会结束。</p>
<h3>连续运行型程序</h3>
<p>我们要开发的交易系统就是属于连续运行型程序,而这种程序根据其计算逻辑的运行机制不同,又可以粗略的分为时间驱动和事件驱动两种。</p>
<p><strong>时间驱动</strong></p>
<p>时间驱动的程序逻辑相对容易设计,简单来说就是让电脑每隔一段时间自动做一些事情。这个事情本身可以很复杂、包括很多步骤,但这些步骤都是线性的,按照顺序一步步执行下来。</p>
<p>以下代码展示了一个非常简单的时间驱动的Python程序 ...</p>
<a class="btn btn-default btn-xs" href="/basic-tutorial-4.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-3.html">Python量化交易平台开发教程系列3-vn.py项目中API封装的编译</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<h2>前言</h2>
<p>经历了两篇的理论折磨后,本篇教程开始进入实际操作的环节,这里作者假设读者是毫无C++经验的用户,操作一步步配图,还有问题的来<a href="https://github.com/vnpy/vnpy">vn.py项目的github主页</a>上提问。</p>
<p>本篇将会包含的内容:</p>
<ol>
<li>
<p>安装Anaconda (一次安装搞定95%以上量化相关包的Python发行版)</p>
</li>
<li>
<p>安装Visual Studio</p>
</li>
<li>
<p>编译Boost库</p>
</li>
<li>
<p>编译vn.lts</p>
</li>
</ol>
<h2>安装Anaconda</h2>
<p>在<a href="http://repo.continuum.io/archive/index.html">Anaconda历史版本</a>中下载1.9.2(win 32位版本)。</p>
<p><img alt="enter image description here" src="http://7x2w1m.com1.z0.glb.clouddn.com/%E6%95%99%E7%A8%8B3anaconda.jpg" /></p>
<p>下载好后双击安装,流程没有特别需要注意的,安装文件夹作者选的是D:\Anaconda,读者可以自己选择,注意最后一步编译vn.lts中设置时的文件夹必须是这里的安装文件夹。</p>
<p>为什么不用最新版本:尝试过使用2.1.0版,发现有一些包在我的电脑上存在兼容性问题(可能因为中文支持不好),需要修改一些.py文件里的源代码,太过麻烦,而且1.9.2到2.1 ...</p>
<a class="btn btn-default btn-xs" href="/basic-tutorial-3.html">more ...</a>
</div>
</article>
<hr/>
<article>
<h2><a href="/basic-tutorial-2.html">Python量化交易平台开发教程系列2-类CTP交易API的Python封装设计</a></h2>
<div class="summary"><p>原创文章,转载请注明出处:用Python的交易员</p>
<p>(本篇教程包含的内容太多也太复杂,有不少读者反应看不懂,因为本身也不是使用vn.py必须掌握的知识,这篇教程暂时处于半完成状态,等多收集些读者的建议后会再做一个比较大的修订)</p>
<h2>为什么要封装API</h2>
<p>直接原因就是C++的API没法直接在Python里用,不过这个回答有点太简单,这里我们稍微做一些拓展解释:</p>
<ol>
<li>
<p>C++ API中很多函数的调用参数是ApiStruct.h(参见上一篇)中定义的结构体,而在Python中我们既无法直接创建这些结构体(主动函数),也无法提取结构体中包含的数据(回调函数)。</p>
</li>
<li>
<p>Python虚拟机是基于C语言实现的,所有的Python对象,哪怕只是一个整数或者字符串,在C的环境中都是一个PyObject对象(好吧,我知道C里没有对象,只有结构体,但估计90%的读者都不在乎这个区别)。用户如果在Python中直接传递一个参数到C++环境里,C++是无法识别的(Python:买入1手股指, C++:你要买入多少?)。</p>
</li>
<li>
<p>Python只能加载封装为PyObject对象的模块,因此原生C++的API在Python中连加载都加载不了。</p>
</li>
</ol>
<h2>封装后API的工作流程</h2>
<h3>主动函数</h3>
<ol>
<li>
<p>用户在Python程序中调用封装API的主动函数,并直接传入Python变量(PyObject对象)作为参数。</p>
</li>
<li>
<p>封装API将Python变量转换成C ...</p></li></ol>
<a class="btn btn-default btn-xs" href="/basic-tutorial-2.html">more ...</a>
</div>
</article>
<hr/>
<ul class="pagination">
<li class="prev"><a href="/index.html">«</a>
</li>
<li class=""><a
href="/index.html">1</a></li>
<li class="active"><a
href="/index2.html">2</a></li>
<li class=""><a
href="/index3.html">3</a></li>
<li class="next"><a
href="/index3.html">»</a></li>
</ul>
</div>
<div class="col-sm-3" id="sidebar">
<aside>
<section class="well well-sm">
<ul class="list-group list-group-flush">
<li class="list-group-item"><h4><i class="fa fa-home fa-lg"></i><span class="icon-label">Social</span></h4>
<ul class="list-group" id="social">
<li class="list-group-item"><a href="http://github.com/vnpy/vnpy"><i class="fa fa-github-square fa-lg"></i> Github</a></li>
</ul>
</li>
<li class="list-group-item"><h4><i class="fa fa-external-link-square fa-lg"></i><span class="icon-label">Links</span></h4>
<ul class="list-group" id="links">
<li class="list-group-item">
<a href="http://www.vnpie.com" target="_blank">
官方论坛 - 维恩的派
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.trader" target="_blank">
交易平台
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.event" target="_blank">
事件引擎
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.ctp" target="_blank">
CTP接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.xspeed" target="_blank">
飞创接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.femas" target="_blank">
飞马接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.ksotp" target="_blank">
金仕达期权接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.ksgold" target="_blank">
金仕达黄金接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.sgit" target="_blank">
飞鼠接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/dev/vn.qdp" target="_blank">
QDP接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.oanda" target="_blank">
OANDA接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.ib" target="_blank">
IB接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.shzd" target="_blank">
直达期货接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.okcoin" target="_blank">
OKCoin接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.datayes" target="_blank">
通联数据接口
</a>
</li>
<li class="list-group-item">
<a href="http://github.com/vnpy/vnpy/tree/master/vn.demo" target="_blank">
开发DEMO
</a>
</li>
</ul>
</li>
</ul>
</section>
</aside>
</div>
</div>
</div>
<footer>
<div class="container">
<hr>
<div class="row">
<div class="col-xs-10">© 2017 用Python的交易员
· Powered by <a href="https://github.com/DandyDev/pelican-bootstrap3" target="_blank">pelican-bootstrap3</a>,
<a href="http://docs.getpelican.com/" target="_blank">Pelican</a>,
<a href="http://getbootstrap.com" target="_blank">Bootstrap</a> </div>
<div class="col-xs-2"><p class="pull-right"><i class="fa fa-arrow-up"></i> <a href="#">Back to top</a></p></div>
</div>
</div>
</footer>
<script src="/theme/js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/theme/js/bootstrap.min.js"></script>
<!-- Enable responsive features in IE8 with Respond.js (https://github.com/scottjehl/Respond) -->
<script src="/theme/js/respond.min.js"></script>
<script src="/theme/js/bodypadding.js"></script>
</body>
</html>