MT4平台MQ语言简单说明与教程

Discussion in 'MetaTrader' started by wj2000, Aug 19, 2008.

  1. MT4平台MQ语言简单说明与教程
    “人工智能系统”是一允许客户策划自己的投资交易战略的具有革新性的工具。
    人工智能系统是使交易过程操作自动化,使客户从实时市场监控的繁重公事解放出来的系统。许多专业客户使用多重交易系统以便在不同市场多变的环境下操作。通常他们在一些知名的分析软件包,如MetaStock 、TradeStation.中撰写和检验他们的投资交易战略。
    有了人工智能系统,你就可以将你的真实账户同交易系统产生的信号联系起来,即通过跟踪和管理你任一时点的未平仓合约、下单和止损的记录来建立这种联系。

    什么是人工智能系统呢?是用专业的MetaQuotes语言编写的于特定图表联系的自动交易系统(ATS)。它不仅告知客户交易时机,还自动执行交易账户的交易并将信号直发送到交易服务器。同大多数IT系统一样,人工智能系统还以历史记录以及表上所反映的交易进出点来测试投资交易战略。另外,人工智能系统的执行代码是与源程序正文分开保存的。这种安排确保客户信息的保密性不受爱打听的人的影响。
    编写你自己的人工智能系统程序是非常容易的,你不必是专业的程序员,你只要学会一非常简单的语言:MQL II,即便是不懂得如何编写自己的系统程序人通常也可以雇佣他所熟识的精通编程的人来编,这些人可能仅需要不超过一个小时的时间来掌握编程和操作方法。
    这里有许多不同的MetaStock 和 TradeStation 的客户制定的投资交易战略,其中大多数能较容易的转化成MQLII语言,这使用户能吸取以往经验。在本页就有一些可供下载的“人工智能系统”版本。
    环球银行 交易平台将人工智能系统设为*.MQL(源程序档用此扩展名)和*EXP(操作代码用此扩展名)文件存于程序的根目录下的子目录。客户可以通过NAVIGATORL浏览窗口管理操作多个(不限数量)的“人工智能系统”。

    关于如何开立人工智能系统并将其于交易终端联机问题的程序在环球银行客户用户向导上有详细说明。
    通过用METAQUOTES II语言编写“人工智能系统”程序来自动管理交易操作、执行客户自己的战略。METAQUOTES II是相当容易学习、使用和安装的。MQL II语言包括大量的用于控制现在和过去的报价、主要算法、逻辑运算的变量,并在建立主要指示器以及指示开立和控制头寸方面起关键作用。这种语言是同TRADERSTION技术公司开发的EASY语言是相类似的,但它有一些特殊功能。
    程序代码是由METAEDITOR文字编辑器编写的,它能将MQL II不同部分设定为不同颜色,因而,可帮助用户以 // 标记(双斜线)开始通过专家系统文本注释。注释也可以用斜线星号星号斜线(/*(注释)*/,即如C语言一样)来标记。编辑器是固定以灰色显示注释。

    为了建立和控制投资交易战略,客户必须有一有关记录信号产生、变动的进行交易的结果的信息的日志文件。人工智能系统的日志是在环球银行客户目录中的/logs/YYYYMMDD.log 文件下。当前日志可直接访问下级终端窗口。

    若要访问MQL II 语言的目录系统,就需要打开METAQOUTES语言窗口或者按下字典按钮或从工具菜单中查找,这使得用户能获取每一用该语言的信息的祥细数据。
    1.主要语言结构

    同其它语言一样,MQL II有一套主要的元素来构建他的主要结构。这些元素应以特殊的方式组合与安排,用以表示特定的语句和公式。

    语言的主要对象是数据,即三种类型的数据:数值型、逻辑型、字符型。所有的数值型都用双重格式,逻辑型数据为真或假,字符串是用省略号标记的一串字符。字符串又名为文本串。数据可包括不同类型的变量,也可直接表示为源程序正本。

    每一个METAQUOTES语句都是一完整结构,可以包含固定词、操作指令、数据、变量、表达式、标点符号,通常是以分号结束。

    固定语句是指预先确定的具有特殊和具体意义的词汇。
    操作指令是指定特定数据、变量、表达式操作的符号。
    变量通常包含数值、字符、逻辑型数据。
    表达式是指固定语句、变量、操作指令、数据的联合体,是语言中三种类型数据即数值型、字符型、逻辑型数据综合运用的结果。
    标点符号是用来描述表达式、定义参量、划分句子以及数列再排序的。
    本帖隐藏的内容需要回复才可以浏览
    QQ:375955078 qq群 50701168 专业黄金理财





    4.1预设变数


    通常,已编写完毕的人工智能系统是需要改变某一参数的,这将影响系统的运作。为避免每次都以手动编辑系统代码和基本变量来改变参数,一个类似于METAQUOTES系统中所用的方法应运而生:有4种参量置于人工智能系统的properties table(工具台)下的METAEDITOR的菜单档 - Properties(用具)... - Processing tab(程序卷标)
    Lots –手数
    StopLoss – 止蚀点
    TakeProfit – 目标位
    TrailingStop – 移动止损指令

    这些变量的初始值可以在人工智能系统的PROPERTIES TABLE(工具台)中直接键入或在按F7时弹出的特别设置对话框中或是在菜单(Charts - Expert Advisors - Properties)中修改。这些变量不能在程序中修改。


    ★4.2 METAQUOTES II语言的命令结构


    4.2.1变量说明和描述


    在计算过程中储存临时数据需要用到变量。变量是在程序的最开头用关键词、数组、定义来描述。这些词是可以用复数形式的。这些词通常在描述变数语句的开端。而这些词之间的区别在于:“variable” 是用来描述变量,“ array”是用来描述数组 “define”是用以描述用户自定义变量,(这种自定义变量类似于预设变量可以通过设置对话框来修改即外部修改,但不同点在于自定义变量可在程序计算过程中改变)

    变量描述语法

    NAME(初始值),“NAME”是变量的名称,“初始值”是变量的初始值。这个初始值界定了变量的类型——数值型、字符型、逻辑型

    QQ:375955078 qq群 50701168 专业黄金理财





    为了方便用户,人工智能系统提供一些交易终端的变量。
    AccountNumber – 账号(又名ACCNUM)


    Ask – 卖出价(沽盘价)
    Balance –交易账户余额
    Bars – 图表上棍的数量—是一非常重要的填充图表数据的变量
    Bid – 买入价(买价)
    Close – 收盘价
    Credit – 保证金
    Equity – 账户的资金状况,包括未实现润

    FreeMargin – 交易账户的自由保证金—也用来账户资金的实用率
    High – 一段时间的最高价
    Low – 一段时间的最低价
    Margin – 用于支撑未平仓合约的资金
    Open – 开盘价
    Point –当前金融工具(人工智能系统现在正在使用的金融工具)的点数,如D/JPY - 0.01, USD/CHF - 0.0001
    PriceAsk – 在MARKET WATCH(市场观察)窗口显示的现时卖出价
    PriceBid - c在MARKET WATCH(市场观察)窗口显示的现时买入价
    PriceHigh – 24小时内最高卖出价
    PriceLow - 24小时内最高买入价
    PriceTime - 在MARKET WATCH(市场观察)窗口显示的当前时间
    Time –报价表上的棍所表时间
    TotalProfit – 所有未平仓合约的总未实现利润
    TotalTrades – 在交易终端的未平仓合约以及延迟了的买卖盘指令的总数
    Volume – 交易总额(过去一段时间的交易总额)
    须指出的是在过去一段时间内Close, Open, High, Low, Volume, Time是历史数据数列(级数树列)且允许存取这样的数据。

    风子 - 2008-1-26 17:17:00
    4.4. 构建函数

    MetaQuotes LanguageII 为不同的用途提供了不同的函数。包括技术指针, 交易函数, 时间函数, 数学和三角函数, 数据转换和输出函数等。
    Abs- 返回这个数值的绝对值(模块)
    语法 : Abs(nExpression)
    参数: 数值。
    AccountName –返回到包含用户名的文本串(与AccName同义) 。
    ★Alert- 生成包含用户定义的数据的屏幕。
    语法: Alert(...) 例子:alert("FreeMargin is ", FreeMargin); 弹出警告窗 freemargin的值。
    任何非零数字都可作为参数。
    Ceil – 返回等于或大于这个指定的数值的最小的最接近的整数。
    语法: Ceil(nExpression)
    参量: 数值。
    CloseOrder – 平仓单。
    语法: CloseOrder( order, lots, price, slippage, color )
    参量:
    order-开立头寸的顺序号;
    lots- 手数;
    ?价格 - 优先平仓价;
    slippage- 最大价格滑动;
    color- 表框的颜色。
    Comment- 在图表的左上角产生一个用户自定义的数据。
    语法 : Comment(...)
    任何非零数字都可作为参数。
    Cos –计算并返回用弧度表示的角的余弦。
    语法: Cos(nExpression)
    参数: 数值
    CurTime – 返回自1970 年1月1 日以来所经过的秒数 。
    ★Day- 返回当天的月份数值。
    DayOfWeek – 返回当天的星期数值。1 - 星期天 , 2 - 星期一..., 7 - 星期六。
    DeleteOrder – 删除过期定单。
    语法 : DeleteOrder ( order)
    参数:
    order:过期的订单号。
    Exp –返回对具体的数值进行说明的数字
    语法 : Exp(nExpression)
    参数: 数值。
    ★Floor- 返回小于或等于特定数值的最接近的最大的整数值。
    语法: Floor(nExpression)
    参数: 数值。
    ★Highest-返回指定时期最高开盘价、最高最低价、最高最高价、最高收盘价及总交易量(取决于参数类型)
    语法: Highest ( type, beginbar, periods )
    参数:
    type—可采用以下形式返回变数:MODE_OPEN, MODE_LOW, MODE_HIGH, MODE_CLOSE, MODE_VOLUME
    beginbar –相对于当前棒的位移,从中可以获取数据
    periods-计算的时期
    ★Hour-返回当前小时数值。
    iADX – 一般活动指标
    语法: iADX ( period, mode, shift )
    参数:
    period – 计算期间数
    mode –可采用以下数据类型: MODE_MAIN(main indicator), MODE_PLUSDI(line +DI), MODE_MINUSDI(line -DI).
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iATR –平均时间间隔指标
    语法:iATR( period, shift )
    参数:
    period – 计算期间数
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iBANDS – 滚动带指标
    语法: iBANDS( period, deviation, mode, shift )
    参数:
    period – 计算期间数
    deviation – 偏移
    mode –可采用以下数据类型: MODE_MAIN(主指标), MODE_PLUSDI(line +DI), MODE_MINUSDI(line -DI).
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iCCI – 交易记录指针
    语法: iCCI( period, shift )
    period – 计算期间数
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    ★iMA – 平均移动指标
    语法: iMA( period, mode, shift )
    period – 计算期间数
    mode –可采用以下计算模式: MODE_SMA简单, MODE_EMA指数, MODE_WMA有利的.
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    ★iMACD –平均移动收敛/发散指标
    语法:iMACD( fast_ema_period, slow_ema_period, signal_period, mode, shift )
    参数:
    fast_ema_period –计算快速移动平均线的期间数(通常为12)
    slow_ema_period –计算慢速移动平均线的期间数(通常为26)
    signal_period –计算信号移动平均线的期间数
    mode –数据源可采取的形式: MODE_MAIN (主指标), MODE_SIGNAL (单线);
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    period -计算期间数
    iMFI – 现金流量指标
    语法: iMFI( period, shift )
    period – 计算期间数
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iMOM – 要素指标
    语法: iMOM( period, shift )
    period – 计算期间数
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iRSI – 相对强弱指数
    语法: iRSI( period, shift )
    period – 计算期间数
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iSAR - Parabolic SAR.
    语法: iSAR( step, maximum, shift )
    参数:
    step – 增量,一般为0.02
    maximum –最高价,一般为0.2
    iSTO – 随机指数.
    语法: iSTO( %Kperiod, %Dperiod, slowing, method, mode, shift )
    参数:
    %Kperiod - %K线时期;
    %Dperiod - %D线时期;
    slowing –不活跃价格;
    method –可采用以下计算方法: MODE_SMA (简单平均), MODE_EMA (指数), MODE_WMA (weighted);
    mode –可采用以下形式的数据源: MODE_MAIN (主指标线), MODE_SIGNAL (单一指标线);
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    iWPR - Williams 百分比范围指标
    语法: iWPR( period, shift )
    period – 计算期间的数值
    shift –相对于当前棒(时间向后推移)的位移,数据来源于此
    IsDemo – 如果Expert Advisor正在运行交易账户,返回逻辑真值;否则,返回假值
    IsIndirect – 如果使用相反的方法计算指定商品,返回逻辑真值;否则,返回假值
    LastTradeTime – 返回最近一次活动(下单、取消单、平仓、修改单),距离1970年1月1日零点的秒数
    Log – 返回指定正数的对数
    语法: Log( nExpression )
    参数:正数
    ★Lowest –返回指定期间最低开盘价、最低最低价、最低最高价、最低平仓价、交易量(取决于参数类型)
    语法: Lowest( type, beginbar, periods )
    参数:
    type –可采用以下形式: MODE_OPEN, MODE_LOW, MODE_HIGH, MODE_CLOSE, MODE_VOLUME
    beginbar –相对于当前棒的位移,从中可以获取数据
    periods – 计算期间数
    Minute –当前分钟数
    Mod – 返回余数
    语法: Mod( nExpression1, nExpression2 )
    参数:数值1,数值2
    ModifyOrder –修改以前开立的定单或过期单
    语法: ModifyOrder( order, price, stoploss, takeprofit, color )
    参数:
    order –以前开立单的号码;
    price –新价格(仅对过期单);
    stoploss – 止损水平;
    takeprofit –止盈水平;
    color – 图表颜色.
    Month –返回当前月数
    MoveObject –指定对象的移动.
    语法: MoveObject( name, type, time, price, time2, price2 )
    参数:
    name –以文本串形式表示的名称;
    type –对象类型可采用以下形式的: OBJ_HLINE (水平线), OBJ_VLINE (垂直线), OBJ_TRENDLINE (趋势线), OBJ_SYMBOL(设置符号), OBJ_TEXT (文本串);
    time –第一个图表指定点的时间;
    price -第一个图表指定点的价格;
    time2 -第二个图表指定点的时间;
    price2 -第二个图表指定点的价格


    NumberToStr –以指定长度形式将数值返回为文本串形式
    语法: NumberToStr( number, precision )
    参数:
    number –指定数值;
    precision –精确格式,小数点后的位数.
    Ordervalue –返回指定定单的价值.
    语法: Ordervalue( position, mode )
    参数:
    position –交易终端列表中定单的头寸,初始值为1;
    mode –数值返回的形式可采用以下几种: VAL_TICKET (定单号), VAL_OPENTIME (开单时间), VAL_TYPE (定单类型), VAL_LOTS (请求的手数), VAL_SYMBOL (商品名称,用本文形式表示), VAL_OPENPRICE (开盘价), VAL_STOPLOSS (止损水平), VAL_TAKEPROFIT (止盈水平), VAL_CLOSEPRICE (收盘价格), VAL_COMISSION (佣金数量), VAL_SWAP (头寸转滚费用), VAL_PROFIT (交易利润), VAL_COMMENT (头寸具体说明,文本形式), VAL_CLOSETIME (平仓时间).
    Ord – 同Ordervalue.
    Period – 返回所定义的使用期间的分钟数
    Pow –返回nBaseExpression乘以nBaseExpression的幂.
    语法: Pow( nBaseExpression, nExponentExpression )
    参数:数值1,数值2
    Print – 将用户定义的数据录入系统日志.
    语法: Print(...)
    可使用任意非零数值.
    PrintTrade – 将头寸详细数据储存到日志中.
    语法: PrintTrade( position )
    参数:交易终端开仓号
    Rand –返回产生的伪随机号.使用这个函数之前,必须使用Srand函数,将伪随机号发生器设置到初始头寸。一旦初始头寸中设置了伪随机号发生器,随机号发生器将在开始程序中出现。
    Round –返回指定数值的四舍五入的整数.
    语法: Round( nExpression )
    参数:数值.
    ServerAddress – 以文本串形式返回服务器IP地址.
    ★★SetArrow – 在图表上设置符号.
    语法: SetArrow( time, price, symbol, color )
    参数:
    time – 图表上指定点的时间;
    price –图表上指定点的价格;
    symbol – 字体设置中符号的数值号
    color –符号颜色.
    SetObjectText –将指定对象定义为文本串
    语法: SetObjectText( name, text, font, size, color )
    参数:
    name –对象名称;
    text –指定文本;
    font –字体名称;
    size – 字体大小;
    color –文本颜色.
    ★★SetOrder – 开立头寸或设置定时单的主函数
    语法: SetOrder( operation, lots, price, slippage, stoploss, takeprofit, color )
    参数:
    operation – 操作类型可采用以下形式:: OP_BUY(开立买入单), OP_SELL (开立卖出单), OP_BUYLIMIT(开立买入限价单), OP_SELLLIMIT(开立卖出限价单), OP_BUYSTOP(开立买入止损单), OP_SELLSTOP (开立卖出止损单);
    lots –手数;
    price – 优先平仓价格;
    slippage – 最大OP_BUY 及 OP_SELL滑动价格;
    stoploss – 止损水平;
    takeprofit – 止盈水平;
    color – 调用函数时,图表上箭头的颜色.
    ★SetText –为指定头寸在图表上设置文本串.
    语法: SetText( time, price, string, color )
    参数:
    time –图表上指定点的时间;
    price -图表上指定点的时间;
    string –文本串;
    color –文本颜色.
    Sin – 计算返回以弧度表示的角的正弦.
    语法: Sin( nExpression )
    参数:.数值
    Sqrt –计算返回指定正数的平方根.
    语法: Sqrt( nExpression )
    参数:正数
    Srand – 为初始头寸设置伪随机发生器,一旦发生器被设置,它将出现在开始程序中。初始设置使用的最佳值是时间函数返回的值。语法:Syntax: Srand( Time )
    参数:正数
    Symbol –返回Expert Advisor 中运行的金融商品的文本串.
    Tan -计算返回以弧度表示的角的正切.
    语法: Tan( nExpression )
    参数:数值.
    TimeToStr –返回当前距1970年1月1日零时经历的时间,以文本串“年年年年.月月.日日时时:分分”表示
    语法: TimeToStr( Time )
    参数:正数.
    Year –返回当前年份的数值.
     
  2. 这个是mql2,现在使用的mql4, 目前正在开发的是mql5.
     
  3. 你昨天晚上在啊,到处找你。