c语言中Downto用法,语法

语法

1. 关键字:

功能关键字

Params

定义参数,必须填写默认值

Vars

定义变量,可以赋初值,不赋初值系统自动填充初值

Data

定义数据区

Setting

定义环境设置,实现多样化的策略

ImPort

设置跨周期跨合约公式属性

Begin

主程序开始

End

主程序结束

If

条件语句

Else

条件语句

For

用于循环处理

To

用于循环处理

DownTo

用于循环处理

While

用于循环处理

Break

结束循环体

Continue

结束单次循环

True

False

And

并且

Or

或者

数据类型(分为数值型和字符串型)

Numeric

数值型临时变量

NumericSeries

数值型序列变量

NumericArray

数值型数组

NumericRef

数值型引用(仅用于编写自定义函数)

NumericArrayRef

数值型数组引用(仅用于编写自定义函数)

Global_Numeric

数值型广域变量

Global_NumericArray

数值型广域数组

String

字符串型临时变量

StringArray

字符串型数组

StringRef

字符串型引用(仅用于编写自定义函数)

StringArrayRef

字符串型数组引用(仅用于编写自定义函数)

Global_String

字符串型广域变量

Global_StringArray

字符串型广域数组

枚举值

Enum_Buy

返回买卖状态的买入枚举值

Enum_Sell

返回买卖状态的卖出枚举值

Enum_Entry

返回开平仓状态的开仓枚举值

Enum_Exit

返回开平仓状态的平仓枚举值

Enum_ExitToday

返回开平仓状态的平今仓枚举值

Enum_Declared

返回委托状态的已申报枚举值

Enum_FillPart

返回委托状态的部分成交枚举值

Enum_Filled

返回委托状态的全部成交枚举值

Enum_Deleted

返回委托状态的已废除枚举值

Enum_Declare

返回委托状态的正在申报枚举值

Enum_Cancelin

返回委托状态的正在撤单枚举值

Enum_Canceled

返回委托状态的已撤单枚举值

Enum_AmericanOption

返回美式期权的枚举值

Enum_EuropeanOption

返回欧式期权的枚举值

num_CallOption

返回看涨期权的枚举值

Enum_PutOption

返回看跌期权的枚举值

注:

①数据类型的区分

A.临时变量:

对临时变量的计算和赋值当次计算生效,如果不做赋值临时变量直接取变量的初始值。

具体在模型应用中,用k线数据回测那么当次计算指的是对某一根k线数据的计算过程,临时变量的赋值只对这一根k线数据的计算过程中生效;逐笔回测和盘中运行,当次计算指的是对某一笔数据的计算过程,临时变量只对一笔数据的计算过程生效。

写法举例:如果当根K线为阳线则yang为1,如果当根K线为阴线则yin为1

Vars

Numeric yang;

Numeric yin;

begin

IF (Open < Close)

{

yang = 1;

}

IF (Open > Close)

{

yin = 1;

}

End

B.序列变量:

对一段k线数据回测,一根一根逐次计算过程中,如果当根K线计算对变量有赋值就取这个赋值结果,如果当根K线没有对变量进行赋值则取上一根k线的数值。

序列变量,意义在于一段k线数据的每一根k线都有对应一个数据存储,序列变量本质上是一组数值或字符串。序列变量和WH8、金字塔等软件的全局变量概念是一致的。

序列变量通常用于统计一段历史K线中满足某一条件的次数

例:统计截止当前历史K线中阳线的数量

Vars

NumericSeries UpNum;

Begin

If(Close > Open)

{

UpNum = UpNum+1;

}

PlotNumeric("阳线的数量",UpNum);

End

C.广域变量:

广域变量和C语言的内部变量的概念是一致的,在一个公式的多次计算过程中,广域变量的计算是延续,这次计算是在上一次的结果基础上进行。

广域变量和临时变量的区别,在于一个公式的多次计算的整个过程中永久有效。

广域变量和序列变量的区别,在于广域变量和一根一根的k线没有对应关系,通常用于算法下单或逐笔数据统计。

