continued from last post...
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(TrailingStopMode && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (CloseSell1_1 > CloseSell1_2 && CloseSell2_1 > CloseSell2_2) Order = SIGNAL_CLOSESELL;
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(TrailingStopMode && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 < Sell2_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
does anyone know of a de-bugging utility that i could use on this, thanks for your assistance, i can't get it to execute even after the compiler says it's ok
It is almost impossible to look at unformatted code.
First, just upload the mq4 file.
Secondly, try to describe in words what the system is trying to do.
Perhaps then some kind hearted person will take a look at it.
two conditions for opening long.
MACD 3,11,2 is positive (above the zero line)
Close is higher than EMA2
two conditions for opening short.
MACD 3,11,2 is negative (below the zero line)
Close is below the EMA2
the conditions for closing the positions is the same for opening the opposite direction so it reverses. Not because I think this is the best way to do closings but because that's all I could think of to do with the utility.
I would like to see these opening rules followed up with a trailing stop loss and a take profit target option. It also needs a limitation to only be engaged in one trade at a time so it doesn't throw multiple orders each bar, just execute the order in the direction of the position the first time the conditions are met and then wait for that to close before executing another order. I would like to see this made so it can run and test on all timeframes. I would like to see a feature to sideline the program during specific hours of the day and have it active during certain hours of the day as many times on and off as the user defines. I would like to be able to change the periods of the MACD around and the periods of the moving averages used for the cross. In this case the two moving averages are a 1 period simple (the close) and a 2 period exponential. That should be able to be changed to allow any two moving averages to be played off. I really like the Hist_StepMA_Stoch_KV1_Ex_03.mq4 MACD but the build utility didn't have it offered it's custom and I didn't know how to get the utility to upload it.
I'd really like to see the CatFX50 system built similarly into an EA with these added features. The goal is a trending system based on price movement that is able to be changed around to find what's the best combination of periods and timeframes.
I would like to see a parameter to allow the user to rollover into the next position a user defined percentage of the account each time and have it just automatically decide how many lots that is so the user can manage/stabalize/hold constant the margin at risk. I'm open to any other idea to maximize and optimize it but I think that if just this much would be done it would be a great tool. I'm not aware of any other trending EA right now that does this much. Correct me if I'm wrong.
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
this compiles with no errors but it isn't executing any trades when it's conditions are met. I think i did the MACD's ok but I'm not certain. I just want them to be showing positive or negative and I 'think' that means the signal line is above the indicator line for positive? but i'm not sure that it's not the indicator line above the signal line for positive? I'm not used to calling them signal and indicator i just know what they look like on the chart so if i'm not confused on that point then the logic is ok.
but beyond that this is not showing any results in the tester, it's just not executing despite having passed the compiler and giving the smiley face on the corner of the chart when attached...
can someone see what's wrong with this? why it's not executing any orders?
the other thing i would like to add to it is something to make it only be in one position at a time and not open any others until the previous one is close or simultaneously when it reverses.
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//| Please do not remove this header. |
//+------------------------------------------------------------------+
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 0;
extern bool StopLossMode = True;
extern int StopLoss = 8;
extern bool TakeProfitMode = True;
extern int TakeProfit = 15;
extern bool TrailingStopMode = True;
extern int TrailingStop = 8;
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
double Buy1_2 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_MAIN, Current + 0);
double Buy2_1 = iClose("EURUSD", PERIOD_M1, Current + 0);
double Buy2_2 = iMA("EURUSD", PERIOD_M1, 2, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_1 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
double Sell1_2 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_MAIN, Current + 0);
double Sell2_1 = iClose("EURUSD", PERIOD_M1, Current + 0);
double Sell2_2 = iMA("EURUSD", PERIOD_M1, 2, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_1 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
double CloseBuy1_2 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_MAIN, Current + 0);
double CloseBuy2_1 = iClose("EURUSD", PERIOD_M1, Current + 0);
double CloseBuy2_2 = iMA("EURUSD", PERIOD_M1, 2, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double CloseSell1_1 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
double CloseSell1_2 = iMACD("EURUSD", PERIOD_M1, 3, 11, 2, PRICE_CLOSE, MODE_MAIN, Current + 0);
double CloseSell2_1 = iClose("EURUSD", PERIOD_M1, Current + 0);
double CloseSell2_2 = iMA("EURUSD", PERIOD_M1, 2, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (CloseBuy1_1 < CloseBuy1_2 && CloseBuy2_1 < CloseBuy2_2) Order = SIGNAL_CLOSEBUY;
continued on next post....