Wszystkie pytania dozwolone początkujących programistów

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: geminiraf »

Witam
poniekąd zaczynam przygodę z programowaniem.
W ramach nauki i testów wskaźników zacząłem pisać prosty programik - EA.
I nie mogę go kompilować - jedno ostrzeżenie i jeden błąd.
Obrazek

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                   1 kierunek.mq4 |
//|                                                        geminiraf |
//+------------------------------------------------------------------+
#property copyright "geminiraf"

extern int MagicNumber = 77777;

double Lots = 0.1;        //loty
double ST = 500;          //stoploss
double TP = 500;          //takeprofit

int zlecenie;

 if(iRSI(NULL, 0, 10, PRICE_CLOSE, 0) > 51)  
{
zlecenie = OrderSend(symbol(),OP_BUY,Lots,Ask,3,ST,TP,"KUPNO",MagicNumber,0,Green);
}
o co chodzi?
proszę o łopatologiczne wytłumaczenie - nie jestem programistą .

WojtexWay
Gaduła
Gaduła
Posty: 145
Rejestracja: 18 wrz 2012, 19:22

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: WojtexWay »

Przecież w informacji o błędzie masz jasno napisane o co chodzi - brak zdefiniowanej funkcji.
Jeśli to jest cały kod, który "stworzyłeś" to pytanie jest, gdzie podziała się funkcja start, która jest funkcją główną?
Druga sprawa wywoływanie funkcji (w tym wypadku iRSI i Ordersend) oraz tworzenie warunków (if) powinno odbywać się wewnątrz funkcji (np. wspomnianej już start()) a nie globalnie jak to uczyniłeś...

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: geminiraf »

WojtexWay pisze:Przecież w informacji o błędzie masz jasno napisane o co chodzi - brak zdefiniowanej funkcji.
Jeśli to jest cały kod, który "stworzyłeś" to pytanie jest, gdzie podziała się funkcja start, która jest funkcją główną?
Druga sprawa wywoływanie funkcji (w tym wypadku iRSI i Ordersend) oraz tworzenie warunków (if) powinno odbywać się wewnątrz funkcji (np. wspomnianej już start()) a nie globalnie jak to uczyniłeś...
dobrze dobrze
przecież pisze, ze nie znam się na programowaniu.
pozaglądam tu i ówdzie i postaram się coś sklecić.

byłbym bardzo wdzięczny, jeżeli ktoś by to doprowadził do końca, tak żeby działało.
Nie bardzo można znaleźć takich prostych przykładów, żeby można było zacząć logicznie to składać. Taki schemat , szkic podstaw - już zbudowany. A tak się najlepiej uczy podstaw.
Mam pościąganych materiałów do mql4 - ale sporo tego i prawie nic w życiu nie programowałem wiec zadaje takie "głupie pytania"

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: bfx »

geminiraf pisze: Nie bardzo można znaleźć takich prostych przykładów, żeby można było zacząć logicznie to składać.
Tutaj masz dośc prosto opisane wszystko.
http://bossa.pl/index.jsp?layout=2&page ... at_id=1081
Jeśli to czegoś nie wiesz to pytaj. Początki są na prawdę trudne jak się nic nie wie..

Kod poprawiłem tak żeby nie było błędów. Nie wiem czy to coś będzie działało bo sam się dopiero uczę. Błędy miałeś 2:
-Symbol() miałeś z małej litery
-nie było głównej funkcji start()

Kod: Zaznacz cały

    //+------------------------------------------------------------------+
    //|                                                   1 kierunek.mq4 |
    //|                                                        geminiraf |
    //+------------------------------------------------------------------+
    #property copyright "geminiraf"

    extern int MagicNumber = 77777;


int start()
{

    double Lots = 0.1;        //loty
    double ST = 500;          //stoploss
    double TP = 500;          //takeprofit

    int zlecenie;

     if(iRSI(NULL, 0, 10, PRICE_CLOSE, 0) > 51) 
    {
    zlecenie = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,ST,TP,"KUPNO",MagicNumber,0,Green);
    }

}
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: geminiraf »

tak - wstawiłem start, ale przeoczyłem tą małą literę
Teraz działa - dzieki wam.
wieczorem będę testował :)

Ps - mam to z bossy całe ściągnięte i wydrukowane. Koło 140 stron małą czcionką :)
Bardzo pomocne. No ale wiadomo, ze się tego naraz nie zapamięta wszystkiego.
SA tam fajne przykłady - ale ja miałem na myśli przykłady takich prostych całych programików jak się staram zrobić.
Bo często sam opis i przykład funkcji nie wyjaśnia co, gdzie, w jakiej kolejności, co do tego jeszcze, itp...
jak już chodzi o całość -

Navvy
Uczestnik
Uczestnik
Posty: 1
Rejestracja: 03 paź 2012, 15:30

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Navvy »

