编写公式的基础(飞弧用)

来源:767股票知识网 时间:2019-05-15 14:24:04 责编:767股票 人气:

公式平台--C语言基础  (李济安)

    公式平台包含一个C语言编译器,可以通用函数与C语言混写,在创作公式的时候,可以在一个公式中对多个周期的数据、其他股票的数据同时进行操作,具有丰富、全面的内部函数和操盘指令。 所以本软件的公式平台可以支持非常复杂的公式创造,任何想法、思想都可以实现。 希望大家应用C语言这种目前最为成熟强大的编程语言,进入技术分析的高境界。

    变量及常量

    创作一个公式,也就是将我们的想法表达出来。在这个过程中,我们免不了要记录一些状态,记录这些状态,我们就需要"变量"这个概念。比如,我们要求近十天的收盘价的平均值,需要10个数相加,这时候,我们需要一个计数器,这个计数器,我们就可以用一个整数变量来表示;又需要一个存放累加和的地方,因为累加和可能存在小数,我们就不能再用整形变量表示,就要使用浮点数来表示了。这个过程我们可以表达如下:

float sum = 0.0; //申请一个浮点变量,并赋初值0
for(int i=0; i < 10; i++) //循环10次,i就是计数器, 在这里被表示成一个整形变量。
{
if(i > DataLen) //数据不够了,终止
break;
sum += 收盘价[DataLen-i];
}
float ret = 0; //存放结果的浮点变量,赋初值0
if(i>0)
ret = sum/i;

    这个过程现在看不懂,没有关系,在这里,我们只要了解到变量的意义就可以了。每声明一个变量,计算机就会为这个变量申请一个存储空间。更具变量的类型不同,计算机将为他申请不同的空间,并使用不同的存储方法。我们可以总结说:变量就是在计算的过程中用来存放我们一些状态和结果的地方。那么,有哪些变量的类型呢?我们常见的有以下几种:

    1.整形:只能记整数,比如-1、-100、0、1、100等。这样的变量计算机将申请4字节(计算机最基本的存储单位)空间,不能表示小数,数的表示范围可以从-2147483648~2147483647。表达方式:int. 比如我们需要声明一个叫做A 的整形变量,可以用下面方式表达:
int A;

    最后的':'代表这个声明的结束,在C语言中,';'总是代表一个语句的结束。如果我们希望一下声明多个整形变量,我们在每个变量之间需要用','隔开,比如,我们希望声明两个分别加A和B的整形变量,可以用下面方式表达:767股票学习网 http://www.767gupiao.com收集整理
int A,B;

注意,','以及';'不能是中文的。

    很多时候,我们希望在变量声明的时候付给他初值,这时候,我们可以这样来表达:
int A =1,B=100;

    2.浮点型:可以记小数,比如-1.5、-100.123、0.001、1.29、100.667等。这样的变量计算机将申请4字节(计算机最基本的存储单位)空间,数的表示范围可以从3.4x10-38E~3.4x10+38E。表达方式:float. 如果我们需要声明一个叫做A 的整形变量,可以用下面方式表达:
float A;

    浮点型在运算过程中和整形相比较慢,但是计数的范围却大大增大了。

    数据类型还有很多种,我们列表如下:

名称 描述 所占空间(BYTE) 范围 特点
整形 int 4 -2147483648~2147483647 整数,有符号(可正可负)
浮点型 float 4 3.4x10-38E~3.4x10+38E 可记小数,有符号(可正可负)
双精度浮点型 double 8 小数点后位数更长,有符号(可正可负)
布尔类型 Bool 4 0-1 只有TRUE(1)和FALSE(0)两个值
字符型 char 1 -128~127 整数,有符号(可正可负)
无符号字符型 byte 1 0-255 整数,无符号(无负数)
短整形 short 2 -32768~32767 整数,有符号(可正可负)
无符号短整形 word 2 0-65535 整数,无符号(无负数)
无符号整形 dword 4 0~4294967295 整数,无符号(无负数)

    还有很多数据类型, 鉴于简明的需要,不再赘述.

    所谓常量,也就是不变的量.这些量和变量一样可以参与运算.比如0、5.5等都叫做常量。常量也有数据类型,比如布尔常量我们就两个: TRUE 或者 FALSE, 前者代表'真',后者代表'假'.不同的常量付给相同类型的变量,比如:
