Jak sprawdzić potwierdzenie sygnału?
Jak sprawdzić potwierdzenie sygnału?
Witam Wszystkich!
Jestem początkującym programistą MQL i mam pytanie które mam nadzieję jest dla ekspertów proste.
Chciałbym aby mój EA generował sygnał jeśli spełnione są np. 2 warunki:
1. cena i EMA się przetną
2. RSI przetnie daną wartość
Przykładowo:
Jeśli cena przetnie średnią kroczącą od dołu ORAZ RSI przetnie linię 50 również od dołu to generuj sygnał.
Mój problem polega na tym że wiem jak zbadać oddzielnie każdy przypadek ale jak je powiązać mając na uwadze że przecież takie przecięcie nie następuje dokładnie w tej samej chwili tylko jest zazwyczaj lekko przesunięte?
Z góry dziękuję i pozdrawiam,
Paweł.
Jestem początkującym programistą MQL i mam pytanie które mam nadzieję jest dla ekspertów proste.
Chciałbym aby mój EA generował sygnał jeśli spełnione są np. 2 warunki:
1. cena i EMA się przetną
2. RSI przetnie daną wartość
Przykładowo:
Jeśli cena przetnie średnią kroczącą od dołu ORAZ RSI przetnie linię 50 również od dołu to generuj sygnał.
Mój problem polega na tym że wiem jak zbadać oddzielnie każdy przypadek ale jak je powiązać mając na uwadze że przecież takie przecięcie nie następuje dokładnie w tej samej chwili tylko jest zazwyczaj lekko przesunięte?
Z góry dziękuję i pozdrawiam,
Paweł.
A jakbyś ustawił cene odniesienia "Open" w obu wskaźnikach ? Wtedy w obrębie jednej swiecy wartość wskaźnika jest stała, nie zmienia się.
Dodano po 10 minutach:
Jesli chodzi o warunek to spróbuj dla BUY :
I ten sam warunek dla RSI.
Wtedy warunek będzie spełniony tylko w momencie przecięcia.
Dodano po 10 minutach:
Jesli chodzi o warunek to spróbuj dla BUY :
Kod: Zaznacz cały
if(Bid>MA&&Open[0]<=MA||Bid>MA&&Close[1]<=MA);
Wtedy warunek będzie spełniony tylko w momencie przecięcia.
Solą życia jest kasa.
Nie bardzo rozumiem w jednym ticku... chyba rzadko się zdarza żeby w tym samym ticku zarówno RSI przecięło 50 i EMA przecięło cenę...? Chodziło mi właśnie o to żeby np. sprawdzić to w kilku następnych tickach albo w odstępie czasowym.
Rozumiem że kod przedstawiony przez personv daje mi możliwość sprawdzenia czy EMA przecięło się ze świeczką ale jak powiązać te dwa wskażniki razem?
W tej chwili mam funkcję która sprawdza czy dwie linie się przecinają:
i sprawdzam to dla przecięcia się ceny z EMA tak:
oraz dla przecięcia się RSI z 50 tak:
I wtedy jeśli dla isCrossed = 1 to BUY jeśli =2 to SELL....
Ale nadal nie rozumiem jak mogę dodać warunek typu:
Jeśli isCrossedRSI a chwilę potem isCrossedEMA =1 to BUY
Rozumiem że kod przedstawiony przez personv daje mi możliwość sprawdzenia czy EMA przecięło się ze świeczką ale jak powiązać te dwa wskażniki razem?
W tej chwili mam funkcję która sprawdza czy dwie linie się przecinają:
Kod: Zaznacz cały
int Crossed (double line1, double line2,double line1_previous_bar, double line2_previous_bar)
{
//static means that variables hold values between repeated calls
static int last_direction = 0;
static int current_dirction = 0;
//at first run current_dirction will become 1 or 2 but not 0!
if (line1>line2 && line1_previous_bar>line2_previous_bar) current_dirction = 1; //line1 is above
if (line1<line2 && line1_previous_bar<line2_previous_bar) current_dirction = 2; //line1 is below
//only during first run last_direction will be 0, so initialize it as current_dirction
if (last_direction == 0) last_direction = current_dirction;
//if lines have crossed then direction will change so current_dirction will differ from last_direction
if(current_dirction != last_direction) //changed
{
last_direction = current_dirction;
return (last_direction);
}
else
{
return (0);
}
}
Kod: Zaznacz cały
longEma = iMA(NULL,0,EMA,0,MODE_EMA,PRICE_CLOSE,0);
longEmaPrevious = iMA(NULL,0,EMA,0,MODE_EMA,PRICE_CLOSE,1);
int isCrossedEMA = Crossed(iClose(Symbol(),0,0),longEma,iClose(Symbol(),0,1),longEmaPrevious);
Kod: Zaznacz cały
lineRSI = iRSI(Symbol(),0,RSI,PRICE_CLOSE,0);
int isCrossedRSI = Crossed(lineRSI,50);
Ale nadal nie rozumiem jak mogę dodać warunek typu:
Jeśli isCrossedRSI a chwilę potem isCrossedEMA =1 to BUY
A nie lepiej ująć to w jeden warunek ? :
Kod: Zaznacz cały
if(MA sie przecięło od dołu && RSI przecięło od dołu ) otwórz BUY;
Solą życia jest kasa.
Kod: Zaznacz cały
extern int status=0;
if( MA przetnie)status=1;
if(status==1&&RSI przetnie ){openBUY;status=0;}
Solą życia jest kasa.
Wystarczy, że w warunku dasz przecięcie się wskaźników, a MA będzie z shiftem 10.
Dodano po 23 minutach:
Dodano po 23 minutach:
Kod: Zaznacz cały
extern int przesuniecie =10;
double MA1 = iMA(Symbol(),Period(),x,..,..,..,przesuniecie);
double MA2 = iMA(Symbol(),Period(),y,..,..,..,przesuniecie);
double MA1a = iMA(Symbol(),Period(),x,..,..,..,przesuniecie+1);
double MA2a = iMA(Symbol(),Period(),y,..,..,..,przesuniecie+1);
double RSI1 = iRSI(Symbol(),Period(),..,..,..,..,0);
double RSI2 = iRSI(Symbol(),Period(),..,..,..,..,1);
if(MA1>MA2 && MA1a<=MA2a &&RSI1>50&&RSI2<=50) ...otwórz buy;
Solą życia jest kasa.