EA oparte na Bears power

O jezykach programowania w platformach i nie tylko.
Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

EA oparte na Bears power

Nieprzeczytany post autor: Kris82 »

Witam serdecznie wszystkich forowiczów.
Jestem początkującym programistą w MQL4 więc jako żółtodziób borykam się z problemami. Jeżeli był by ktoś tak uprzejmy i napisał by mi jak mam rozwiązać problem z EA które otwierało by pozycje kupna z użyciem wskaźnika Bears Power gdy linia sygnału przekroczy poziom -0.020. oraz wyświetlającym się stanem konta w rogu wykresu z uwzględnieniem dziennej procentowej straty bądź zysku w ciągu dnia. Z pewnością taki przykład EA przyda się wielu forowiczą do nauki pisania automatów. Z góry dziękuje za wskazówki oraz pomoc.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

a co już masz?

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Nieprzeczytany post autor: JAREK67 »

Kris82 pisze:Witam serdecznie wszystkich forowiczów.
Jestem początkującym programistą w MQL4 więc jako żółtodziób borykam się z problemami. Jeżeli był by ktoś tak uprzejmy i napisał by mi jak mam rozwiązać problem z EA które otwierało by pozycje kupna z użyciem wskaźnika Bears Power gdy linia sygnału przekroczy poziom -0.020. oraz wyświetlającym się stanem konta w rogu wykresu z uwzględnieniem dziennej procentowej straty bądź zysku w ciągu dnia. Z pewnością taki przykład EA przyda się wielu forowiczą do nauki pisania automatów. Z góry dziękuje za wskazówki oraz pomoc.
Jak jesteś początkujący, to zacznij od tego. http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
Wyświetlania tym nie ogarniesz, ale głowną część koncepcji z pewnością zrealizujesz.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Kris82 pisze: Z pewnością taki przykład EA przyda się wielu forowiczą do nauki pisania automatów.
Niestety tak każdy "nowy" mówi, i tych przykładów jest już sporo, odpowiedz na pewno już jest na forum ale nikt na takie przykłady jak widać nie patrzy..

LowcaG pisze:a co już masz?
No właśnie co? Bo to podstawowe pytanie.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Nieprzeczytany post autor: JAREK67 »

Tig3r pisze:Niestety tak każdy "nowy" mówi, i tych przykładów jest już sporo, odpowiedz na pewno już jest na forum ale nikt na takie przykłady jak widać nie patrzy.
Święte słowa. Ale do tego potrzeba dużo pracy własnej. Sam zaczynałem od ZERA. W sumie parę lat mi zajęło, żeby jakoś się w mql4 poruszać (nie jestem informatykiem). Jednak warto było przejść tę drogę bez skrótów :wink:

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Nieprzeczytany post autor: Kris82 »

Raczej to nie gral, ale pracuje nad pewną koncepcją, powinienem umieścić kodzik który udało mi się wy maścić jutro rano jak tylko dorwę lapka żony.
Co do zasad systemu oparty jest na koncepcji:

- Trailingstop 10 pipsów zapobiegający nagłej zmianie kierunku trendu oraz osiągnięciu maksymalnych zysków w przypadku szybkiego poruszania się ceny w odpowiednim kierunku.
- Zmienność wielkości zawieranych tranzakcjji wraz z wielkością stanu konta.
- Jednocześnie jedna otwarta tranzakcja.
- Jedna para walutowa.

Zastanawiam się jeszcze nad bardzo ważną rzeczą jak SL, ale jeszcze nie obliczałem odpowiedniej wartości w przypadku tego EA.

Analiza oparta została na obserwacje wskaźników,miedzy innymi Bear Power na 12 lub jak dobrze pamiętam 16 godzinnym filmie z sesji,metoda ta jest o tyle dobra z względu na możliwość przewijania mało interesujących fragmętów, jak i dogłębniejszą analizę zachowania się wskaźników w interesujących nas momentach.

