资源加载中... loading...

优宽量化My语言(Mylang)文档

Author: 雨幕(youquant), Created: 2021-10-25 16:58:53, Updated: 2024-01-31 12:18:24

判断上一个信号是否是 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信号,且最新价小于开仓价格,买平仓
```
  • ISLASTBP

    判断上一个信号是否是 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);//上一个信号是买平仓信号,则减仓一手
    
  • ISLASTSP

    判断上一个信号是否是 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);//上一个信号是卖平仓信号,则减仓一手
    
  • ISLASTBPK

    判断上一个信号是否是 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
    
  • ISLASTSPK

    判断上一个信号是否是 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
    
  • ISLASTSTOP

    判断上一个信号是否是 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周期均线,开仓一手
    
  • ISLASTCLOSEOUT

    判断上一个信号是否是 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 上一次买开信号位置
    
    用法:
    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 上一次卖开信号位置
    
    用法:
    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 上一次卖平信号位置
    
    用法:
    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 上一次买平信号位置
    
    用法:
    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线的收盘价。
    
  • REFSIG_VOL

    返回从当根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);
    
  • REFSIG_PRICE

    返回从当根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;
    
  • COUNTSIG

    统计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周期均线,则买开仓
    
  • ENTRYSIG_PLACE

    取指定开仓信号的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

    取指定开仓信号的价格。

    用法: 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

    取指定开仓信号的信号手数。

    用法: 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,卖平仓
    
  • EXITSIG_PLACE

    取指定平仓信号的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

    取指定平仓信号的价格。

    用法: 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

    取指定平仓信号的信号手数。

    用法: 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

      取下单手数

      MYVOL 取下单手数
      
      用法:取下单手数,多用于在加减仓模型加载多个合约的时候的手数计算。
      
      注:
      回测:返回回测参数中设置的手数
      
      例:
      //加载参数中下单手数设置为3时,下面编写BK的下单手数为6;
      C>O,BK(2*MYVOL);
      C<O,SP(BKVOL);
      
    • MONEY

      账户可用资金

      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返回当前账户权益,模型进行仓位控制、下单手数等资金管理时使用
      
      计算方法: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 自定义,或者计算。
      
    • ACCOUNTMONEY

      返回交易账户中的可用资金,等价于MONEY

      用法: ACCOUNTMONEY返回交易账户中的可用资金。

    • ACCOUNTMONEYTOT

      返回交易账户中的权益,等价于MONEYTOT

      用法: ACCOUNTMONEYTOT返回交易账户中的权益。

    • MARGIN

      杠杆率

      商品期货

      a := MARGIN;   // 声明变量 a ,给a 赋值当前合约杠杆率。
      
  • TICK 数据函数

    • ASK1

      取得 TICK 的卖一价

    • ASK2

      取得 TICK 的卖二价

    • ASK3

      取得 TICK 的卖三价

    • ASK4

      取得 TICK 的卖四价

    • ASK5

      取得 TICK 的卖五价

    • ASK1VOL

      取得 TICK 的卖一量

    • ASK2VOL

      取得 TICK 的卖二量

    • ASK3VOL

      取得 TICK 的卖三量

    • ASK4VOL

      取得 TICK 的卖四量

    • ASK5VOL

      取得 TICK 的卖五量

    • BID1

      取得 TICK 的买一价

    • BID2

      取得 TICK 的买二价

    • BID3

      取得 TICK 的买三价

    • BID4

      取得 TICK 的买四价

    • BID5

      取得 TICK 的买五价

    • BID1VOL

      取得 TICK 的买一量

    • BID2VOL

      取得 TICK 的买二量

    • BID3VOL

      取得 TICK 的买三量

    • BID4VOL

      取得 TICK 的买四量

    • BID5VOL

      取得 TICK 的买五量

    • NEW

      取得 TICK 的最新价

  • 系统

    • EXIT

      抛出一个错误文本,程序退出。

      EXIT('msg');   // 需要传入参数,字符串参数需要使用''包裹,抛出一个错误,错误文本为字符串msg
      
    • INFO

      日志输出

      INFO(cond, param, ...);
      
      1、cond 为条件变量,为真输出日志。
      2、条件变量后可跟多个可变参数。
      例子:
      INFO(1, C, '<-收盘价');
      
    • CONTRACT

      使用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;
      

      img

    • DATA

      使用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;
      

      img

  • 其它

    • 麦语言类库参数

      • 价格最小点数

        img

        有些合约价格比较低的时候,需要注意 定价货币精度 , 交易品种精度 这些参数的设置,是否合适。

      • 变量最长周期数

        影响图表K线BAR数量,与javascript策略中调用SetMaxBarLen函数作用相同。

      • 麦语言 策略,状态栏表格上显示的持仓数量。

        均为 实际持仓数量。

        img

      • 条件判断(不推荐这样写)。

        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 搜索“持仓量”有解决方案。