例:广域变量控制下单流程,控制满足条件时只下单一次

Setting

SignalNoTrading:1;

Vars

Global_Numeric BuyFLG;//标识变量

Global_Numeric SellFLG;//标识变量

Begin

If(Ma(Close,5) > Ma(Close,10))

{

BK;

}

If(Ma(Close,5) < Ma(Close,10))

{

SP;

}

If( F_CurrentSig == Sig_BK && BuyFLG == 0)//接管Buy信号

{

A_SendOrder(Enum_Buy,Enum_Entry,2,Price("New"));

BuyFLG=1;//开仓标志变量赋值

SellFLG=0;//平仓标志变量归0

}

If( F_CurrentSig == Sig_SP && SellFLG == 0)//接管Sell信号

{

A_SendOrder(Enum_Sell,Enum_Exit,2,Price("FallLimit"));

BuyFLG=0;//开仓标志变量归0

SellFLG=1;//平仓标志变量赋值

}

②枚举值的用法

A.作为函数的参数

例:

A_SendOrder(Enum_Sell,Enum_Exit,data0.F_BuyRemainPosition(),data0.Price("bid1"));

//对当前公式应用的交易账户对应合约发出卖平仓委托,以买一价平公式应用交易账户当前多头可用持仓。

B.与函数返回值做比对进行判断

例:

If (F_OpenOrderEntryOrExit(0) == Enum_Entry)

//条件语句,最后一笔未成交委托单是开仓,进行下面操作。

2. 结构:

wh9公式类型分为3类,即基于K线数据、基于Tick逐笔数据、独立的算法交易模型

结构:定义数据区、定义环境设置、设置跨合约跨周期引用关键字、定义参数、定义变量、主程序。

Data-----------------------//①定义数据区

data0:"m2009";

Setting----------------------- //②定义环境设置

DayTrade:True; //只用日内数据进行计算

AddTimes:3;//最大可加仓次数为3次

ImPort-----------------------//③设置跨合约跨周期引用关键字

#ImPort [Hour,1,zt] As zt

Params-----------------------//④定义参数

Numeric N(5);

Numeric M(10);

Vars-----------------------//⑤定义变量

Numeric Ma1;

NumericSeries Ma2;

Begin

afd96bc3afaf5f19fa2990c98fdfc059.png

End

①Data:定义数据区

A.公式类型为基于K线数据、基于Tick逐笔数据或者为独立的算法交易模型都支持定义数据区;

B.使用部分函数需要在Data区定义合约,从而指定合约,Data区可定义多个合约,支持写入合约代码、文华码,期货合约支持使用中文名;

C.在函数前使用data0.的形式来调用,其中data0为合约名称,需要使用双引号标注;

D.若模型中Data区只定义了一个合约,则该函数可以不使用data0.的形式来调用,默认定义的唯一合约;若模型中Data区定义了多个合约,则该函数必须使用data0.的形式来调用;

E.定义数据区并对指定合约下单:

Data

data0:"m2009"; -----------------------//定义数据区,指定合约为豆粕2009

Begin

data0.A_SendOrder(Enum_Buy,Enum_Entry,2,data0.Price("open"));

End           -----------------------//开多单

②Setting:定义环境设置

A.定义环境设置,用于实现多样化的策略;

B.与Parmams、Vars结构并列,写入结构任意位置都可生效,不受模型从上至下计算的限制;

C.限制:同一环境设置函数只能写入一次;

D.关键字下需写入环境设置类型的函数,如设置启动自动出入金:

Setting

AutoFinancing:True; -----------------------//启用自动出入金

③ImPort:设置跨合约跨周期引用关键字

A.支持设置跨合约、跨周期、跨合约跨周期、跨指标引用;

B.与Parmams、Vars结构并列,写入结构任意位置都可生效,不受模型从上至下计算的限制;

C.基于K线数据、基于Tick逐笔数据公式类型通用的函数,不支持加载在独立的算法交易模型使用;

D.函数语法同麦语言;

