Jeśli zostaną spełnione pewne warunki wskaźnika to czeka na pojawienie sie nowej świecy i dopieo wtedy : zamyka BUY, otwiera SELL i zapisuje pewne wartości. Jeśli otwiera SELL to zamyka BUY i również zapisuje wartości.
To wszystko musi sie stać w momencie pojawienia się nowej świecy.
Używam do tego funkcji isNewBar().
Jako, że można jej użyć w kodzie tylko raz, zrobiłem to w ten sposób :
Kod: Zaznacz cały
double cenaB=0;
double cenaS=0;
double cenaclose=0;
int poziomB=0;
int poziomS=0;
int signal=0;
void start()
{
if(...warunki sygnału dla buy...)signal=1;
if(...warunki sygnału dla sell..)signal=2;
if(isNewBar()){
if(total(OP_BUY)==0 && signal==1 &&...dodatkowy warunek...)
{ZamknijSell();OrderSend(...OP_BUY..);cenaB=Ask;cenaclose=0;cenaS=0;poziomS=0;}
if(total(OP_SELL)==0 && signal==2 &&...dodatkowy warunek...)
{ZamknijBuy();OrderSend(..OP_SELL...);cenaS=Bid;cenaclose=0;cenaB=0;poziomB=0;}
}
}
////////////////////////////////////////////////////////////////
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 ZamknijBuy()
{ int i;
for (i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
{if (OrderType() == OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),Bid,2,Black);}}}}
/////////////////////////////////////////////////////////////////
void ZamknijSell()
{ int i;
for (i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
{if (OrderType() == OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),Ask,2,Black);}}}}
/////////////////////////////////////////////////////////////////////////
bool isNewBar() {
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime){
newBar=true;
prevTime=Time[0];}
return(newBar);}
A może jest lepszy sposób na zapisanie tego warunku ?
Macie na to jakiś SKUTECZNY pomysł ?
Dodano po 1 godzinach 25 minutach:
Problem jest jeszcze, że zamyka zlecenie, a aby otworzyć kolejne potrzeba nowego ticku. Jak już jest nowy tick to funkcja isNewBar jest już nieaktywna.