文华期货指标公式怎么编写?

99ANYc3cd6 期货 1

文华财经使用的是自己的公式语言,通常称为 麦语言,它是一种专为金融市场分析设计的类 BASIC 语言,相对容易上手,功能强大,是国内期货交易者使用最广泛的公式系统之一。

文华期货指标公式怎么编写?-第1张图片-华宇铭诚
(图片来源网络,侵删)

下面我将从基础语法、常用函数、实战公式示例进阶技巧四个方面,为你提供一个全面的指南。


基础语法

学习任何编程语言,都要从基础开始。

公式结构

一个完整的公式通常包含以下几个部分:

// [1] 公式名称
// [2] 公式描述
// [3] 参数定义
// [4] 输出变量定义
// [5] 主计算逻辑
// [1] 公式名称:在软件中显示的名字
MA5:MA(CLOSE,5);
// [2] 公式描述:在公式管理器中显示的说明
// 这是一个简单的5日均线
// [3] 参数定义:可以调整的变量,方便优化
// 格式: 参数名, 最小值, 最大值, 默认值
N1(5,1,100,5); // 定义一个名为N1的参数,最小1,最大100,默认5
// [4] 输出变量定义:在图表上要显示的线条
// 格式: 输出线名称, 线型, 颜色
MA_LINE:MA(CLOSE,N1),LINETHICK2,COLORWHITE;
// [5] 主计算逻辑:可以是一些临时计算,不需要显示
// 例如计算一个辅助值
TMP_VALUE := CLOSE - OPEN;

常量与变量

  • 常量:固定的数值,如 5, 10, 14
  • 变量
    • 系统变量:由软件内部提供,代表K线数据,是公式的核心。
      • OPEN: 开盘价
      • HIGH: 最高价
      • LOW: 最低价
      • CLOSE: 收盘价
      • VOL: 成交量
      • OPENINT: 持仓量
      • O, H, L, C, V, OI 是上述变量的简写,更常用。
    • 用户变量:由我们自己定义,用于存储中间计算结果。
      • 使用 赋值,MA5 := MA(C, 5);
      • 变量名不能与系统函数或保留字冲突。

运算符

  • 算术运算符: (加), (减), (乘), (除), ^ (幂)
  • 关系运算符: > (大于), < (小于), (等于), >= (大于等于), <= (小于等于), <> (不等于)
  • 逻辑运算符: AND (与), OR (或), NOT (非)

控制语句

  • IF...ELSE...END: 条件判断
    IF CLOSE > OPEN THEN
        DRAWICON(CLOSE, 1); // 如果收盘价大于开盘价,在K线上方画一个图标
    ELSE
        DRAWICON(LOW, 0);   // 否则在K线下方画一个图标
    END;
  • FOR...NEXT: 循环(较少用,因为计算量大)
  • REPEAT...UNTIL: 循环(较少用)

核心常用函数

这是编写公式的“武器库”,必须熟悉。

文华期货指标公式怎么编写?-第2张图片-华宇铭诚
(图片来源网络,侵删)

趋势指标函数

  • MA(X, N): 简单移动平均
    • MA(C, 5) 表示5日收盘价均线。
  • EMA(X, N): 指数移动平均 (更常用,对近期价格更敏感)
    • EMA(C, 12) 表示12日指数均线。
  • SMA(X, N, M): 平滑移动平均
    • SMA(C, 10, 2) 等同于 EMA(C, 10)
  • TRIMA(X, N): 三角移动平均
  • WMA(X, N): 加权移动平均

成交量指标函数

  • **VOL`: 成交量
  • **VOLUME`: 成交量(同VOL)
  • **AMOUNT`: 成交额
  • **VMA(X, N)`: 成交量的均线

