MT4-程序的基本结构

MT4程序的基本结构 MT4程序的基本结构

使用 MQ4 语言编制自动交易系统的基本知识.

Title 编制自动交易系统的基本知识 一个交易系统大致包括以下几个方面: 1 开仓策略,即什么条件满足时开仓, 如某条线和某条线上交叉或下交叉, 2 平仓策略,即什么条件满足时平仓, 包括止赢设置,止损设置,和跟踪止赢设置三个方面. 3 资金管理, 其中一个方面就是下单的大小 4 时间管理, 如持仓时间,开平仓时间间隔等 5 账户状态分析,如交易历史,当前资金/仓位/各仓为盈亏状态等. 当然一个交易系统不必包括全部内容,本文做为入门知识也仅通过实例介绍交易系统程序的基本构成. ------------- //+------------------------------------------------------------------+ //| Designed by OKwh, China | //| Copyright 2007, OKwh Dxdcn | //| http://blog.sina.com.cn/FXTrade | //+------------------------------------------------------------------+ #property copyright "Copyright 2007 , Dxd, China." #property link "http://blog.sina.com.cn/FXTrade http://www.mql4.com/users/DxdCn" #define MAGICMA [1**********]1 //+------------------------------------------------------------------+ //| 注意没有指标文件那些 property | //+------------------------------------------------------------------+ extern int whichmethod = 1; //1~4 种下单方式 1 仅开仓, 2 有止损无止赢, 3 有止赢无止损, 4 有 止赢也有止损 extern double TakeProfit = 100; //止赢点数 extern double StopLoss = 20; //止损点数 extern double MaximumRisk = 0.3; //资金控制,控制下单量 extern double TrailingStop =25; //跟踪止赢点数设置 extern int maxOpen = 3; //最多开仓次数限制 extern int maxLots = 5; //最多单仓持仓量限制 extern int bb = 0; //非零就允许跟踪止赢 extern double MATrendPeriod=26;//使用 26 均线 开仓条件参数 本例子 int i, p2, xxx,p1, res; double Lots; datetime lasttime; int init() //初始化 { Lots = 1; lasttime = NULL; return(0); //时间控制, 仅当一个时间周期完成才检查条件

,

1

MT4程序的基本结构 MT4程序的基本结构

} int deinit() { return(0); } //反初始化 //主程序 int start() { CheckForOpen(); //开仓 平仓 条件检查 和操作 if (bb>0) CTP(); //跟踪止赢 return(0); } //+------下面是各子程序--------------------------------------------+ double LotsOptimized() //确定下单量,开仓调用 资金控制 { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //MarketInfo(Symbol(),MODE_MINLOT); //MarketInfo(Symbol(),MODE_MAXLOT); //MarketInfo(Symbol(),MODE_LOTSTEP); 相关信息

lot=NormalizeDouble(MaximumRisk * AccountBalance()/AccountLeverage(),1); 算 if(lotmaxLots) lot=maxLots; return(lot); } //平仓持有的买单 void CloseBuy() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--)

{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,White); Sleep(5000); } } } } //平仓持有的卖单 void CloseSell() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) if(OrderType()==OP_SELL)

//开仓量计

break;

break;

2

MT4程序的基本结构 MT4程序的基本结构

{ OrderClose(OrderTicket(),OrderLots(),Ask,3,White); Sleep(5000); } } } } //判断是否买或卖或平仓 int buyorsell() //在这个函数计算设置你的交易信号 这里使用 MACD 和 MA 做例子 { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrentSignalCurrent && MacdPreviousMaPrevious) return (1); // 买 Ma 在上升,Macd 在 0 线上,并且两线上交叉 if(MacdCurrent>0 && MacdCurrentSignalPrevious && MaCurrent

if (nowbuyorsell == -1) //卖 先结束已买的 CloseBuy(); if (TimeDayOfWeek(CurTime()) == 1) { if (TimeHour(CurTime()) 19 ) return; //周五晚 11 点后不做 } if (OrdersTotal( ) >= maxOpen) return ; //如果已持有开仓次数达到最大,不做

3

MT4程序的基本结构 MT4程序的基本结构

if (nowbuyorsell==0) return; TradeOK(); //去下单交易 } void TradeOK() { int error ; //去下单交易 //不交易

