大家好,我是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(Close
<ma1)
{
sign=1;
}
if(Close
>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 不對內容的準確性、完整性或可靠性作出任何保證,對於基於該內容所採取的任何行為,不承擔任何責任,除非另有書面明確說明。

暫無評論,立馬搶沙發