外汇MT4智能交易系统EA编写{StochasticOscillator(KD系统)}

合集下载

外汇MT4_EA智能系统MQ4编写详细举例

外汇MT4_EA智能系统MQ4编写详细举例

创建一简易的人工智能系统举例说明让我们将MACD指标同获利能力、支撑移动止损位以及操作安全等因素结合起来考虑以创建人工智能系统。

下面的例子是开立和控制一个单独的头寸。

<BR><BR>交易原则:<BR><BR>. 做多(买入)信号——即当MACD 指针是在0轴在以下,为向上的趋势并与向下的信号线相交(金叉) <BR><BR>. 做空(卖出) 信号——即当MACD 指针是在0轴以上,为向下趋势并与向上的信号线相交(死叉) <BR><BR>. 多头平仓信号——即执行限价平仓指令或移动止损指令以获得利润或者在MACD指针与信号线相交(MACD指针在0轴以上且为向下趋势并与向上趋势的信号线相交)时平仓 <BR><BR>. 空头平仓信号——即执行限价平仓指令或移动止损指令以获得利润或者在MACD指针与信号线相交(MACD指针在0轴以下且为向上趋势并与向下趋势的信号线相交)时平仓 <BR><BR>重要提示: <BR><BR> 在我们分析MACD指标时,为了排除MACD指示中一些并不重要的变化情况(即图表中的细微“小丘”),下面我们另外引荐一种控制“小丘”大小的方法: <BR><BR>指示范围至少为5个最小单位(5点,即USD/CHF=0.0005,USD/JPY=0.05) <BR><BR><BR><BR>第一步:撰写人工智能系统说明 <BR><BR><BR>将鼠标指在导航窗口的人工智能系统,点击鼠标右键在弹出的菜单中CREATE A NEW EXPERT(创建一个智能系统)命令. 正在初始化的WISARD OF EXPERT ADVISOR 会问你是否要输入数据.在弹出的窗口中你得写下NAME名字(人工智能系统的名字) 、AUTHOR作者、与你的网址链接、须知—人工智能系统的测试样本.你也可以设定你想要的Lots(交易单位), Stop Loss(止损点), Take Profit(平仓) 和 Trailing Stop(移动止损)的默认值. <BR><BR><BR><BR>第二步:创立程序的初步结构 <BR><BR>测试系统的代码仅仅为几页纸,即使是这几页纸仍然是难以理解的,特别是在我们这些不是专业的程序员的眼里是非常难的.不然,我们也不必写下这段说明,不是吗? <BR><BR>为了了解标准的人工智能系统的结构,我们来看一下下面的解释: <BR><BR>1.初始资料检查 <BR><BR>.检查图表,图表上棍的数量 <BR><BR>.检查外部变数值:LOTS,S/L,T/P,T/S <BR><BR>2.设置为快速数据存取的内部变量 <BR><BR>3检查交易终端—是否有空间?如果有,然后 <BR><BR>.检查账户中的可用资金 <BR><BR>.是否可以做多(买入) <BR><BR>.建仓买入和平仓 <BR><BR>.是否可以做空(卖出) <BR><BR>.建仓卖出和平仓 <BR><BR>4. 定期控制已开立的头寸<BR><BR>..若是多头合约 <BR><BR> .是否要平仓 <BR><BR>.是否要重新设定移动止损点 <BR><BR>..若是空头合约 <BR><BR>.是否要平仓 <BR><BR>.是否要重新设定移动止损点 <BR><BR>这是相对简单的样板,仅仅只有4个主要单元. <BR><BR>现在我们来试着逐渐将结构表中的每一部分的代码做出来: <BR><BR>1.初始资料检查 <BR><BR>这一块的数据通常是经过稍稍修改后从一个系统移至另一系统的—这实际上是一单元检查. <BR><BR>If Bars&lt;200 Then Exit; // the chart has less than 200 bars - exit <BR><BR>If TakeProfit&lt;10 Then Exit; // wrong takeprofit parameters 收益小于10点退出<BR><BR>2设置为快速数据存取的内部变量 <BR><BR>在程序代码中,有的是经常需要存取的指示值和操做的计算值.为了简化译码和加速存取,数据最初便在内部变数中嵌套进去<BR><BR>.MacdCurrent=iMACD(12,26,9,MODE_MAIN,0); // MACD value on the current bar <BR><BR>MacdPrevious=iMACD(12,26,9,MODE_MAIN,1); // MACD value on the previous bar <BR><BR>SignalCurrent=iMACD(12,26,9,MODE_SIGNAL,0); // Signal Line value on the current bar <BR><BR>SignalPrevious=iMACD(12,26,9,MODE_SIGNAL,1);//Signal Line value on the previous bar<BR><BR>MaCurrent=iMA(MATrendPeriod,MODE_EMA,0); // moving average value on the current bar <BR><BR>MaPrevious=iMA(MATrendPeriod,MODE_EMA,1); // moving average value on the previous bar <BR><BR>现在,我们以在程序中简单的写入字符MacdCurrent代替晦涩难懂的iMACD(12,26,9,MODE_MAIN,0).所有的人工智能系统中的变量都依据MQL II语言进行基本的解释. <BR><BR>var: MacdCurrent(0), MacdPrevious(0), SignalCurrent(0), SignalPrevious(0); <BR><BR>var: MaCurrent(0), MaPrevious(0); <BR><BR>MQL II语言还另外推出一种的用户自定义变量,它可以在程序外设定而无须任何系统程序下的源程序正文的参考.这个特点使程序更具灵活性MATrendPeriod变量就是一个这种类型的用户自定义变量,因此,我们在程序的开头加入这段说明. <BR><BR>defines:MATrendPeriod(56); <BR><BR ><BR ><P>3. 检查交易终端是否有空间?如果有,然后 <BR><BR>在我们的人工智能系统中,我们只能使用现时头寸而不能操作延迟的买卖盘.为了安全起见,我们介绍一种核对过去交易终端已下买卖盘的程序. <BR><BR>If TotalTrades&lt;1 then // no opened orders identified <BR><BR>{ <BR><BR>3.检查: 账户的可用资金……. 在分析市场状况之前最好先检查一下你的账户的资金情况, 以确保账户中有开立头寸的资金. <BR><BR>If FreeMargin&lt;1000 then Exit; // no funds – exit <BR><BR><BR>. 是否可以做多(买入) <BR><BR> 买入的条件信号:MACD指标在0轴以下,为向上趋势且与向下趋势的信号线相交。

