Otwieranie i zmykanie zlecenia na początkach nowych świeczek

O jezykach programowania w platformach i nie tylko.
szmogurt
Bywalec
Bywalec
Posty: 7
Rejestracja: 11 maja 2008, 13:58

Otwieranie i zmykanie zlecenia na początkach nowych świeczek

Nieprzeczytany post autor: szmogurt »

Witam
Mam taki kod:


bool isNewBar()
{
static int prevTime;
bool newBar=false;

if(Time[0]!=prevTime) {
newBar=true;
prevTime=Time[0];
}
return(newBar);
}





int start()
{
int i;
if(isNewBar()== true)
{

/// KOD KTÓRY SIĘ WYKONUJE PO NOWEJ SWIECZCE ///
if (OrdersTotal() == 0)
{
if (iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,0)>Ask && iRSI(NULL,0,5,PRICE_CLOSE,0)>55)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid,10,Ask+30*Point,Ask-100*Point,"",12345,0,Red);

}

if (iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,0)<Ask && iRSI(NULL,0,5,PRICE_CLOSE,0)<45)
{
OrderSend(Symbol(),OP_BUY,0.1,Bid,10,Ask-30*Point,Ask+100*Point,"",12345,0,Red);

}
}
/// KONIEC ////

}
return(0);



Jeśli warunki zostają spełnione otwierane jest zlecenie na początku świeczki, mam problem z dopisaniem kodu który zamykał by to otwarte zlecenie na początku kolejnej świeczki. Może jakiś pomysł jakiej funkcji można by użyć.
Może ktoś by mi wyjaśnił pokrótce jak działa ta funkcja isNewBar(). Udało mi się jej użyć ale nie bardzo rozumiem jak działa.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

na końcu kodu wstawiasz dwie funkcje - isNewBar i zamykanie pozycji :

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()-1; 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,Black); 
               } 
            if (OrderType() == OP_SELL && kierunek <=0) 
               { // zamkniej SELL 
               OrderClose(OrderTicket(),OrderLots(),Ask,0,Black); 
               } 
         } 
      } 
   } 
} 
A w start() dajesz warunek :

Kod: Zaznacz cały

if (isNewBar())
      ZamknijOtwartePozycje(0);
Funkcja isNewBar() wykonuje czynnośc w momencie powstania nowej świecy.
Solą życia jest kasa.

GoAway
Stały bywalec
Stały bywalec
Posty: 32
Rejestracja: 15 sty 2012, 22:34

Nieprzeczytany post autor: GoAway »

Sprawdzenie czy zaczal sie nowy bar mozna tak:

if(Volume[0]>1)
{
}

szmogurt
Bywalec
Bywalec
Posty: 7
Rejestracja: 11 maja 2008, 13:58

Nieprzeczytany post autor: szmogurt »

personov mógłbyś napisać poco jest ten parametr ( tak to się chyba nazywa ) kierunek, resztę rozumiem tylko jakoś tego nie mogę pojąć :).
Dzięki za szybką odpowiedz

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Jeśli dasz w nawiasie 0 to będzie zamykało BUY i SELL, jak dasz 1 to tylko BUY, a jak dasz -1 to tylko SELL.
Mówię o cyfrze w nawiasie w warunkach start().
Solą życia jest kasa.

ODPOWIEDZ