-
Notifications
You must be signed in to change notification settings - Fork 94
/
ubuntu-environment.html
654 lines (555 loc) · 37.6 KB
/
ubuntu-environment.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
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
<!DOCTYPE html>
<html lang="zh"
>
<head>
<title>Ubuntu环境安装 - 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="/ubuntu-environment.html">
<meta name="author" content="用Python的交易员" />
<meta name="description" content="1. 为什么在Ubuntu上运行vn.trader? Windows Windows系统的安装和使用都很方便,上手快 软件种类多 License贵 中病毒的概率高 Linux Linux系统的安装会复杂一些,软件安装很方便,上手慢,需要的学习成本相对来讲会高一些 软件的品种会相对少一些,比如QQ就没有Linux版本,不过如果用于量化交易,建议第三方软件越少越好,减少资源被抢占和中病毒的风险 Ubuntu作为现在流行的一款Linux发行版是有免费版供我们使用的 Linux系统由于使用的人群少,所以中病毒的概率相对低一些 Linux下c\c++源码的编译非常方便,不用安装庞大的IDE,提高开发效率 Linux较新版本的内核中集成了众多硬件的驱动,大部分情况下安装完即可用,不用单独安装第三方驱动。 还有就是众所周知的Linux命令行,强大到可以不用图形界面就可以完成几乎所有的操作 总之,Windows和Linux各有各的特点,都是久经市场考验的操作系统,稳定性都非常的好,不用纠结于用什么环境,只要自己喜欢、习惯就好。 2. 环境安装 版本:Ubuntu 16.04 LTS 语言:简体中文 时区:Shanghai ..." />
<meta property="og:site_name" content="vn.py" />
<meta property="og:type" content="article"/>
<meta property="og:title" content="Ubuntu环境安装"/>
<meta property="og:url" content="/ubuntu-environment.html"/>
<meta property="og:description" content="1. 为什么在Ubuntu上运行vn.trader? Windows Windows系统的安装和使用都很方便,上手快 软件种类多 License贵 中病毒的概率高 Linux Linux系统的安装会复杂一些,软件安装很方便,上手慢,需要的学习成本相对来讲会高一些 软件的品种会相对少一些,比如QQ就没有Linux版本,不过如果用于量化交易,建议第三方软件越少越好,减少资源被抢占和中病毒的风险 Ubuntu作为现在流行的一款Linux发行版是有免费版供我们使用的 Linux系统由于使用的人群少,所以中病毒的概率相对低一些 Linux下c\c++源码的编译非常方便,不用安装庞大的IDE,提高开发效率 Linux较新版本的内核中集成了众多硬件的驱动,大部分情况下安装完即可用,不用单独安装第三方驱动。 还有就是众所周知的Linux命令行,强大到可以不用图形界面就可以完成几乎所有的操作 总之,Windows和Linux各有各的特点,都是久经市场考验的操作系统,稳定性都非常的好,不用纠结于用什么环境,只要自己喜欢、习惯就好。 2. 环境安装 版本:Ubuntu 16.04 LTS 语言:简体中文 时区:Shanghai ..."/>
<meta property="article:published_time" content="2017-03-28" />
<meta property="article:section" content="文章" />
<meta property="article:author" content="用Python的交易员" />
<!-- 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/tutorial.html">
教程
</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>
<li><a href="/pages/document.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">
<section id="content">
<article>
<header class="page-header">
<h1>
<a href="/ubuntu-environment.html"
rel="bookmark"
title="Permalink to Ubuntu环境安装">
Ubuntu环境安装
</a>
</h1>
</header>
<div class="entry-content">
<div class="panel">
<div class="panel-body">
<footer class="post-info">
<span class="label label-default">Date</span>
<span class="published">
<i class="fa fa-calendar"></i><time datetime="2017-03-28T20:33:00+08:00"> 2017-03-28(周二)</time>
</span>
</footer><!-- /.post-info --> </div>
</div>
<h2>1. 为什么在Ubuntu上运行vn.trader?</h2>
<p><strong>Windows</strong></p>
<ul>
<li>Windows系统的安装和使用都很方便,上手快</li>
<li>软件种类多</li>
<li>License贵</li>
<li>中病毒的概率高</li>
</ul>
<p><strong>Linux</strong></p>
<ul>
<li>Linux系统的安装会复杂一些,软件安装很方便,上手慢,需要的学习成本相对来讲会高一些</li>
<li>软件的品种会相对少一些,比如QQ就没有Linux版本,不过如果用于量化交易,建议第三方软件越少越好,减少资源被抢占和中病毒的风险</li>
<li>Ubuntu作为现在流行的一款Linux发行版是有免费版供我们使用的</li>
<li>Linux系统由于使用的人群少,所以中病毒的概率相对低一些</li>
<li>Linux下c\c++源码的编译非常方便,不用安装庞大的IDE,提高开发效率</li>
<li>Linux较新版本的内核中集成了众多硬件的驱动,大部分情况下安装完即可用,不用单独安装第三方驱动。</li>
<li>还有就是众所周知的Linux命令行,强大到可以不用图形界面就可以完成几乎所有的操作</li>
</ul>
<p>总之,Windows和Linux各有各的特点,都是久经市场考验的操作系统,稳定性都非常的好,不用纠结于用什么环境,只要自己喜欢、习惯就好。</p>
<div id="环境安装"></div>
<h2>2. 环境安装</h2>
<ul>
<li>版本:Ubuntu 16.04 LTS</li>
<li>语言:简体中文</li>
<li>时区:Shanghai</li>
<li>硬件:64位,4G内存以上</li>
</ul>
<p>环境安装分为两部分,<strong>快速安装</strong>和<strong>详细流程</strong>。</p>
<p>作为一篇安装指导文章为的就是让我们快速,完美的把系统安装好,好继续后面策略编写,回测等最重要的步骤。所以<strong>快速安装</strong>会提供快速的指导,在短时间内把vn.trader跑起来,并能正常运行。</p>
<p><strong><em>安装流程如下:</em></strong></p>
<p><img alt="安装流程" src="http://img.blog.csdn.net/20170330225443718?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>我们每个人的硬件环境都不一样,难免会出现一些这样那样的错,所以<strong>详细流程</strong>会把每个步骤进行详细的描述和解释,方便大家去有针对性的排错。</p>
<h3>2.1 快速安装</h3>
<h4>2.1.1 Ubuntu的安装</h4>
<blockquote>
<p>引用官方安装教程:<a href="https://www.ubuntu.com/download/desktop/install-ubuntu-desktop">点击查看</a></p>
</blockquote>
<p>这里简单讲一下Ubuntu的引导,分为<strong>传统引导</strong>和<strong>UEFI引导</strong>,不解释细节,从现在的硬件发展趋势来看建议用UEFI引导,而且操作起来非常的简单。把下载下来的ISO文件全部解压到Fat32分区的U盘中,从U盘启动即可,这样安装下来就默认是UEFI引导。</p>
<p>如果在Ubuntu安装过程中有什么问题请看2.2.1</p>
<h4>2.1.2 让后续的安装快一点</h4>
<p>为什么要写这一节?在安装过程当中需要安装和更新很多软件,大家的网络环境各不一样,而且默认环境下有些软件源是指向的国外,直接在默认环境下进行安装和更新可能会很慢,所以需要根据不同的网络环境设置不同的软件源(apt 和 pip)。</p>
<p><strong>1. apt 源</strong></p>
<p>操作步骤如下:</p>
<p><img alt="apt源设置" src="http://img.blog.csdn.net/20170330230534209?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p><img alt="设置" src="http://img.blog.csdn.net/20170219103704720?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p><img alt="软件和更新" src="http://img.blog.csdn.net/20170219103758267?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p><img alt="其他站点" src="http://img.blog.csdn.net/20170219103907086?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p><img alt="选择最佳服务器" src="http://img.blog.csdn.net/20170219103931665?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>进行上述操作之后,系统会花几分钟时间进行服务器速度的测试。测试完毕之后,点击『选择服务器』,后面根据提示输入密码和重新载入软件信息即可。</p>
<p><strong>2. pip 源</strong></p>
<p>创建pip的配置文件,在终端中执行如下命令</p>
<div class="highlight"><pre><span></span>mkdir ~/.pip/
</pre></div>
<p>再执行</p>
<div class="highlight"><pre><span></span>vim ~/.pip/pip.conf
</pre></div>
<p>这时候会出现pip.conf的编辑窗口,把如下内容输入到编辑框里面</p>
<div class="highlight"><pre><span></span><span class="o">[</span>global<span class="o">]</span>
index-url <span class="o">=</span> https://pypi.tuna.tsinghua.edu.cn/simple
</pre></div>
<p>编辑完后保存并退出vim: <strong>ESC</strong> -> <strong>shift+;</strong> -> <strong>x</strong> -> <strong>Enter</strong></p>
<h4>2.1.3 安装Python环境</h4>
<p>下载Anaconda2并安装,在终端中顺序执行下面3行命令</p>
<div class="highlight"><pre><span></span>wget https://repo.continuum.io/archive/Anaconda2-4.0.0-Linux-x86_64.sh
</pre></div>
<div class="highlight"><pre><span></span>chmod +x Anaconda2-4.0.0-Linux-x86_64.sh
</pre></div>
<div class="highlight"><pre><span></span>./Anaconda2-4.0.0-Linux-x86_64.sh
</pre></div>
<p>然后开始进行安装</p>
<p><img alt="Anaconda 安装中" src="http://img.blog.csdn.net/20170219104615393?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>后面根据提示按回车或者输入yes即可,要注意一下在提示是否要在.bashrc文件中更新PATH变量时,一定要输入Yes</p>
<p><img alt="输入yes" src="http://img.blog.csdn.net/20170219105110038?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>安装完毕之后执行如下命令让bash的配置文件即时生效</p>
<div class="highlight"><pre><span></span><span class="nb">source</span> ~/.bashrc
</pre></div>
<p>执行完之后执行python命令进行验证,如果安装成功会出现 Anaconda 4.0.0 的字样</p>
<p><img alt="Python环境安装成功" src="http://img.blog.csdn.net/20170219105202212?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<h4>2.1.4 安装相关依赖项</h4>
<p>执行如下两行命令分别安装应用软件和pip的库</p>
<div class="highlight"><pre><span></span>sudo apt-get install mongodb libboost-all-dev cmake git
</pre></div>
<div class="highlight"><pre><span></span>pip install pymongo qdarkstyle msgpack-python zmq
</pre></div>
<h4>2.1.5 同步代码</h4>
<p>vn.py项目的地址为:<a href="https://github.com/vnpy/vnpy">https://github.com/vnpy/vnpy</a></p>
<p>下载代码有两种方式:下载zip包,用Git代码同步到本地</p>
<p><strong>下载zip包</strong></p>
<p><img alt="下载zip包" src="http://img.blog.csdn.net/20170219105822861?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p><strong>用Git进行同步</strong></p>
<p>有两种方式: https和ssh 。建议还是采用这种方式,因为能随时把vn.py的最新代码同步下来,很方便。而且可以在本地用单独的分支保存自己修改后的代码,和官方代码共存,随时切换。</p>
<p>用https的方式下载代码</p>
<div class="highlight"><pre><span></span>git clone https://github.com/vnpy/vnpy.git
</pre></div>
<p>再细节的操作这边不多说,提供两个官方文档供大家参考。</p>
<p><a href="https://help.github.com/articles/which-remote-url-should-i-use/">https和SSH的选择</a></p>
<p><a href="https://help.github.com/articles/cloning-a-repository/#platform-windows">怎么样把一个项目同步到本地</a> </p>
<h4>2.1.6 运行</h4>
<p>请参见章节4</p>
<h3>2.2 详细流程</h3>
<h4>2.2.1 Ubuntu的安装</h4>
<p>这一步并不复杂,图形化安装界面,按提示操作即可。这里收集了几个还比较常见的问题:</p>
<p><strong>1. 磁盘分区未对齐导致无法安装</strong></p>
<p>详情请见5.1</p>
<p><strong>2. 安装完成后无法引导</strong></p>
<p>详情请见5.2</p>
<h4>2.2.2 让后续的安装快一点</h4>
<p>这一小节注意一下如果在安装完python环境后,pip安装还是很慢或者显示下载包不是来自于https://pypi.tuna.tsinghua.edu.cn,就再执行一下修改pip.conf的操作。</p>
<h4>2.2.3 安装Python环境</h4>
<p>其实ubuntu原生是有python环境的,但是为了方便我们安装Anaconda,自带了非常多的科学计算库,把后面非常繁杂的依赖库安装变得非常简单。</p>
<p>在2.1.3中强调了在更新PATH变量时一定要输入yes,是因为Anaconda采用的是更新PATH变量的方法替换的原生的python环境,如果不输入yes,在终端中执行python时还是会执行系统自带的python。</p>
<p>我们来看看.bashrc文件当中的最后几行内容:</p>
<div class="highlight"><pre><span></span><span class="c1"># added by Anaconda2 4.0.0 installer</span>
<span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="s2">"/home/vnpy/anaconda2/bin:</span>$<span class="s2">PATH"</span>
</pre></div>
<p>这句的含义就是把"/home/vnpy/anaconda2/bin"这个目录加入到了PATH环境变量中。在该目录下有anaconda的python环境,这里有一个细节就是,把该目录加在了原始PATH变量的最前面。</p>
<p>放在最前面是因为当用户在终端里面输入一个命令时,系统会自动搜索PATH环境变量的所有目录,有很多目录供系统去查找,但是会按先后顺序,在前面的优先,所以anaconda用了这个方法替换掉了系统自带的python。</p>
<p>理解了这个原理之后我们做如下事情就非常简单了:</p>
<p><strong>1. 恢复原生的python环境</strong></p>
<p>删除掉.bashrc文件最后那两行即可</p>
<p><strong>2. 在其他的终端软件里面用anaconda的python环境</strong></p>
<p>现在有些朋友用的zsh这款酷炫的终端,而且这款终端中的tab补全不区分大小写,比原有bash方便。在Ubuntu环境中默认执行的终端软件是bash,安装完后,如果再用zsh类似的其他终端,你会发现执行python时还是系统自带的python。</p>
<p>首先我们要知道.bashrc是什么文件,为什么安装anaconda时要修改这个文件。</p>
<p>.bashrc是当用户启动bash时会优先执行的脚本文件,所以执行其他的终端是不会执行"<em>export PATH...</em>"这一句的,所有执行python时还是执行系统自带的python。</p>
<p>那如果要在zsh里面使用anaconda的python环境需要怎么操作呢?bash有.bashrc文件,当然zsh也有相同功能的.zshrc文件,所以把上面那两句加到.zshrc文件里面即可。</p>
<p>最后让.zshrc文件的变更立即生效:</p>
<div class="highlight"><pre><span></span><span class="nb">source</span> ~/.zshrc
</pre></div>
<h4>2.2.4 安装相关依赖项</h4>
<p>主要是安装软件(apt)和python (pip)库,下面介绍一下各依赖项</p>
<p><strong>mongodb</strong></p>
<p>mongodb是提供mongodb数据库服务的软件,经过测试发现在ubuntu16.04 LTS下安装后默认就安装了系统服务,而且是自启动。</p>
<p>如果大家想查看mongodb的数据文件和日志文件的具体位置,可以用如下命令进行查看</p>
<div class="highlight"><pre><span></span>head /etc/mongodb.conf
</pre></div>
<p>会显示如下内容</p>
<div class="highlight"><pre><span></span># mongodb.conf
# Where to store the data.
dbpath=/var/lib/mongodb
# where to log
logpath=/var/log/mongodb/mongodb.log
</pre></div>
<p>dbpath 是数据文件存储路径,logpath 是日志文件存储路径</p>
<p><strong>libboost-all-dev</strong></p>
<p>用c++编程必然会用到的库之一,提供了队列,智能线程,Python调用C++库等非常实用的功能</p>
<p>如果没有这个库,会影响
1. vn.trader对ctp和lts接口的识别(菜单没有“连接ctp”和“连接lts”的菜单项)
2. ctp和lts接口的重新编译</p>
<p>如果发现vn.trader安装完毕后,vtMain.py也能打开,但是菜单没有“连接ctp”和“连接lts”的菜单项,请见 5.3</p>
<p><strong>cmake</strong></p>
<p>一款编译工具,如果只是运行vn.trader是不用安装该依赖项的,如果自己需要修改ctp或者lts接口的代码并重新编译时才需要</p>
<p><strong>git</strong></p>
<p>代码版本管理软件git的客户端程序</p>
<p><strong>pymongo</strong></p>
<p>python访问mongodb的库</p>
<p><strong>qdarkstyle</strong></p>
<p>vn.trader的黑色主题(qt4),大家可以根据自己的需要进行安装</p>
<p><strong>msgpack-python</strong></p>
<p>一种数据封装格式,比json更快,更小,而且封装二进制数据会更方便,现在用在了vn.trader的前后端通信功能中</p>
<p><strong>zmq</strong></p>
<p>消息系统,vn.trader前后端分离后用到的消息系统</p>
<div id="API编译"></div>
<h4>2.2.5 同步代码</h4>
<p>用git管理代码是非常方便的,可以自己开分支进行开发,可以随时更新vnpy的最新代码,包括开发分支(dev)和稳定分支(master)。</p>
<p>具体细节这里不讲太多,不然要单独开几遍文章了,可以自己去找资料学习。</p>
<h2>3. API编译</h2>
<p>现有版本在ubuntu下有ctp、lts和oanda接口可供使用,ctp和lts可以重新编译,oanda是REST API的纯Python接口,无需进行本地编译即可跨平台使用。</p>
<p>如果有需要,我们是可以对接口的封装代码进行修改并重新编译的。先了解一下编译出来的输出文件是什么?如何使用? 本小节以ctp行情模块为例来讲解一下。</p>
<p><img alt="vnctpmd" src="http://img.blog.csdn.net/20170330230952246?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>这是ctp行情模块的调用关系,libthostmduserapi.so 这个是<strong>官方提供</strong>的行情库,是给c++使用的。vnctpmd.so 是我们自己写的一层封装,给python调用的,这就是我们可以重新编译的模块。</p>
<h3>3.1 同步代码</h3>
<p>请参照2.1.5,编译的源码目录是vn.ctp,里面有行情模块vnctpmd和交易模块vnctptd。</p>
<h3>3.2 编写CMakeLists.txt</h3>
<p>其实该文件已经编写好了,只要不是变更太多,都不需要变更该文件。这个文件是编译工具cmake配置文件。其实在ubuntu下编译api非常的方便,安装依赖库cmake和boost,运行build.sh就行。</p>
<h3>3.3 安装依赖库</h3>
<p>请参照2.2.4中的libboost-all-dev和cmake项</p>
<h3>3.4 运行 build.sh</h3>
<p>在终端中进行到 vnpy/vn.ctp 目录下,运行 </p>
<div class="highlight"><pre><span></span>./build.sh
</pre></div>
<h3>3.5 验证是否编译成功</h3>
<p>进入到vnpy/vn.ctp/build/lib/目录下,先查看是否有vnctpmd.so和vnctptd.so这两个文件。如果有则用ls查看这两个文件的修改时间是否和执行build.sh的时间相吻合。</p>
<p>如果<strong>文件存在</strong>而且<strong>时间和最后一次编译时间相吻合</strong>,则表明编译成功,而且在执行build.sh时这两个文件已经被复制到了vn.trader的ctpGateway目录下,最新的编译版本可直接供vn.trader使用。</p>
<div id="成功运行"></div>
<h2>4. 成功运行</h2>
<p>运行vn.trader有两种方式:<strong>普通模式</strong> 和 <strong>rpc模式</strong></p>
<p><strong>普通模式</strong></p>
<p>进入到源码目录vn.trader下执行</p>
<div class="highlight"><pre><span></span>python vtMain.py
</pre></div>
<p><strong>rpc模式</strong></p>
<p>运行server</p>
<div class="highlight"><pre><span></span>sudo bash
</pre></div>
<p>进入到源码目录vn.trader下</p>
<div class="highlight"><pre><span></span>python vtServer.py
</pre></div>
<p>新打开终端进入到源码目录vn.trader下,运行client</p>
<div class="highlight"><pre><span></span>python vtClient.py
</pre></div>
<p>能在其他机器上运行客户端吗?当然可以。</p>
<p>在执行上一条命令前,在vtClient.py中找到</p>
<div class="highlight"><pre><span></span><span class="c1"># 创建客户端</span>
<span class="n">reqAddress</span> <span class="o">=</span> <span class="s1">'tcp://localhost:2014'</span>
<span class="n">subAddress</span> <span class="o">=</span> <span class="s1">'tcp://localhost:0602'</span>
</pre></div>
<p>把localhost替换成服务端的ip地址即可</p>
<p><img alt="成功运行" src="http://img.blog.csdn.net/20170219105949754?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>??是不是少了点什么?说好了的ctp和lts接口呢?
参照5.3操作完之后再次运行</p>
<p><img alt="成功运行" src="http://img.blog.csdn.net/20170318214726101?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<h2>5. 附录</h2>
<h3>5.1 Ubuntu安装提示分区未对齐错误导致无法安装</h3>
<p>这个错很大机率发生在某些机械硬盘手动分区后</p>
<p><img alt="分区对齐错误" src="http://img.blog.csdn.net/20170219143236749?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<p>不过解决这个问题也不复杂,在Windows下用DiskGenius先把区分好,不管是传统启动还是GPT+UEFI都可以按下图的分区来分。分好后再重新安装即可,重新安装时可以选择重新格式化。</p>
<p><img alt="分区后" src="http://img.blog.csdn.net/20170219173220086?watermark/2/text/dm5weQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /></p>
<h3>5.2 Ubuntu安装完成后无法引导</h3>
<p>这个问题多发生在机器存在多硬盘的情况下,这个问题怀疑是Grub的引导机制存在逻辑问题引起的,还未经证实。</p>
<p>Linux的硬盘设备文件命名机制是这样的:Sata硬盘为 /dev/sda, 最后那个a很关键,如果是两块硬盘就会有两个文件: /dev/sda, /dev/sdb 这个很好理解,分区描述文件怎么命名呢?如果只有一块硬盘 /dev/sda,第一个分区是 /dev/sda1,第二个分区是 /dev/sda2,这样依次往下累加。</p>
<p>问题就出在如果有两块硬盘谁是 sda 谁是 sdb 呢?实测下来发现是会变的,但是分区的顺序不会变,所以有时启动不了就是很正常的了。</p>
<p>根因找到了下面就来讲讲解决方案,用grub进行手动引导。那怎么把grub运行起来呢?用一块ubuntu live的U盘或者光盘就行。</p>
<blockquote>
<p>推荐一个非常简单的制作usb ubuntu live的方案就是把下载好了的ubuntu的iso文件解压到U盘(Fat32格式)上,就可以通过UEFI启动,比传统的mbr启动简单多了。</p>
</blockquote>
<ol>
<li>通过live ubuntu设备启动到grub引导界面,按下c键。这个操作会进入到grub的命令输入界面。</li>
<li>输入ls命令。这个操作会显示出有的硬盘设备,如:(hd1,gpt1),这表示是第1块硬盘的第一个gpt分区。这个命令会显示出很多分区,我们需要选择出挂载了根(/)的分区。</li>
<li>用ls (hd1,gpt1)命令找出挂载了根(/)的分区。当命令的返回结果中有ext*格式的字样就说明该分区是挂载了根的分区,并进行记录,这里先假设(hd1,gpt1)就是根分区。</li>
<li>执行如下命令</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">set</span> <span class="nv">root</span><span class="o">=(</span>hd1,gpt1<span class="o">)</span>
</pre></div>
<div class="highlight"><pre><span></span>linux /boot/vmlinuz* ro <span class="nv">root</span><span class="o">=</span>/dev/sdb1
</pre></div>
<p>上面这条命令需要说明一下:
- /boot/vmlinuz*中星号代码每个人的环境中后面的文件名可能不一样,并不是真正的星号。</p>
<blockquote>
<p>然后这里有个小技巧,set root=(hd1,gpt1)这条命令执行完后,如果(hd1,gpt1)确实是挂载了根的分区,输入到/boot/vmlinuz时按tab会对文件名进行自动补全,否则会提示出错。
- sdb1和gpt1中的最后一个数字应该是一样的,就是说如果已经确定为gpt1了,那么肯定为sd*1,这里的星号表示可能为a-z任意的字母,并不一定是b,这就是需要去测试的,如果有多块硬盘,先试一下sda1,再试一下sdb1,总会有一次可以成功启动。</p>
</blockquote>
<div class="highlight"><pre><span></span>initrd /initrd.img
</pre></div>
<div class="highlight"><pre><span></span>boot
</pre></div>
<p>如果没有成功,则再次重启(命令:reboot),尝试sda1,sdb1,sdc1?在不同的分区描述文件名中去尝试。</p>
<p>如果成功,打开终端执行如下命令修复当前引导</p>
<div class="highlight"><pre><span></span>sudo grub-install --target<span class="o">=</span>x86_64-efi --efi-directory<span class="o">=</span>/boot/efi
</pre></div>
<p>如果下次还有硬盘变化,再次启动不了,再从头执行整个修复过程即可。</p>
<h3>5.3 无法识别ctp和lts接口</h3>
<p>该问题的现象是系统菜单里面没有“连接ctp”和“连接lts”这两个菜单项</p>
<p>原理请参见章节3的那张流程图,缺失在最后一个环节,所以只需要把最后一个库放在vnctpmd.so能找到的位置即可。</p>
<p>/lib和/usr/lib是ubuntu默认的两个库目录,我们不用去想怎么添加共享库目录,我们只用把文件拷贝到这两个目录当中的任意一个即可,我们这个非系统库,所以选择/usr/lib这个目录。</p>
<p>ubuntu中有文件链接的概念,相当于windows下的快捷方式的概念,所以并不需要真正的把文件拷贝过去。</p>
<p>创建链接的脚本已经准备好,放在终端里面执行即可。大家注意一下把/home/vnpy/vnpy改成自己的源码目录。</p>
<div class="highlight"><pre><span></span><span class="c1">#ctp</span>
sudo ln -s /home/vnpy/vnpy/vn.ctp/ctpapi/x64_linux/libthostmduserapi.so /usr/lib/libthostmduserapi.so
sudo ln -s /home/vnpy/vnpy/vn.ctp/ctpapi/x64_linux/libthosttraderapi.so /usr/lib/libthosttraderapi.so
<span class="c1">#lts</span>
sudo ln -s /home/vnpy/vnpy/vn.lts/ltsapi/securitymduserapi.so /usr/lib/libsecuritymduserapi.so
sudo ln -s /home/vnpy/vnpy/vn.lts/ltsapi/securityqueryapi.so /usr/lib/libsecurityqueryapi.so
sudo ln -s /home/vnpy/vnpy/vn.lts/ltsapi/securitytraderapi.so /usr/lib/libsecuritytraderapi.so
</pre></div>
<h3>5.3 ta-lib的安装</h3>
<div class="highlight"><pre><span></span>conda install -c quantopian ta-lib<span class="o">=</span>0.4.9
</pre></div>
<p>该命令同时也会对Anaconda2进行更新,所以执行后可能不仅仅是安装ta-lib,也有可能要安装其他的更新包,询问是否要处理时输入Y即可。</p>
<h3>5.4 mongodb 客户端的安装</h3>
<p>我这边选择了两款:robomongo,免费,速度快,但是没有自动补全提示,打开软件后缺少一些统计信息(集合的记录条数等等)。mongobooster,收费,有自动补全提示,打开软件后每个集合的统计信息很详细,但是如果集合里面的数据一多就慢。大家可以根据自己的喜好进行选择。</p>
<p><strong>robomongo</strong></p>
<p>下载官方的deb包双击安装即可,安装完毕在搜索器里面输入mongobooster,即可搜索出来。</p>
<p><strong>mongobooster</strong></p>
<p>下载官方的压缩包,解压,进入到bin目录,双击robomongo即可。</p>
<p>如果要在桌面上建立快捷方式也非常简单:</p>
<ul>
<li>在bin目录下右键robomongo,选择“创建链接”</li>
<li>把新创建出来的链接文件拖到桌面即可</li>
</ul>
<h3>5.5 python IDE的安装</h3>
<p>推荐pycharm和sublime。还是主推一下pycharm,工程化开发非常方便,也适合新人,有自动提示,符号查找,一键格式化,调试等功能,非常强大。sublime比较简洁,打开速度快。各有各的特点和应用场景。</p>
<p><strong>pycharm</strong></p>
<p>下载官方压缩包,解压,进入到bin目录,找到pycharm.sh,在终端里面运行该文件即可。其实也是可以创建快捷方式的,具体创建方式大家可以自行查找。</p>
<p>把快捷方式的运行命令设置成:</p>
<div class="highlight"><pre><span></span><span class="s2">"/home/vnpy/soft/pycharm-2016.3.2/bin/pycharm.sh"</span> %f
</pre></div>
<p><strong>sublime</strong></p>
<p>下载官方deb包,双击安装即可。</p>
<h3>5.6 对ubuntu的远程操作</h3>
<p>对于ubuntu的远程操作有两种方式:ssh和vnc</p>
<p><strong>ssh</strong></p>
<div class="highlight"><pre><span></span>apt-get install openssh-server
</pre></div>
<p>客户端用ssh命令连接即可。</p>
<p><strong>vnc</strong></p>
<p>会相对复杂一点,引用一个第三方的脚本</p>
<div class="highlight"><pre><span></span>su root
</pre></div>
<div class="highlight"><pre><span></span>wget https://github.com/longhr/ubuntu1604hub/raw/master/ubuntu1604VNC.sh
</pre></div>
<div class="highlight"><pre><span></span>chmod u+x ubuntu1604VNC.sh
</pre></div>
<div class="highlight"><pre><span></span>./ubuntu1604VNC.sh
</pre></div>
<p>客户端在官方网站上下载vncviewer即可,各个平台的都有。</p>
</div>
<!-- /.entry-content -->
</article>
</section>
</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="https://github.com/vnpy/vnpy/tree/master/vn.lts" target="_blank">
LTS接口
</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>