量化开发手册 | 麦语言函数库

量化交易基础

量化交易是利用数学模型和计算机算法进行交易决策的一种方法。它通过分析历史数据、市场趋势和各种金融指标,构建交易策略并执行交易。

核心概念

交易函数

价格类型常量

含义 常量值
最新价 0
买一 1
买二 2
买三 3
卖一 4
卖二 5
卖三 6
对手价 7
市价 8
限价 'limit'

示例:BK(CROSS(MA2,MA1),1,5) 中的 5 表示“卖二价”挂单

交易函数用于执行开仓、平仓、加仓等操作,是构建交易策略的核心组件。

BK

BK(condition, vol, price=7, leverage=5)

开多函数,满足条件时开多仓

BK(CROSS(MA2,MA1),10,7,5);

SK

SK(condition, vol, price=7, leverage=5)

开空函数,满足条件时开空仓

SK(CROSS(MA2,MA1),10,7,5);

BP

BP(condition, price=8)

平多函数,满足条件时平多仓

BP(CROSS(MA2,MA1),8);

SP

SP(condition, price=8)

平空函数,满足条件时平空仓

SP(CROSS(MA2,MA1),8);

BPK

BPK(condition, vol, price=7, leverage=5)

平空开多函数,满足条件时平空仓并开多

BPK(CROSS(MA2,MA1),10,7,10);

SPK

SPK(condition, vol, price=7, leverage=5)

平多开空函数,满足条件时平多仓并开空

SPK(CROSS(MA2,MA1),10,7,10);

ADDLONG

ADDLONG(condition, vol, maxVol, leverage=5)

条件加仓多单函数,满足条件时加仓多单

ADDLONG(CROSS(MA2,MA1),10,100,5);

ADDSHORT

ADDSHORT(condition, vol, maxVol, leverage=5)

条件加仓空单函数,满足条件时加仓空单

ADDSHORT(CROSS(MA2,MA1),1,5);

SUBLONG

SUBLONG(condition, vol)

条件减仓多单函数,满足条件时减仓多单

SUBLONG(CROSS(MA2,MA1),1);

SUBSHORT

SUBSHORT(condition, vol)

条件减仓空单函数,满足条件时减仓空单

SUBSHORT(CROSS(MA2,MA1),1);

TPMR

TPMR(ratio, back)

移动止盈百分比平仓函数

TPMR(10, 3);

TPPR

TPPR(ratio, back)

移动止盈价格波幅平仓函数

TPPR(10, 3);

SLM

SLM(money, price)

浮亏金额平仓函数

SLM(200, 5);

TPM

TPM(money, price)

浮盈金额平仓函数

TPM(200, 5);

SLR

SLR(ratio, price)

浮亏比例平仓函数

SLR(2, 5);

TPR

TPR(ratio, price)

浮盈百分比平仓函数

TPR(10, 5);

SLP

SLP(points, price)

浮亏点差平仓函数

SLP(100, 5);

TPP

TPP(points, price)

浮盈点差平仓函数

TPP(100, 5);

条件函数

条件函数用于判断市场状态和触发交易信号,是策略逻辑的核心组成部分。

CROSS

CROSS(A, B)

上穿函数,判断A是否从下向上穿过B

CROSS(MA2, MA1);

CROSSDOWN

CROSSDOWN(A, B)

下穿函数,判断A是否从上向下穿过B

CROSSDOWN(MA2, MA1);

CROSSUP

CROSSUP(A, B)

上穿函数,判断A是否从下向上穿过B

CROSSUP(MA2, MA1);

EXIST

EXIST(condition, N)

存在函数,判断N周期内是否存在满足条件的情况

EXIST(CLOSE > OPEN, 10);

EVERY

EVERY(condition, N)

一直存在函数,判断N周期内是否一直满足条件

EVERY(CLOSE > OPEN, 10);

LAST

LAST(condition, A, B)

持续存在函数,判断从A周期到B周期是否一直满足条件

LAST(CLOSE > OPEN, 10, 5);

IF

IF(condition, trueValue, falseValue)

条件判断函数,根据条件返回不同值

IF(CLOSE > OPEN, HIGH, LOW);

IFF

IFF(condition, trueValue, falseValue)

条件判断函数,根据条件返回不同值

IFF(CLOSE > OPEN, HIGH, LOW);

IFN

IFN(condition, trueValue, falseValue)

条件判断函数,条件不满足时返回指定值