MT4自带的EA详解(MA和MACD)

MT4自带的EA详解(MA和MACD)

1、MT4 自带EA(MA)解析与实战分析2、MT4 自带EA(MACD)解析与实战分析1、MT4 自带EA(MA)解析与实战分析一、均线穿越交易系统EA详解MT4 平台自带了一个自动交易的EA 指标,那就是Moving Average ,下面详细解释该系统每条语句的功能说明,以便深入认识EA 的编程内核。

//+------------------------------------------------------------------+//| Moving Average.mq4 |//| Copyright ?2005, MetaQuotes Software Corp. |//| / |//+------------------------------------------------------------------+#define MAGICMA 20050610//定义本EA 操作的订单的唯一标识号码,由此可以实现在同一账户上多系统操作,各操作EA 的订单标识码不同,就不会互相误操作。

凡是EA 皆不可缺少,非常非常重要!extern double Lots = 0.1; //每单的交易量extern double MaximumRisk = 0.02;//本系统最大风险系数,即可以动用总资金的2%extern double DecreaseFactor = 3; //下跌因素个数extern double MovingPeriod = 12; //均线的计算周期=12 根K 线;extern double MovingShift = 6; //均线在K 线图中向右显示的偏移量=6 根K 线;//extern 确定从外部程序输入的变量,会直接显现输入数据窗口。

数列本身不能作为外部变量。

注意:iMA 中的MovingShift(均线偏移量)是指均线指标在图上绘制时向左、右移动的K线个数,主要为了使图中结果更好看,并不会对MA 的计算数值产生变化。

MT4智能交易系统编程语言语法规则

MT4智能交易系统编程语言语法规则
加减 1 的运算符不能被嵌套在表达式中
int a=3; a++; // 可行的表达式 int b=(a++)*3; // 不可行的表达式
赋值运算符 注:将右侧的结果赋值给左侧的变量
将 x 的值赋值给 y y = x; 将 x 的值加到 y 上面 y += x; 在 y 上面减去 x 的值 y -= x; 得到 y 的 x 倍的值 y *= x; 得到 y 除以 x 的值 y /= x; 取 y 除以 x 后的余数 y %= x; y 向右位移 x 位 y >>= x; y 向左位移 x 位 y <<= x; 得到逻辑 AND 的值 y &= x; 得到逻辑 OR 的值 y |= x; 得到逻辑非 OR 的值 y ^= x;
MT4 智能交易系统编程语法规则
• Char (char) • String (string) • Floating-point number (double) • Color (color) • Datetime (datetime)
我们用 Integer 类型数据来作为 DateTime 和 Color 数据的存储。 使用以下方式可以进行类型站换:
第 5 页,共 99 页
外汇智能工具网

外汇智能工具论坛
MT4 智能交易系统编程语法规则
数的逻辑“异或”;也就是说,当且仅当只有一个操作数为 true 时,其结果才为 true。
b = x ^ y; 注:位逻辑运算符只作用于 Integers 类型
int (bool,color,datetime); double; string;
Integer 类型 十进制: 数字 0-9;0 不能作为第一个字母 示例:

外汇软件MT4及MT5中交易品种的中英文及简写对照表

外汇软件MT4及MT5中交易品种的中英文及简写对照表

外汇软件MT4及MT5中交易品种的中英文及简写对照表一.货币对:(主要交易对象为:黄金+六种主要交易货币)EURUSD欧元兑美元GBPUSD英镑兑美元直接货币AUDUSD澳元兑美元USDJPY美元兑日元USDCHF美元兑法郎间接货币USDCAD美元兑加元NZDUSD纽元兑美元EURGBP欧元兑英镑EURCHF欧元兑法郎EURJPY欧元兑日元EURAUD欧元兑澳元EURCAD欧元兑加元GBPCHF英镑兑法郎GBPJPY英镑兑日元AUDJPY澳元兑日元AUDNZD澳元兑纽元AUDCAD澳元兑加元CHFJPY法郎兑日元NZDJPY纽元兑日元CADJPY加元兑日元说明:GOLD黄金USD美元EUR欧元GBP英镑AUD澳元NZD 纽元JPY日元CHF法郎(瑞士)CAD加元直接盘:与美元直接挂勾交叉盘:非美货币之间的兑换附注:GOLD=黄金(走势激烈,一般情况与美元走势相反,高风险收益)SILVER=白银(走势较小,基本与黄金同向)EURJPY=欧元兑日元(交叉盘,走势激烈,行情比较大,高风险收益)USDJPY=美元兑日元(走势稳定偏激烈,属于政策性货币,主要基于日本的财政政策和市场情绪)EURUSD=欧元兑美元(行情激烈度偏中,能够体现书本上的各种知识,可参考各类技术指标,属于最多人做的货币对)AUDUSD=澳元兑美元(行情激烈度偏中,澳大利亚属于资源出口国,其货币对涨跌对中国的经济数据比较敏感)USDCAD=美元兑加元(行情激烈度偏低,一般情况下与美元通向,没有加拿大相关的新闻走势不强烈)USDCHF=美元兑瑞士法郎(行情激烈度偏中,瑞士法郎属于政策性货币,主要参考瑞士的货币政策和央行利率,还有美国的经济数据)GBPUSD=英镑兑美元(英镑属于高投机性货币,行情激烈度高,涨跌幅度大,且走势比较没有章法,需小心对待)NZDUSD=新西兰元兑美元(新西兰元比较冷门,点差偏高,一般情况下不推荐炒作,需投入精力去研究后再操作)EURCHF=欧元兑瑞士法郎(欧元和瑞士法郎关联度极高,经常通向发展,也有背离的情况,需要参考当时的货币政策)EURAUD=欧元兑澳元(基本同澳元兑美元)EURCAD=欧元兑加元(基本同欧元兑美元)GBPJPY=英镑兑日元(行情激烈度高,属于投机性货币对,需小心对待)。

外汇MT4技术指标之KDJ随机指标

外汇MT4技术指标之KDJ随机指标

外汇MT4技术指标之KDJ随机指标KDJ是一种外汇MT4平台上常用的技术指标,它是由随机指标(Stochastic Oscillator)发展而来的。

KDJ指标主要用于判断市场超买和超卖的状态,以及价格趋势的变化。

KDJ指标由三条线组成,分别是K线(%K)、D线(%D)和J线(%J)。

