下载MetaTrader 5
要添加评论,请登录注册
您想要编写自动交易吗?在MQL5参考中找出解决方案!
kwng
74
kwng 2009.10.17 04:44 

我这个EA只能在虚拟工作,不知道为什么无法在真仓工作(无法开仓),请各位帮忙,在此先谢谢你了.



#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;
}

yuanming
37
yuanming 2009.10.17 15:51  
有嵌套啊,好复杂
/
要添加评论,请登录注册