if (nowbuyorsell == 1) //买 { switch (whichmethod) { case 1: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);break; case 2: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,AskStopLoss*Point,0,"",MAGICMA,0,Blue); break; case 3: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+TakeProfit*Point,"",MAGICMA, 0,Blue);break; case 4: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,AskStopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);break; default : res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);break; } if (res

; // prices have changed } Sleep(5000); return ; } if (nowbuyorsell == -1) //卖 { switch (whichmethod) { case 1: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); break; case 2: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,0,"",MAGICMA, 0,Red); break; case 3: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,BidTakeProfit*Point,"",MAGICMA,0,Red); break; case 4: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,BidTakeProfit*Point,"",MAGICMA,0,Red); break; default : res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); break; } if (res

4

MT4程序的基本结构 MT4程序的基本结构

{ error=GetLastError(); if(error==134) Print("Received 134 Error after OrderSend() !! "); enough money if(error==135) RefreshRates(); // prices have changed } Sleep(5000); return ; } } void CTP() //跟踪止赢 { bool bs = false; for (int i = 0; i (TrailingStop

// not

break;

*

MarketInfo(OrderSymbol(),

MODE_POINT))) //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置 { if (OrderStopLoss() (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))) //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置

{ if ((OrderStopLoss()) > (Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))) { bs = OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Tan); } } } } } -------------- 建议采用的 EA 逻辑 前提:制作常用函数库 1、仓位状态函数:判断仓位并输出持仓方向和持仓单 Ticket 号码

5

MT4程序的基本结构 MT4程序的基本结构

2、平仓函数: 3、入场条件计算函数 多 空 4、出场条件计算函数 多 空 EA 建议逻辑图: --------------- Start 函数中 执行仓位状态函数 如果空仓 入场条件计算函数 满足多头条件—则执行多头入场操作 满足空头条件---则执行空头入场操作 入场条件都不满足,直接返回 如果持仓 根据持仓状态处理 多单持仓----计算多单出场函数 如果满足 则执行出场 如果不满足,则直接返回 空单持仓----计算空单出场函数 如果满足 则执行出场 如果不满足,则直接返回 ------------------ MT4 作为一门语言包含的内容相当多,不过它基本上是与 C 语言类似,如果你学过 C 或者 VB 之类的基础编程, 理解起

来不是太难,在这里想短篇幅幅搞清楚所有 MT4 的语法似乎不太可能,建议大家不要想一口吃个胖子,MT4 的基本语法在以后说明,更深入的部分将以还是在实际编程中逐步解决。

MT4 程序基本结构一般从上到下包括 4 个部分(当然有些部分的位置是可以颠倒的,MT4 是根据函数名字来寻找,而 不是根据位置) 。按照一般的方便查看的结构程序设计原则,MT4 从上到下的组成是: 第一部分:头代码部分 这里可以放置当前程序的属性,以及一些外部调用,同时在这里可以设置技术文件运行时可以改动的参数定义部分。 指标属性的设置一般每一行都用#property 开头,后面是具体某个属性的设定, 例如: #property indicator_chart_window 就表示当前指标运行的时候所显示的图线是放置在 K 线主图里面的 #property indicator_separate_window 就表示当前指标运行的时候所显示的图线是放置在 K 线下面的独立附图里面的 #property indicator_buffers 4 表示本指标将会使用 4 条线,所以在这里用语句进行初始化设定 #property indicator_color1 Blue 表示第一条指标线是用蓝色 #property indicator_color2 Red 表示第一条指标线是用红色 #property indicator_color3 Blue 参考上面 #property indicator_color4 Red 参考上面 #property indicator_style4 2 表示指标类型采用系统定义好的 2 号类型

头文件部分还有一个重要作用就是定义输入参数: extern int fast=3; extern double slow=7.34;

6

MT4程序的基本结构 MT4程序的基本结构

输入参数的定义每一行以 extern 开头,后面紧接着是参数的类型 int 整数 double 双精度实数,再后来是参数的名字以及 设定他的初始数值。 说明:在这里设定的参数,当你在 MetaTrader 里面附加这个指标的时候,弹出的指标窗口“输入参数”里面就会显示 出来。 头文件部分完成后,下面的三个部分是三个系统设定好名字的函数过程,不要更改名字,否则无法运行。你要做的只 是在这三个函数过程内部添加你的代码,当然你也可以在这三个函数外面自己定义你的个性函数,然后再三个函数里 面进行调用。

