龙听期货论坛's Archiver

龙听 发表于 2017-10-30 20:41

wealth-lab中文教程

在网上找了好久也没找到有关wealth-lab的教程从今天开始我决定自己写wealth-lab中文教程,吸取别人的经验,结合自己使用wealth-lab的体会,给喜欢wealth-lab的朋友一个入门指导。同时也希望使用wealth-lab高手能够献出自己的经验。大家一起交流。

    我直接切入函式到交易系统写作,简单数据导入大家可以到网上搜一下。Wealth-Lab的WealthScript虽然与T.S的EasyLanguage乃系出同门皆源自Pascal程序语言的语法,但是WealthScript的语法严谨度实在比EasyLangage高太多了!这时不得不承认EasyLanguage实在无愧于EASY之称。

   当你完成数据库建立之后并开启一个价格图形(ChartScripts)之后,你会看到在图形标签(Chart)之后有许多其它功能的标签。点选一下中间的编辑器标签(Editor)你会看到一些系统帮你设定好的样板,这个地方就是我们设计指针与交易系统的地方。

              wealth-lab中文教程
我尝试用口语来叙述这15行,当然你现在或许不懂但未来我们会搞懂一切的,所以不要紧张!
   var Bar: integer;     宣告使用变量Bar,变量Bar为整数
   for Bar := 20 to BarCount - 1 do     for循环范围为指定数据自第20笔到最后
   begin      开始for循环
   if not LastPositionActive then         如果没有未平仓的仓位则
   { Entry Rules }      批注不执行:输入进场规则
   Begin      开始if条件成立
   End        结束if条件成立
   Else        如果不符合if条件
  { Exit Rules }      批注不执行:输入出场平仓的规则
   Begin       开始else条件
   end;       结束else条件
   end;       结束for循环工作
【Comments】程序批注
  这是为了增加我们程序的可读性,所以我们在重要的地方留下批注。这些提示的批注文字并不会在程序中被执行。在WealthScript中有两种方式来表现批注文字;一种为使用大括符{}包含的长文字方块(Blocks)。另一种使用双斜线//表示的单行文字(Single Line)批注。上面样板范例{Entry Rules}批注虽然使用大括符,但因为只使用一行所以也可以写成:
// Entry Rules

【Statements and Delimiters】叙述的段落定义
  每一个独立的程序叙述我们在叙述最终使用分号「;」来做结尾,区分不同的叙述。这些我们应该都已经蛮熟悉的不是吗?

【Variables and Data Types】变量与数据形态
  这是我所谓伤脑筋要如何介绍好的部份啦!我们在设计的过程会设定许多变量来方便我们的运算或临时的数据存取。在EasyLanguage中我们只须在Vars宣告之后天马行空的命些怪名就算交代完毕了,更好的是宣告之后的变量简直就如多拉A梦的万能口袋啥东西都可以装下,可以是01的是非逻辑(Boolean)也可以是不带小数点的整数(Integer),也可以是有小数点的浮点数(Float),更鲜的是非数字的字符串(String)也可以吞得下!各位、使用Wealth-Lab就是告诉你好日子结束了!不过在标准的程序设计环境它就是这样的。
  在计算机世界的数值运算比较像我们现在学校推广的「建构式数学」。正负号与浮点小数都在运算过程被先分离处理,所以早期如286的时代如果有科学运算的需求并希望运算效率得以提升;便需要再花个台币万把块加装一颗编号287的浮点运算处理器。你想56/7要分成8次减法运算跟287可以一次运算,就快了8个时间;而一个程序下来要来几万甚至几百万次这样的运算,时间差别有多大?另外、变量必须被指定还关系到内存长度的分配;像EasyLanguage多拉A梦式的分配记忆空间是非常浪费的,每使用一个变量都是开启一个「很大」的记忆空间,就好像不管你是团体还是单独背包客都配发给你一百坪大的客房。虽然我们现在内存动不动就几G起跳,但是这样的使用内存仍然对程序执行会产生严重的负担。
  在正式的程序设计里我们必须在使用变量前经过宣告,宣告除告诉计算机我们要使用的变量名称外并告诉计算机我们的变量类别(Data Types)。未来我们使用该变量便要小心万不可逾越了我们宣告的类别范围。我们先来了解WealthScript Language给我们的变量分类。
