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.
Otwieranie i zmykanie zlecenia na początkach nowych świeczek
na końcu kodu wstawiasz dwie funkcje - isNewBar i zamykanie pozycji :
A w start() dajesz warunek :
Funkcja isNewBar() wykonuje czynnośc w momencie powstania nowej świecy.
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);
}
}
}
}
}
Kod: Zaznacz cały
if (isNewBar())
ZamknijOtwartePozycje(0);
Solą życia jest kasa.