三个系统函数如下: int init() 初始化函数,这个函数在治标被加载的时候运行一次,一般用于进行和图表有关的一些属性的设置。 int deinit() 预定义函数,一般很少使用,知道就行了,程序里面可以没有这个部分 int start() 最重要的程序部分都在这里,start 函数在每来一个价格 Tick 的时候,都会运行一次,这里面放置了主要的程 序循环代码。因此你开发的指标图形才会在实时行情下不断变化。

一个 MT4 程序包含了以上部分后,就算完整了,剩下的工作主要在于结构流程的设计功夫。

MT4自定义指标一般由四个部分构

成: MT4自定义指标一般由四个部分构成: 自定义指标一般由四个部分构成

(1)文件头部 (2)参数、变量和数组的定义 (3)初始化函数 init()

7

MT4程序的基本结构 MT4程序的基本结构

(4)主函数 start()

一、文件头部,也称为预处理程序 预处理程序以“#”开头,行尾无语句结束符“;” 常用的预处理程序有: 1、#property indicator_chart_window 把指标显示在主图。如:均线、SRA 等类指标用到此语句 2、#property indicator_separate_window 把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句 3、#property indicator_buffers 3 显示3根指标线 4、#property indicator_color1 Red 第1根指标线的颜色为 Red

8

MT4程序的基本结构 MT4程序的基本结构

5、#property indicator_width1 1 第1根指标线的粗细分别为1 6、#property indicator_level1 在0.00值位置横划1条虚线 二、参数、变量和数组的定义 全局性的参数、变量、数组在此定义,局部变量可在 start()函数中定义 三、初始化函数 init() init()在自定义指标加载时运行一次。 初始化函数的功能是“设置”。如果自定义指标需要划线,则必然用到此函数 四、主函数 start() 当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。 自定义指标的编程主要依靠此函数进行。 start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起。 另外,还有一个反初始化函数 deinit() deinit()在自定义卸载时运行一次,可用以去除指标加载时 init()所做的初始化操作。 0.00

9

MT4程序的基本结构 MT4程序的基本结构

使用 MQ4 语言编制自动交易系统的基本知识.

Title 编制自动交易系统的基本知识 一个交易系统大致包括以下几个方面: 1 开仓策略,即什么条件满足时开仓, 如某条线和某条线上交叉或下交叉, 2 平仓策略,即什么条件满足时平仓, 包括止赢设置,止损设置,和跟踪止赢设置三个方面. 3 资金管理, 其中一个方面就是下单的大小 4 时间管理, 如持仓时间,开平仓时间间隔等 5 账户状态分析,如交易历史,当前资金/仓位/各仓为盈亏状态等. 当然一个交易系统不必包括全部内容,本文做为入门知识也仅通过实例介绍交易系统程序的基本构成. ------------- //+------------------------------------------------------------------+ //| Designed by OKwh, China | //| Copyright 2007, OKwh Dxdcn | //| http://blog.sina.com.cn/FXTrade | //+------------------------------------------------------------------+ #property copyright "Copyright 2007 , Dxd, China." #property link "http://blog.sina.com.cn/FXTrade http://www.mql4.com/users/DxdCn" #define MAGICMA [1**********]1 //+------------------------------------------------------------------+ //| 注意没有指标文件那些 property | //+------------------------------------------------------------------+ extern int whichmethod = 1; //1~4 种下单方式 1 仅开仓, 2 有止损无止赢, 3 有止赢无止损, 4 有 止赢也有止损 extern double TakeProfit = 100; //止赢点数 extern double StopLoss = 20; //止损点数 extern double MaximumRisk = 0.3; //资金控制,控制下单量 extern double TrailingStop =25; //跟踪止赢点数设置 extern int maxOpen = 3; //最多开仓次数限制 extern int maxLots = 5; //最多单仓持仓量限制 extern int bb = 0; //非零就允许跟踪止赢 extern double MATrendPeriod=26;//使用 26 均线 开仓条件参数 本例子 int i, p2, xxx,p1, res; double Lots; datetime lasttime; int init() //初始化 { Lots = 1; lasttime = NULL; return(0); //时间控制, 仅当一个时间周期完成才检查条件

,

1

