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
infinite loops in ea init() ?
Is it possible to create infinite loops in the init function of an ea? I have an ea which allows through a socket a user to change timeframes on metatrader. However, the start function is only called when a new tick comes in, i need the socket to come back up immediately, so i decided to create an infinite loop in the init function and the start function.
Will the infinite loop in the init function cause any problems???
Need help to change EA Indicator
I have an EA based on indicator "LSMA" that buy when (red== Empty value && green !=0)
double green = iCustom(Symbol(),0,"LSMA",LSMA_Period,LSMA_Bars,2,1);
double red=...........................
I will now replace LSMA by "SHI_SilverTrendSig1" when red dot is under close.
How can I write that ?
Thanks in advance.
This EA is trading only on demo. Who know why?
Thanks
extern double GapRange = 10;
extern double SL_Factor = 2;
extern double TP_Factor = 3;
extern double MM_Risk = 2;
extern int ExpertID=844478;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//---- ONE TRADE PER BAR
static bool ToTrade;
if(NewBar() == true)
{
if(COT(1, 101187) == 0 && COT(2, 201187) == 0) ToTrade = true;
}
//---- GAP
bool GAP;
double CurrOpen = iOpen(NULL, 0, 0);
double PrevClose = iClose(NULL, 0, 1);
double Range = MathAbs(PrevClose - CurrOpen);
if(Range >= GapRange * Point * 10) GAP = true;
//---- TP / SL
double ATR = iATR(NULL, 0, 13, 1);
double Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
double TakeProfit = ATR * TP_Factor;
double StopLoss = (ATR * SL_Factor) + Spread;
//---- TRADE
int Ticket;
if(ToTrade == true && GAP == true)
{
if(CurrOpen < PrevClose)
{
Ticket = OrderSend(Symbol(), OP_BUY, LotSize(MM_Risk, StopLoss), Ask, 3, Ask - StopLoss, Ask + TakeProfit, "Gap_Trader.B", 101187, 0, Blue);
if(Ticket < 0)
{
Print("Error in OrderSend : ", GetLastError());
}
else
{
ToTrade = false;
}
}
if(CurrOpen > PrevClose)
{
Ticket = OrderSend(Symbol(), OP_SELL, LotSize(MM_Risk, StopLoss), Bid, 3, Bid + StopLoss, Bid - TakeProfit, "Gap_Trader.S", 201187, 0, Red);
if(Ticket < 0)
{
Print("Error in OrderSend : ", GetLastError());
}
else
{
ToTrade = false;
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//+ Check Open Trades |
//+------------------------------------------------------------------+
int COT(int BS, int MN)
{
int Buys = 0, Sells = 0;
for(int cnt_COT = 0; cnt_COT < OrdersTotal(); cnt_COT++)
{
OrderSelect(cnt_COT, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MN && OrderType() == OP_BUY) Buys++;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MN && OrderType() == OP_SELL) Sells++;
}
if(BS == 1) return(Buys);
if(BS == 2) return(Sells);
}
//+------------------------------------------------------------------+
//| LotSize |
//+------------------------------------------------------------------+
double LotSize(double Risk, double SL)
{
double MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double MinLot = MarketInfo(Symbol(), MODE_MINLOT);
double StopLoss = SL / Point / 10;
double Size = Risk / 100 * AccountBalance() / 10 / StopLoss;
if(Size < MinLot) Size = MinLot;
if(Size > MaxLot) Size = MaxLot;
return(NormalizeDouble(Size, 2));
}
//+------------------------------------------------------------------+
//| New Bar |
//+------------------------------------------------------------------+
bool NewBar()
{
static datetime PrevBar;
if(PrevBar < Time[0])
{
PrevBar = Time[0];
return(true);
}
else
{
return(false);
}
}
A simple requst
I am using the code below to detect a newbar, but I want to start the code on the next bar after the EA opens, any help here please
bool New_Bar()
{
bool New_Bar = false;
if (New_Time!= Time[0])
{
New_Time = Time[0];
New_Bar = true;
}
return(New_Bar);
}
I am tryng this code snippit
if (Bars > BarsCount)
{
temp = temp + candle0;
BarsCount = Bars;
}
so I want temp to increment with candle0 on the next bar after the EA opens not immediately the EA opens
I am tryng this code snippit
if (Bars > BarsCount)
{
temp = temp + candle0;
BarsCount = Bars;
}
so I want temp to increment with candle0 on the next bar after the EA opens not immediately the EA opensIt's very simple. Declare BarsCount in global section with some value - it can be 0, then in init() function put this line of code: BarsCount = Bars;
So at the beginning ea will remember number of bars available on chart, and it will start working only if new one will come.
Help with OrderSend( ) Function
New to mql4, I wrote the following code for practice, but can't figure out why I get an Error 130
I think it has to do with unNormalized numbers. I'm using IBFX broker and they use the 5th decimal on the price.
double Stoploss = 50;
double Takeprofit = 50;
int start()
{
int ticket = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,Ask-Stoploss*Point,
Ask+Takeprofit*Point,"Order #1",1234,0,Red);
if(ticket == -1) Print("error-",GetLastError());
return(0);
}
I also tried setting SL and TP to 500 because of the 5th decimal but got the same error. Any suggestions? Thanks
Error 130 means the Stoploss is invalid, so the value you calculate seems to be out of range.
Check if the value does make sense.
Regards, Klaus
Help using OrderProfit() on Multiple Orders in same currency pair
Hi, I wrote an EA which can trade 1 to 3 Trades at a time on the same currency pair.
The code snippet below seems to calculate the Open Order profits okay but on close they are out by a few percent.
If I run one trade it is accurate.
Can anyone look at the code below and offer any advice?
for ( tradeCount=0; tradeCount < OrdersTotal(); tradeCount++ )
{
if(!OrderSelect(tradeCount,SELECT_BY_POS))continue ;
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&O rderMagicNumber()==MagicNumber01)TradeProfit01 = OrderProfit() + OrderCommission() + OrderSwap();
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&O rderMagicNumber()==MagicNumber02)TradeProfit02 = OrderProfit() + OrderCommission() + OrderSwap();
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&O rderMagicNumber()==MagicNumber03)TradeProfit03 = OrderProfit() + OrderCommission() + OrderSwap();
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber01)TradeProfit01 = OrderProfit() + OrderCommission() + OrderSwap();
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber02)TradeProfit02 = OrderProfit() + OrderCommission() + OrderSwap();
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber03)TradeProfit03 = OrderProfit() + OrderCommission() + OrderSwap();
}
I would like to be able to read the Profit displayed in the MT4 Account History and display it in an Alert().
Many thanks.
Required Help for MQL4 Programing (Indicator)
Hi,
I am New to MQL4. I don't have much experience in MQL4 and also normal programing.
I required help from seniors.
1st I have done average of 14 days high by mentioning
double high1,high2,high3,...........high13,high14;
high1=high[1];
high2=high[2];
high3=high[3];
...........
............
..................
high14=high[14];
double totalhigh,highavg;
totalhigh=high1+high2+high3+..................high13+high14;
highavg=totalhigh/14;
==================================================
from here onwards, I want help from you to proceed further.
I want to draw line on Indicator filed " highavg " value. simply i want to create an indicator with 14 days average of HIGH. The 14 days average I have assigned to "highavg" variable. So plz help me to code to draw line on indicator filed with the value of " highavg "