IFN(CLOSE > OPEN, HIGH, LOW);

ISVALID

ISVALID(value)

判断是否为有效数值

ISVALID(CLOSE);

数学函数

数学函数用于进行各种数学计算和统计分析,是策略开发中不可或缺的工具。

AMA

AMA(X, A)

自适应均线函数

AMA(CLOSE, 0.5);

DMA

DMA(X, A)

动态移动平均函数

DMA(CLOSE, 0.5);

EMA

EMA(X, N)

指数移动平均函数

EMA(CLOSE, 10);

EXPMA

EXPMA(X, N)

指数移动平均函数

EXPMA(CLOSE, 10);

EXPMEMA

EXPMEMA(X, N)

指数平滑移动平均函数

EXPMEMA(CLOSE, 10);

MA

MA(X, N)

简单移动平均函数

MA(CLOSE, 10);

MEMA

MEMA(X, N)

平滑移动平均函数

MEMA(CLOSE, 10);

SMA

SMA(X, N, M)

移动平均函数

SMA(CLOSE, 10, 2);

SUM

SUM(X, N)

求和函数

SUM(VOL, 10);

WMA

WMA(X, N)

加权移动平均函数

WMA(CLOSE, 10);

ABS

ABS(X)

绝对值函数

ABS(-34);

MAX

MAX(A, B)

最大值函数

MAX(CLOSE, OPEN);

MIN

MIN(A, B)

最小值函数

MIN(CLOSE, OPEN);

SQRT

SQRT(X)

平方根函数

SQRT(CLOSE);

LN

LN(X)

自然对数函数

LN(CLOSE);

EXP

EXP(X)

指数函数

EXP(CLOSE);

MAX6

MAX6(A, B, C, D, E, F)

6个参数中的最大值函数

MAX6(A, B, C, D, E, F);

MIN6

MIN6(A, B, C, D, E, F)

6个参数中的最小值函数

MIN6(A, B, C, D, E, F);

INTPART

INTPART(X)

取整函数

INTPART(12.3);

FRACPART

FRACPART(X)

小数部分函数

FRACPART(12.3);

CEILING

CEILING(X)

向上取整函数

CEILING(12.3);

FLOOR

FLOOR(X)

向下取整函数

FLOOR(12.3);

MOD

MOD(M, N)

取模函数

MOD(5, 3);

BETWEEN

BETWEEN(A, B, C)

判断A是否在B和C之间

BETWEEN(CLOSE, MA(CLOSE,5), MA(CLOSE,10));

ROUND

ROUND(X)

四舍五入函数

ROUND(3.1415);

ROUND2

ROUND2(X, N)

四舍五入到N位小数函数

ROUND2(3.1415, 2);

SIGN

SIGN(X)

符号函数,X>0返回1,X=0返回0,X<0返回-1

SIGN(-5);

AVEDEV

AVEDEV(X, N)

平均绝对偏差函数

AVEDEV(CLOSE, 10);

BETA

BETA(N)

贝塔系数函数

BETA(10);

COVAR

COVAR(X, Y, N)

协方差函数

COVAR(CLOSE, VOL, 10);

DEVSQ

DEVSQ(X, N)

数据偏差平方和函数

DEVSQ(CLOSE, 10);

FORCAST

FORCAST(X, N)

线性回归预测值函数

FORCAST(CLOSE, 10);

RELATE

RELATE(X, Y, N)

相关系数函数

RELATE(CLOSE, VOL, 10);

SLOPE

SLOPE(X, N)

线性回归斜率函数

SLOPE(CLOSE, 10);

STD

STD(X, N)

标准差函数

STD(CLOSE, 10);

STDP

STDP(X, N)

总体标准差函数

STDP(CLOSE, 10);

VAR

VAR(X, N)

方差函数

VAR(CLOSE, 10);

VARP

VARP(X, N)

总体方差函数

VARP(CLOSE, 10);

COST

COST(percentage)

成本分布函数

COST(10);

WINNER

WINNER(price)

获利盘比例函数

WINNER(CLOSE);

ZIG

ZIG(K, N)

之字转向函数

ZIG(3, 5);

COSTEX

COSTEX(price1, price2)

区间成本函数

COSTEX(CLOSE, REF(CLOSE,1));

LWINNER

LWINNER(days, price)

近期获利盘比例函数

LWINNER(5, CLOSE);

时间函数

时间函数用于处理与时间和日期相关的操作,在策略的时间周期管理中非常重要。