K线表示当前的价格相对于过去n天价格波动范围的位置,D线是K线的简单移动平均值,J线是K线减去D线,通常是K线和D线之差的3倍。

KDJ指标的计算公式如下:K线=(最新收盘价-最低价)/(最高价-最低价)*100D线=K线的m日简单移动平均线J线=3*K线-2*D线其中,n和m分别代表计算K线和D线的周期数。

一般来说,常用的周期为14KDJ指标的主要作用是判断市场的超买和超卖状态。

当K线超过80时,表示市场处于超买状态,反之,当K线低于20时,表示市场处于超卖状态。

这些超买和超卖的状态往往会预示着价格的反转或调整。

因此,当K线超过80时,投资者可以考虑卖出或减仓;当K线低于20时,可以考虑买入或增仓。

另外,KDJ指标还可以用来判断价格趋势的变化。

当K线和D线交叉时,通常会伴随着价格趋势的变化。

当K线从下方向上穿过D线时,表示价格趋势可能由下跌转为上涨,此时可以考虑买入;当K线从上方向下穿过D线时,表示价格趋势可能由上涨转为下跌,此时可以考虑卖出。

J线的取值范围是-100到100,它可以用来衡量价格的动量。

当J线大于100时,表示价格的上涨动能很强,此时市场可能出现超买的状态,投资者可以考虑卖出;当J线小于-100时,表示价格的下跌动能很强,此时市场可能出现超卖的状态,可以考虑买入。

需要注意的是,KDJ指标是一种相对短期的指标,它对市场的变化反应较快。

但同时也会受到市场短期波动的干扰,因此在使用KDJ指标时,需要结合其他指标和技术分析工具,综合判断市场的走势。

总结来说,KDJ指标是一种用于判断市场超买和超卖状态以及价格趋势的变化的技术指标。

StochasticOscillator(随机振荡指标)mt4指标

StochasticOscillator(随机振荡指标)mt4指标

Stochastic Oscillator(随机振荡指标)
随机振荡指标(Stochastic Oscillator)有George Lane在1950年发明的,该指标属于振荡指标,也是动量指标的一种,它是用现时段的收盘价和默认周期内的最低价做比较,用来显示市场动量的大小,该指标也可以用来显示其超买、超卖区,该指标用两条曲线在0-100之间波动来表示,同时又设了20、80两条水平线,默认周期为5的主线被称为%K线(绿色线),第二个默认周期为3的线被称为%D线(红色线),%K线一般默认用实线来表示,而%D线则默认为点状虚线来表示。

如图所示:
该指标的具体分析方法为:
当%D线超过了80 时,就是超买区,但如果又低于了80,这是就是一个可能的卖出信号了
当%D线低于了20 时,就是超卖区,但如果又高于了20,这是就是一个可能的买进信号了
当%K线由下往上穿过%D线时,就表示新的上升趋势
当%K线由上往下穿过%D线时,就表示新的下降趋势
当指标线出现在超买超卖去,同时又与价格的走势相背离的情况下,那么此时就是一个更可靠的交易信号了。

如图所示:
该指标的计算方式为:
%K快=C-L/H-L
%D快=SMA(%K,3)
注解:上述公式中C为当前时段的收盘价,L为默认周期内的最低价,H为默认周期内的最低价,一般%K周期默认为5。

为了使取钱更加平滑一些,我们一般用慢速曲线来表示:
%K慢=SMA(%K快,3)
%D慢=SMA(%K慢,3)
SMA为简单移动平均值,也可以再属性里选择其它的移动平均方法,其计算方式可参考MA指标。

如图所示:
在MT4中,%K、%D默认周期一般为5、3,也有用14,3的。

MT4技术指标中英文对照

MT4技术指标中英文对照

MT4技术指标中英文对照1. MA (Moving Average) - 移动平均线2. MACD (Moving Average Convergence Divergence) - 平滑异同移动平均线3. RSI (Relative Strength Index) - 相对强弱指数4. Stochastic Oscillator - 随机指标5. Bollinger Bands - 布林带6. Pivot Points - 枢轴点7. Fibonacci Retracement - 斐波那契回调线8. ATR (Average True Range) - 平均真实波动幅度指标9. ADX (Average Directional Movement Index) - 平均定向运动指标10. Ichimoku Kinko Hyo - 一目均衡表指标这些技术指标在MT4平台上用于分析市场走势和价格变动,并帮助交易者制定交易策略。

它们通过计算和绘制图表来显示价格走势和市场的动态变化,从而为交易者提供决策依据。

移动平均线是最常用的技术指标之一,它用于平滑价格走势,并显示市场趋势的方向。

MACD指标通过比较移动平均线的差异来显示价格动能的变化,从而辅助交易者判断买入或卖出的时机。

RSI指标根据一段时间内的价格变动来测量市场的强弱程度,当RSI超买或超卖时,会发出买入或卖出信号。

随机指标通过比较当前价格和一定时间范围内的最高价和最低价之间的关系来判断市场的超买和超卖程度。

布林带是一种用于测量价格波动的指标,它由一条中轨线和两条标准差线组成。

交易者经常使用布林带来确定价格的上下限和市场的波动情况。

枢轴点是根据前一交易周期的高、低和收盘价来计算的,用于预测下一个交易周期的支撑和阻力水平。

斐波那契回调线通过绘制水平线来标识可能的支撑和阻力水平,这些水平线基于斐波那契数列的比例关系。

ATR指标用于测量市场波动的幅度和变化情况。

MetaTrader4 (MT4) 平台使用说明教材

MetaTrader4 (MT4) 平台使用说明教材

福汇FXCM MetaTrader4 (MT4) 平台使用说明一、平台介绍及特点1.福汇最新MetaTrader4平台福汇公司已将MT4平台升级,以使它可以完美无瑕地结合我们的无交易员平台外汇执行模式。

换句话说,这个平台无须第三方桥接器,亦无须进行自动账户同步化程序。

为我们提供了更多功能及Meta Trader 4交易体验。

