Can you be more specific?
Wht do you see i the "expert" tab when you run it?
TuTBaluT:
Can you be more specific?
Wht do you see i the "expert" tab when you run it?
Thank you for your reply.
The "expert" tab didn't show any error message, it just don't open trade.
kwng:
Thank you for your reply.
The "expert" tab didn't show any error message, it just don't open trade.
Could it be that there were no trade opportunities for the expert?
No conditions allowing him to open a trade?
My friend,
It looks like this EA is a fake one.
It just reads future values from the history file
and places trades according to the future prices.
Obviously this EA cannot work for real, since in real time
you do not have the future prices.
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
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,
This EA can work with history test, but it does not work in Demo/ Live. Can someone help?
Thank you in advance.
#define MAINSEEK 148
#define BARSIZE 44 // LONG_VALUE + 5 * DOUBLE_VALUE
extern int Pips = 50;
extern double Lots = 0.1;
int handle;
bool MainError;
int GetTime( int Pos )
{
int PosTime;
FileSeek(handle, MAINSEEK + Pos, SEEK_SET);
PosTime = FileReadInteger(handle);
return(PosTime);
}
bool FindTimePlace( int SearchTime )
{
int LeftTime, RightTime, PosTime;
int Left, Right, Pos;
Left = 0;
Right = FileSize(handle) - MAINSEEK - BARSIZE;
LeftTime = GetTime(Left);
RightTime = GetTime(Right);
while ((LeftTime < SearchTime) && (SearchTime < RightTime))
{
Pos = (Left + Right) / 2;
Pos -= Pos % BARSIZE;
if (Pos == Left)
break;
PosTime = GetTime(Pos);
if (SearchTime >= PosTime)
{
Left = Pos;
LeftTime = GetTime(Left);
}
else // if (SearchTime < PosTime)
{
Right = Pos;
RightTime = GetTime(Right);
}
}
if (SearchTime <= RightTime)
{
FileSeek(handle, Left + MAINSEEK, SEEK_SET);
return(TRUE);
}
else
return(FALSE);
}
void init()
{
handle = FileOpenHistory(Symbol() + Period() + ".hst", FILE_BIN|FILE_READ);
if (handle > 0)
MainError = TRUE;
else
{
MainError = FALSE;
return;
}
MainError = FindTimePlace(Time[0]);
if (!MainError)
FileClose(handle);
return;
}
void deinit()
{
if (MainError)
FileClose(handle);
return;
}
bool GetPrices( int& PriceTime, int& PriceLow, int& PriceHigh)
{
PriceTime = FileReadInteger(handle);
FileSeek(handle, DOUBLE_VALUE, SEEK_CUR);
PriceLow = FileReadDouble(handle) / Point + 0.1;
PriceHigh = FileReadDouble(handle) / Point + 0.1;
FileSeek(handle, 2 * DOUBLE_VALUE, SEEK_CUR);
if (FileTell(handle) + BARSIZE <= FileSize(handle))
return(TRUE);
else
return(FALSE);
}
int GetTimeTrade()
{
static bool FlagUP = TRUE;
static int Min = 999999;
static int Max = 0;
static int NTime;
int ResTime;
int PriceTime, PriceLow, PriceHigh;
while (TRUE)
{
if (!GetPrices(PriceTime, PriceLow, PriceHigh))
return(-1);
if (FlagUP)
{
if (PriceHigh > Max)
{
Max = PriceHigh;
NTime = PriceTime;
}
else if (Max - PriceLow >= Pips)
{
FlagUP = FALSE;
Min = PriceLow;
break;
}
}
else // (FlagUP == FALSE)
{
if (PriceLow < Min)
{
Min = PriceLow;
NTime = PriceTime;
}
else if (PriceHigh - Min >= Pips)
{
FlagUP = TRUE;
Max = PriceHigh;
break;
}
}
}
ResTime = NTime;
NTime = PriceTime;
return(ResTime);
}
void CloseOrder( int Ticket )
{
OrderSelect(Ticket, SELECT_BY_TICKET);
if (OrderType() == OP_BUY)
OrderClose(Ticket, OrderLots(), Bid, 0);
else // (OrderType() == OP_SELL)
OrderClose(Ticket, OrderLots(), Ask, 0);
return;
}
int ReverseOrder( int Ticket)
{
if (Ticket == 0)
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0);
else
{
OrderSelect(Ticket, SELECT_BY_TICKET);
if (OrderType() == OP_BUY)
{
OrderClose(Ticket, OrderLots(), Bid, 0);
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 0, 0, 0);
}
else // (OrderType() == OP_SELL)
{
OrderClose(Ticket, OrderLots(), Ask, 0);
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0);
}
}
return(Ticket);
}
void System()
{
static int Ticket = 0;
static int NewTime = 0;
if (NewTime < 0)
return;
if (Time[0] < NewTime)
return;
Ticket = ReverseOrder(Ticket);
NewTime = GetTimeTrade();
if (NewTime < 0)
CloseOrder(Ticket);
}
void start()
{
if (!MainError)
return;
System();
return;
}