文档介绍:【 MQL4 】带说明的完满的外汇 EA 基础构架
希望学习 EA 编程的朋友,可以参照以下我们供应的源码【带说明】
这个 EA 例子的交易逻辑是:
N 日高点 N 日低点,高出高点做空,低过低点做多。
带止损 止盈 及搬动止损的办理局部。
若是你能认真研究掌握此 EA 的设计逻辑,根本可以入门
MQL 的实战编程了。
还是那句老话:自己多动脑,多做实验!
源码以下:
#property copyright "Copyright ?2021, FXunion ." // 指
标版权信息
#property link. " :// FXunion " // 指标联系的网站
链接
//===== 可调参数局部==============
#define Magic 20210101 // 预定义的常量 Magic 用于后边
程序里的开仓动作时标记在订单里面的一个符号,用于差异
其他 EA 程序下的单 防范凌乱
extern int N=50; // 参数 后边程序里用它作为 N 根 K 线的数
量
extern int SL=100;// 参数 后边程序里下单的时候用这个设
置的点数作为入场时订单的止损价格。
extern int TrailingStop=30;// 参数 后边程序里用这个作为移
动止损的点数设置
extern double 每单手数=;// 参数 表示后边下单的仓位的
大小
extern int 滑点偏移点数=3;// 参数 表示下单时 效劳器端的
价格与当前看到的价格相差的范围,若是在此范围内,那么赞同以效劳器端的价格成交
//---- 全局变量===================
int Tick;// 用于记录订单的唯一编号
double StopLost;// 用于记录止损
//======== 主函数局部开始 ============
int start()// 主函数 没来一个价格这个函数就运行一次
{
int Ticket; // 局部变量 用于记录每次下单后的状态,用于判
断下单动作可否成功,若是不行功那么做相应办理和提示
int rderTypeNow=GetOrderTypeHolding();// 经过自定义函
数获取当前持仓单的交易种类 买卖
//自定义函数中做了办理,若是没有发现当前有持仓
-1
那么返回
if (OrderTypeNow==-1)// 空仓阶段 -1 表示没有持仓的状态
{
if (TradeOrNo(1))// 多单入场条件 自定义函数 TradeOrNo(1)
参数 1 表示针对多单的方向进行判断可否满足入场条件
{
Ticket=OrderSend(Symbol(),OP_BUY, 每单手数,Ask, 滑点
偏移点数,Ask-SL*Point,0,"",Magic,0,0);// 多单入场
//Ticket 表示入场动作的执行结果,若是小于 0 表示入场动
作失败
if(Ticket<0)
{
Print(" 多单入场失败"+GetLastError());
return(0); // 推出本次 start 函数的执行
}
}else
if (TradeOrNo(2))// 空单入场条件
{
Ticket=OrderSend(Symbol(),OP_SELL, 每单手数,Bid, 滑点
偏移点数,Bid+SL*Point,0,"",Magic,0,0);
if(Ticket<0)
{
Print(" 空单入场失败"+GetLastError());
return(0);
}
}
return;
}else//=============== 持仓阶段
===========================
{
switch(OrderTypeNow)
{
case OP_BUY:// 多单持仓情况下,满足空单入场条件
if (TradeOrNo(2))
{
if(OrderClose(Tick,OrderLots(),Bid, 滑点偏移点
数)==false)// 平掉多单持仓单
{
Print(" 翻转发生 多头平仓失败"+GetLastError());
return;
}else// 平仓后,反手建立空单
{
Ticket=OrderSend(Symbol(),OP_SELL, 每单手数,Bid, 滑点
偏移点数,Bid+SL*Point,0,"",Magic,0,0);
if(TicketStopLost+2*TrailingStop*Point)
{
OrderModify