BOOL A = TRUE; //将TRUE付给变量A;

    常量的表达方式很多,我们简单举例说明两种。

    十进制常量, 可以用我们的常用习惯苏书写,比如0.5, 0.8等等,这种常量可以非给int,float,等类型。

    十六进制常量,需要在数字前面添加0x,比如0xff00ff, 这在我们平台中表达颜色的时候有用,比如 两点棒线扩展(V1,V2,C,C1,C2,W,F) 这个函数需要我们制定两个颜色,而颜色需要一个三字节的16进制的常量表示,0xAABBCC 的AA,BB,CC分别代表红色的亮度、绿色的亮度、蓝色的亮度。
运算及赋值

    我们创造公式,离不开运算。比如 a = b*c+20/d 就表示了将b和c的乘积加上20除以d所得到的商,赋值给变量a.其中*、+、/都是运算符号,告诉计算机进行什么操作。

    运算符非常主要分为三大类: 算术运算符, 关系运算符与逻辑运算符, 按位运算符。除此之外, 还有一些用于完成特殊任务的运算符。下面分别进行介绍其中的三类。

    1.算术运算符

操作符 作用
+ 加, 一目取正
- 减, 一目取负
* 乘
/ 除
% 取模
-- 减1
++ 加1


    一目和二目操作
一目操作是指对一个操作数进行操作。例如: -a是对a进行一目负操作。
二目操作(或多目操作)是指两个操作数(或多个操作数)进行操作。
加、减、乘、除、取模的运算容易理解。需要注意的是除法和取模运算。
例如:
15/2 是15除以2商的整数部分7
15%2 是15除以2的余数部分1
对于取模运算符"%", 不能用于浮点数。

    增量运算
有两个很有用的运算符,那就是增1和减1运算符"++"和"--", 运算符"++"是操作数加1, 而"--" 则是操作数减1。
例如:
x=x+1 可写成x++, 或++x
x=x-1 可写成x--, 或--x
x++(x--)与++x(--x)在上例中没有什么区别, 但x=m++和x=++m却有很大差别。
x=m++ 表示将m的值赋给x后, m加1。
x=++m 表示m先加1后, 再将新值赋给x。

    2.逻辑运算符
逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。

    操作符 作用
&& 逻辑与
|| 逻辑或
! 逻辑非

    3.关系运算符
关系运算符是比较两个操作数大小的符号。

操作符 作用
> 大于
> = 大于等于
< 小于
< = 小于等于
== 等于
!= 小不等于

    关系运算符和逻辑运算符的关键是真(true)和假(false)的概念。true可以是不为0的任何值, 而false则为0。 使用关系运算符和逻辑运算符表达式时, 若表达式为真(即true)则返回1, 否则, 表达式为假(即false), 则返回0。
例如:
100>99 返回1
10>(2+10) 返回0
!1&&0 返加0
    对上例中表达式!1&&0, 先求!1和先求1&&0将会等于出不同的结果, 那么何者优先呢? 这在Turbo C中是有规定的。 有关运算符的优先级本节后面将会讲到。

    联合操作
C中有一特殊的简写方式, 它用来简化一种赋值语句, 适用于所有的双目运算符。其一般形式为:
< 变量 >=< 变量 >< 操作数 >< 表达式 >
相当于
< 变量 >< 操作数 >=< 表达式 >
例如:
a=a+b 可写成 a+=b
a=a&b 可写成 a&=b
a=a/(b-c) 可写成 a/=b-c

    C运算符的优先级