E.设置跨周期引用指标。

④Params:定义参数

A.一个公式只能有一个Params关键字,放在公式开始部分,在定义变量之前;

B.参数类型:数值型(不能使用序列变量);

C.参数必须指定默认值;

D.参数不可以使用赋值符号=赋值;

E.独立的算法交易模型不支持定义参数;

F.参数定义并赋默认值。

Params

Numeric N(5);-----------------------//定义参数N,默认值为5

Begin

Ma(Close,N);-----------------------//表示5周期均线

End

⑤Vars:定义变量

A.一个公式只能有一个Vars关键字,放在公式开始部分,在定义变量之后,主程序开始之前;

B.变量类型:数值型、字符串型;

C.变量可不指定默认值,默认值为0(数值型)或空串(字符串型);

D.变量可以在主程序使用赋值符号=进行赋值;

E.变量定义与赋值:

Vars

Numeric N1;        -----------------------//定义变量N1

Numeric N2;        -----------------------//定义变量N2

StringN3;          -----------------------//定义变量N3

NumericArray N4;     -----------------------//定义变量N4

Begin

N1=3000;              -----------------------//整型赋值

N2=88.888;        -----------------------//浮点型赋值

N3=”股指期货”; ---------------------//字符串型赋值

N4[0] = 1;         -----------------------//数组型赋值

N4[1] = 2;         -----------------------//数组型赋值

N4[2] = 3;           -----------------------//数组型赋值

End

⑥主程序

A.格式为:

Begin

...

End

B.返回值当根K线变化;

C.模型从上至下、从左至右进行计算;

影响:

a.返回值写在指令前与写在指令后的区别

例:信号记录函数BKVOL

公式中写在开仓指令前,返回0;

公式中中写在开仓指令后返回开仓手数。

b.多根K线计算的指标

例:If (AA > 0 && Ma(HHV(Close,5),5))

需要单独定义在条件外确保每根K线上都会计算

即应该编写为:

HH=HHV(Close,5);

If (AA > 0 && Ma(HH,5))

3. 指令:

①支持6个指令

开仓指令:BK(买开)、SK(卖开)、

平仓指令:SP(卖平)、BP(买平)

反手指令:BPK(买平开)、SPK(卖平开)

注:

A.股票交易

T+1交易:仅支持买开(BK)、卖开(SP);

T+0交易:支持买开(BK)、卖平(Sell)、卖开(SK)、买平(BP)、买平开(BPK)、卖平开(SPK)六种指令。

B.套利交易

仅支持买开(BK)、卖平(Sell)、卖开(SK)、买平(BP);

C.缺省规则

BK(N,Price,IsCancel);三个参数均可以缺省,且只能缺省后面的参数。

a.N为建仓数量,如果N为DefaultVol或不写入N,建仓数量为设置的固定手数,如果N写入0表示建仓数量为0。

b.Price为委托价格;

实盘中以写入的委托方式发委托,回测中以收盘价为成交价;

当未设置Price或Price写为0时,程序化交易按参数设置->程序化参数->默认下单方式委托执行,回测中以收盘价为成交价。

c.IsCancel参数未写入、写入0或写入的参数非Cancel_Order,则表示不启用终止下单程序。

D.模型类型

默认按一开一平信号过滤模型规则出信号;

开仓手数不同为加减仓模型;

Setting字段下写入AddTimes为连续建仓模型。

②发送委托单

A_SendOrder(BuyOrSell,EntryOrExit,Lot,Price,”AccountID”)

针对当前公式应用的交易帐户、合约发送委托单

注:

A.不能使用于历史测试,只能用于实时行情交易。

B.TICK驱动

③基于K线数据可以同时使用上述两种指令。

4.函数

Vars

Numeric Ma12;

NumericSValue;

Begin

Ma12=Ma(Close,12);//计算12周期均价

SValue=Summation(Close,12);//计算12周期以来的收盘价的和

PlotNumeric("Ma12",Ma12);

PlotNumeric("SValue",SValue);

End

①系统函数