MT4程序的基本结构 MT4程序的基本结构

} int deinit() { return(0); } //反初始化 //主程序 int start() { CheckForOpen(); //开仓 平仓 条件检查 和操作 if (bb>0) CTP(); //跟踪止赢 return(0); } //+------下面是各子程序--------------------------------------------+ double LotsOptimized() //确定下单量,开仓调用 资金控制 { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //MarketInfo(Symbol(),MODE_MINLOT); //MarketInfo(Symbol(),MODE_MAXLOT); //MarketInfo(Symbol(),MODE_LOTSTEP); 相关信息

lot=NormalizeDouble(MaximumRisk * AccountBalance()/AccountLeverage(),1); 算 if(lotmaxLots) lot=maxLots; return(lot); } //平仓持有的买单 void CloseBuy() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--)

{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,White); Sleep(5000); } } } } //平仓持有的卖单 void CloseSell() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) if(OrderType()==OP_SELL)

//开仓量计

break;

break;

2

MT4程序的基本结构 MT4程序的基本结构

{ OrderClose(OrderTicket(),OrderLots(),Ask,3,White); Sleep(5000); } } } } //判断是否买或卖或平仓 int buyorsell() //在这个函数计算设置你的交易信号 这里使用 MACD 和 MA 做例子 { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrentSignalCurrent && MacdPreviousMaPrevious) return (1); // 买 Ma 在上升,Macd 在 0 线上,并且两线上交叉 if(MacdCurrent>0 && MacdCurrentSignalPrevious && MaCurrent

if (nowbuyorsell == -1) //卖 先结束已买的 CloseBuy(); if (TimeDayOfWeek(CurTime()) == 1) { if (TimeHour(CurTime()) 19 ) return; //周五晚 11 点后不做 } if (OrdersTotal( ) >= maxOpen) return ; //如果已持有开仓次数达到最大,不做

3

MT4程序的基本结构 MT4程序的基本结构

if (nowbuyorsell==0) return; TradeOK(); //去下单交易 } void TradeOK() { int error ; //去下单交易 //不交易

if (nowbuyorsell == 1) //买 { switch (whichmethod) { case 1: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);break; case 2: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,AskStopLoss*Point,0,"",MAGICMA,0,Blue); break; case 3: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+TakeProfit*Point,"",MAGICMA, 0,Blue);break; case 4: res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,AskStopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);break; default : res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);break; } if (res

; // prices have changed } Sleep(5000); return ; } if (nowbuyorsell == -1) //卖 { switch (whichmethod) { case 1: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); break; case 2: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,0,"",MAGICMA, 0,Red); break; case 3: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,BidTakeProfit*Point,"",MAGICMA,0,Red); break; case 4: res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,BidTakeProfit*Point,"",MAGICMA,0,Red); break; default : res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); break; } if (res

4

MT4程序的基本结构 MT4程序的基本结构

{ error=GetLastError(); if(error==134) Print("Received 134 Error after OrderSend() !! "); enough money if(error==135) RefreshRates(); // prices have changed } Sleep(5000); return ; } } void CTP() //跟踪止赢 { bool bs = false; for (int i = 0; i (TrailingStop

// not

break;

*

MarketInfo(OrderSymbol(),

MODE_POINT))) //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置 { if (OrderStopLoss() (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))) //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置

{ if ((OrderStopLoss()) > (Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))) { bs = OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Tan); } } } } } -------------- 建议采用的 EA 逻辑 前提:制作常用函数库 1、仓位状态函数:判断仓位并输出持仓方向和持仓单 Ticket 号码

5

MT4程序的基本结构 MT4程序的基本结构

2、平仓函数: 3、入场条件计算函数 多 空 4、出场条件计算函数 多 空 EA 建议逻辑图: --------------- Start 函数中 执行仓位状态函数 如果空仓 入场条件计算函数 满足多头条件—则执行多头入场操作 满足空头条件---则执行空头入场操作 入场条件都不满足,直接返回 如果持仓 根据持仓状态处理 多单持仓----计算多单出场函数 如果满足 则执行出场 如果不满足,则直接返回 空单持仓----计算空单出场函数 如果满足 则执行出场 如果不满足,则直接返回 ------------------ MT4 作为一门语言包含的内容相当多,不过它基本上是与 C 语言类似,如果你学过 C 或者 VB 之类的基础编程, 理解起