C规定了运算符的优先次序即优先级。 当一个表达式中有多个运算符参加运算时, 将按下表所规定的优先级进行运算。表中优先级从上往下逐渐降低, 同一行优先级相同。
例如: 767股票学习网 http://www.767gupiao.com收集整理
表达式 10>4&&!(100 < 99)||3 < =5 的值为1
表达式 10>4&&!(100 < 99)&&3 < =5 的值为0

    表达式 优先级 从高到低排列
()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员) 最高
!(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址) ↑
*(指针所指内容) type(函数说明) sizeof(长度计算) │
*(乘) /(除) %(取模) │
+(加) -(减) │
<<(位左移) >>(位右移) │
<(小于) <=(小于等于) >(大于) >=(大于等于) │
==(等于) !=(不等于) │
&(位与) │
^(位异或) │
|(位或) │
&&(逻辑与) │
||(逻辑或) │
表达式) │
= += -=(联合操作) │
,(逗号运算符) 最低

 常用语句语法

平台中的C语法可以简单概括为以下几个特点:

代码一般用小写字母书写;
大多数语句结尾必须要用";"作为终止符, 否则C不认为该语句结束;
一个较完整的程序大致包括:变量定义、控制流程语句语句等;
注释部分包含在"/*"和"*/"之间, 单行的注释可以用//开始.
变量在使用之前必须先定义其数据类型,未经定义的变量被当成浮点数组使用。定义变量类型可在任意位置,一旦定义,后面的语句都可使用.
大、小写字母是有区别的, 相同字母的大、小写代表不同的变量。
书写格式非常灵活, 没有严格限制。
条件语句
条件语句的一般形式为:
if(表达式)
语句1;
else
语句2;

上述结构表示: 如果表达式的值为非0(TURE)即真, 则执行语句1, 执行完语句1从语句2后开始继续向下执行; 如果表达式的值为0(FALSE)即假, 则跳过语句1而执行语句2。所谓表达式是指关系表达式和逻辑表达式的结合式, 关于表达式前面已作过介绍, 这是不再重复。

注意:

1. 条件执行语句中"else 语句2;"部分是选择项, 可以缺省, 此时条件语句变成:
if(表达式) 语句1;
表示若表达式的值为非0则执行语句1 , 否则跳过语句1继续执行。

2. 如果语句1或语句2有多于一条语句要执行时, 必须使用"{"和"}" 把这些语句包括在其中, 此时条件语句形式为:
if(表达式)
{
语句体1;
}
else
{
语句体2;
}

3. 条件语句可以嵌套, 也就是语句体中还可以包含条件语句。
例如:
if(x>20||x < -10)

int a;
if(y < =100&&y >x)
a = 1;
else
a = 0;


4. 可用阶梯式if-else-if结构。
阶梯式结构的一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
.
.
.
else
语句n;

这种结构是从上到下逐个对条件进行判断, 一旦发现条件满点足就执行与它 有关的语句, 并跳过其它剩余阶梯; 若没有一个条件满足, 则执行最后一个else 语句n。最后这个else常起着"缺省条件"的作用。

同样, 如果每一个条件中有多于一条语句要执行时, 必须使用"{"和"}"把这些语句包括在其中。

循环语句
C提供三种基本的循环语句: for语句、while语句和do-while语句。

1.for循环
for循环是开界的。它的一般形式为:
for(< 初始化 >; < 条件表过式 >; < 增量 >)
语句;
初始化总是一个赋值语句, 它用来给循环控制变量赋初值; 条件表达式是一个关系表达式, 它决定什么时候退出循环; 增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用";"分开。
例如:
for(i=1; i< =10; i++)
语句; 767股票学习网 http://www.767gupiao.com收集整理

上例中先给i赋初值1, 判断i是否小于等于10, 若是则执行语句, 之后值增加1。再重新判断, 直到条件为假, 即i>10时, 结束循环。