2.FXCM Meta Trader 4功能▪设置止损/止赚预先执行- 在建立新交易时设置止损及止赚指令▪0.01(微型)手数- 以更准确的每手交易单位进行交易,强化风险管理▪将持仓部份平仓- 控制平仓的时间及将某个持仓的多少部份平仓▪更多的工具- 特种货币对,例如:美元/南非兰特,美元/新加坡元,美元/港元,新加坡元/日圆,美元/土耳其元,欧元/土耳其元,美元/俄罗斯卢布,欧元/匈牙利福林,美元/匈牙利福等3.福汇FXCM平台好处▪不会重新报价及没有交易商的干预▪外汇交易身份保密,因为价格提供者不会看到您的止损、止赚或有待执行单子▪经纪商与客户之间没有利益冲突▪零交易限制- 甚至能够在买卖差价之内建立有待执行的单子二、使用说明1.下载登录福汇网站在线下载,网址:/gb/forex_platform/mt4.html,如图,点击下载即可。

点击下载2.安装下载后,双击下载的文件,即可进行安装。

安装过程第一个界面是选择语言,请选择中文(中国),然后点“下一步”按照提示安装即可。

当然这里选择的语言不正确,也可以在登陆平台后再进行修改。

软件可以覆盖安装在原有的版本上,并且保有原有设置。

如果需要同时运行几个账户,则必须安装在不同的文件目录内。

点击“下一步”选择“Yes,I agree with all terms of this license agreement” (我同意订阅您的新闻简报),点击“下一步”不建议安装在系统盘,点击“浏览”,选择重新安装的途径,点击“确定”,安装开始进行安装进行中….安装完成后,点击“完成”即可。

mt4 ea调用指标

mt4 ea调用指标

mt4 ea调用指标在MT4平台中,EA(智能交易系统)可以调用指标来进行交易策略的编写和实现。

要实现这一功能,需要了解MT4平台的相关操作和MQL4编程语言。

以下是MT4 EA调用指标的一般步骤:1. 首先,在MT4平台中安装并导入所需指标。

指标文件通常位于“MT4/indicators”文件夹中。

2. 在编写EA时,使用MQL4语言编写一个策略,该策略可以根据指标的信号来进行交易。

例如,如果你想要根据移动平均线交叉信号来进行交易,可以使用以下代码:```mql4input int FastMAPeriod = 5; // 快速移动平均线周期input int SlowMAPeriod = 10; // 慢速移动平均线周期input double TakeProfit = 10; // 止盈设置input double StopLoss = 5; // 止损设置int OnInit(){// 初始化指标FastMA := IndicatorBuilder(FastMAPeriod, 0, 0, 0, 0, 0);SlowMA := IndicatorBuilder(SlowMAPeriod, 0, 0, 0, 0, 0);// 检查指标是否已绘制if (FastMA.IsReady() && SlowMA.IsReady()){// 设置图表上的移动平均线Chart->Plot(FastMA.GetResult(), "FastMA", 0, 0, 0, 1);Chart->Plot(SlowMA.GetResult(), "SlowMA", 0, 0, 0, 1);}return(INIT_SUCCEEDED);}void OnTick(){// 获取指标数据FastMA_Data FastMA_Data = FastMA.GetData();SlowMA_Data SlowMA_Data = SlowMA.GetData();// 检查快速和慢速移动平均线的交叉情况if (FastMA_Data.PeriodCross(SlowMA_Data, 0, 0, 0, 0)){// 创建交易订单OrderSend(OrderType.BUY, 1000, Ask, TakeProfit, StopLoss, 0, 0, 0, 0, clrGreen);}}```3. 在编写完EA后,将其复制到MT4平台的“Experts”文件夹中。

MT4平台如何加载安装EA智能交易系统

MT4平台如何加载安装EA智能交易系统

首先EA系统一种MQL语言编写的自动化交易程序,可以是一种交易策略,也可以是一种交易技巧, EA系统最好的优势在于它可以为您的交易提供全面自动化的服务,可以避免因为人性的弱点导致交易产生的风险,并且可以使交易的结果更加的精确.
MT4软件中有比较齐全的技术指标,同样也支持自定义指标的添加,同样的,有的朋友就会想说我也有自己想要用的交易策略系统想要添加到 MT4软件中进行使用,可以吗?做为全球最大的外汇中文服务商,以FXCM福汇MT4为例,介绍如何在MT4平台中加载安装EA智能交易系统。

.具体的操作流程如下:
1、下载您的EA程序,并将它放到MT4>MQL4>experts文件夹下,注意程序以ex4的形式保存.
2、重新启动MT4软件,在显示——导航——EA交易中找到对应的EA系统,点击附加到图表中即可.
注意要在工具——选项中启动EA系统操作:
友情提醒:任何一个全智能交易EA系统一般只适合某一段行情,并不可能适合任何的行情,请谨慎操作EA系统。

Metatrader4交易系统:官方EA自动交易系统的编制基本框架

Metatrader4交易系统:官方EA自动交易系统的编制基本框架

Metatrader4交易系统:官方EA自动交易系统的编制基本框架Metatrader4交易系统:官方EA自动交易系统的编制基本框架声明:智能化EA自动交易系统仅仅是作为特定条件下的自动执行,其是否能够盈利取决于市场行情以及编制自动执行的语言设定,切勿太过于依赖EA,毕竟它永远跟不上人脑那样可以根据市场的变化而重新作出正确的判断;本文作为资源共享以供娱乐,由依赖EA产生的盈亏将自行承担,本文概不负责。