超买超卖/摆动指标函数

  • **MACD(DIF, DEA, MACD)`: MACD指标
    • DIF := EMA(CLOSE, 12) - EMA(CLOSE, 26);
    • DEA := EMA(DIF, 9);
    • MACD := 2*(DIF-DEA), COLORSTICK;
  • **KDJ(K, D, J)`: KDJ指标
    • RSV := (CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
    • K := SMA(RSV,3,1);
    • D := SMA(K,3,1);
    • J := 3*K-2*D;
  • **RSI(RSI1, RSI2, RSI3)`: RSI相对强弱指标
    • LC := REF(CLOSE,1);
    • RSI1 := SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;
  • **CCI(CCI)`: 顺势指标
    • TP := (HIGH+LOW+CLOSE)/3;
    • CCI := (TP-MA(TP,N))/(0.015*AVEDEV(TP,N));

极值/统计函数

  • **HHV(X, N)`: N周期内X的最高值
  • **LLV(X, N)`: N周期内X的最低值
  • **REF(X, N)`: 引用N周期前的X值
    • REF(C, 1) 表示昨天的收盘价。
  • **COUNT(X, N)`: N周期内满足条件X的次数
  • **SUM(X, N)`: N周期内X的总和
  • **AVEDEV(X, N)`: N周期内X的平均绝对偏差
  • **STD(X, N)`: N周期内X的标准差

绘图函数

  • **DRAWKLINE(O, H, L, C)`: 自定义绘制K线

    可以用来绘制特殊的K线形态。

  • **DRAWICON(CONDITION, PRICE, TYPE)`: 在指定位置画图标
    • CONDITION 是条件,PRICE 是Y轴位置,TYPE 是图标编号(1-18)。
  • **DRAWLINE(CONDITION1, PRICE1, CONDITION2, PRICE2, COLOR)`: 画线

    当CONDITION1成立时,在PRICE1位置开始画线,当CONDITION2成立时,在PRICE2位置结束画线。

  • **DRAWTEXT(CONDITION, PRICE, TEXT)`: 在指定位置画文字
    • TEXT 是要显示的文字内容,用引号括起来。
  • **STICKLINE(CONDITION, PRICE1, PRICE2, WIDTH, COLOR)`: 画柱状线
    • CONDITION 是条件,PRICE1PRICE2 是柱状线的上下沿,WIDTH 是宽度。

特殊函数

  • **CROSS(A, B)`: A上穿B,返回1或0
    • CROSS(MA(C,5), MA(C,10)) 表示5日均线上穿10日均线(金叉)。
  • **LONGCROSS(A, B, N)`: A在N周期内持续上穿B
  • **FILTER(X, N)`: 过滤信号,连续N个周期内只有第一个信号有效

实战公式示例

通过例子来理解公式的威力。

示例1:经典双均线交易系统

这个公式会在5日均线上穿20日均线时买入,下穿时卖出。

文华期货指标公式怎么编写?-第3张图片-华宇铭诚
(图片来源网络,侵删)
// [公式名称]
// 双均线交易系统
// [参数定义]
N1(5,1,100,5);   // 快线周期
N2(20,1,200,20); // 慢线周期
// [核心计算逻辑]
MA_FAST := MA(C, N1); // 快速均线
MA_SLOW := MA(C, N2); // 慢速均线
// [信号判断与绘图]
// 买入信号:快线上穿慢线
BUY_SIGNAL: CROSS(MA_FAST, MA_SLOW);
DRAWICON(BUY_SIGNAL, L * 0.98, 1); // 在K线下方画一个买入图标
// 卖出信号:快线下穿慢线
SELL_SIGNAL: CROSS(MA_SLOW, MA_FAST);
DRAWICON(SELL_SIGNAL, H * 1.02, 2); // 在K线上方画一个卖出图标
// [输出线条]
MA_FAST_LINE: MA_FAST, COLORRED, LINETHICK2; // 快线用红色,加粗
MA_SLOW_LINE: MA_SLOW, COLORGREEN, LINETHICK1; // 慢线用绿色

示例2:MACD金叉死叉信号

这个公式会直接在MACD金叉和死叉的位置画上文字标记。

// [公式名称]
// MACD信号
// [参数定义]
SHORT(12,1,50,12); // 快线周期
LONG(26,1,100,26); // 慢线周期
MID(9,1,50,9);    // 信号线周期
// [核心计算逻辑]
DIF: EMA(CLOSE, SHORT) - EMA(CLOSE, LONG);
DEA: EMA(DIF, MID);
MACD: 2*(DIF-DEA), COLORSTICK;
// [信号判断与绘图]
// 金叉信号
GOLDEN_CROSS: CROSS(DIF, DEA);
DRAWTEXT(GOLDEN_CROSS, L, '金叉'), COLORRED;
// 死叉信号
DEATH_CROSS: CROSS(DEA, DIF);
DRAWTEXT(DEATH_CROSS, H, '死叉'), COLORGREEN;

示例3:布林带通道

布林带由中轨(N日均线)、上轨(中轨+N倍标准差)和下轨(中轨-N倍标准差)组成。

// [公式名称]
// 布林带
// [参数定义]
N(20,1,100,20);   // 周期
P(2,0.5,5,2);     // 标准差倍数
// [核心计算逻辑]
MID := MA(C, N); // 中轨
TMP := STD(C, N); // 标准差
UPPER := MID + P * TMP; // 上轨
LOWER := MID - P * TMP; // 下轨
// [输出线条]
MID_LINE: MID, COLORBLUE, LINETHICK1; // 中轨
UPPER_LINE: UPPER, COLORRED; // 上轨
LOWER_LINE: LOWER, COLORGREEN; // 下轨

进阶技巧与注意事项

多周期引用

如果你想引用日线图上的MA20来判断小时图的走势,可以使用 REFDATE 函数。

  • REFDATE(MA(C, 20), D) 表示引用日线图的20日均线值到当前小时周期。

公式管理器

  • 新建公式: 在文华软件中,按 Ctrl+N 或通过菜单进入公式管理器,新建一个公式文件,然后粘贴代码。
  • 导入/导出: 可以将写好的公式导出为 .nc 文件,方便备份和分享。
  • 公式密码: 可以设置密码保护你的原创公式。

重要注意事项

  • 未来函数: 这是编写公式时绝对要避免的陷阱,未来函数是指引用了未来数据的函数,会导致回测结果完美无比,但在实盘中完全失效。
    • 常见未来函数: BACKSET, FILTERX, FORCAST, PEAK, PEAKBARS, TROUGH, TROUGHBARS 等。
    • 如何避免: 尽量使用 REF, HHV, LLV 等基于历史数据的函数,信号判断必须基于当前K线及之前的数据。
  • 计算效率: 避免在公式中使用过多的嵌套循环或复杂的计算,尤其是在图表周期很小(如1分钟)或K线数量很多时,可能会导致软件卡顿。
  • 测试与优化: 写好公式后,一定要使用历史行情数据进行严格的回测,并根据测试结果调整参数,找到最适合当前品种和周期的参数组合。

文华期货的麦语言是一个功能强大且灵活的工具,掌握它,你就可以将自己的交易思想转化为实实在在的交易信号。

学习路径建议

  1. 模仿: 从简单的均线、MACD开始,尝试修改官方公式。
  2. 组合: 将不同指标的信号结合起来,形成自己的交易系统雏形。
  3. 创造: 在充分理解市场逻辑和公式原理后,尝试编写完全属于自己的独特指标。

希望这份详细的指南能帮助你开启文华公式编程的大门!

标签: 文华期货指标编写教程 文华期货自定义指标公式 文华期货指标公式代码示例

抱歉,评论功能暂时关闭!