Forum już przeglądałem, ale niestety nie znalazłem tej właśnie informacji związanej z poziomami.
Nie chcę iść na łatwiznę, ale jak czegoś nie mogę ogarnąć lepiej zapytać kogoś bardziej zapoznanego z tematem.
Ostatnio zmieniony 12 lip 2012, 12:07 przez Kris82, łącznie zmieniany 1 raz.

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

Nieprzeczytany post autor: personov »

Według mnie kolejność powinna być taka.
Najpierw opracuj strategię do skutecznego otwierania transakcji. Zbadaj, czy wchodzą dostatecznie szybko, i ile jest fałszywych wejść.
DOPIERO później zastanawiaj się nad zarządzaniem pozycji, kiedy zamykać, jaki SL, TS itd.
Solą życia jest kasa.

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Nieprzeczytany post autor: Kris82 »

Całość wygląda mniej więcej tak, problem polega że na testerze nie zawiera transakcji, prawdopodobnie zle są zdefiniowane warunki zleceń.

Kod: Zaznacz cały

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.1;
extern int Slippage = 2;
extern bool UseStopLoss = False;
extern int StopLoss = 300;
extern bool UseTakeProfit = False;
extern int TakeProfit = 10;
extern bool UseTrailingStop = True;
extern int TrailingStop = 10;

int BarCount;
int Current;
bool TickCheck = False;

int init() 
{

   BarCount = Bars;

   if (EachTickMode) Current = 0; else Current = 1;

   return(0);
}

int deinit() {
   return(0);
}

int start() 
   {
  
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;



   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;



   double Var1 = iBearsPower("EURUSD", PERIOD_M30, 16, PRICE_CLOSE, Current + 0);

   double Buy1_1 = iBearsPower("EURUSD", PERIOD_M30, 16, PRICE_CLOSE, Current + 0);
   double Buy1_2 = 0.0025;

   double Sell1_1 = iBearsPower("EURUSD", PERIOD_M30, 16, PRICE_CLOSE, Current + 0);
   double Sell1_2 = -0.0025;


   bool IsTrade = False;

   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {


            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            
            if(UseTrailingStop && TrailingStop > 0) {                 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } 
         else 
         {
                     

                     if (False) Order = SIGNAL_CLOSESELL;        

            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            
            if(UseTrailingStop && TrailingStop > 0) {                 
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }

  

   if (Buy1_1 == Buy1_2) Order = SIGNAL_BUY;

   if (Sell1_1 == Sell1_2) Order = SIGNAL_SELL;

   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("Brak srodkow = ", AccountFreeMargin());
            return(0);
           if(AccountProfit()> 300)  Lots=0.2; if(AccountProfit()> 700)  Lots=0.2; if(AccountProfit()> 1000) Lots=0.3;
         }

         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
				Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
			} else {
				Print("Blad otwarcia pozycji : ", GetLastError());
			}
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
       
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("Brak srodkow = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
				Print("Zlecenie sprzedarzy : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
			} else {
				Print("blad zlecenia sprzedazy : ", GetLastError());
			}
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   if (!EachTickMode) BarCount = Bars;

   return(0);
}

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

Nieprzeczytany post autor: personov »

A na jakim TFie robisz backtest ?
Bo widzę, że EA pobiera dane z wskaźnika tylko z M30.
Solą życia jest kasa.

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Nieprzeczytany post autor: Kris82 »

W meta trade, to są moje początki i jak na razie używam tylko tego programu.
Ta strategia ma się opierać tylko na przedziale 30 ewentualnie myślę o przedziale godzinnym

Dodano po 3 minutach:

Już znam tą stronkę i z niej również korzystam, ale mimo wszystko dziękuję za wskazówki.
JAREK67 pisze:Jak jesteś początkujący, to zacznij od tego. http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
Wyświetlania tym nie ogarniesz, ale głowną część koncepcji z pewnością zrealizujesz.

ODPOWIEDZ