Introduction介绍鉴于中国众多的交易者对交易系统了解不多,本文解释使用MQ4语言编制自动交易系统的基本知识.Title 编制自动交易系统的基本知识一个交易系统大致包括以下几个方面:1 、开仓策略,即什么条件满足时开仓, 如某条线和某条线上交叉或下交叉;2 、平仓策略,即什么条件满足时平仓, 包括止赢设置,止损设置,和跟踪止赢设置三个方面;3 、资金管理, 其中一个方面就是下单的大小;4 、时间管理, 如持仓时间,开平仓时间间隔等;5、账户状态分析,如交易历史,当前资金/仓位/各仓为盈亏状态等;当然一个交易系统不必包括全部内容,本文做为入门知识也仅通过实例介绍交易系统程序的基本构成;//+------------------------------------------------------------------+//| Designed by OKwh, China |//| Copyright 2007, OKwh Dxdcn |//| /meta5 |//+------------------------------------------------------------------+#property copyright "Copyright 2007 , Dxd, China."#property link "/FXTrade , http:/ /"#define MAGICMA 200610011231//+------------------------------------------------------------------+//| 注意没有指标文件那些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);}int deinit() { return(0); } //反初始化//主程序int start(){CheckForOpen(); //开仓平仓条件检查和操作if (bb>0) CTP(); //跟踪止赢return(0);}//+------下面是各子程序--------------------------------------------+double LotsOptimized() //确定下单量,开仓调用资金控制{double lot=Lots;int orders=HistoryTotal(); // history orders totalint losses=0; // number of losses orders without a br eak//MarketInfo(Symbol(),MODE_MINLOT); 相关信息//MarketInfo(Symbol(),MODE_MAXLOT);//MarketInfo(Symbol(),MODE_LOTSTEP);lot=NormalizeDouble(MaximumRisk * AccountBalance()/Ac countLeverage(),1); //开仓量计算if(lot<0.1) lot=0.1;if(lot>maxLots) lot=maxLots;return(lot);}//平仓持有的买单void CloseBuy(){if (OrdersTotal( ) > 0 ){for(i=OrdersT otal()-1;i>=0;i--){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;if(OrderType()==OP_BUY){OrderClose(OrderTicket(),OrderLots(),Bid,3,White);Sleep(5000);}}}}//平仓持有的卖单void CloseSell(){if (OrdersTotal( ) > 0 ){for(i=OrdersT otal()-1;i>=0;i--){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;if(OrderType()==OP_SELL){OrderClose(OrderTicket(),OrderLots(),Ask,3,White);Sleep(5000);}}}}//判断是否买或卖或平仓int buyorsell() //在这个函数计算设置你的交易信号这里使用M ACD 和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,MOD E_SIGNAL,1);MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,0);MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PR ICE_CLOSE,1);if(MacdCurrent<0 && MacdCurrent>SignalCurrent && Mac dPrevious<SignalPrevious&& MaCurrent>MaPrevious)return (1); // 买 Ma在上升,Macd在0线上,并且两线上交叉if(MacdCurrent>0 && MacdCurrent<SignalCurrent && Mac dPrevious>SignalPrevious&& MaCurrent<MaPrevious)return (-1); // 卖return (0); //不交易}int nowbuyorsell = 0;void CheckForOpen(){if (Time[0] == lasttime ) return; //每时间周期检查一次时间控制lasttime = Time[0];nowbuyorsell = buyorsell(); //获取买卖信号if (nowbuyorsell == 1) //买先结束已卖的CloseSell();if (nowbuyorsell == -1) //卖先结束已买的CloseBuy();if (TimeDayOfWeek(CurTime()) == 1){if (TimeHour(CurTime()) < 3 ) return; //周一早8点前不做具体决定于你的时区和服务器的时区时间控制}if (TimeDayOfWeek(CurTime()) == 5){if (TimeHour(CurTime()) > 19 ) return; //周五晚11点后不做}if (OrdersTotal( ) >= maxOpen) return ;//如果已持有开仓次数达到最大,不做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,Ask-StopLoss*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,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,B lue);break;default : res=OrderSend(Symbol(),OP_BUY,LotsOptimized (),Ask,3,0,0,"",MAGICMA,0,Blue);break;}if (res <=0){error=GetLastError();if(error==134)Print("Received 134 Error after OrderSend()!! "); // not enough moneyif(error==135) RefreshRates(); // 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,Bid-TakeProfit*Point,"",MAGICMA,0,Red); break;case 4: res=OrderSend(Symbol(),OP_SELL,LotsOptimized (),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0, Red); break;default : res=OrderSend(Symbol(),OP_SELL,LotsOptimized (),Bid,3,0,0,"",MAGICMA,0,Red); break;}if (res <=0){error=GetLastError();if(error==134) Print("Received 134 Error after OrderSend() !! "); // not enough moneyif(error==135) RefreshRates(); // prices have changed}Sleep(5000);return ;}}void CTP() //跟踪止赢{bool bs = false;for (int i = 0; i < OrdersTotal(); i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;if (OrderType() == OP_BUY){if ((Bid - OrderOpenPrice()) > (TrailingStop * MarketInfo(O rderSymbol(), MODE_POINT))) //开仓价格当前止损和当前价格比较判断是否要修改跟踪止赢设置{if (OrderStopLoss() < Bid - TrailingStop * MarketInfo(Orde rSymbol(), MODE_POINT)){bs = OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), Order TakeProfit(),0, Green);}}}else if (OrderType() == OP_SELL){if ((OrderOpenPrice() - Ask) > (TrailingStop * MarketInfo(O rderSymbol(), MODE_POINT))) //开仓价格当前止损和当前价格比较判断是否要修改跟踪止赢设置{if ((OrderStopLoss()) > (Ask + TrailingStop * MarketInfo(O rderSymbol(), MODE_POINT))){bs = OrderModify(OrderTicket(), OrderOpenPrice(),Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_ POINT), OrderTakeProfit(),0, Tan);}}}}}。

stochastic oscillator指标

stochastic oscillator指标

stochastic oscillator指标
Stochastic Oscillator(随机震荡指标)是一种技术分析工具,用于衡量股价或其他资产的超买和超卖情况。

它是由George C. Lane于1950年代开发的。

该指标基于以下两个主要概念:
1.趋势:认为在上升趋势中,收盘价接近某一时间段的最高价;在下降趋势中,收盘价接近某一时间段的最低价。

2.摆动:认为股价在上涨和下跌之间循环波动。

Stochastic Oscillator根据一定的计算公式得出一个介于0到100之间的值。

其计算过程如下:
1.计算当前周期(通常是14个交易日)的最高价和最低价。

2.计算收盘价相对于最高价和最低价范围的位置比例(%K值),公式为 %K = (当日收盘价-最低价)/(最高价-最低价)*100。

3.计算%K值的移动平均线(%D值),通常使用3个周期的简单移动平均线,即 %D = 3日内的%K值之和 / 3。

4.根据%K值和%D值的数值来判断超买和超卖情况。

常用的判断标准是当%K值超过80时,被认为是超买信号,意味着股价可能会回调;当%K值低于20时,被认为是超卖信号,意味着股价可能会反弹。

同时,当%D线向上穿越%K 线时,也被视为买入信号;当%D线向下穿越%K线时,则被视为卖出信号。

Stochastic Oscillator指标可以帮助投资者识别股票或其他资产的短期超买和超卖情况,并辅助判断市场的转势点。

然而,它仍然需要结合其他技术指标和分析方法来进行综合判断和决策。

1。

mt4ea编写指标

mt4ea编写指标