OPENTIME

OPENTIME()

获取当前时间距离开盘的时间(秒)

OPENTIME();

CLOSETIME

CLOSETIME()

获取当前距离收盘的时间(秒)

CLOSETIME();

CLOSEMINUTE

CLOSEMINUTE()

获取距离收盘(15:00)的分钟数

CLOSEMINUTE();

DATE

DATE()

获取当前周期的年月日

DATE();

MONTH

MONTH()

获取当前周期的月份

MONTH();

YEAR

YEAR()

获取当前周期的年份

YEAR();

TIME

TIME()

获取当前周期的时分

TIME();

TIME2

TIME2()

获取当前周期的时分秒

TIME2();

WEEKOFYEAR

WEEKOFYEAR()

获取当前周期在年内的周数

WEEKOFYEAR();

DATETODAY

DATETODAY(date)

获取指定日期到1990.12.19的天数

DATETODAY(901219);

DAYTODATE

DAYTODATE(N)

获取1990.12.19后第N天的日期

DAYTODATE(0);

TIMETOSEC

TIMETOSEC(time)

将时间转换为秒数

TIMETOSEC(93000);

SECTOTIME

SECTOTIME(seconds)

将秒数转换为时间

SECTOTIME(34200);

FROMOPEN

FROMOPEN()

获取当前品种已开盘的分钟数

FROMOPEN();

TOTALFZNUM

TOTALFZNUM()

获取当前品种每天的总交易分钟数

TOTALFZNUM();

BARPOS

BARPOS()

获取从第一根K线开始到当前的周期数

BARPOS();

BARSCOUNT

BARSCOUNT()

获取从第一个有效数据到当前的周期数

BARSCOUNT();

BARSSINCE

BARSSINCE(condition)

获取条件成立到当前的周期数

BARSSINCE(HIGH > 10);

BARSSINCEN

BARSSINCEN(condition, N)

获取N周期内条件成立到当前的周期数

BARSSINCEN(HIGH > 10, 20);

COUNT

COUNT(condition, N)

统计N周期内满足条件的周期数

COUNT(CLOSE > OPEN, 20);

DAYSTOTODAY

DAYSTOTODAY()

获取当前周期距离今天的天数

DAYSTOTODAY();

LLV

LLV(X, N)

获取N周期内的最低值(不包含当前K线)

LLV(LOW, 10);

LLVBARS

LLVBARS(X, N)

获取上一低点到当前的周期数

LLVBARS(LOW, 10);

LOD

LOD(X, N)

获取当前值在N周期内的低值名次

LOD(LOW, 10);

MEMA

MEMA(X, N)

平滑移动平均

MEMA(CLOSE, 10);

FINDHIGH

FINDHIGH(VAR, N, M, T)

获取N周期前的M周期内的第T个最大值

FINDHIGH(HIGH, 5, 10, 1);

FINDLOW

FINDLOW(VAR, N, M, T)

获取N周期前的M周期内的第T个最小值

FINDLOW(LOW, 5, 10, 1);

FINDLOWBARS

FINDLOWBARS(VAR, N, M, T)

获取N周期前的M周期内的第T个最小值到当前的周期数

FINDLOWBARS(LOW, 5, 10, 1);

FINDHIGHBARS

FINDHIGHBARS(VAR, N, M, T)

获取N周期前的M周期内的第T个最大值到当前的周期数

FINDHIGHBARS(HIGH, 5, 10, 1);

ZTPRICE

ZTPRICE(price, ratio)

获取涨停价

ZTPRICE(REF(CLOSE,1), 0.1);

DTPRICE

DTPRICE(price, ratio)

获取跌停价

DTPRICE(REF(CLOSE,1), 0.1);

BACKSET

BACKSET(X, N)

将当前位置到N周期前的数据设为1

BACKSET(CLOSE > OPEN, 2);

PRICEAT

PRICEAT(X, C)

返回条件满足时的价格(O,H,L,C)

PRICEAT(CLOSE > OPEN, C);

HHVBTW

HHVBTW(condition, prices)

返回相邻条件满足区间内的最高价

HHVBTW(CLOSE > OPEN, HIGH);

LLVBTW

LLVBTW(condition, prices)

返回相邻条件满足区间内的最低价

LLVBTW(CLOSE < OPEN, LOW);

ALIGNRIGHT

ALIGNRIGHT(X)

将有效数据右对齐

