MQL4: 双重时间框架双均线交易系统

一、交易策略

二、EA源码

//+------------------------------------------------------------------+
//|                                                myEA20180104.mq4 |
//|                                                Copyright 2017,CuiYi |
//|                                                010333562@qq.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,CuiYi"
#property link      "1010333562@qq.com"
#property version   "1.00"
#property stric
#define MAGICMA 19880305

extern double Lots=0.01;

int CalculateCurrentOrder(string symbol)
	{
	int buys=0,sells=0;
	for(int i=0;i<OrdersTotal();i=i+1)
		{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)	break;
		if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MAGICMA)
			{
			if(OrderType()==OP_BUY) 	buys++;
			if(OrderType()==OP_SELL)	sells++;
			}
		}
	if(buys>0)	return(buys);
	else		return(-sells);
	}

void CheckForOpen()
	{
	double ma1,ma2,ma3,ma4,maA,maB;
	int res;
	
	ma1=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,0);
	ma2=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,0);
	ma3=iMA(NULL,240,10,6,MODE_EMA,PRICE_CLOSE,0);
	ma4=iMA(NULL,240,20,6,MODE_EMA,PRICE_CLOSE,0);
	
	maA=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,1);
	maB=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,1);
	
	if(ma1>ma2 && maA<maB && ma3>ma4)
		{
		res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Blue);
		return;
		}
	
	if(ma1<ma2 && maA>maB && ma3<ma4)
		{
		res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
		return;
		}
	}

void CheckForClose()
	{
	double ma1,ma2,ma3,ma4,maA,maB;
		
	ma1=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,0);
	ma2=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,0);
	ma3=iMA(NULL,240,10,6,MODE_EMA,PRICE_CLOSE,0);
	ma4=iMA(NULL,240,20,6,MODE_EMA,PRICE_CLOSE,0);
	
	maA=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,1);
	maB=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,1);
		
	for(int i=0;i<OrdersTotal();i++)
		{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
		if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
		
		if(OrderType()==OP_BUY)
			{
			if(ma1<ma2 && maA>maB && ma3>ma4)	
			OrderClose(OrderTicket(),Lots,Bid,3,White);
			break;
			}
			
		if(OrderType()==OP_SELL)
			{
			if(ma1>ma2 && maA<maB && ma3<ma4)	
			OrderClose(OrderTicket(),Lots,Bid,3,White);
			break;
			}
		}
	}	

void start()
	{
	if(Bars<100 || IsTradeAllowed()==false) return;
	if(CalculateCurrentOrder(Symbol())==0) CheckForOpen();
	else CheckForClose();
	}

三、系统回测

1.EUR/USD

回测时间:2017/01/01 - 2018/01/01

时间周期:M30

净值图:

输入图片说明

回测报告:

输入图片说明

转载于:https://my.oschina.net/u/3093769/blog/1601146

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQL5交易指标源码是用于编写自定义交易指标的源代码。MQL5是MetaQuotes Language 5的缩写,是用于开发交易策略和指标的高级编程语言。 MQL5交易指标源码主要用于技术分析,并且可以根据交易者的需求进行修改和定制。通过编写MQL5指标源码,交易者可以计算并显示不同的技术指标,如移动平均线,相对强弱指标(RSI),布林带和MACD等。这些指标有助于交易者识别市场趋势、超买超卖条件以及可能的价格反转点。 MQL5交易指标源码通常包括以下几个部分:初始化函数、重新计算函数和绘图函数。初始化函数用于指标的初始化设置,重新计算函数用于计算指标的值,绘图函数用于在图表上绘制指标的图形。交易者可以根据自己的需求来编写这些函数,并使用MQL5编程语言中的各种函数和操作来处理指标的计算和绘图。 编写MQL5交易指标源码需要具备一定的编程知识和经验。交易者需要理解技术指标的原理和计算方法,并熟悉MQL5编程语言的语法和函数。此外,交易者还需要对金融市场和交易策略有一定的了解,以便正确地应用和使用这些指标。 总之,MQL5交易指标源码是编写自定义交易指标的源代码,交易者可以根据自己的需求来定制和修改这些代码。通过编写MQL5指标源码,交易者能够使用各种技术指标来辅助分析市场,并制定有效的交易策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值