来不是太难,在这里想短篇幅幅搞清楚所有 MT4 的语法似乎不太可能,建议大家不要想一口吃个胖子,MT4 的基本语法在以后说明,更深入的部分将以还是在实际编程中逐步解决。

MT4 程序基本结构一般从上到下包括 4 个部分(当然有些部分的位置是可以颠倒的,MT4 是根据函数名字来寻找,而 不是根据位置) 。按照一般的方便查看的结构程序设计原则,MT4 从上到下的组成是: 第一部分:头代码部分 这里可以放置当前程序的属性,以及一些外部调用,同时在这里可以设置技术文件运行时可以改动的参数定义部分。 指标属性的设置一般每一行都用#property 开头,后面是具体某个属性的设定, 例如: #property indicator_chart_window 就表示当前指标运行的时候所显示的图线是放置在 K 线主图里面的 #property indicator_separate_window 就表示当前指标运行的时候所显示的图线是放置在 K 线下面的独立附图里面的 #property indicator_buffers 4 表示本指标将会使用 4 条线,所以在这里用语句进行初始化设定 #property indicator_color1 Blue 表示第一条指标线是用蓝色 #property indicator_color2 Red 表示第一条指标线是用红色 #property indicator_color3 Blue 参考上面 #property indicator_color4 Red 参考上面 #property indicator_style4 2 表示指标类型采用系统定义好的 2 号类型

头文件部分还有一个重要作用就是定义输入参数: extern int fast=3; extern double slow=7.34;

6

MT4程序的基本结构 MT4程序的基本结构

输入参数的定义每一行以 extern 开头,后面紧接着是参数的类型 int 整数 double 双精度实数,再后来是参数的名字以及 设定他的初始数值。 说明:在这里设定的参数,当你在 MetaTrader 里面附加这个指标的时候,弹出的指标窗口“输入参数”里面就会显示 出来。 头文件部分完成后,下面的三个部分是三个系统设定好名字的函数过程,不要更改名字,否则无法运行。你要做的只 是在这三个函数过程内部添加你的代码,当然你也可以在这三个函数外面自己定义你的个性函数,然后再三个函数里 面进行调用。

三个系统函数如下: int init() 初始化函数,这个函数在治标被加载的时候运行一次,一般用于进行和图表有关的一些属性的设置。 int deinit() 预定义函数,一般很少使用,知道就行了,程序里面可以没有这个部分 int start() 最重要的程序部分都在这里,start 函数在每来一个价格 Tick 的时候,都会运行一次,这里面放置了主要的程 序循环代码。因此你开发的指标图形才会在实时行情下不断变化。

一个 MT4 程序包含了以上部分后,就算完整了,剩下的工作主要在于结构流程的设计功夫。

MT4自定义指标一般由四个部分构

成: MT4自定义指标一般由四个部分构成: 自定义指标一般由四个部分构成

(1)文件头部 (2)参数、变量和数组的定义 (3)初始化函数 init()

7

MT4程序的基本结构 MT4程序的基本结构

(4)主函数 start()

一、文件头部,也称为预处理程序 预处理程序以“#”开头,行尾无语句结束符“;” 常用的预处理程序有: 1、#property indicator_chart_window 把指标显示在主图。如:均线、SRA 等类指标用到此语句 2、#property indicator_separate_window 把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句 3、#property indicator_buffers 3 显示3根指标线 4、#property indicator_color1 Red 第1根指标线的颜色为 Red

8

MT4程序的基本结构 MT4程序的基本结构

5、#property indicator_width1 1 第1根指标线的粗细分别为1 6、#property indicator_level1 在0.00值位置横划1条虚线 二、参数、变量和数组的定义 全局性的参数、变量、数组在此定义,局部变量可在 start()函数中定义 三、初始化函数 init() init()在自定义指标加载时运行一次。 初始化函数的功能是“设置”。如果自定义指标需要划线,则必然用到此函数 四、主函数 start() 当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。 自定义指标的编程主要依靠此函数进行。 start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起。 另外,还有一个反初始化函数 deinit() deinit()在自定义卸载时运行一次,可用以去除指标加载时 init()所做的初始化操作。 0.00

9