ALIGNRIGHT(CLOSE);

TRMA

TRMA(X, N)

三角移动平均

TRMA(CLOSE, 10);

HARMEAN

HARMEAN(X, N)

调和平均值

HARMEAN(CLOSE, 5);

CODE

CODE

获取品种代码

CODE;

CODELIKE

CODELIKE(pattern)

模糊匹配品种代码

CODELIKE('600');

NAMELIKE

NAMELIKE(pattern)

模糊匹配品种名称

NAMELIKE('ST');

NAMEINCLUDE

NAMEINCLUDE(pattern)

判断品种名称中是否包含指定字符串

NAMEINCLUDE('文化');

STRCAT

STRCAT(A, B)

连接两个字符串

STRCAT('多头', '开仓');

CON2STR

CON2STR(A, N)

将数值转换为字符串

CON2STR(CLOSE, 2);

VAR2STR

VAR2STR(A, N)

将序列转换为字符串

VAR2STR(CLOSE, 2);

STRSPACE

STRSPACE(A)

在字符串后添加空格

STRSPACE('测试');

VARCAT

VARCAT(A, B)

连接两个字符串

VARCAT('多头', '开仓');

FINDSTR

FINDSTR(A, B)

在字符串A中查找字符串B

FINDSTR('多头开仓', '开仓');

STRLEN

STRLEN(S)

获取字符串长度

STRLEN('通达信');

STRCMP

STRCMP(A, B)

比较两个字符串是否相等

STRCMP('通达信', '通达信');

LONGCROSS

LONGCROSS(A, B, N)

判断A在N周期内是否一直小于B,且本周期从下向上穿过B

LONGCROSS(MA2, MA1, 10);

NDAY

NDAY(X, Y, N)

判断N周期内是否一直满足X>Y

NDAY(CLOSE, OPEN, 3);

DOWNNDAY

DOWNNDAY(X, Y, N)

判断N周期内是否一直满足X

DOWNNDAY(CLOSE, OPEN, 3);

UPNDAY

UPNDAY(X, Y, N)

判断N周期内是否一直满足X>Y

UPNDAY(CLOSE, OPEN, 3);

LAST

LAST(X, A, B)

判断从A周期到B周期是否一直满足条件X

LAST(CLOSE > OPEN, 10, 5);

EXISTR

EXISTR(X, A, B)

判断从A周期到B周期是否存在满足条件X的情况

EXISTR(CLOSE > OPEN, 10, 5);

ISVALID

ISVALID(X)

判断X是否为有效数值

ISVALID(CLOSE);

IF

IF(condition, trueValue, falseValue)

条件判断,条件满足返回trueValue,否则返回falseValue

IF(CLOSE > OPEN, HIGH, LOW);

IFF

IFF(condition, trueValue, falseValue)

条件判断,条件满足返回trueValue,否则返回falseValue

IFF(CLOSE > OPEN, HIGH, LOW);

IFN

IFN(condition, trueValue, falseValue)

条件判断,条件不满足返回trueValue,否则返回falseValue

IFN(CLOSE > OPEN, HIGH, LOW);

IFC

IFC(condition, trueAction, falseAction)

条件判断,条件满足执行trueAction,否则执行falseAction

IFC(CLOSE > OPEN, HIGH, TESTSKIP(1));

VALUEWHEN

VALUEWHEN(condition, X)

当条件满足时返回X的当前值,否则返回上次的值

VALUEWHEN(CLOSE > OPEN, HIGH);

TESTSKIP

TESTSKIP(condition)

条件满足时直接返回,不再计算后续表达式

TESTSKIP(CLOSE > OPEN);

ABS

ABS(X)

返回X的绝对值

ABS(-34);

ACOS

ACOS(X)

返回X的反余弦值

ACOS(0.5);

ASIN

ASIN(X)

返回X的反正弦值

ASIN(0.5);

ATAN

ATAN(X)

返回X的反正切值

ATAN(1);

COS

COS(X)

返回X的余弦值

COS(0);

EXP

EXP(X)

返回e的X次幂

EXP(1);

LN

LN(X)

返回X的自然对数

LN(e);

LOG

LOG(X)

返回X的常用对数(以10为底)

LOG(100);

MAX

MAX(A, B)

返回A和B中的较大值

MAX(CLOSE, OPEN);

MAX6

MAX6(A, B, C, D, E, F)

返回6个参数中的最大值

MAX6(A, B, C, D, E, F);

