Ask! - page 11

 

You're talking about having a script or something to facilitate as a server for the EAs to be able to communicate. I think it'll take a while for metaquotes to come up with something like that. However looking at mql4.com, they say the function I was talking about, GlobalVariableSetOnCondition() is atomic in execution. With that, I can probably come up with a set of functions to do what I need.

 

Can someone help me: https://www.mql5.com/en/forum/174184 ?

 

Help - Zero divide???

Hi all coders...

What I've to do to solve this error: zero divide?

Thank you for any help...

Files:
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

hello codersguru,

can i use jma instead of ema in EA code?

 
 

need help - adjusted MACD

I am trying to create an indicator that adjusts the signal line based on the value of RSI. Really I would like to draw another signal line on the MACD that is adjusted and leave the regular signal line in place.

edit:

I got the indicator to draw the RSI line (first step) in the same window. But for some reason it won't draw the last period. Please see attached.

Files:
 

anythelp would be great

herel is a bit of code im having a problem with//// it works when i load it up on northfinace 1time then never makes a trade again...but it doesnt do anything on Interbank... it is a reversal system using kama the .0005 is reversal pips...I have no idea whats going on, as it made 1 trade on northfinance perfectly when i first loaded it up, but it was an existing trade that should have already been made...

 

the code

#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 = True;

extern double Lots = 1;

extern int Slippage = 3;

extern bool StopLossMode = True;

extern int StopLoss = 40;

extern bool TakeProfitMode = False;

extern int TakeProfit = 60;

extern bool TrailingStopMode = True;

extern int TrailingStop = 35;

#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 Var1 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0.0005, 0, Current + 0);

double Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Current + 0);

double Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Current + 0);

double Buy1_1 = Var1 ;

double Buy1_2 = 25;

double Buy2_1 = Var2 ;

double Buy2_2 = 80;

double Buy3_1 = Var3 ;

double Buy3_2 = 50;

double Sell1_1 = Var1 ;

double Sell1_2 = -25;

double Sell2_1 = Var2 ;

double Sell2_2 = -80;

double Sell3_1 = Var3 ;

double Sell3_2 = -50;

double CloseBuy1_1 = Var1 ;

double CloseBuy1_2 = -25;

double CloseBuy2_1 = Var2 ;

double CloseBuy2_2 = -80;

double CloseBuy3_1 = Var3 ;

double CloseBuy3_2 = -50;

double CloseSell1_1 = Var1 ;

double CloseSell1_2 = 25;

double CloseSell2_1 = Var2 ;

double CloseSell2_2 = 80;

double CloseSell3_1 = Var3 ;

double CloseSell3_2 = 50;

//+------------------------------------------------------------------+

//| 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 && CloseBuy3_1 <= CloseBuy3_2) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| 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 && CloseSell3_1 >= CloseSell3_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 && Buy3_1 >= Buy3_2) Order = SIGNAL_BUY;

if (Sell1_1 <= Sell1_2 && Sell2_1 = Sell3_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);

}

//+------------------------------------------------------------------+

 

i changed the value of .0005 of the indicator in the expert as that only shows the channel line ultimately the levels are what you need to change 25,-25 for .0005 ...30,,-30 for .0006, and so on...

 

Problem with breakeven and trailing stop

Hello,

I am learning coding using the MQL4 tutorial from Codersguru, and I'm working on "My_First_EA". It really is my first EA. It works very well, but I am trying to write a breakeven stop and I can't figure it out. The problem I have is that the breakeven stop follows the price just like a trailing stop. I would like the initial stoploss to move to keep 1 pip profit when I make 15 pips (for example), then I want the stoploss to stay at the breakeven stop (1 pip profit) until the trailing stop begins working at 25 pips profit. Then I want the trailing stop to work as usual moving every pip of profit. I think the problem might be the "OrderStopLoss()", but I don't know anything anymore. My brain is mush. Thankyou

Here is the relevent code I've done:

extern double TrailingStop=25.0;

extern double BreakEvenProfit=15;

extern double BreakEvenStop=1;

......................

my entry and open orders code here works fine

......................

for (cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType()<=OP_SELL&&OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY)//Long position is opened

{

//should it be closed?

if (FSAR > FMA) //my exit signal

{

//----CLOSE LONG POSITION works fine

OrderClose(OrderTicket(),OrderLots(),Bid,3,Magenta);

return(0);//exit

}

////////////////////THIS IS THE PROBLEM AREA BELOW/////////

//----CHECK FOR BREAKEVEN STOP LONG POSITION------

if (Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

if (OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow);

return(0);

}

}

//-----EVERYTHING BELOW HERE WORKS AS A TYPICAL TRAILING STOP

//----check for trailing stop LONG POSITION

if(TrailingStop>0)

{

if (Bid-OrderOpenPrice()>Point*TrailingStop)

{

if (OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Yellow);

return(0);

}

}

}

}

else//go to short position

Reason: