Tworze EA opartym na zmiennych pobieranych z danych otwarcia świec, zamkniecia itp. Na podstawie tych zmiennych określam warunki do otwarcia/zamknięcia transakcji. Mam do dyspozycji następującego EA:
Kod: Zaznacz cały
//+--------------------------------------------------+
//| ***** Parametry ***** |
//+--------------------------------------------------+
int MagicNumber = 847349;
extern double Lots = 0.5;
int blokada=0;
///////////////////////////////////////////
void init()
{}
/////////////////////////////////////////////////////////
void deinit()
{}
//////////////////////////////////////////////////////
void start()
{
/////ZMIENNE/////
if(blokada==1&&isNewBar())blokada=0;
if(blokada==0&&WarunkiOtwarciaBuy){send(OP_BUY);blokada=1;}
if(blokada==0&&WarunkiOtwarciaSell){send(OP_SELL);blokada=1;}
if (total(OP_BUY)>0&&WarunkiZamknieciaBuy)ZamknijBuy();
if (total(OP_SELL)>0&&WarunkiZamknięciaSell)ZamknijSell();
}
////////////////////////////////////////////////////
int total(int cmd)
{
int sum=0;
for ( int i=0;i<=OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && cmd ==OrderType() && MagicNumber==OrderMagicNumber()) sum++;
}
return(sum);
}
///////////////////////////////////////////////////////
void send(int cmd)
{
double pr;
color cl;
if (cmd==OP_BUY)
{
pr = Ask;
cl = Blue;
}
if (cmd==OP_SELL)
{
pr = Bid;
cl = Red;
}
int ticket = OrderSend(Symbol(),cmd,Lots,pr,0,0,0,"",MagicNumber,0,cl);
}
///////////////////////////////////////////////////
void ZamknijBuy()
{
int i;
for (i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid,2, Aqua);
}
}
}
}
void ZamknijSell()
{
int i;
for (i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), Ask,2, Magenta);
}
}
}
}
///////////////////////////////////////////////////////////////////////////////
bool isNewBar()
{
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime)
{
newBar=true;
prevTime=Time[0];
}
return(newBar);
}