Prosty EA

O jezykach programowania w platformach i nie tylko.
geminiraf
Bywalec
Bywalec
Posty: 8
Rejestracja: 23 lis 2012, 21:31

Prosty EA

Nieprzeczytany post autor: geminiraf »

Witam
proszę o pomoc w stworzeniu najprostszego automatycznego EA.

Jestem początkującym graczem (~6miesiecy) i programistą. (Scilab na studiach to niewiele - laik ze mnie)
Chciałbym co nieco nauczyć się programowania w MQL4 oraz dokonywać testów na parach walutowych na różnych czasach.
Badać różne wskaźniki ipt. Już się naczytałem trochę i wracam do najlepszej metody uczenia sie - praktycznej.
Ale, że z czasem różnie bywa i kręcenie się samemu w kółko denerwuje wiec proszę o pomoc.

Chciałbym najprostszy automat z możliwych - działający na jednym wskaźniku np RSI. Bez st, tp i tym podobnych.
żeby tylko loty były uwzględnione.

Założenia:
1) Gdy RSI większy od 51- kupuj, gdy mniejszy od 50 zatrzymaj operacje kupna.
2) Gdy RSI mniejszy od 49 sprzedawaj, gdy większy od 50 zatrzymaj operacje sprzedaży.
3) loty - możliwość zmiany - może być w kodzie źródłowym

Program z generatora http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ nie zadziałał wiec zacząłem go przerabiać na żywca.
Naraźie doszedłem do tego:

//+------------------------------------------------------------------+
//| zobaczymy.mq4 |
//| geminiraf |
//+------------------------------------------------------------------+
//NULL - aktualny symbol z wykresu - np EURUSD
#property copyright "geminiraf"

extern int MagicNumber = 77;
extern double Lots = 0,1; //rozeznac sie co dalej z tym

double srodek = 50; //linia srodkowa

double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, 0);
double kup = 51; //kupuj

if (Buy1_1 > kup) Order = SIGNAL_BUY;
if (Buy1_1 < srodek) Order = SIGNAL_CLOSEBUY;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_OPEN, 0);
double sprzedaj = 49; //sprzedaj

if (Sell1_1 < sprzedaj) Order = SIGNAL_SELL;
if (Sell1_1 > srodek) Order = SIGNAL_CLOSESELL;


Wiem, ze mam spore braki, ale najlepiej i najszybciej jest uczyć się na przykładach.
Potem się będę starał sam rozbudować programik o działanie w parze dwóch wskaźników.
Albo znów będę prosił o pomoc :)
z góry dziękuje.

Awatar użytkownika
Japco
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 24 lip 2010, 20:42

Re: Prosty EA

Nieprzeczytany post autor: Japco »

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                       EA RSI.mq4 |
//|                                      Copyright © 2013, geminiraf |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, geminiraf"

//+------------------------------------------------------------------+
//|                  ***** Opcje automatu *****                      |
//+------------------------------------------------------------------+
extern double Lots = 0.1;
extern int SL=100;
extern int TP=200;

//+------------------------------------------------------------------+
//|                ***** Deklaracja zmiennych *****                  |
//+------------------------------------------------------------------+

int Kupno, Sprzedaz; //ilość otwartych pozycji krótkich i długich
double RSI1, RSI2; // wartość wskaźnika RSI dla świeczki 1 i 2

//+------------------------------------------------------------------+
//|                      ***** Funkcje *****                         |
//+------------------------------------------------------------------+

// Sprawdzenie ile jest otwartych pozycji

int OtwartePozycje()
 {
 Kupno=0; Sprzedaz=0;
 for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
  if(OrderSymbol()==Symbol())
  {
  if (OrderType()==OP_BUY) Kupno++;
  if (OrderType()==OP_SELL) Sprzedaz++;
  }
  }
 return(Kupno+Sprzedaz);
 }

//+------------------------------------------------------------------+
//|                      ***** Program *****                         |
//+------------------------------------------------------------------+
int start()
  {
  RSI1=iRSI(NULL,0,14,PRICE_CLOSE,1);
  RSI2=iRSI(NULL,0,14,PRICE_CLOSE,2);
  
// Zamykanie pozycji
if (OtwartePozycje()>0)
{
 for(int a = OrdersTotal() - 1; a >= 0; a--)
 {
 OrderSelect(a,SELECT_BY_POS);
 if(OrderSymbol()==Symbol())
  {
  if (OrderType()==OP_BUY && RSI1<50 && RSI2>=50) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Red);
  if (OrderType()==OP_SELL && RSI1>50 && RSI2<=50) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
  } 
 }
}
// Otwieranie pozycji  
if (OtwartePozycje()==0 && RSI1>50 && RSI2<=50) OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-(SL*Point),Ask+(TP*Point),"EA RSI",8,0,Green); // Kupuj
if (OtwartePozycje()==0 && RSI1<50 && RSI2>=50) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL*Point),Bid-(TP*Point),"EA RSI",8,0,Blue); // Sprzedaj
  
