• 新添加量子混沌系统板块,欢迎大家访问!---“量子混沌系统”
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏我们吧

一个完整的EA基础构架【源码】

使用教程 qchaos.009 6个月前 (11-05) 8564 复制链接

此文旨在为希望学习EA编程的读者提供一份参考源码(带注释)。该EA的交易逻辑包括:在N日高点做空,N日低点做多,并具备止损、止盈及移动止损的处理。深入理解这份源码的设计逻辑,将有助于你入门MQL的实战编程。记得多思考,多实践检验!

一个完整的EA基础构架【源码】

//+——————————————————————+
//| 基础框架模板.mq4 |
//| Copyright © 2009-2024, http://www.QChaos.com |
//| https://www.qchaos.com/ |
//+——————————————————————+

property copyright "Copyright © 量化混沌, http://www.qchaos.com"

property link "https://www.qchaos.com"

property version "2.01"

property description "———————————————"

property description "EA、指标公式分享"

property description "EA、指标编写业务承接"

property description "———————————————"

property description "更多资源,关注公众号:量化程序"

property description "微 信:QChaos001"

property description "手机号:134-8068-5281"

property description "———————————————"

//=====可调参数部分==============

define Magic 888888 // Magic常量,用于区分订单

extern int N=50; // N根K线的数量
extern int SL=100; // 止损设置的点数
extern int TrailingStop=30; // 移动止损的点数
extern double LotSize=0.1; // 下单的仓位大小
extern int Slippage=3; // 滑点偏移点数

//—-全局变量===================
int Tick; // 用于记录订单的唯一编号
double StopLost; // 用于记录止损

//========主函数部分开始============
int start() // 主函数,每个价格更新都会执行一次
{
int Ticket; // 用于记录下单状态
int OrderTypeNow=GetOrderTypeHolding(); // 获取当前持仓单的交易类型

if (OrderTypeNow==-1) // 无持仓状态
{
if (TradeOrNo(1)) // 多单入场条件
{
Ticket=OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, Ask-SLPoint, 0, "", Magic, 0, 0);
if(Ticket<0)
{
Print("多单入场失败" + GetLastError());
return(0);
}
}
else if (TradeOrNo(2)) // 空单入场条件
{
Ticket=OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, Bid+SL
Point, 0, "", Magic, 0, 0);
if(Ticket<0)
{
Print("空单入场失败" + GetLastError());
return(0);
}
}
return;
}
else // 持仓阶段
{
switch(OrderTypeNow)
{
case OP_BUY:
// 其余逻辑处理…
break;
case OP_SELL:
// 其余逻辑处理…
break;
}
return;
}

return(-1);
}

//=================自定义函数部分======================================
int GetOrderTypeHolding() // 从持仓单提取订单类型
{
int Type=-1;
for(int i=OrdersTotal()-1; i>=0; i–)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
Type=OrderType();
Tick=OrderTicket();
StopLost=OrderStopLoss();
}
}
return(Type);
}

bool TradeOrNo(int Type) // 判断指定方向的入场条件是否成立
{
double NHigh=High[iHighest(Symbol(),0,MODE_HIGH,N,2)];
double NLow=Low[iLowest(Symbol(),0,MODE_LOW,N,2)];
switch(Type)
{
case 1:
if (Close[1]>NHigh) return true;
break;
case 2:
if (Close[1]<NLow) return true;
break;
}
return false;
}


量子混沌 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:一个完整的EA基础构架【源码】