mt4ea编写指标1. 什么是MT4EA?在MT4(MetaTrader 4)平台上,EA(Expert Advisor)是一种自动交易系统,能够根据预设的参数进行交易操作。

MT4EA可以根据技术指标、价格动能和其他条件来触发交易,以帮助交易者实现快速、准确的交易执行。

2. MT4EA编写的基本原则在编写MT4EA时,我们需要遵循一些基本的原则,以确保编写的指标具有高效性、可重复性和可靠性。

2.1 策略明确首先,在编写MT4EA之前,我们需要明确所使用的交易策略。

交易策略应该基于明确的规则和逻辑,能够清楚地定义何时买入和卖出。

这有助于确保MT4EA的行为一致,并减少人为的主观判断。

2.2 参数可调整MT4EA编写时,应尽量将参数固化,使其能够根据实际情况进行调整。

这样可以在不同的市场环境下灵活应对,并提高MT4EA的适应性和稳定性。

2.3 有效的止损和止盈机制在MT4EA中,止损和止盈是非常重要的因素,能够保护账户免受不利的市场波动。

编写MT4EA时,应设定有效的止损和止盈机制,以确保风险控制和利润保护。

3. MT4EA编写的步骤3.1 确定交易策略首先,我们需要确定MT4EA的交易策略。

交易策略应该基于技术指标、价格动能和其他可靠的指标。

这些指标可以帮助我们预测市场趋势和价格变动,从而决定何时买入和卖出。

3.2 编写代码在确定交易策略后,我们可以开始编写MT4EA的代码。

在MT4平台上,我们可以使用MQL4语言来编写自动交易系统。

编写MT4EA的代码时,我们需要将交易策略转化为具体的代码逻辑。

我们可以使用if语句、循环、变量等来实现我们的交易策略。

代码应该清晰、简洁,并且易于阅读和理解。

3.3 测试和优化在编写完成MT4EA的代码后,我们需要对其进行测试和优化。

我们可以使用历史数据来测试MT4EA的表现,并根据测试结果对代码进行优化。

测试和优化是确保MT4EA有效性的关键步骤。

通过测试和优化,我们可以发现代码中的问题和潜在的风险,并对其进行修正和改进。

mt4的stochastic指标算法

mt4的stochastic指标算法

mt4的stochastic指标算法全文共四篇示例,供读者参考第一篇示例:MT4的Stochastic指标是一种非常受欢迎的技术分析工具,用于帮助交易者识别市场的超买和超卖情况,以便做出更明智的交易决策。

在本文中,我们将详细介绍MT4的Stochastic指标的算法原理和如何应用它来进行交易。

让我们简单地了解一下Stochastic指标是如何计算出来的。

Stochastic指标由两条线组成:主K线和信号D线。

主K线代表当天收盘价与过去一段时间内最低价之间的相对位置,信号D线则是主K线的移动平均线。

还有一条横向的过买卖水平线,通常设定为80和20,表示超买和超卖状态。

Stochastic指标的标准参数设置为14、3、3,也就是14日内的最高价和最低价,以及主K线和信号D线的移动平均周期。

这些参数可以根据个人偏好进行调整,但一般情况下标准设置已经足够有效。

Stochastic指标的计算步骤如下:1. 计算N日内的最高价H和最低价L。

2. 分别计算当天收盘价C与最低价L的差值LC和最高价H的差值HC。

3. 计算主K线的值为(C-L)/(H-L)×100。

4. 计算信号D线的值为主K线的3日移动平均。

通过以上计算,我们得到了Stochastic指标的数值,可以根据这些数值来判断市场的超买和超卖情况。

一般来说,当主K线从下方突破信号D线并且大于50时,代表市场处于买入信号,反之当主K线从上方突破信号D线并且小于50时,代表市场处于卖出信号。

在实际交易中,交易者可以结合其他技术分析工具一起使用Stochastic指标,以增加交易的准确性。

可以结合移动平均线、布林带等来确认买入或卖出信号。

还可以使用Stochastic指标的背离现象来辅助分析,当价格创出新高或新低而Stochastic指标未能创出相应高点或低点时,通常预示着市场即将出现反转。

MT4的Stochastic指标是一种简单而有效的技术分析工具,可以帮助交易者更好地把握市场的走势,提高交易的准确性。

[原创]EA测试(MT4平台智能交易系统图文教程)

[原创]EA测试(MT4平台智能交易系统图文教程)

怎么样,有点“蠢蠢欲动”了吧,敬请期待下一个PPT: 《MT4编程入门》
附录:几个数学概念
虽然汇市千变万化,但是任然有规律可循。我们需要从历史数据中寻 找规律,面对庞大的数据,唯有统计数学的理论能使我们理清头绪。 我们经常使用的技术指标其实就是统计数学的实际应用。 我们不能保证自己每单都赢,但能确保长期从汇市获利。 了解一点统计数学的概念,对评判EA、系统测试都有极大的帮助。下 面列举了4个数学概念,并尽量给予简单的介绍,起到一个抛砖引玉 的作用。 1. 2. 3. 4. 过适 k-折交叉验证 赢利与最大资金回撤比 人工神经网络
进入测试界面
1、选择一个EA加载到图表 2、点击工具栏的“智能交易”停止智能交易 3、按F6,打开测试窗口
测试窗口
历史数据准备1
从统计数学的角度来评判MT4提供的数据,基本不符合要求。毕竟我们不是数学专家,不需要精准的结果,所以采用我推荐的方法就够用了。
点击MN按 钮,等待 一会儿, 将数据图 表拉到最 左边,我 们会看到 月线数据 从1988年 12月开始
新增测试报告标签
结果
“结果”标签中显示了测试的每个交易记录
净值图
“净值图”标签中显示了测试的资金变化过程
报告
“报告”标签中显示EA在指定时间段内的全部财务情况
报告中各项指标说明1
经过测试的柱数(Bars in test):以模型为基础,显示历史的深度。 用于复盘的即时价数量(Ticks modelled):显示模型次序的大小。 每一个记录的 次序代表柱的当前或另一时刻状态 (OHLCV)。 不同柱的状态取决于时间范围,模 型方法,和从较小时间段内的柱的历史数据。 复盘模型的质量(Modelling quality):按照以下的公式进行计算: ModellingQuality = ((0.25*(StartGen-StartBar) + 0.5 *(StartGenM1-StartGen) + 0.9 *(HistoryTotal-StartGenM1)) / (HistoryTotal-StartBar))*100%; 其中: HistoryTotal - 在历史中的总数额; StartBar - 开始测试柱的数字。模型开始于最小的第101个柱或者测试水平 初始日期相关的柱; StartGen - 在最近的时间范围内开始测试柱的数字; StartGenM1 - 在原有分钟内开始测试柱的数字; 另外: 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始存在 重量系数0. 25的区别; 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始在 原有分钟内存在重量系数0. 5的区别; 在原有时间上模型的开始和历史数据的型 粉色- 完全的不规则碎片模型 H4模型 H1模型 M30模型 M15模型 M5模型 M1模型

