ARMANI-MT4EA自动交易制作 第九课 编写实战EA 随机指标

avatar
· Views 1,067

大家好,我是ARMANI。为了帮助投资者,一有时间将EA编程的一些知识和精华尽可能的通过笔记让大家分段来学习。

因为文章是ARMANI自己编写,所以如恶意转发或抄袭,将追究到底。


延续第八课[基本EA制作]之后,我们已经基本了解了如何让一个EA运作起来,通过构思条件,再将条件变为sign,先检查是否有持仓OrderSelect,当sign=1(买入)时,代入ordersend代码,反之一样。之后,在根据特定的条件进行close,单个循环完成。那么,未来我们将温故而知新,通过基本的代码,慢慢的融入不同的指标,不同的条件,例如指定交易时间段,指定止损和止盈,指定尾随止损,让ea锁仓,更复杂的让对冲的盈利单来解套一部分套单,等等。一些列的构思和想法每一个人都不一样。只有自己掌握了编写ea的基础知识,未来自己尝试编写也好,委托他人付费编写也罢,谁都欺骗不了你。


进入主题

编写实战EA - 使用随机指标(stochastic oscillator)

这个指标大家可以轻松在MT4中找到。


首先,在开头编写随机指标的相关input代码(可设置参数)

注意:接下来一部分重复的内容不会再说的很详细,如自己阅读之前的课程掌握含义可以理解的更快。

entern int StoKperiod = 9;

entern int StoDperiod = 3;

entern int StoSlowing = 3;

entern int StoBuyLevel = 20;

entern int StoSellLevel = 80;

//以上设置好了打开ea的默认值,entern在未来可以进行修改这些值


首先制作相关的下单信号,ea的基本逻辑步骤为:

先宣言需要用到的指标 -> 取得该指标的值 -> 利用if等条件函数进行创建信号


这次我们要制作的ea条件如下:

1. 移动平均线朝上,同时Kperiod指标在BuyLevel之下=金叉发生,触发多单

2. 移动平均线朝下,同时Kperiod指标在SellLevel之上=金叉发生,触发空单


用代码来完成上述的条件:

int ma sign = 0; //宣言整数ma sign用0代入

if(ma1<ma0)  //之前课程中讲过的,ma1和ma0 分别为当前的均线和前一根K帮的均线,通过比大小来判断当前是朝上或朝下。

{

 ma sign = 1;

}

else if(ma1>ma0)

{

 ma sign = 0;

}

//截止到这里,已经将举例的条件平均线的条件做好了。均线朝上多单,均线朝下空单;接下来要在ma sign的基础上,再添加随机指标的条件,让他进行系统自动删选。

接下来,先取得随机指标的值

double sto_main0, sto_main1, sto_sign0, sto_sign1;

sto_main0=iStochastic(NULL,0,StoKperiod,StoDeriod,StoSlowing,MODE_SMA,0,MODE_MAIN,0);

sto_main1=iStochastic(NULL,0,StoKeriod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_MAIN,1);

sto_sig0=iStochastic(NULL,0,StoKperiod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_SIGNAL,0);

sto)sig1=iStochastic(NULL,0,StoKperiod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_SIGNAL,1);


之后开始先制作随机指标发生金叉的条件

int sto_sign = 0;

if(sto_sig1 <= StoBuyLevel && sto_main1 <= sto_sig1 && sto_main0 > sto_sig0)

//这里逻辑比较复杂,当前的复制表在buylevel之下同时前根柱指标在副指标之下(意味着朝上)同时当前的主在副之上,意味着当前已经交叉

{

 sto_sig = 1;

}

else if(sto_sig1 >= StoSellLevel && sto_main1 >= sto_sign1 && sto_main0 <sto_sig0)

{

 sto_sig = -1;

}

到这一步,我们将金叉的交易条件制作好了,接下来就是用ma sign和sto_sig来做一个条件匹配就可以达到同时满足这两个条件时才触发相对应的多空单。

if(ma_sign == 1) //平均线朝上

{

 if(sto_sig == 1) //如果随机指标在底处发生金叉

 {

   sign = 1: //做多

 }

}

else if(ma sign == -1)

{

 if(sto_sig == -1)

 {

   sign = -1;

 }

}

//相反的做空也做好了。

之后再添加一个以均线反转的条件用来结单,即简单的实战ea完成。

if(pos >= 0) //如果有持仓

{

 if(OrderType()=OP_BUY && ma_sign == -1) || (OrderType()=OP_SELL && ma_sign == 1))

 {

   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Yellow);

 }

}

以上 结束!


综上是使用了随机指标和平均线在做的实战EA,有兴趣的朋友可以尝试编写一下回测玩玩。

未来我们将添加更多不同的指标,来进行ea的编程教程。


下一节课:编写EA实战-移动平均线 策略

See u!


该文章仅作为爱好MT4 EA自动化交易的投资者学习编程使用,

对任何使用文章代码进行的投资行为不负责任。

#EA交易#

免責事項:本記事で述べられている見解は著者の見解のみであり、Followmeの公式見解を反映するものではありません。Followmeは、提供された情報の正確性、完全性、信頼性について一切責任を負いません。また、書面で明示的に記載されている場合を除き、本記事の内容に基づいて行われたいかなる行動についても責任を負いません。

この記事が気に入ったら、著者にチップを送って感謝の気持ちを表しましょう。
応答 0

古いコメントはありません。ソファをつかむ最初のものになりましょう。

  • tradingContest