MIN

MIN(A, B)

返回A和B中的较小值

MIN(CLOSE, OPEN);

MIN6

MIN6(A, B, C, D, E, F)

返回6个参数中的最小值

MIN6(A, B, C, D, E, F);

SIN

SIN(X)

返回X的正弦值

SIN(0);

SQRT

SQRT(X)

返回X的平方根

SQRT(16);

TAN

TAN(X)

返回X的正切值

TAN(45);

绘图函数

绘图函数用于在图表上绘制各种图形和文字,帮助直观展示策略逻辑和市场状态。

DRAWTEXT

DRAWTEXT(condition, price, text)

在满足条件时在指定位置绘制文字

DRAWTEXT(CLOSE > OPEN, LOW, "大阳线");

DRAWTEXTABS

DRAWTEXTABS(x, y, text)

在指定像素坐标位置绘制文字

DRAWTEXTABS(50, 50, "注意:前方高能!!!!!!");

DRAWCOLORKLINE

DRAWCOLORKLINE(condition, color, empty)

根据条件绘制K线

DRAWCOLORKLINE(CLOSE > OPEN, "COLORBLUE", 0);

DRAWKLINE

DRAWKLINE(high, open, low, close)

根据指定价格绘制K线

DRAWKLINE(HIGH, OPEN, LOW, CLOSE);

DRAWBAND

DRAWBAND(val1, color1, val2, color2)

根据条件填充颜色

DRAWBAND(OPEN, "RGB(0,224,224)", CLOSE, "RGB(255,96,96)");

DRAWCHANNEL

DRAWCHANNEL(condition, data, data2, borderColor, borderWidth, dotted, areaColor)

绘制通道

DRAWCHANNEL(1,7.5,8.0, RGB(255,94,102), 1 ,'5,3', RGBA(58,20,62,0.3));

DRAWTABLE

DRAWTABLE(row1, row2, ...)

绘制表格

DRAWTABLE(ROW1, ROW2);

DRAWPIE

DRAWPIE(radius, sector1, sector2, ...)

绘制饼图

DRAWPIE(80, PIECELL1);

DRAWRADAR

DRAWRADAR(radius, indicator1, indicator2, ...)

绘制雷达图

DRAWRADAR(50, CELL1);

变量函数

变量函数用于获取各种市场数据和变量值,是策略开发的基础数据来源。

CLOSE

CLOSE

获取当前周期收盘价

CLOSE;

VOL

VOL

获取当前周期成交量

VOL;

OPEN

OPEN

获取当前周期开盘价

OPEN;

HIGH

HIGH

获取当前周期最高价

HIGH;

LOW

LOW

获取当前周期最低价

LOW;

AMOUNT

AMOUNT

获取当前周期成交金额

AMOUNT;

VOLINSTK

VOLINSTK

获取当前周期持仓量

VOLINSTK;

QHJSJ

QHJSJ

获取当前周期结算价

QHJSJ;

ZSTJJ

ZSTJJ

获取当前周期分时图均价线

ZSTJJ;

ISUP

ISUP

判断当前周期是否收阳

ISUP;

ISDOWN

ISDOWN

判断当前周期是否收阴

ISDOWN;

ISEQUAL

ISEQUAL

判断当前周期是否平盘

ISEQUAL;

PERIOD

PERIOD

获取当前周期类型

PERIOD;

MACHINEDATE

MACHINEDATE

获取当前客户端机器的日期

MACHINEDATE;

MACHINETIME

MACHINETIME

获取当前客户端机器的时间

MACHINETIME;

MACHINEWEEK

MACHINEWEEK

获取当前客户端机器的星期几

MACHINEWEEK;

DAYSTOTODAY

DAYSTOTODAY

获取当前周期距离今天的天数

DAYSTOTODAY;

通知函数

SENDMES

SENDMES(condition, message)

发送信号通知

SENDMES(CROSS(MA2,MA1), '均线交叉');

SENDEMAIL

SENDEMAIL(condition, message)

发送邮件通知

SENDEMAIL(CROSS(MA2,MA1), '均线交叉');

板块操作函数

AddSymbolToBank

AddSymbolToBank(condition, bankName)

将合约添加到指定板块

AddSymbolToBank(CLOSE>OPEN,'自选');

RemoveSymbolOutBank

RemoveSymbolOutBank(condition, bankName)

将合约从指定板块中移除

RemoveSymbolOutBank(CLOSE