Wyznaczanie wierzchołka z wykresu RSI

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
FaRa0n
Stały bywalec
Stały bywalec
Posty: 27
Rejestracja: 26 cze 2010, 16:03

Wyznaczanie wierzchołka z wykresu RSI

Nieprzeczytany post autor: FaRa0n »

Witam,

od dłuższego czasu próbuje znaleźć sposób, aby sygnałem dla mojego EA było m.in. wystąpienia wierzchołka na wykresie RSI, tzn lokalnego ekstremum.
Sposób, którego obecnie używam, niestety nie zawsze się sprawdza, tzn pomimo że wierzchołek zostaje narysowany na wykresie RSI, to warunek nie zawsze zostaje spełniony.
Póki co próbuję to określić poprzez sprawdzenie czy na wykresie został narysowany trójkąt, czyli czy wartość sprzed 3 i 1 okresu mają mniejszą wartość od tej z drugiego okresu( środek trójkąta).

Kluczowa część kodu tego warunku:

double Sell1_1 = iRSI(NULL, PERIOD_M5, 3, PRICE_CLOSE, Current + 3);
double Sell1_2 = iRSI(NULL, PERIOD_M5, 3, PRICE_CLOSE, Current + 2);
double Sell1_3 = iRSI(NULL, PERIOD_M5, 3, PRICE_CLOSE, Current + 1);

if (Sell1_1 < Sell1_2 && Sell1_2 > Sell1_3) Order = SIGNAL_SELL;

Nie wspomnę, że wadą tego rozwiązania jest to, że zbadanie jego następuje z jedno-okresowym opóźnieniem :/

Jeżeli ktoś zna lepszy sposób niż ten poniżej, to bardzo proszę go o pomoc.
Ostatnio zmieniony 27 cze 2010, 22:27 przez FaRa0n, łącznie zmieniany 1 raz.

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Spróbuj tak Jarku :wink:

Kod: Zaznacz cały

double Sell1_3=iRSI(NULL,PERIOD_M5,3,0,3);
double Sell1_2=iRSI(NULL,PERIOD_M5,3,0,2);
double Sell1_1=iRSI(NULL,PERIOD_M5,3,0,1);
if (
Sell1_1 < Sell1_2 &&
Sell1_2 > Sell1_3
)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid,0,Bid + 30*Point,Bid-500*Point,"Faraon",728446,0,Red);
}

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

Takich wieszcholkow bedziesz mial bardzo duzo.
Mozna by uzyc sredniej od RSI.
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

Awatar użytkownika
FaRa0n
Stały bywalec
Stały bywalec
Posty: 27
Rejestracja: 26 cze 2010, 16:03

Nieprzeczytany post autor: FaRa0n »

Dzięki za odpowiedzi.
borysewicz: trafnie zauważyłeś ze warunek, który wkleiłem zawiera błąd, ale wkradl sie tylko dlatego ze nie przekleiłem go z mojego EA, a napisałem ręcznie. Oryginalnie mam go w postaci na jaką poprawiłeś, tak więc problem jest nadal aktualny.

gieroj: Ten warunek to nie jest trzon całej mojej strategii :D Warunek który tu wkleiłem miał tylko jak najprościej zobrazować problem skutecznego rozpoznawania wierzchołka na wykresie RSI, z którym to nie mogę sobie poradzić. Zdaję sobie sprawę że w czystej postaci warunek ten generowałby masę sygnałów i to nawet przy uwzględnieniu poziomów np 30 i 70.

Jeżeli macie jakąś inną koncepcję, to bardzo proszę o podpowiedź.

p.s
poprawiłem warunek w moim pierwszym poście, żeby nie zamydlał oczu. Thx borysewicz :)

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Sprawdziłem u mnie działa dobrze.
W parametry RSI wpisałeś, że ma sprawdzać tylko na PERIOD_M5 czy po tescie sprawdzasz na tym samym TF?

Kod: Zaznacz cały

  double Sell1_3; 
double Sell1_2; 
double Sell1_1; 

bool isAvailableOrder()// 
{
   if (OrdersTotal() < 1)
   {
      return(true);
   }
   return(false);
}


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 Sell1_3=iRSI(NULL,PERIOD_M5,3,0,3); 
 Sell1_2=iRSI(NULL,PERIOD_M5,3,0,2); 
 Sell1_1=iRSI(NULL,PERIOD_M5,3,0,1); 
   if (isAvailableOrder())
   {
//----
if ( 
Sell1_1 > Sell1_2 && 
Sell1_2 < Sell1_3
) 
{ 
OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Ask - 30*Point,Ask+6*Point,"Faraon",728446,0,Green);
}

if ( 
Sell1_1 < Sell1_2 && 
Sell1_2 > Sell1_3
) 
{ 
OrderSend(Symbol(),OP_SELL,0.1,Bid,0,Bid + 30*Point,Bid-500*Point,"Faraon",728446,0,Red); 
}
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

ODPOWIEDZ