ARMANI-MT4EA自动交易制作 第一课 基础代码知识

avatar
· Views 504

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

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


由于全程是代码,有适合的人群也有一看就想睡的人群,所以如果你对自动化交易一点兴趣都没有,那么未来你可以不用关注该自动化交易课程。我会尽可能描述的简单点。

又或者说你有钱,花钱让别人写;但ARMANI建议至少你自己要有一点EA知识,否则在自动化交易目前这个鱼龙混杂的市场,很容易上当受骗。


进入主题

首先,我们来参观一下一款普通的模板ea,

//+------------------------------------------------------------------+

//|                                                    Template.mq4 |

//+------------------------------------------------------------------+

//参数设置

extern int StopLoss =50;

extern int TakeProfit = 100;

extern double lots = 0.1;

extern int MaPeriod = 20;

//记忆函数

int bar;

//+------------------------------------------------------------------+

//| expert initialization function                                  |

//+------------------------------------------------------------------+

int init()

 {

//----

  

//----

  return(0);

 }

//+------------------------------------------------------------------+

//| expert deinitialization function                                |

//+------------------------------------------------------------------+

int deinit()

 {

//----

  

//----

  return(0);

 }

//+------------------------------------------------------------------+

//| expert start function                                           |

//+------------------------------------------------------------------+

int start()

 {

//----

  //宣言实数

  double ma1,ma2;

  int sign ,CurrentPosition = -1 ,cnt;

  

  //计算ma1 && ma2 的值

  ma1=iMA(NULL,0,MaPeriod,0,MODE_SMA,PRICE_CLOSE,1);

  ma2=iMA(NULL,0,MaPeriod,0,MODE_SMA,PRICE_CLOSE,2);

  

  //决定信号

  if(Close1<ma1)

  {

     sign=1;

  }

  if(Close1>ma1)

  {

     sign=-1;

  }

  

  //确认持仓

  for(cnt=0;cnt<OrdersTotal();cnt++)

  {

     OrderSelect(cnt,SELECT_BY_POS);

     if(OrderMagicNumber() == 100 && Symbol() == OrderSymbol()) CurrentPosition=cnt;

  }

  

  //没有持仓的情况

  if(CurrentPosition == -1)

  {

        if(bar!=Bars && sign==1 && ma1>ma2 ) 

        {    

        //买入

        OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask-(StopLoss*Point), Ask+(TakeProfit*Point), "Buy", 100, 0, Blue);

        bar=Bars;

        }

        if(bar!=Bars && sign==-1 && ma1<ma2 ) 

        {    

        //卖出

        OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+(StopLoss*Point), Bid-(TakeProfit*Point), "Sell", 100, 0, Red);

        bar=Bars;

        }

  }

  //有持仓的情况

  else

  {

  bar=Bars;

     //取得持仓的情况

     OrderSelect(CurrentPosition,SELECT_BY_POS);

     //如果是买单,那么

     if(OrderType()==OP_BUY)

     {

        if( sign==-1)

        {

           //结单

           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);

        }

     }

     //如果是买单,那么

     if(OrderType()==OP_SELL)

     {

        if( sign==1 )

        {

           //结单

           OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);

        }

     }

  }

//----

  return(0);

 }

//+------------------------------------------------------------------+


以上就是利用iMA移动平均线朝上突破交叉作为交易信号的一种简单的ea,第一次接触代码你肯定是一头雾水,但请放心,未来持续关注我们的自动化交易课程,我敢肯定你一定会看得懂上面简单的ea代码分别代表什么意思。


解说部分

基础代码知识


// <- 区分备注栏 系统不读取该符号后的任何东西


#property <- 这里是ea的文件属性


↓这里是ea在开始执行时,只执行一次的部分,

int init()

{

  Return(0)

}


代码则录入在这个字段

Int init()

{

  可以从这里开始录入

 Return(0)

}


↓接下来这部分是ea终了时仅执行一次的内容

Int deinit()

{

  Return(0)

}


↓这里是整个ea的中心部分,根据每一次价格变动而执行

Int start()

{

Return(0)

}

#输入的例

Int start()

{

 Xxxxx

 信号的计算方式

 Ooooo

 没有在手订单时的处理方式

 Ttttt

 有在手订单时的处理方式

Return(0)

}

综上,整个EA的大致过程如下

Int init()  在开始时仅执行一次

Int Start() 在每一个价格变动时执行

Int deinit() 在结束时仅执行一次


ea主要就是分为以上三个板块来组成,在回去看一下刚才那个模板寻找一下这三个板块吧。


下一节课:Int init() 部分功能解说


 #EA交易#

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

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

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

  • tradingContest