Potrzebna pomoc "EA na dwóch wskaźnikach"

O jezykach programowania w platformach i nie tylko.
Centuś
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 01 sie 2013, 19:58

Potrzebna pomoc "EA na dwóch wskaźnikach"

Nieprzeczytany post autor: Centuś »

Mam automat automat na RSI.Testuje go .Jest dobry bo zamyka przeciwstawne zlecenia.
Zawarte w nim Warunki do otwarcia pozycji są proste. Chciałbym dołączyć do niego Stochastic Oscylator a wprzyszłosci jeszcz cos.
Sygnały ze wskażnika można podzielic na sel- buy i jak sie nie myle przypisac zmiennej np
int Rsi_sygnal=1 dla sel, int Rsi_sygnałna=2 dla buy. Mój problem polega
na tyl że nie wiem jak zrobić aby po prezecięcu sie lini wskażnika zdeklarowana zmienna utzymywała wartość
do czasu az np z warunku sel przejdzie na buy. Nie jestem pewien czy to chodzi o przypisanie i globalą czy lokalną widoczność.
w załączniku zamiesciłem ea bez zmian a chciałbym dołączyć to

Kod: Zaznacz cały

int Stoch_sygnal ;
double kline[3], dline[3];
   for(int z = 0;z < 3;z++)
   {
      kline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_MAIN, z);
      dline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_SIGNAL, z); 
   }
   if ((kline[1] < dline[1]) && (kline[2] > dline[2])&& (kline[1] < 20.0) Stoch_sygnal=2 ; //precięcie sie lini na dole BUY
   if ((kline[1] > dline[1]) && (kline[2] < dline[2])&& (kline[1] > 80.0)) Stoch_sygnal=1  ;//precięcie sie lini na górze sel 
w rezultacie powstaje ea na dwóch wskażnikach ale nie działa. Pomóżcie

Kod: Zaznacz cały

//---- parametry wejściowe
extern double    Lots=0.1;
extern int       Slip=5;
extern double    TakeProfit=50;
extern double    StopLoss=50;
extern int       RSI_Okres=14;
extern int       CenaOdniesienia=4;
extern double    BuyPoint=30;
extern double    SellPoint=70;
extern bool      ZamknijPrzeciwstawne=true;
double kline[3], dline[3];
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
int Rsi_sygnal;
int Stoch_sygnal ;
int Slippage=Slip;
int MagicNumber1=20101,MagicNumber2=20102,i,ZamknijSel=0,ZamknijBuy=0;

double  TP=NormalizeDouble(TakeProfit,Digits);
double  SL=NormalizeDouble(StopLoss,Digits);

double slb=NormalizeDouble(Ask-SL*Point,Digits);
double tpb=NormalizeDouble(Ask+TP*Point,Digits);

double sls=NormalizeDouble(Bid+SL*Point,Digits);
double tps=NormalizeDouble(Bid-TP*Point,Digits);

//-------------------------------------------------------------------+
//Sprawdzanie cz jest otwarta pozycja 
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
  for(i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {
          if(OrderMagicNumber()==MagicNumber1) {int CzyOtwartaBUY=1;}
          if(OrderMagicNumber()==MagicNumber2) {int CzyOtwartaSEL=1;}

        }
     }
}
//-----------------------------------------------------------------
// Definiowanie Stoch
//-----------------------------------------------------------------

   for(int z = 0;z < 3;z++)
   {
      kline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_MAIN, z);
      dline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_SIGNAL, z); 
   }
  
//-----------------------------------------------------------------
// Definiowanie Rsi
//-----------------------------------------------------------------
 double RSInow=iRSI(NULL,0,RSI_Okres,CenaOdniesienia,0);
 double RSIlast=iRSI(NULL,0,RSI_Okres,CenaOdniesienia,1);
 double RSIprev=iRSI(NULL,0,RSI_Okres,CenaOdniesienia,2);
 //warunki dla stoch
 if ((kline[1] < dline[1]) && (kline[2] > dline[2])&& (kline[1] < 20.0)) Stoch_sygnal=2 ; //precięcie sie lini na dole BUY
 if ((kline[1] > dline[1]) && (kline[2] < dline[2])&& (kline[1] > 80.0)) Stoch_sygnal=1  ;//precięcie sie lini na górze sel
 //warunki dla rsi
 if((RSInow>BuyPoint)&&(RSIlast<BuyPoint)&&(RSIprev<BuyPoint))   Rsi_sygnal=2;  // RSI wrunek otwarcia BUY RSI
 if((RSInow<SellPoint)&&(RSIlast>SellPoint)&&(RSIprev>SellPoint)) Rsi_sygnal=1;  // RSI wrunek otwarcia SEL RSI
 