注意:
1. for循环中语句可以为语句体, 但要用"{"和"}"将参加循环的语句括起来。
2. for循环中的"初始化"、"条件表达式"和"增量"都是选择项, 即可以缺省,但";"不能缺省。省略了初始化, 表示不对循环控制变量赋初值。 省略了条件表达式, 则不做其它处理时便成为死循环。省略了增量, 则不对循环控制变量进行操作, 这时可在语句体中加入修改循环控制变量的语句。
3. for循环可以有多层嵌套。
例:
int i, j, k,sum=0;
printf("i j k\n");
for (i=0; i< 2; i++)
for(j=0; j< 2; j++)
for(k=0; k< 2; k++)
sum++;

while循环
while循环的一般形式为:
while(条件)
语句;
while循环表示当条件为真时, 便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。
例:
int i = 0;
while(i< 10) /*等于10结束循环*/
i++;
上例中, while循环是以检查i是否小于10, 因其事先被初始化为0, 所以条件为真, 进入循环累加i一旦大于等于10, 条件为假, 循环便告结束。
与for循环一样, while循环总是在循环的头部检验条件, 这就意味着循环可能什么也不执行就退出。
注意:
1. 在while循环体内也允许空语句。
例如: 767股票学习网 http://www.767gupiao.com收集整理
while(i < 10);
当然,如果没有其他线程为i赋值,这个语句将导致死循环。
2. 可以有多层循环嵌套。
3. 语句可以是语句体, 此时必须用"{"和"}"括起来。

do-while 循环
do-while 循环的一般格式为:
do
语句;
while(条件);
这个循环与while循环的不同在于: 它先执行循环中的语句, 然后再判断条件是否为真, 如果为真则继续循环; 如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。
同样当有许多语句参加循环时, 要用"{"和"}"把它们括起来。

开关语句(分支语句)
在编写程序时, 经常会碰到按不同情况分转的多路问题, 这时可用嵌套if-else-fi语句来实现, 但if-else-if语句使用不方便, 并且容易出错。对这种情况, C提供了一个开关语句。开关语句格式为:
switch(变量)
{
case 常量1:
语句1或空;
case 常量2:
语句2或空;
.
.
.
case 常量n;
语句n或空;
default:
语句n+1或空;
}
执行switch开关语句时, 将变量逐个与case后的常量进行比较, 若与其中一 个相等, 则执行该常量下的语句, 若不与任何一个常量相等, 则执行default 后 面的语句。
注意:
1. switch中变量可以是数值, 也可以是字符。
2. 可以省略一些case和default。
3. 每个case或default后的语句可以是语句体, 但不需要使用"{"和"}"括起 来。
下例的switch中变量为整数型。
例:
int test;
for(test=0; test< =10; test++)
{
switch(test) /*变量为整型数的开关语句*/
{
case 1:
...;
break; /*退出开关语句*/
case 2:
... ;
break;
case 3:
... ;
break;
default:
...;
break;
}
}
}

 break语句
break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时, 可使程序跳出switch而执行switch以后的语句; 如果没有break语句, 则将成为一个死循环而无法退出。break在switch 中的用法已在前面介绍开关语句时的例子中碰到, 这里不再举例。

当break语句用于do-while、for、while循环语句中时, 可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。 即满足条件时便跳出循环。
例:
int i=0;
while(1) /*设置循环*/
{
i++;
if(i==13)
break;
}
这个例子实际上执行13次就结束了
注意:
1. break语句对if-else的条件语句不起作用。
2. 在多层循环中, 一个break语句只向外跳一层。

continue 语句
continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用, 用来加速循环。
例:
int i=0,j=0;
while(i< 18)
{
i++;
if(i == 10)
continue; //等于10的时候,不再执行下面语句,直接执行下一个循环.
j++;
}
执行的结果j将等于17.