Integer「整数」、基本上就是没有小数点的数字(当然含正负数)。它的范围可以落在-2,147,483,648 到 2,147,483,647内。WealthScript对类别制定也还未到真正程序语言的复杂与多数,所以你可以简单的记住:「只用到整数就宣告integer,会用到小数的场合就宣告float」。因为在一般程序语言里整数还可分成短与长的整数与字符,小数也可分单精度与双精度;这些WealthScript都减化了感谢它!样板第一行就是:
var Bar : integer; 就是我们宣告一个整数的变量名称为「Bar」。这个变量未来是使用在for循环当中,它代表暂时存放我们数据的编号。这里我们应该很容易想到不会碰到有小数的场合,所以我们只要宣告成整数便可。
  Float「浮点小数」、基本上就是含小数点的数字。它的范围落在1.5 x 10^-45 到 3.4 x 10^38;一些我们的每日数据(开高低收)在Wealth-Lab里都是以float方式储存,因为股价或期货价格都有可能包含小数点的数据。
  String「文字符串」、宣告变量将使用在文字使用上。WealthScript并没有限制你文字长度,文字变量内容也可以做运算,但是跟数字运算的意义是不同的。比如说宣告整数的两数相加会是:
var A, B, C : integer;
A := 1234;
B := 5678;
C := A + B;
C等于A加B答案会是「6912」。但是如果是宣告成字符串会成、、

var A, B, C : strring
A := ‘1234’;
B := ’5678’;
C := A + B;
C等于A字符串加B字符串答案会成’12345678’的字符串,了解不同的地方啰?

  Boolean「布尔值逻辑运算」、宣告的变量只能放置或显示真(True)或伪(False);可以使用AND、OR、XOR与NOT的运算得到结果。样板里的if not LastPositionActive then 这行就是NOT运算,NOT是一种「否定」的运算。函式LastPositionActive的结果当有未平仓部位时为「真」True,但是我们要的是空手的状况,所以是在「非有未平仓」。
  Variant「泛用特殊变量」、没错这就是多拉A梦的万能口袋,什么类别数据都可以装进去。你如果不确定或粉懒的那种人尽管使用吧!不过如果你的程序写的够大,那时执行速度变慢时你就知道付出的代价是什么了。
  另外还有两种数据类别Record Types「记录类别」与Enumerated Types「列举类别」,是比较少用目前还是不要多增加你的大脑负担吧!如果未来有碰到运用上的程序代码再做介绍。
【Assignment Statements】数值设定叙述
  第一在WealthScript中对变量的大小写是一视同仁的,就是说采不区分;所以abc变量与ABC对WealthScript是指同一个东西。我们设定变量后、一些场合我们须要自己先设定内容给变量,一般我们使用等号「=」来设定变量内容,在WealthScript文法使用Pascal用法,必须在等号前多加一个冒号「:=」来代表「取代、置入」的功能。等号功能在Pascal用法比较偏向「比较」的功能,如比较两变量内容是否相同时才会使用等号,如: if TodayHi = TodayLo then 。在程序置入变量内容时我们这样写: abc := 1234 或字符串变量 def := ‘Buy at Market’。
【Constants】常数设定与系统预设常数
  变量的相反就是常数。变量在程序执行过程因结果将会经常改变其内容,但常数在宣告的那一刻起到程序中止,其内容都不会与不能被更动。比方说你的程序计算过程要常使用圆周率计算,为求高精度你可能引用3.141592653589793238462643383279来运算,天呀!引用个几次你不会有「花轰」的感觉吗?这时常数宣告就派上用场啦!你可以这么做:
const PI = 3.141592653589793238462643383279
之后、你在程序的任何地方都可以使用「PI」来代表那串缠脚布般的数字。
  WealthScript在系统也预设了许多常数来方便我们使用。这些系统预设常数通常都以井号「#」开头,之后接上可读性高的名称;介绍如下:
  Price Series constants「价格序列常数」;#Open, #High, #Low, #Close, #Volume, #OpenInterest, #Average, #AverageC。其中#Average是「(High + Low) / 2」,而#AverageC则是「(High + Low + Close) / 3」。
  Color value constants「色彩代表数值常数」;#Black, #Maroon, #Green, #Olive, #Navy, #Purple, #Teal, #Gray, #Silver, #Red, #Lime, #Yellow, #Blue, #Fuchsia, #Aqua, #White。使用于背景的#RedBkg, #BlueBkg, #GreenBkg。这些都是使用来显示指针或交易讯号时的颜色。
  Plot formatting constants「作图线条数值常数」;#Thin, #Dotted, #Thick, #Histogram, #ThickHist, #Dots。这些决定指标线条的表现方式,粗细或线条与柱状。还有价格图上的表现方式如K线或BarChart;#OHLC, #Candle, #Line。
  Time Frame constants「数据显示时间常数」;#Daily, #Weekly, #Monthly。
  Day of the Week constants「周交易日常数」;#Monday, #Tuesday, #Wednesday, #Thursday, #Friday。
以上仅列举常会遇到或使用的系统预设常数。今天先谈到这里吧

页: [1]