在模型编写平台中显示蓝色字体,如:Ma(求移动平均)

在模型编写平台中根据使用范围在相应类型的公式中直接调用

模型编写平台→插入→插入函数,可以查看详细的函数分类及函数说明

②自定义函数

在模型编写平台中显示红色字体,如:Summation(求和)

A.自定义函数结构

Params

参数定义语句;

Vars

变量定义语句;

Begin

脚本正文;

End

B.自定义函数的调

用法一:返回值(使用Return)

a.无参数

此类函数在编写自定义时没有定义参数的部分,所以在调用时也不需写入参数,直接写函数名即可。下面以AvgPrice为例,求当前周期的平均价格。

Vars

Numeric AvgValue;

Begin

AvgValue=AvgPrice();

PlotNumeric("AvgValue",AvgValue);

End

b.有参数

此类函数在编写自定义时定义了参数个数和类型,需要根据定义时候的参数列表和顺序,输入相应的参数,以Summation为例,计算指定周期内的数值和。

Vars

Numeric SValue;

Begin

SValue=Summation(Close,12);//计算12周期以来的收盘价的和

PlotNumeric("SValue",SValue);

End

c.数组类

Vars

NumericArray arr[10];//建立一个数组,长度为10

Numeric i;

NumericSValue;

Begin

For i=0 To 9

{

arr[i]=Open[i];//依次存放0-9开盘价

}

SValue=SummationArray(arr);

PlotNumeric("SValue",SValue);

End

用法二:不返回值(不使用Return)

WH8中独立的算法交易模型中的自定义函数部分,在改写WH9模型时,可以把自定义函数中的代码移到自定义函数编写平台,然后通过公式应用进行调用。

注:

a.支持指定参数的变量的默认值。

b.支持使用引用参数,可通过引用参数返回多个数据。

c.支持通过Return返回数据,返回数据类型为数值型、字符串中的一种。

d.自定义函数之间可以相互调用,自定义函数自身不可以调用自身。

5.语句

①条件语句

A.If语句

If语句是一个条件语句,当条件(Condition)满足后执行公式语句。

If (Condition)

{

公式语句;

}

B.If-Else语句

对条件(Condition)进行判断,如果条件满足执行If后的公式语句1,否则执行Else后的公式语句2。

If (Condition)

{

公式语句1;

}

Else

{

公式语句2;

}

C.If-Else-If

当条件Condition1满足时,公式语句1将会被执行,当条件Condition1不满足时,将会继续判断条件Condition2,当满足条件Condition2时,公式语句2将会被执行。

If (Condition1)

{

公式语句1;

}

Else If(Condition2)

{

公式语句2;

}

②循环语句

A.For循环

a.For语句为循环语句,重复执行某项操作,直至循环结束。

b.循环变量为在之前已经定义的一个数值型变量.

c.For To循环(从小到大)

For To循环的执行是循环变量从初始值到结束值,按照步长为 1 依次递增,重复执行循环体中的公式语句,初始值必须小于或等于结束值;

For 循环变量 = 初始值 To 结束值

{

公式语句;

}

d.For DownTo循环(从大到小)

For DownTo语句中循环变量从初始值每次递减 1直到等于结束值,重复执行循环体中的公式语句,初始值必须大于或等于结束值。

For 循环变量 = 初始值 DownTo 结束值

{

公式语句;

}

B.While循环

a.While语句在条件(Condition)为真的时候重复执行某一项操作,直至条件(Condition)为假时循环结束。

b.语法:

While (Condition)

{

公式语句;

}

C.Break语句

循环在每次执行后,都将判断Condition的值,当Condition为True时,则执行Break语句,跳出整个循环。

While (True)

{

公式语句;

If (Condition)

Break;

}

D.Continue语句

循环在每次执行后,都将判断Condition2的值,当Condition2为True时,则执行Continue语句,跳过公式语句2,判断Condition1进入下一次循环,否则继续执行公式语句2。

While (Condition1)

{

公式语句1;

If(Condition2)

Continue;

公式语句2;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值