CześćAsia pisze:wielkie dzięki
potestuję
...
PF
NIE ZAMYKA
W wolnej chwili popatrzę dlaczego nie działa(sprawdzę i poprawię),
i podeślę poprawioną wersję .
Pozdrawiam.
Kod: Zaznacz cały
if(isNewBar() ) ZamknijOtwartePozycje(0);Kod: Zaznacz cały
bool isNewBar() {
 static int prevTime;
 bool newBar=false;
 if(Time[0]!=prevTime) {
  newBar=true;
  prevTime=Time[0];
 }
 return(newBar);
}
int ZamknijOtwartePozycje(int kierunek)
{
   for (int i = OrdersTotal(); i > 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICMA)
         {
            if (OrderType() == OP_BUY && kierunek >= 0)
               { // zamkniej BUY
               OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue);
               }
            if (OrderType() == OP_SELL && kierunek <=0)
               { // zamkniej SELL
               OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Blue);
               }
         }
      }
   }
}
 
Kod: Zaznacz cały
iBarShift(Symbol(),Period(),OrderOpenTime());
Kod: Zaznacz cały
datetime time;
Kod: Zaznacz cały
OrderSend(.....);
time=Time[0];
Kod: Zaznacz cały
if (/*odwolanie funkcji sprawdzajaca czy jest otwarte zleceni*/ && time!=Time[0]) /// tutaj odwolanie do funkcji zamykajacej pozycje
Kod: Zaznacz cały
if(isNewBar())ZamknijBuy();
      if(isNewBar())ZamknijSell();
////////////////////////////////////////////////
bool isNewBar() { 
 static int prevTime; 
 bool newBar=false; 
 if(Time[0]!=prevTime) { 
  newBar=true; 
  prevTime=Time[0]; 
 } 
 return(newBar); 
}
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,3, 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,3, Magenta); 
         } 
      } 
   } 
}Kod: Zaznacz cały
#include <stdlib.mqh>
extern int    MagicNumber  = 99998;
extern int    TakeProfit   = 1000;
extern int    StopLoss     = 1000;
extern double lot          = 1;
///////////////////////////////////////////////////////////////////////////////////////////////////
void init()
{
   
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void deinit()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void start()
{
      if (total(OP_BUY )==0 && total(OP_SELL)==0 && Close[1]-Open[1]>0)send(OP_BUY);
      if (total(OP_SELL)==0 && total(OP_BUY )==0 && Close[1]-Open[1]<0)send(OP_SELL);
      if(isNewBar() ) ZamknijOtwartePozycje(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 send(int cmd)
{
   //if (total(cmd)>0) return;
   double Point_ = Point;
   if (Digits==3 || Digits==5) Point_=Point*10;
   double tp;
   double sl;
   double pr;
   color cl;
   if (cmd==OP_BUY)
   {
      pr = Ask;
      tp = Ask + TakeProfit*Point_;
      sl = Ask - StopLoss*Point_;
      cl = Blue;
   }  
   if (cmd==OP_SELL)
   {
      pr = Bid;
      tp = Bid - TakeProfit*Point_;
      sl = Bid + StopLoss*Point_;
      cl = Red;
   }  
   int ticket = OrderSend(Symbol(),cmd,lot,pr,0,sl,tp,"",MagicNumber,0,cl);
   if (ticket<=0) Print(ErrorDescription(GetLastError()));
}
/////////////////////////////////////////////////////////////////////////
bool isNewBar() { 
 static int prevTime; 
 bool newBar=false; 
 if(Time[0]!=prevTime) { 
  newBar=true; 
  prevTime=Time[0]; 
 } 
 return(newBar); 
} 
int ZamknijOtwartePozycje(int kierunek) 
{ 
   for (int i = OrdersTotal(); i > 0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
         { 
            if (OrderType() == OP_BUY && kierunek >= 0) 
               { // zamkniej BUY 
               OrderClose(OrderTicket(),OrderLots(),Bid,0,Blue); 
               } 
            if (OrderType() == OP_SELL && kierunek <=0) 
               { // zamkniej SELL 
               OrderClose(OrderTicket(),OrderLots(),Ask,0,Blue); 
               } 
         } 
      } 
   } 
}Kod: Zaznacz cały
if(isNewBar())ZamknijBuy(); 
if(isNewBar())ZamknijSell();
Kod: Zaznacz cały
bool nowaSwieca=isNewBar();
if(nowaSwieca)
{
ZamknijSell();
ZamknijBuy();
}
Kod: Zaznacz cały
for (i = 0; i < OrdersTotal(); i++) Kod: Zaznacz cały
for (i = OrdersTotal(); i>=0 ; i--) powinno bycTig3r pisze:Kod:
for (i = OrdersTotal(); i>=0 ; i--)
gdyż jeśli usuniesz zlecenie to się przestawią ich numery i będzie błędnie wskazywało, jak dasz od końca to będzie ok
Kod: Zaznacz cały
OrdersTotal()-1Kod: Zaznacz cały
if(isNewBar())
{ZamknijBuy(); 
ZamknijSell();
}Nadal nie zamyka. Z resztą ten drugi kod w moim poście to gotowiec - tylko wkleić i możesz sam spróbować. Zobaczysz, że nie zamyka. Tak po samym kodzie może niektórych rzeczy nie widać, ale napisałem ten kod abyście mogli sobie zobaczyć jak działa w praktyce.xpep pisze:sprobuj tak Kod:
if(isNewBar())
{ZamknijBuy();
ZamknijSell();
}