相关内容

  • 国际现货黄金基本知识
  • 现货黄金(也叫国际现货黄金和伦敦金)是即期交易,指在交易成交后交割或数天内交割.现货黄金是一种国际性的投资产品,由各黄金公司建立交易平台,以杠杆比例的形式向坐市商进行网上买卖交易,形成的投资理财项目.通常也称现货黄金是世界第一大股票.因为现货黄金每天的交易量巨大,日交易量约为20万亿美元.因此没有任 ...

  • 程序化交易编程学习技术分析的基础:图表阅读
  • 技术分析的基础:图表阅读 图表阅读必须具备的技能: 1.了解蜡烛图 蜡烛图又称为"K线",它是以每个分析周期的开盘价.最高价.最低价.和收盘价绘制而成.以绘制日k线为例,首先确开盘和收盘的价格,它们之间的部分画成矩形实体.如果收趋势 如何对抗追涨杀跌 追涨杀跌乃是一般投资人的投资 ...

  • 外汇交易入门需要哪些知识
  • 外汇交易入门需要哪些知识 外汇交易在不知不觉间已经成为国内继股票.期货之后的第三大投资理财方式,其迅速崛起和蔓延的时间远远低于前两者,之所以如此受到投资者追捧的原因正是其高利润.高回报,短期收益高等特点,虽然伴随着较高的风险,然而往往容易被投资者所忽略.炒外汇入门需要掌握一些知识,方能够规避风险,获 ...

  • 外汇新手常用哪些技术指标
  • 外汇交易当中,大部分的行情走势都需要查看一些经济数据来判断,也有根据之前一段时间的走势来判断后期的行情,所有的走势判断大致都可以使用以下几种技术指标来实现.那么今天通汇国际客户经理蒋超就为广大新手介绍一下几种常用的,相对比较简单的技术指标,希望对大家今后的交易有帮助. 首先第一种,也是最多人使用的就 ...

  • 福汇登录不上怎么使用福汇代理服务器
  • FXCM福汇做为全球最大的外汇交易零售商,拥有的客户数量数不胜数.在那么多的客户的情况下,在数据行情大,或者网络不稳定的情况下,为更好的让投资者交易.FXCM福汇为广大的客户准备了福汇代理服务器.下面通汇国际黄勇为大家介绍一下福汇代理服务器的设置方法: FXCM福汇MT4平台代理服务器设置介绍: 点 ...

  • 一机多屏显示技术解决方案
  • 一机双屏,一机多屏,双网解决方案 一台电脑主机完全可以完成四台电脑主机的任务.大多数软件程序可以多次重复安装在不同路径下,从而获得重复使用.我的电脑是普通的双核主机,一般同时运行六个MT4看图软件再加若干个操作软件,用多台主机完全是浪费的. 一机双屏方案 台式机的显卡一般为双头,不需要更改你的电脑, ...

  • 外汇投资陷阱案例
  • 外汇 -----外汇是以外币表示的用于国际结算的支付凭证.外汇交易平台指外汇市场上的一些具备一定实力和信誉的独立交易商,不断地向投资者报出货币的买卖价 格(即双向报价)24小时交易除了节假日,并在该价位上接受投资者的买卖要求.平台可以持有自有资金与投资者进行交易,在市场成交稀交的时候,买卖双方不需等 ...

  • 股票名词,股市名词,股票术语,股票字典,股市术语,炒股术语,炒股名词
  • 股票 期货 蓝筹股 市盈率 MACD指标 新股(IPO) 委比 量比 ETF 操盘手 A股 上证指数 内盘外盘 KDJ指标 T+0 净资产收益率 炒股 市净率 外盘 波浪理论 证券 热钱 配股 CCI 成交量 乖离率 集合竞价 大盘 B股 每股收益 K线图 布林线指标 RSI指标 红筹股 每股净资产 ...

  • 影响黄金价格走势的因素之货币政策汇率.市场焦点和市场情绪因素
  • 货币政策汇率因素 美元汇率是影响金价波动的重要因素之一.美元坚挺一般代表美国国内的经济形势良好,美国国内股票和债券将得到投资者的竞相追捧,黄金作为价值储藏手段的功能受到削弱:而美元汇率下降则往往与通货膨胀.股市低迷等有关,黄金的保值功能又再次体现,在美元贬值和通货膨胀加剧时往往会刺激对黄金保值和投机 ...