return(0);
}
Cały działający EA. Napisałem od nowa po swojemu bo to co miałeś to jeden wielki śmietnik. Tylko nie graj tym na realnym rachunku bo nie odpowiadam za wynik ;) Żaden EA z jednego wskaźnika nie będzie zarabiał. Swoją drogą pozycje buy otwiera się według RSI gdy linia przetnie poziom 50 a nie 51 :p Kiedyś w swoich EA dla RSI dawałem polecenia zamykania pozycji długich gdy linia przetnie od góry poziom 70 a krótkich gdy przetnie od dołu 30 ale tego tu nie pisałem ale łatwo to dodać. Pozdrawiam i życzę owocnej nauki :)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"Szaleństwem jest robić wciąż to samo i oczekiwać rożnych rezultatów".

Albert Einstein

geminiraf
Bywalec
Bywalec
Posty: 8
Rejestracja: 23 lis 2012, 21:31

Re: Prosty EA

Nieprzeczytany post autor: geminiraf »

hej
Tak to był śmietnik - od razu churrrrrrrra - to nie może byc takie trudne. I sie przeliczyłem.

dzięki za programik - muszę to przegryź.
Nie wiem ile mi to zajmie.

Będę testował i zobaczę co i jak ma się. Oczywiście, ze nie będę tym grał - to tylko jeden ze schodków do mojej koncepcji. Mam nadzieję, ze nie okaże się na końcu niewypałem. :)
A co do programiku to mamy jeszcze możliwości zmian progów tego wskaźnika. Dodanie innych i zabawa od nowa.
Musze jeszcze jakiś tester dobry wyczaić na necie.
pozdro

Awatar użytkownika
Japco
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 24 lip 2010, 20:42

Re: Prosty EA

Nieprzeczytany post autor: Japco »

Aha ten automat ustawia SL i TP i otwiera longa gdy rsi przebija od dołu poziom 50 a otwiera shorta jak przebija 50 od góry. Przed otwarciem longa zamyka shorta i na odwrót. Jak chcesz wyłączyć SL i TP to w opcjach automatu ustawiasz te parametry na 0. Proponował bym od przeczytania tego kursu programowania w mql4 najpierw. Możliwości rozwoju automatu jest nieskończenie wiele. Można dodawać inne wskaźniki, dodawać systemy przesuwania SL itp. itd. Po wielu próbach i testach przekonasz się, że większość tych kombinacji wskaźników nie zarabia i wywalisz je wszystkie z wykresu i zaczniesz grać na czystym wykresie. Ja już etap wskaźników mam za sobą. Nadal pisze automaty ale tylko wspomagające manualny trading.
"Szaleństwem jest robić wciąż to samo i oczekiwać rożnych rezultatów".

Albert Einstein

chmod

Re: Prosty EA

Nieprzeczytany post autor: chmod »

Wniosek jest dalej idący, taka strategia nie zapewni zysków ani wykonywana manualnie ani przez program. Zadziała jedynie w okresach mocno trendujących, lepiej iść w dywergencje na RSI, lub szybkie zmiany pędu RSI - wtedy strategia ma jakiś sens.

Awatar użytkownika
Japco
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 24 lip 2010, 20:42

Re: Prosty EA

Nieprzeczytany post autor: Japco »

Moim zdaniem żadna strategia oparta o wskaźniki nie ma sensu. Już trochę napisałem ea i przetestowałem różnych kombinacji wskaźników. Niektóre będą zarabiały w krótkim okresie czasu na trendach ale w długim czasie np. kilku lat 99% z nich będzie na minus. Ja bym swoich pieniędzy nie zaryzykował grając automatem.
"Szaleństwem jest robić wciąż to samo i oczekiwać rożnych rezultatów".

Albert Einstein

kosmit010387
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 19 sie 2007, 22:13

Re: Prosty EA

Nieprzeczytany post autor: kosmit010387 »

witam
a ja mam pytanie które z tych wartyości w kodzie trzeba zmienić aby robot otwierał 2 lub 3 tranzakcje na raz a nie że otwiera następną po zamknieciu pierwszej

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Re: Prosty EA

Nieprzeczytany post autor: mike_05 »

Stosowanie poziomu 50 dla RSI ma sens, ale nie dla okresu 14.
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

ODPOWIEDZ