mt4ea编写指标

mt4ea编写指标

mt4ea编写指标MT4EA编写指标的基本步骤和注意事项随着外汇交易的发展,投资者需要有各种各样的工具来协助他们进行交易分析和决策。

其中,MT4EA(MetaTrader 4 Expert Advisors)编写指标就是一种非常重要的工具。

它可以帮助投资者根据交易策略来制定交易决策,并自动执行交易操作。

下面是关于如何编写MT4EA指标的基本步骤和注意事项。

第一步:明确指标的目的和功能在编写MT4EA指标之前,首先需要明确指标的目的和功能。

这包括确定指标的计算方法、所涉及的数据和指标的输出结果等。

例如,如果你希望编写一个用于确定买入和卖出信号的指标,你需要决定是使用哪些技术指标或价格模式来计算买卖信号,并确定指标的输出结果是一个具体的数值还是一个图表。

第二步:编写指标代码在MT4平台中,你可以使用MQL4编程语言来编写MT4EA指标。

MQL4是一种功能强大的编程语言,可以帮助你实现各种复杂的交易策略和指标。

在编写指标代码时,你需要使用MQL4提供的各种函数和指令,来计算指标的数值或图表,并输出给MT4平台进行显示。

在编写指标代码时,需要注意以下几点:1.确保指标的计算过程正确和高效。

在编写指标代码之前,最好先将其思路和计算过程画图或进行模拟,以确保它可以正确地计算出预期的结果,并且计算过程不会因为数据的增加而变得非常缓慢。

2.尽量减少指标的计算时间和资源占用。

指标的计算过程可能需要一些复杂的数学运算或历史数据的读取,这可能会消耗很多计算资源。

因此,在编写指标代码时,要尽量优化计算过程,减少计算的时间和资源占用。

3.添加适当的参数和选项。

为了使指标更加灵活和适应不同的交易策略,你可以添加一些参数和选项,以便投资者可以根据自己的需求来进行设置。

第三步:测试和优化指标在编写完指标代码之后,需要对其进行测试和优化,以确保其适用性和可靠性。

测试可以通过回测或实时交易来进行。

在测试指标时,要尽量多地使用不同的交易策略和数据周期,以验证指标的性能和准确度。

MT4插件定制——外汇MT4 EA交易

MT4插件定制——外汇MT4 EA交易

MT4插件定制——外汇MT4 EA交易EA是Expert advisor的缩写,它是MT4平台上常见的一种外汇交易程序,被投资者们称为外汇智能交易系统。

它是由交易员们经过对交易策略的反复完善之后开发的一种外汇自动交易解决方案。

学会使用EA也就意味着交易员实现了从手动交易到自动化交易的飞跃。

其自动化交易的特点不仅免去了交易员们大量追踪行情的时间,还使得他们从熬夜盯盘的劳累中解放了出来,EA交易也因此而备受欢迎。

据悉,目前华尔街有60%以上的交易都是由程序化交易完成的。

举个例子,交易员可以为EA事先设定一个参数,在价格突破200日均线时发出提醒。

同时,还可以指示该程序在某一个条件,比如5日均线死叉10日均线时立刻做空,等价格达到某一个目标价位后止损或止盈。

而EA大受交易员欢迎的原因远不止于此,它另一个重要的优点在于:一旦交易员为某一个EA设定了入场的条件、止损和止盈的价格,程序将严格的执行。

这就使得交易员可以避免受到恐慌或贪婪等情绪因素的影响,进而可以严格的执行自己的交易策略。

由于EA本身是要建立在一定的交易策略和交易风格上的,而为完善交易策略,来自全世界各地的交易员们源源不断的将自己的EA程序发布到网上以供交流学习,这就使得EA本身也成为一种交流和完善交易策略的载体。

一些交易员在对前人EA进行改善后也能够取得不错的成绩。

但EA也绝非完美。

首先,它需要用户掌握一定的MQL4语言,否则用户将无法进行EA的编程工作。

其次,价格的波动存在许多“杂音”或毛刺,而这些因素有时也会被EA认为是有效的价格信号而采纳,这也会导致一些错误的交易和亏损。

这就对用户挑选或编写EA的能力提出了一定的要求。

有鉴于此,在遵从简单易用和门槛低的原则的基础上,Vantage FX万致近期对数千种EA程序进行了测试和检验,最终给投资者带来了上百个有效实用的EA模板,其中相当大一部分都是当前最为流行的EA模板。

这无疑将使得交易员们如虎添翼,带动他们的交易生涯更上一层楼。

lmax外汇平台 EA及其工作原理

lmax外汇平台 EA及其工作原理

EA及其工作原理内容简介:EA 即 Expert Advisors 的英文缩写,中文意思专家顾问,俗称智能交易系统,就是由电脑模拟交易员的下单操作进行机器自动交易的过程。

一、人工操盘过程下面我们就以MT4外汇客户端为例EA及其工作原理EA 即 Expert Advisors 的英文缩写,中文意思专家顾问,俗称智能交易系统,就是由电脑模拟交易员的下单操作进行机器自动交易的过程。

一、人工操盘过程下面我们就以MT4外汇客户端为例,首先来分析一个外汇交易员手工进行外汇交易的操作过程:其步骤如下: 1.打开外汇交易客户端,选定一种货币对图表;2。

监视该货币对的K线趋势图,俗称盯盘,寻找开仓或者是平仓的时机,即开仓或者是平仓的条件3。

如果条件满足,进行下单开仓(做多或者做空)或者平仓4。

重复第二步,继续盯盘,假定第二步是开仓,就是寻找平仓的条件。

5。

如果平仓的条件满足,进行平仓操作,计算盈亏核算。

完成一次交易的循环。

6。

若继续交易,重复2->3->4->5步7。