//-----------------------------------------------------------------------------------------------------
// Kryteria otwarcia
//-----------------------------------------------------------------------------------------------------

// Open buy
 if((Stoch_sygnal==2)&&(Rsi_sygnal==2)&&(CzyOtwartaBUY!=1)){  
 int OtwarteBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb,"Rsi buy",MagicNumber1,0,Blue);
 if(ZamknijPrzeciwstawne==true)ZamknijSel=1;
 }

// Open sell
 if((Stoch_sygnal==1)&&(Rsi_sygnal==1)&&(CzyOtwartaSEL!=1)){  
 int OtwarteSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps,"Rsi sell",MagicNumber2,0,Green);
 if(ZamknijPrzeciwstawne==true)ZamknijBuy=1;
 }
 
//-------------------------------------------------------------------------------------------------
// Kryteria zamknięcia
//-------------------------------------------------------------------------------------------------

if(ZamknijSel==1||ZamknijBuy==1||OtwarteBuy<1||OtwarteSel<1){// start

if(OrdersTotal()>0){
  for(i=1; i<=OrdersTotal(); i++){          
  
      if (OrderSelect(i-1,SELECT_BY_POS)==true){ 
        
          if(OrderMagicNumber()==MagicNumber1&&ZamknijBuy==1) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE); }
          if(OrderMagicNumber()==MagicNumber2&&ZamknijSel==1) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE); }  
        }
     }
}
}// stop
//-------------------------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+
RSI_automat.mq4
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: Potrzebna pomoc "EA na dwóch wskaźnikach"

Nieprzeczytany post autor: z6yszko »

Potrzebne zmienne zadeklaruj w sekcji globalnej np. zaraz po linii:

Kod: Zaznacz cały

double kline[3], dline[3];
int Rsi_sygnal=0, Stoch_sygnal=0;
...

Centuś
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 01 sie 2013, 19:58

Re: Potrzebna pomoc "EA na dwóch wskaźnikach"

Nieprzeczytany post autor: Centuś »

Wielkie dzięki. Zaczeło działać. Teraz mogę próbować dołączyć MACD i pozostałe . Tak ucze sie .

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: Potrzebna pomoc "EA na dwóch wskaźnikach"

Nieprzeczytany post autor: z6yszko »

Ja też ciągle się uczę :)

Awatar użytkownika
miki
Bywalec
Bywalec
Posty: 20
Rejestracja: 28 lis 2012, 18:54

Re: Potrzebna pomoc "EA na dwóch wskaźnikach"

Nieprzeczytany post autor: miki »

Witaj możesz udostępnić działający ,rsi +stoch bo ja na podstawie tych wskaźników otwieram ręcznie z dość dobrymi skutkami a programowanie to czarna magia .Pozdrawiam

alex311
Bywalec
Bywalec
Posty: 5
Rejestracja: 03 gru 2013, 21:14

Re: Potrzebna pomoc "EA na dwóch wskaźnikach"

Nieprzeczytany post autor: alex311 »

miki pisze:Witaj możesz udostępnić działający ,rsi +stoch bo ja na podstawie tych wskaźników otwieram ręcznie z dość dobrymi skutkami a programowanie to czarna magia .Pozdrawiam
Hej,
Chetnie napisze ea, ktore bedzie odzwierciedlalo twoje reczne granie na rsi i stoch.Jesli będzie wychodzilo skutecznie przy okazji sam na tym skorzystam. Opisz mi reguly w jaki sposob grasz (kiedy wychodzisz na rynek, kiedy wchodzisz, jak ustalasz stop lossy, take profity, czy podnosisz stop losy, take profity, kiedy, z jakich wskaznikow(parametry) korzystasz i jak, czy badasz tylko zakonczone swiece, na jakich grasz timeframach, parach, czy grasz tylko o okreslonych porach, w okreslone dni itp). Jeśli nie zastanawiales sie nad odpowiedziami na te pytania, prawdopodobnie lepiej jak je sobie zadasz bo twoj system bedzie bardziej powtarzalny. Prawdopodobnie bedziemy musieli to pozniej jeszcze jakos optymalizować.

Pozdrawiam,
Alek

ODPOWIEDZ