ReillyFox:
I was preparing a long answer, but I stopped. I definitely don't know what to answer to such message.
I looked at the iMA() link
do I really need to put all that in my code to make it work?
It seemed to work fine with that small 1 line iMA code that I used for MT4
Alain Verleyen:
I was preparing a long answer, but I stopped. I definitely don't know what to answer to such message.
A simple yes or no atleast???
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hi,
Im trying to make a simple ea
Moving average crossover.
It wants to make trades on the backtest but it cant because ive screwed up somewhere
here is complete code [MT5]
//| Two Moving Average Crossover EA.mq4 |
//| Reilly |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Reilly"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//////////////////////////////////////////////////////////////////////
//INPUT//
//////////////////////////////////////////////////////////////////////
extern double takeprofit=0.005;
extern double stoploss=0.0025;
extern int fastma=5;
extern int fastmashift=0;
//^ ma shift is offset of linegraph on chart
extern int fastmamethod=0;
//^ma method is simple/exponential moving average etc
extern int slowma=21;
extern int slowmashift=0;
extern int slowmamethod=0;
extern double lotsize=0.01;
extern int maxopentrades=3;
extern int magicnumber = 1337;
#include <IsNewBar.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
/*
double ticksize = MarketInfo(Symbol(),MODE_TICKSIZE);
if (ticksize = 0.00001 || 0.001)
double pips = (ticksize*10);
else pips = ticksize;
*/
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(OrdersTotal()>=maxopentrades) return;
MqlTradeRequest req={0};MqlTradeResult res={0};
double previousfast = iMA(NULL,0,fastma,fastmashift,MODE_SMA,PRICE_CLOSE);
double currentfast = iMA(NULL,0,fastma,fastmashift,MODE_SMA,PRICE_CLOSE);
//^(NULL=moving average on the current currency pair. 0=the current timeframe. fastma= the moving average period.
double previousslow = iMA(NULL,0,slowma,slowmashift,MODE_SMA,PRICE_CLOSE);
double currentslow = iMA(NULL,0,slowma,slowmashift,MODE_SMA,PRICE_CLOSE);
//----
double iClose1[1],iClose2[1];
//---- declaration of static variables
static bool Recount1=true,Recount2=true;
static CIsNewBar NB1,NB2;
//+----------------------------------------------+
//| Detecting market entry signals |
//+----------------------------------------------+
if(NB1.IsNewBar(Symbol(),PERIOD_D1) || Recount1) // checking for a new bar
{
Recount1=false;
//--- copy newly appeared data in the arrays
if(CopyClose(Symbol(),PERIOD_D1,1,1,iClose1)<=0) {Recount1=true; return;}
/* Here is a trading signal 1 receiving block code */
}
if(NB2.IsNewBar(Symbol(),PERIOD_H4) || Recount2) // checking for a new bar
{
Recount2=false;
//--- copy newly appeared data in the arrays
if(CopyClose(Symbol(),PERIOD_H4,1,1,iClose2)<=0) {Recount2=true; return;}
/* Here is a trading signal 2 receiving block code */
}
if(previousfast<previousslow && currentfast>currentslow)
{
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.magic = magicnumber;
req.volume = lotsize;
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
req.sl = stoploss;
req.tp = takeprofit;
req.deviation = 10;
req.comment = "Buy using OrderSendAsync()";
if(!OrderSendAsync(req,res))
{
Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",res.retcode);
}
else PlaySound("ok.wav."); // MagicNumber of the order
}
if(OrderSend(req,res))
Print(GetLastError());
if (previousfast>previousslow && currentfast<currentslow)
{
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.magic = magicnumber;
req.volume = lotsize;
req.type = ORDER_TYPE_SELL;
req.price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
req.sl = stoploss;
req.tp = takeprofit;
req.deviation = 10;
req.comment = "Sell using OrderSendAsync()";
if(!OrderSendAsync(req,res))
{
Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",res.retcode);
}
else PlaySound("ok.wav."); // MagicNumber of the order
}
if (OrderSend(req,res))
Print(GetLastError());
}