若不进行交易,退出外汇客户端。

二、机器操盘过程基于以上的分析,我们已经知道一个完整的智能交易系统(俗称EA)在运行后必须要实现的基本功能,就是上述的人工操作的1-5步。

这也就是智能交易系统的基本工作过程,所以智能交易系统的工作原理就是由程序员借助一门计算机程序设计语言,通过编写程序交易指令模拟人类交易员的行为进行下单操作,实现机器自动进行交易的过程。

主要执行过程可分为:盯盘->开仓->再盯盘->平仓,如此循环执行的过程。

关于支持机器自动交易的平台,目前外汇市场上流行的就是MetaQuotes公司的MT4平台,由于这个平台中嵌入了一种MQL4语言,它提供了对服务器端的数据访问并可进行交易操作的接口,程序交易者可以根据自己的交易策略来编写自己的自动交易系统,从而实现让机器自动交易,既可以减轻人类的工作量,又可以克服人类交易中的一此性格弱点,但目前的EA开发,尚所早期起步阶段,有的还存在缺陷,但相信随着技术的发展,机器自动交易终将会逐步取代人类的手工操作。

MT4语言智能交易系统编写

MT4语言智能交易系统编写

MT4语言智能交易系统编写MetaQuotes 4 语言是用来编写自定义智能交易系统软件,以便使交易程序管理自动化以及执行交易商自己的交易策略。

MetaQuotes 4 语言易学、易用、易创建。

MetaQuotes 4 语言包括相当数量的变量,用来控制当前和前期的报价、主要的算术和逻辑运算和特征,主要的内置指标和用来开启和控制头寸的命令。

在语法上,该语言和由 TradeStation 技术有限公司开发的简易语言相似,但是它有其自身的一些具体特征。

程序代码是用MetaEditor4编辑器编写的,它能够用不同的色彩集中反映MQL 4语言的不同结构,因此,有助于用户熟悉专家系统的文本。

注解开始于//符号(双斜线)。

注解也可以用“斜线-星号”-“星号-斜线”组合(/*[注解]*/, 就像在 "C"编程语言一样)。

设定和控制操作战略,交易商保存一份日志文件,存储产生的信号信息、变量输出和已执行交易的结果。

智能交易系统日志保存在MultiBank Trader目录下/logs/YYYYMMDD.log 文件里。

当前的日志可以从下方的“终端”窗口(日志标签)直接进入。

进入MQL 4语言的目录系统,要么按目录按钮或从工具菜单打开MetaQuotes语言词典窗口操作。

这个短小的手册包含分类、运算、存储词语等功能,使得用户对该语言所用到的每个元素都有所了解。

1. 主要语言结构像其他任何语言一样,MQL4有一套构成基本结构的主要组成元素。

这些组成元素以一种特殊的方式组合排列的,以便代表适当的陈述和表达。

语言的主要对象就是数据,包括三种类型:数字、逻辑和排列。

所有的数值均采用双格式,逻辑数据可能包括真值和假值。

排列就是用省略号标注的一系列字符。

字符串也叫做文本串。

数据可以包含在适当类型的变量之中,或直接由程序的源文本表现出来。

一个MetaQuotes 语言陈述指一个完整的用法说明。

陈述可以包括保留字、运算符号、数据、变量、表达式或标点符号,而且总是以分号结尾。

mt4的stochastic指标算法

mt4的stochastic指标算法

MT4(MetaTrader 4)的随机指标(Stochastic Oscillator)是一种动量指标,用于分析证券价格的速度和变化。

它通过比较一定时期内的收盘价与价格范围来测量价格的相对位置。

以下是计算MT4 Stochastic指标的算法:1. 计算给定时间周期(通常为14)内的最高价、最低价和收盘价。

2. 计算最高价和最低价之间的价格范围(即波动性):`Range = High - Low`3. 计算当前收盘价与最低价之间的价格距离:`Close - Low`4. 计算随机指标的K值:`K = (Close - Low) / Range * 100`5. 计算随机指标的D值:首先计算K值的移动平均值(通常为3),然后对K值应用平滑因子(通常为3)。

`D = 3-period moving average of K`6. 可选:计算随机指标的J值:`J = 3 * K - 2 * D`在MT4中,可以使用iCustom函数创建自定义指标。

以下是一个使用MQL4语言编写的简单示例,用于计算并显示Stochastic指标的K值和D值:```mql4//+------------------------------------------------------------------+//| 自定义指标|//| 名称:Stochastic Oscillator |//| 输入参数:|//| Period: 时间周期(默认为14)|//| %K: K值的平滑因子(默认为3)|//| %D: D值的平滑因子(默认为3)|//+------------------------------------------------------------------+int OnInit(){// 设置输入参数IndicatorShortName("Stochastic Oscillator");SetIndexStyle(0, DRAW_LINE);SetIndexStyle(1, DRAW_LINE);SetIndexStyle(2, DRAW_LINE);SetIndexBuffer(0, INDICATOR_DATA);SetIndexStyle(0, DRAW_LINE);SetIndexLabel(0, "K");SetIndexStyle(1, DRAW_LINE);SetIndexLabel(1, "D");SetIndexStyle(2, DRAW_LINE);SetIndexLabel(2, "J");// 设置输入参数SetInput(0, "Period", 14);SetInput(1, "%K", 3);SetInput(2, "%D", 3);return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| 指标缓冲区大小|//+------------------------------------------------------------------+int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]){// 获取输入参数int period = iCustom(Symbol(), Period(), "Stochastic Oscillator", 0, "Period", 14);int slowK = iCustom(Symbol(), Period(), "Stochastic Oscillator", 1, "%K", 3);int slowD = iCustom(Symbol(), Period(), "Stochastic Oscillator", 2, "%D", 3);// 初始化变量double k = 0.0;double d = 0.0;double high = low[0];double low = high[0];double range = 0.0;double closeCurrentBar = close[0];int limit = rates_total - period + 1;// 计算K值和D值for(int i = 1; i < limit; i++){if(high[i] > high) high = high[i];if(low[i] < low) low = low[i];range += high[i] - low[i];}for(int i = limit - 1; i >= 0; i--){range -= high[i] - low[i];k = (close[i] - low[i]) / range * 100;d = iMAOnArray(NULL, 0, k, slowK, slowK, modeNormal, i) / 100;SetIndexValue(0, i, k);SetIndexValue(1, i, d);}return(rates_total);}```。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档