Witam. Nie mam pomysłu na zrealizowanie odstępu pomiędzy kolejnymi transakcjami. Chodzi o to, żeby strategia zamykając pozycje (niezależnie czy to na plusie czy na minusie) odczekała przed otwarciem nowej pozycji do czasu przejścia do nowej świecy pomimo tego, że warunki otwierające są spełnione. Zamykanie transakcji odbywa się przez TP/SL. Byłbym wdzięczny za pomoc ;)

luktom.biz
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 05 sty 2012, 14:38

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: luktom.biz »

Tutaj jest opisane jak można zbadać czy mamy do czynienia z nową świecą.
http://pl.luktom.biz/Page/358/wykonywan ... u-swieczki

barts
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 05 sty 2011, 13:32

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: barts »

chcialbym aby na jednej swiecy moglo otworzyc sie tylko jedno zlecenie, szukalem w wyszukiwarce roznych rozwiazan a nic nie znalazlem a moje dotychczasowe na dole, w backtestach nie dziala, bylbym wdzieczny gdyby ktos powiedzial dlaczego. W backtestach najczesciej otwiera mi jednak wiecej niz jedno zlecenie na swiecy.

Kod: Zaznacz cały

int pozwolenie()
{
  if(TotalOrdersCount()>0){
  int i=OrdersTotal();
 OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if(OrderOpenTime()<iTime(NULL, PERIOD_M15, 0))
     return(1);
     else
     return(0);
 }  
  if(TotalOrdersCount()==0) return(1);
}

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: geminiraf »

witam
udało mi się w końcu stworzyć pierwszy działający EA - w sensie nie ma błędów przy kompilacji i da się go testować :)
Działa na zasadzie RSI - jezeli RSI > 51 kup
Jednakże mam klejmy "laicki" kłopocie.
Bez SL i TP otwiera się jedno zlecenie i Idze aż do końca (pomijam na tym etapie brak zabezpieczń przed małą ilością kasy)
A z nimi zlecenia działają.Tylko jak osiągnie TP to przy RSI > 51 otwiera się następne zlecenia i ciągnie az do SL.
jak osiągnie SL a warunek RSI jest spełniony to otwiera się następujące zlecenie i znów ciągnie do SL i tak może być ich parę
Chciałbym, aby zlecenie kończyło się jak zostanie spełniony warunek RSI < 50.
Próbowałem z OrderClose - ale cos mi nie wyszło.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                   1 kierunek.mq4 |
//|                                                        geminiraf |
//+------------------------------------------------------------------+
#property copyright "geminiraf"

extern int MagicNumberBUY = 77777;

double Lots = 0.1;        //loty
//int ST = 1000;             //stoploss
//int TP = 1000;            //takeprofit   Ask-ST*Point,Ask+TP*Point


int start()
{
double irs1 = iRSI(NULL, 0, 10, PRICE_OPEN, 0);

 if (irs1 > 51)
 {
 if(OrdersTotal()==0)         
  {
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,"KUPNO",MagicNumberBUY,0,Green);
   if (irs1 < 50)
   {
   OrderClose(MagicNumberBUY,Lots,Ask,3,Yellow); 
   }
  }
 }
}

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: bfx »

barts pisze:chcialbym aby na jednej swiecy moglo otworzyc sie tylko jedno zlecenie, szukalem w wyszukiwarce roznych rozwiazan a nic nie znalazlem a moje dotychczasowe na dole, w backtestach nie dziala, bylbym wdzieczny gdyby ktos powiedzial dlaczego. W backtestach najczesciej otwiera mi jednak wiecej niz jedno zlecenie na swiecy.
Odpowiedz masz post wyżej twojego. :lol:

geminiraf na pewno masz błąd taki:
Ta linijka:
if (irs1 < 50)
w twoim kodzie jest wykonywana tylko wtedy gdy: if (irs1 > 51) :lol:
Po za tym jak zamykasz zlecenie Buy to po cenie Bid. Jeśli nie ustawiasz SL i TP to musisz chyba wpisac 0. Za dużo klamerek, jeśli po instrukcji if ma by wykonana tylko jedna linijka nie musisz ich używac. Może tak będzie działało:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                   1 kierunek.mq4 |
//|                                                        geminiraf |
//+------------------------------------------------------------------+
#property copyright "geminiraf"

extern int MagicNumberBUY = 77777;

double Lots = 0.1;        //loty
//int ST = 1000;             //stoploss
//int TP = 1000;            //takeprofit   Ask-ST*Point,Ask+TP*Point

int start()
{
double irs1 = iRSI(NULL, 0, 10, PRICE_OPEN, 0);
int zlecenie;

if (irs1 > 51 && OrdersTotal()==0)
 zlecenie = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"KUPNO",MagicNumberBUY,0,Green);
if (irs1 < 50) 
 OrderClose(zlecenie,Lots,Bid,3,Yellow);

}
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

ODPOWIEDZ