判断上一个信号是否是 SK
```
ISLASTSK 判断上一个交易信号是否是SK。
用法:
ISLASTSK 上一个交易信号是SK则返回1(Yes),否则返回0(No)
SK信号未确认时,ISLASTSK返回值0;
SK信号确认后,ISLASTSK返回1
b.信号执行方式选择不进行信号复核(例如:在模型中写入MULTSIG),SK信号当根ISLASTSK返回值为1
注:模型中含有SPK条件,且上一个信号为平仓信号时,由SPK指令产生的SK信号,ISLASTSK返回0,ISLASTSPK返回1。
例:
C<O,SK;
ISLASTSK&&C<SKPRICE,BP;
AUTOFILTER;//上一个信号是SK信号,且最新价小于开仓价格,买平仓
```
判断上一个信号是否是 BP
ISLASTBP 判断上一个交易信号是否是BP。
用法:
ISLASTBP 上一个交易信号是BP则返回1(Yes),否则返回0(No)
BP信号未确认时,ISLASTBP返回值0;
BP信号确认后,ISLASTBP返回1
b.信号执行方式选择不进行信号复核(例如:在模型中写入MULTSIG),BP信号当根ISLASTBP返回值为1
例:
C<O,SK(2);
C>O,BP(1);
ISLASTBP,BP(1);//上一个信号是买平仓信号,则减仓一手
判断上一个信号是否是 SP
ISLASTSP判断上一个交易信号是否是SP。
用法:
ISLASTSP 上一个交易信号是SP则返回1(Yes),否则返回0(No)
SP信号未确认时,ISLASTSP返回值0;
SP信号确认后,ISLASTSP返回1
b.信号执行方式选择不进行信号复核(例如:在模型中写入MULTSIG),SP信号当根ISLASTSP返回值为1
例:
C>O,BK(2);
C<O,SP(1);
ISLASTSP,SP(1);//上一个信号是卖平仓信号,则减仓一手
判断上一个信号是否是 BPK
ISLASTBPK判断上一个交易信号是否是BPK。
用法:
ISLASTBPK 上一个交易信号是BPK则返回1(Yes),否则返回0(No)
BPK信号未确认时,ISLASTBPK返回值0;
BPK信号确认后,ISLASTBPK返回1
b.信号执行方式选择不进行信号复核(例如:在模型中写入MULTSIG),BPK信号当根ISLASTBPK返回值为1
注:模型中含有BPK条件,且上一个信号为平仓信号时,由BPK指令产生的BK信号,ISLASTBK返回0,ISLASTBPK返回1。
例:
C>O,BPK;
ISLASTBPK&&C<O,SPK;
AUTOFILTER;//上一个信号是BPK信号,则反手SPK
判断上一个信号是否是 SPK
ISLASTSPK判断上一个交易信号是否是SPK。
用法:
ISLASTSPK 上一个交易信号是SPK则返回1(Yes),否则返回0(No)
SPK信号未确认时,ISLASTSPK返回值0;
SPK信号确认后,ISLASTSPK返回1
b.信号执行方式选择不进行信号复核(例如:在模型中写入MULTSIG),SPK信号当根ISLASTSPK返回值为1
注:模型中含有SPK条件,且上一个信号为平仓信号时,由SPK指令产生的SK信号,ISLASTSK返回0,ISLASTSPK返回1。
例:
C<O,SPK;
ISLASTSPK&&C>O,BPK;
AUTOFILTER;//上一个信号是SPK信号,则反手BPK
判断上一个信号是否是 STOP
ISLASTSTOP 判断上一个交易信号是否是STOP。
用法:
ISLASTSTOP 上一个交易信号是STOP则返回1(Yes),否则返回0(No)
注:收盘价模型STOP信号下根K线ISLASTSTOP返回值为1;指令价模型STOP信号当根K线ISLASTSTOP返回值为1。
例:
CROSS(C,MA(C,5)),BK(2);
STOP(0,5);
ISLASTSTOP&&CROSS(C,MA(C,10)),BK(1);//上一个信号是STOP信号,且价格上穿10周期均线,开仓一手
判断上一个信号是否是 CLOSEOUT
ISLASTCLOSEOUT判断上一个信号是否CLOSEOUT 。
用法:
ISLASTCLOSEOUT 上一个交易信号是CLOSEOUT返回1(Yes),否则返回0(No)
CLOSEOUT信号未确认时,ISLASTCLOSEOUT返回值0;
CLOSEOUT信号确认后,ISLASTCLOSEOUT返回1
b.信号执行方式选择不进行信号复核(例如:在模型中写入MULTSIG),CLOSEOUT信号当根ISLASTCLOSEOUT返回值为1
例:
ISLASTCLOSEOUT&&C>O,BK(1);//上一个信号是清仓信号,并且当根K线是阳线,则买开一手
上一次买开信号位置
BARSBK 上一次买开信号位置
用法:
BARSBK返回上一次买开仓的K线距离当前K线的周期数(不包含出现BK信号的那根K线)
取包含BK信号出现的那根K线到当前K线的周期数,则需要在此函数后+1,即BARSBK+1;由于发出BK信号的当根k线BARSBK返回空值,则BARSBK+1在发出BK信号当根k线返回空值。
注:
1、若当前K线之前无BK信号,则函数返回值为空值
2、BK信号固定后BARSBK返回为空值。
(1)设置信号执行方式为K线走完确认信号下单
BARSBK返回值为上一个BK信号距离当前的K线根数(包含当前K线)
(2)设置信号执行方式为出信号立即下单,不复核(例如:在模型中写入MULTSIG)
a.历史信号计算中,出现BK信号的当根K线,BARSBK返回空值
b.加载运行过程中,信号固定后BARSBK返回空值
BARSBK返回值为上一个BK信号距离当前的K线根数(包含当前K线)
例:
1、BARSBK>10,SP;//上一次买开仓(不包含出现买开信号的那根K线)距离当前K线的周期数大于10,卖平;
2、HHV(H,BARSBK+1);//上一次买开仓(包含开仓信号出现的当根k线)到当前的最高价的最大值。
当根K线出现BK信号,AA返回为空值,需要返回当根K线上最高价,模型需要修改为:
AA:=IFELSE(BARSBK>=1,HHV(H,BARSBK+1),H);
(1)当根K线出现BK信号,BARSBK返回为空值,不满足BARSBK>=1的条件,则取值为当根K线的最高价H
(2)发出BK信号之后K线BARSBK返回买开仓的K线距离当前K线的周期数,满足BARSBK>=1的条件,则取值为HHV(H,BARSBK+1),即买开仓(包含开仓信号出现的当根k线)到当前的最高价的最大值。
修改后如果平仓条件中用到了AA的值,当根K线满足了平仓条件,可以出现平仓信号
3、AA:=IFELSE(BARSBK>=1,REF(C,BARSBK),C);//取最近一次买开仓K线的收盘价
(1)发出BK信号的当根k线BARSBK返回空值,则当根K线不满足BARSBK>=1的条件,AA返回当根k线的收盘价;
(2)发出BK信号之后的k线BARSBK返回买开仓的K线距离当前K线的周期数,则AA返回REF(C,BARSBK),即开仓k线的收盘价;
(3)例:1、2、3三根k线,1 K线为开仓信号的当根k线,则返回当根k线的收盘价,2、3 K线AA返回值为 1 K线的收盘价。
上一次卖开信号位置
BARSSK 上一次卖开信号位置
用法:
BARSSK返回上一次卖开仓的K线距离当前K线的周期数(不包含出现SK信号的那根K线)
取包含SK信号出现的那根K线到当前K线的周期数,需要在此函数后+1,即BARSSK+1;由于发出SK信号的当根k线BARSSK返回空值,则BARSSK+1在发出SK信号当根k线返回空值。
注:
1、若当前K线之前无SK信号,则函数返回值为空值
2、SK信号固定后BARSSK返回为空值。
(1)设置信号执行方式为K线走完确认信号下单
BARSSK返回值为上一个SK信号距离当前的K线根数(包含当前K线)
(2)设置信号执行方式为出信号立即下单,不复核(例如:在模型中写入MULTSIG)
a.历史信号计算中,出现SK信号当根K线,BARSSK返回空值
b.加载运行过程中,SK信号当根K线,信号固定后BARSSK返回空值
BARSSK返回值为上一个SK信号距离当前的K线根数(包含当前K线)
例:
1、BARSSK>10,BP;//上一次卖开仓(不包含出现买开信号的那根K线)距离当前K线的周期数大于10,买平;
2、LLV(L,BARSSK+1);//上一次卖开仓(包含开仓信号出现的当根k线)到当前的最低价的最小值。
当根K线出现SK信号,AA返回为空值,如果需要返回当根K线上最低价,模型需要修改为:
AA:=IFELSE(BARSSK>=1,LLV(L,BARSSK+1),L);
(1)当根K线出现SK信号,BARSSK返回为空值,不满足BARSSK>=1的条件,则取值为当根K线的最低价L
(2)发出SK信号之后K线SARSBK返回卖开仓的K线距离当前K线的周期数,满足BARSSK>=1的条件,则取值为LLV(L,BARSSK+1),即卖开仓(包含开仓信号出现的当根k线)到当前的最低价的最小值。
修改后如果平仓条件中用到了AA的值,当根K线满足了平仓条件,可以出现平仓信号。
3、AA:=IFELSE(BARSSK>=1,REF(C,BARSSK),C);//取最近一次卖开仓K线的收盘价
(1)发出SK信号的当根k线BARSSK返回空值,则当根K线不满足BARSSK>=1的条件,AA返回当根k线的收盘价;
(2)发出SK信号之后的k线BARSSK返回卖开仓的K线距离当前K线的周期数,则AA返回REF(C,BARSSK),即开仓k线的收盘价;
(3)例:1、2、3三根k线,1K线为开仓信号的当根k线,则返回当根k线的收盘价,2、3K线AA返回值为1K线的收盘价。
上一次卖平信号位置
BARSSP 上一次卖平信号位置
用法:
BARSSP返回上一次卖平仓的K线距离当前K线的周期数(不包含出现SP信号的那根K线)
取包含SP信号出现的那根K线到当前K线的周期数,则需要在此函数后+1,即BARSSP+1。由于发出SP信号的当根k线BARSSP返回空值,则BARSSP+1在发出SP信号当根k线返回空值。
注:
1、若当前K线之前无SP信号,则函数返回值为空值
2、SP信号固定后BARSSP返回为空值。
(1)设置信号执行方式为K线走完确认信号下单
BARSBP返回值为上一个BP信号距离当前的K线根数(包含当前K线)
(2)设置信号执行方式为出信号立即下单,不复核(例如:在模型中写入MULTSIG)
a.历史信号计算中,出现SP信号当根K线,BARSSP返回空值
b.加载运行过程中,SP信号当根K线,信号固定后BARSSP返回空值
BARSSP返回值为上一个SP信号距离当前的K线根数(包含当前K线)
例:
1、BARSSP>10,BK;//上一次卖平仓(不包含出现卖平信号的那根K线)距离当前K线的周期数大于10,买开。
2、AA:=HHV(H,BARSSP+1);//上一次,卖平仓(包含平仓信号出现的当根k线)到当前的最高价的最大值。
当根K线出现SP信号,AA返回为空值,如果需要返回当根K线上最高价,模型需要修改为:
AA:=IFELSE(BARSSP>=1,HHV(H,BARSSP+1),H);
(1)当根K线出现SP信号,BARSSP返回为空值,不满足BARSSP>=1的条件,则取值为当根K线的最高价H
(2)发出SP信号之后K线BARSSP返回买平仓的K线距离当前K线的周期数,满足BARSSP>=1的条件,则取值为HHV(H,BARSSP+1),即卖平仓(包含平仓信号出现的当根k线)到当前的最高价的最大值。
3、AA:=IFELSE(BARSSP>=1,REF(C,BARSSP),C);//取最近一次卖平仓K线的收盘价
(1)发出SP信号的当根k线BARSSP返回空值,则当根K线不满足BARSSP>=1的条件,AA返回当根k线的收盘价;
(2)发出SP信号之后的k线BARSSP返回卖平仓的K线距离当前K线的周期数,则AA返回REF(C,BARSSP),即平仓k线的收盘价;
(3)1、2、3三根k线,1 K线为平仓信号的当根k线,则返回当根k线的收盘价,2、3 K线AA返回值为 1 K线的收盘价
上一次买平信号位置
BARSBP 上一次买平信号位置
用法:
BARSBP返回上一次买平仓的K线距离当前K线的周期数(不包含出现BP信号的那根K线)
取包含BP信号出现的那根K线到当前K线的周期数,则需要在此函数后+1,即BARSBP+1。由于发出BP信号的当根k线BARSBP返回空值,则BARSBP+1在发出BP信号当根k线返回空值。
注:
1、若当前K线之前无BP信号,则函数返回值为空值
2、BP信号固定后BARSBP返回为空值。
(1)设置信号执行方式为K线走完确认信号下单
BARSBP返回值为上一个BP信号距离当前的K线根数(包含当前K线)
(2)设置信号执行方式为出信号立即下单,不复核(例如:在模型中写入MULTSIG)
a.历史信号计算中,出现BP信号当根K线,BARSBP返回空值
b.加载运行过程中,BP信号当根K线,信号固定后BARSBP返回空值
BARSBP返回值为上一个BP信号距离当前的K线根数(包含当前K线)
例:
1、BARSBP>10,BK;//上一次买平仓(不包含出现买平信号的那根K线)距离当前K线的周期数大于10,买开。
2、AA:=HHV(H,BARSBP+1);//上一次买平仓(包含平仓信号出现的当根k线)到当前的最高价的最大值。
当根K线出现BP信号,AA返回为空值,如果需要返回当根K线上最高价,模型需要修改为:
AA:=IFELSE(BARSBP>=1,HHV(H,BARSBP+1),H);
(1)当根K线出现BP信号,BARSBP返回为空值,不满足BARSBP>=1的条件,则取值为当根K线的最高价H
(2)发出BP信号之后K线BARSBP返回买平仓的K线距离当前K线的周期数,满足BARSBP>=1的条件,则取值为HHV(H,BARSBP+1),即买平仓(包含平仓信号出现的当根k线)到当前的最高价的最大值。
3、AA:=IFELSE(BARSBP>=1,REF(C,BARSBP),C);//取最近一次买平仓K线的收盘价
(1)发出BP信号的当根k线BARSBP返回空值,则当根K线不满足BARSBP>=1的条件,AA返回当根k线的收盘价;
(2)发出BP信号之后的k线BARSBP返回买平仓的K线距离当前K线的周期数,则AA返回REF(C,BARSBP),即平仓k线的收盘价;
(3)例:1、2、3三根k线,1 K线为平仓信号的当根k线,则返回当根k线的收盘价,2、3 K线AA返回值为 1 K线的收盘价。
返回从当根K线开始倒数第N个固定的Sig信号的信号手数(反手指令取开仓手数)。
用法:
REFSIG_VOL(Sig,N);
判断从当根K线开始倒数第N个固定的Sig信号的手数。如果没有Sig信号,或者没有固定的Sig信号,则该函数返回0。
注:
1、Sig位置支持的信号有:BK
,SK
,BP
,SP
,BPK
,SPK
,CLOSEOUT
,STOP
。
2、如果倒数第N个固定的Sig信号在当根K线上,那么该函数返回当前信号手数。
4、N为0或空值时,该函数返回0。
5、参数N支持变量。
例:
// 如果从当根K线开始倒数第3个固定的BK信号所在的距离当前K线有5根K线,并且信号手数大于2,平掉所有持仓
REFSIG_PLACE(BK,3)=5&&REFSIG_VOL(BK,3)>2,SP(BKVOL);
返回从当根K线开始倒数第N个固定的Sig信号的信号价位。
用法:
REFSIG_PRICE(Sig,N);
判断从当根K线开始倒数第N个固定的Sig信号的信号价位。如果没有Sig信号,或者没有固定的Sig信号,则该函数返回空值。
注:
1、Sig位置支持的信号有:BK
,SK
,BP
,SP
,BPK
,SPK
,CLOSEOUT
,STOP
。
2、如果当根K线上有固定的Sig信号,那么该函数计算信号时,包括当根K线的信号。
3、N为0或空值时,该函数返回空值。
4、参数N支持变量。
例:
// 如果从当根K线开始倒数第3个固定的BK信号的开仓价位为3000,并且多头持仓大于0,卖平仓
REFSIG_PRICE(BK,3)=3000&&BKVOL>0,SP;
统计N周期内,X信号的数量。
用法:
COUNTSIG(X,N);
统计N周期内,X信号的数量。
X可以为BK
,SK
,SP
,BP
,SPK
,BPK
,CLOSEOUT
,STOP
。
注: 1、统计周期时, (1)包含当前k线; (2)若N为0则从第一个有效值算起; (3)当N为有效值,但当前的k线数不足N根,从第一根统计到当前周期。 (4)N 为空值时返回值为空值 。 (5)N可以为变量 2、统计信号时: (1)信号执行方式选择为K线走完确认信号或者K线走完复核(例如:在模型中写入CHECKSIG(SIG,‘A’,0,‘D’,0,0);),不包含当根K线上未固定的信号,即返回已经固定的信号个数 (2)信号执行方式选择为不进行信号复核(例如:在模型中写入MULTSIG或MULTSIG_MIN;),包含当根K线上信号发出并且固定后的信号 3、由BPK指令产生的BK信号按BPK信号处理,SPK指令产生的SK信号同理。
例:
N:=BARSLAST(DATE<>REF(DATE,1))+1;
BKN:=COUNTSIG(BK,N);
MA5:=MA(C,5);
BKN=0&&C>MA5,BK; //当日内日未出现过BK信号并且最新价大于5周期均线,则买开仓
取指定开仓信号的K线位置。
用法:
ENTRYSIG_PLACE(N);
取一次完整交易中第N个开仓信号所在K线的位置。如果没有开仓信号,则该函数返回空值。
注:
1、开仓信号有:BK
,SK
,BPK
,SPK
。
2、从开仓到持仓为0被视为一次完整交易。
3、一次完整交易中开仓信号个数小于N时,该函数返回空值。
4、K线位置是指当前K线到指定开仓信号所在K线的根数。
5、N为0或空值时,该函数返回空值。
6、参数N不支持为变量。
例:
ENTRYSIG_PLACE(3)=5&&BKVOL>0,SP; //如果第3个开仓信号所在K线距离当前K线有5根K线,并且多头持仓大于0,卖平仓
取指定开仓信号的价格。
用法:
ENTRYSIG_PRICE(N);
取一次完整交易中第N个开仓信号的价格。如果没有开仓信号,则该函数返回空值。
注:
1、开仓信号有:BK
,SK
,BPK
,SPK
2、从开仓到持仓为0被视为一次完整交易。
3、一次完整交易中开仓信号个数小于N时,该函数返回空值。
4、N为0或空值时,该函数返回空值。
5、参数N不支持为变量。
6、该函数的计算包含滑点
7、收盘价模型:在指定信号的当根K线函数的取值不会发生变化;
指令价模型:在指定信号的当根K线返回当次交易第N个开仓信号的价格。
例:
ENTRYSIG_PRICE(3)=3000&&BKVOL>0,SP; //如果第3个固定的开仓信号的开仓价位为3000,并且多头持仓大于0,卖平仓
取指定开仓信号的信号手数。
用法:
ENTRYSIG_VOL(N);
取一次完整交易中第N个开仓信号的信号手数。如果没有开仓信号,则该函数返回空值。
注:
1、开仓信号有:BK
,SK
,BPK
,SPK
。
2、从开仓到持仓为0被视为一次完整交易。
3、一次完整交易中开仓信号个数小于N时,该函数返回空值。
4、N为0或空值时,该函数返回空值。
5、参数N不支持为变量。
6、收盘价模型:在指定信号的当根K线函数的取值不会发生变化;
指令价模型:在指定信号的当根K线返回当次交易第N个开仓信号的信号手数。
例:
ENTRYSIG_PRICE(3)=3000&&ENTRYSIG_VOL(3)>2,SP; //如果第3个固定的开仓信号的开仓价位为3000,并且第3个固定的开仓信号的信号手数大于2,卖平仓
取指定平仓信号的K线位置。
用法:
EXITSIG_PLACE(N);
取一次完整交易中第N个平仓信号所在K线的位置。如果没有平仓信号,则该函数返回空值。
注:
1、平仓信号有:BP
,SP
,CLOSEOUT
,STOP
。
2、从开仓到持仓为0被视为一次完整交易。
3、平仓信号个数小于N时,该函数返回空值。
4、K线位置是指当前K线到指定平仓信号所在K线的根数。
5、N为0或空值时,该函数返回空值。
6、参数N不支持为变量。
例:
EXITSIG_PLACE(3)=5&&BKVOL<=0,BK; //如果第3个平仓信号所在K线距离当前K线有5根K线,并且没有多头持仓,买开仓
取指定平仓信号的价格。
用法:
EXITSIG_PRICE(N);
取一次完整交易中第N个平仓信号的价格。如果没有平仓信号,则该函数返回空值。
注:
1、平仓信号有:BP
,SP
,CLOSEOUT
,STOP
。
2、从开仓到持仓为0被视为一次完整交易。
3、一次完整交易中平仓信号个数小于N时,该函数返回空值。
4、N为0或空值时,该函数返回0。
5、参数N不支持为变量。
6、该函数的计算包含滑点
7、收盘价模型:在指定信号的当根K线函数的取值不会发生变化;
指令价模型:在指定信号的当根K线返回当次交易第N个平仓信号的价格。
例:
EXITSIG_PRICE(3)=3000&&BKVOL>0,SP; //如果第3个固定的平仓信号的平仓价位为3000,并且多头持仓大于0,卖平仓
取指定平仓信号的信号手数。
用法:
EXITSIG_VOL(N)
取一次完整交易中第N个平仓信号的信号手数。如果没有平仓信号,则该函数返回空值。
注:
1、平仓信号有:BP
,SP
,CLOSEOUT
,STOP
。
2、从开仓到持仓为0被视为一次完整交易。
3、一次完整交易中平仓信号个数小于N时,该函数返回空值。
4、N为0或空值时,该函数返回0。
5、参数N不支持为变量。
6、收盘价模型:在指定信号的当根K线函数的取值不会发生变化;
指令价模型:在指定信号的当根K线返回当次交易第N个平仓信号的信号手数。
例:
EXITSIG_PRICE(3)=3000&&EXITSIG_VOL(3)>2,BK; //如果第3个固定的平仓信号的平仓价位为3000,并且第3个固定的平仓信号的信号手数大于2,买开仓
取下单手数
MYVOL 取下单手数
用法:取下单手数,多用于在加减仓模型加载多个合约的时候的手数计算。
注:
回测:返回回测参数中设置的手数
例:
//加载参数中下单手数设置为3时,下面编写BK的下单手数为6;
C>O,BK(2*MYVOL);
C<O,SP(BKVOL);
账户可用资金
MONEY 账户可用资金
用法:MONEY返回账户可用资金,用于仓位、手数等计算。
计算方法:
1、账户中MONEY的初始值为保证金参数中设置的起始资金。
2、历史回测中MONEY的初始值为回测参数中设置的初始资金。
3、开仓信号当根k线的MONEY值:开仓前可用资金-持仓保证金-手续费,其中持仓保证金=开仓价格*保证金比例*交易单位*手数
4、开仓后未平仓的k线的MONEY值=开仓信号前k线的MONEY值+浮动盈亏PROFIT
5、平仓信号当根k线的MONEY值:平仓前可用资金+平仓盈亏+平仓释放的保证金-手续费,其中平仓释放的保证金=开仓价格*保证金比例*交易单位*手数
注:
1、信号执行方式为,‘K线走完确认下单’或‘XX下单,K线走完复核’:
a.开仓信号当根K线,MONEY返回值为上根K线的可用资金-开仓保证金-手续费。
b.平仓信号当根K线,MONEY返回值为上根K线的可用资金+平仓盈亏+持仓释放的保证金-手续费。
2、信号执行方式选择,‘出信号下单,不进行复核’:
a.开仓信号当根K线,MONEY返回值为当根k线开仓之前的可用资金-开仓保证金-手续费。
b.平仓信号当根K线,MONEY返回值为当根K线平仓之前的可用资金+平仓盈亏+平仓释放的保证金-手续费。
3、信号执行方式为‘K线走完确认信号下单’时,平仓盈亏=(平仓信号当根K线的收盘价-开仓价格)*手数*交易单位-手续费。
4、信号执行方式为‘出信号立即下单,不复核’时,平仓盈亏=(平仓信号的指令价-开仓价格)*手数*交易单位-手续费。
5、账户初始化后,MONEY返回值为初始化框中可用资金
例:
K:=MONEY*0.2/(C*MARGIN*UNIT+FEE); // 账户可用资金的20%可以开仓的手数(此写法适用于按固定手数收取手续费的合约) ,FEE 自定义,或者计算。
账户权益
MONEYTOT 账户权益
用法:MONEYTOT返回当前账户权益,模型进行仓位控制、下单手数等资金管理时使用
计算方法:MONEYTOT=账户可用资金+持仓保证金
注:
1、账户中MONEYTOT的初始值为保证金参数中设置的起始资金。
2、历史回测中MONEYTOT的初始值为回测参数中设置的初始资金。
3、账户初始化时:
a.当前信号为开仓信号,MONEYTOT返回值为初始化框中账户可用资金;
b.当前信号为平仓信号,则MONEYTOT返回初始化框中账户可用资金+持仓保证金。
4、开仓信号当根k线:MONEYTOT=账户可用资金+持仓保证金
5、开仓后平仓前:MONEYTOT返回当前账户可用资金+持仓保证金
6、平仓信号当根k线:持仓为0时,MONEYTOT=可用资金;持仓不为0时,MONEYTOT=可用资金+持仓占用的保证金。
注:
持仓列表可用资金为包含了浮动盈亏的可用资金(= 当前权益 - 持仓占用的保证金)。
例:
K:=MONEYTOT*0.2/(C*MARGIN*UNIT+FEE); // 账户权益的20%可以开仓的手数(此写法适用于按固定手数收取手续费的合约),FEE 自定义,或者计算。
返回交易账户中的可用资金,等价于MONEY
。
用法:
ACCOUNTMONEY
返回交易账户中的可用资金。
返回交易账户中的权益,等价于MONEYTOT
。
用法:
ACCOUNTMONEYTOT
返回交易账户中的权益。
杠杆率
商品期货
a := MARGIN; // 声明变量 a ,给a 赋值当前合约杠杆率。
取得 TICK 的卖一价
取得 TICK 的卖二价
取得 TICK 的卖三价
取得 TICK 的卖四价
取得 TICK 的卖五价
取得 TICK 的卖一量
取得 TICK 的卖二量
取得 TICK 的卖三量
取得 TICK 的卖四量
取得 TICK 的卖五量
取得 TICK 的买一价
取得 TICK 的买二价
取得 TICK 的买三价
取得 TICK 的买四价
取得 TICK 的买五价
取得 TICK 的买一量
取得 TICK 的买二量
取得 TICK 的买三量
取得 TICK 的买四量
取得 TICK 的买五量
取得 TICK 的最新价
抛出一个错误文本,程序退出。
EXIT('msg'); // 需要传入参数,字符串参数需要使用''包裹,抛出一个错误,错误文本为字符串msg
日志输出
INFO(cond, param, ...);
1、cond 为条件变量,为真输出日志。
2、条件变量后可跟多个可变参数。
例子:
INFO(1, C, '<-收盘价');
使用CONTRACT获取当前设置的虚拟合约对应的真正的合约。
(*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*)
INFO(1, CONTRACT);
C>HV(H, 10),SPK;
C<LV(L, 15),BPK;
AUTOFILTER;
使用DATA指令加载数据。
(*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*)
A:DATA('https://www.youquant.com/upload/asset/32bf73a69fc12d36e76.json');
INFO(1, CONTRACT, A);
C>HV(H, 10),SPK;
C<LV(L, 15),BPK;
AUTOFILTER;
使用['属性名称']
取数据中的某个属性值,https://www.youquant.com/upload/asset/1ef31d778467ed9dd00.json
为外部数据链接,可以是其它服务程序提供数据的链接,也可以是优宽量化交易平台数据中心提供的数据,例如例子中注释的部分(*消费指数:DATA('CPI')['城市'];*)
,使用代码CPI
获取数据(数据暂时未全部开放)。
(*backtest
start: 2018-01-21 09:00:00
end: 2020-02-12 15:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*)
消费指数:DATA('https://www.youquant.com/upload/asset/1ef31d778467ed9dd00.json')['城市'];
(*消费指数:DATA('CPI')['城市'];*)
消费指数>HV(消费指数, 90),BPK;
消费指数<LV(消费指数, 90),SPK;
AUTOFILTER;
价格最小点数
有些合约价格比较低的时候,需要注意 定价货币精度 , 交易品种精度 这些参数的设置,是否合适。
变量最长周期数
影响图表K线BAR数量,与javascript
策略中调用SetMaxBarLen
函数作用相同。
麦语言 策略,状态栏表格上显示的持仓数量。
均为 实际持仓数量。
条件判断(不推荐这样写)。
IF H > C THEN
BEGIN
X:=10;
END
范例:
实时价模型时,新增K线Bar时检测
VARIABLE:N:0;
IF N <> BARPOS AND ISLASTBAR = 1 THEN
BEGIN
N:=BARPOS;
INFO(1, '123');
END
pcx3610 搜索:OPI
jkyei-cn 没有CCL持仓量函数(只有VOL),赶快加一下啊大佬。
雨幕(youquant) 好的,这边已经报过了。临时可以用以上方法暂时替代,这边很快兼容上这个指令。
jkyei-cn 也谢谢你能给我回复。你推荐的我是知道的。问题是我的文华策略有许多处引用,且都有参数值,这样就彻底破坏了MY语言的简洁严密和一致了。 试想一下文华要是没有持仓量(OPI/CCL)这个函数,能有多少客户。
雨幕(youquant) 好的,感谢提出问题。这个这边报下。暂时可以这样使用代替: ``` // JavaScript语言中GetTicker接口返回数据中的持仓量,OpenInterest属性 %% scope.OPI = function() { var OpenInterest = 0; if(exchange.IO("status") && scope.canTrade){ var ticker = exchange.GetTicker(); if(ticker){ OpenInterest = ticker.Info.OpenInterest; // 回测不支持,会报错。回测可以使用ticker.OpenInterest } } return OpenInterest; } %% 持仓量..OPI; ```
jkyei-cn 那不是MY 语言,具体引用时候非常麻烦。并且实盘与回测用法不同,结果一致性存疑。 所有量化软件都有封装好的CCL,FMZ应该能把这个MY语言做的更好。 期待早日有MY 语言的CCL持仓量函数。
雨幕(youquant) 这个文档页面上,用ctrl + f 搜索“持仓量”有解决方案。