Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
bbq
Pasjonat
Pasjonat
Posty: 604
Rejestracja: 10 maja 2011, 17:12

Nieprzeczytany post autor: bbq »

stad pisze:Zrobiłem taki test, uruchomiłem 3 różne strategie w 3 oknach, w czwartym oknie powyższe ea i niestety nie działa.

Hmm co mogę napisać, u mnie działa dla z zleceń z ręki jak i wstawione do ea jako warunki dla TP i SL ale to mało ważne.
Co do tego kodu to ogólnie nie jest to najszczęśliwsze rozwiązanie (to miał być tylko przykład) , bo w przypadku utraty polaczenia z brokiem, rekwot etc.. zostajesz na lodzie. Tym bardziej jak to ma obsługiwać trzy ea. Jeśli potrzebujesz takiego rozwiązania to proponuje odezwać się na pw do Andrzeja Pierza lub personova – przynajmniej będziesz „spokojnie spal” :wink:

Awatar użytkownika
peter_r
Pasjonat
Pasjonat
Posty: 565
Rejestracja: 08 sty 2012, 11:09

Nieprzeczytany post autor: peter_r »

Mam pytanie odnośnie MT4 ..
jak analizować wejścia EA ? tj.:
da się jakoś szybko ustawić wykres na datę danego wejścia ? coś jak przeciągnięcie wejścia manualnego na wykres :/
jeżeli nie, to jakoś manualnie wklepać datę od-do której miałby wykres obejmować ?
pozdrawiam

gooral87
Stały bywalec
Stały bywalec
Posty: 28
Rejestracja: 07 paź 2010, 14:59

Nieprzeczytany post autor: gooral87 »

Witam,

jestem w powijakach programowania ale próbuje swoich pierwszych prostych EA.

Stanąłem przed niby banalnym problemem, który jednak sprawia mi trudności.

Chciałbym aby automat otwierał pozycje o wielkości kursu innej pary zaokrąglonej do dwóch miejsc po przecinku. czyli:

kurs EURUSD = 1,3120
chcę aby otworzył pozycję USDJPY o wielkości 1,31lota.

czy coś co stworzyłem ma sens ?
extern double askEURUSD = (MarketInfo("EURUSD", MODE_ASK);
extern double lotyUSDJPY = NormalizeDouble(askEURUSD,2);

Póki co dostałem takie błędy.


'MarketInfo' - comma or semicolon expected
'NormalizeDouble' - initialization expected
'askEURUSD' - expression on global scope not allowed
'askEURUSD' - variable not defined

będę wdzięczny za uwagi

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

raz przed Market Info niepotrzebny jest (

dwa przypisanie wartości dokonuje się lokalnie nie globalnie

pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
bud fox
Gaduła
Gaduła
Posty: 168
Rejestracja: 01 lip 2011, 19:24

Nieprzeczytany post autor: bud fox »

CoVal pisze: dokladnie tak jak piszesz:

Magic Number, to dowolna liczba calkowita ustawiana w czasie otwierania pozycji i pozwalajaca nam pozniej na identyfikacje pojedynczego zlecenia, grupy zlecen (np. wygenerowanych przez jedno EA - jak podpowiada Personov) albo np. wszystkich pozycji otwieranych automatycznie - robisz potem z nia to co chcesz.
Pojedyncze zlecenia mozna tez identyfikowac po numerze zlecenia, jest to naljepszy, jednak nie zawsze wygodny sposob.
Ostatnia z mozliwosci jest identyfikacja przez komentarz....
Z tych wszystkich mozliwosci polecam wlasnie Magic ... :)
CoVal nie wiem czy dobrze rozumiem. Czy numer magic jest jeden dla danego robota, czy zmienia się w każdej jego transakcji?

Dodano po 4 minutach:

Panowie mam pytanie trochę z innej beczki.

Kieruje je do osób które korzystają z EA. Jakiej infrastruktury sprzętowej używacie do robotów, komputerów klasy PC serwerów? Używacie dodatkowo UPS'ów?

Obawiam się trochę o wydajnośc, stabilność pracy i pobór prądu, w końcu komputer będzie włączony przez 24 godziny, pięć dni w tygodniu :)

Pozdrawiam!
Życzę wszystkim wolności i sukcesów!

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

gooral87 pisze: Chciałbym aby automat otwierał pozycje o wielkości kursu innej pary zaokrąglonej do dwóch miejsc po przecinku. czyli:
kurs EURUSD = 1,3120
chcę aby otworzył pozycję USDJPY o wielkości 1,31lota.

czy coś co stworzyłem ma sens ?
extern double askEURUSD = (MarketInfo("EURUSD", MODE_ASK);
extern double lotyUSDJPY = NormalizeDouble(askEURUSD,2);
Póki co dostałem takie błędy.

'MarketInfo' - comma or semicolon expected
'NormalizeDouble' - initialization expected
'askEURUSD' - expression on global scope not allowed
'askEURUSD' - variable not defined

będę wdzięczny za uwagi
Problemy z tym co tu stworzyles sa nastepujace:
1. extern - uzywa sie tylko do inicjacji pewnych zmiennych w chwili uruchamiania danej strategii czy wskaznika. Robimy to na poczatku, przed wywolaniem jakiejkolwiek funkcji. Mozemy tej zmiennej nadac jakas wartosc, ale bezposrednio, np.

Kod: Zaznacz cały

extern int  x = 3;
niestety, nie mozemy w tym miejscu przypisac zmiennej x wyniku jakiejs operacji, czy wyniku funkcji. Dlatego

Kod: Zaznacz cały

extern int x=MarketInfo(Symbol(), MODE_ASK);
czy tez nawet:

Kod: Zaznacz cały

extern double  start = 3*Ask;
sa niepoprawne.

deklaracja funkcji extern sluzy ulatwieniu komunikacji pomiedzy uzytkownikiem a skryptem - te zmienne mozemy sobie w pozniejszym czasie zmienic w chwili uruchamiania funkcji, podczas gdy zmienne deklarowane bez extern nie mozna zmieniac recznie po skompilowaniu kodu.

jako extern nie mozna tez inicjalizowac zadnej tablicy.

Trudno powiedziec co wlasciwie ma robic twoj kod, bo ... podales tylko 2 linijki.... a kompilator wyrzucil ci do nich 4 bledy....

bardzo istotne jest, zeby na poczatku swojej przygody z MQL-em zrozumiec podstawowa strukture EA czy tez wskaznika.... reszta to juz twoja wyobraznia ograniczona mozliwosciami tego jezyka.

Tak wiec, kazde EA sklada sie z kilku czesci:

czesci globalnej, w ktorej deklarujemy sobie rozne zmienne ktore beda widziane i beda mogly byc zmieniane z poziomu kazdej funkcji.
w tej czesci deklarujemy tez zmienne typu extern.

funkcja init() - jest funkcja wywolywana zaraz po uruchomieniu ALE TYLKO JEDEN RAZ.

funkcja deinit() - jest wykonywana na koniec dzialania naszego programu. TEZ TYLKO JEDEN RAZ.

i najwazniejsza czesc kodu - funkcja start().
ta funkcja jest wywolywana ZA KAZDYM RAZEM, KIEDY PRZYCHODZI NOWY TICK.
Wg mnie to troche mylaca nazwa - lepiej wygladalaby nazwa main() - tak jak jest w niektorych innych jezykach programowania...
A tak wyszlo jak w windows, gdzie aby otworzyc glowne menu trzeba nacisnac przycisk Start. Nawet wtedy, kiedy chcemy zakonczyc prace....
No ale jest jak jest.... nie zmienimy tego... Tak wiec trzeba zapamietac, ze funkcja start() wykonuje sie nie tylko w czasie startu, ale za kazdym kiedy przychodzi nowy tick... :)

W tej czesci globalnej (poza ww. funkcjami i funkcjami ktore sobie sami stworzymy) nie mozna niestety nic obliczac - w sumie to tylko mozemy tam sobie zadeklarowac rozne zmienne i co najwyzej nadac im wartosci poczatkowe.

W funkcjach takich jak init(), start() czy dowolnych innych ktore sobie sami stworzymy, tez mozemy deklarowac rozne zmienne ale UWAGA: beda one widziane tylko w ramach tej wlasnie funkcji, a w innych funkcjach juz nie.

i tak np.:
w nast. kodzie:

Kod: Zaznacz cały

extern int okres = 13;              // zmienna ktora bedziemy mogli ustawic w czasie uruchomiania EA - jej wartosc bedzie widoczna w calym kodzie
 
double mnoznikCeny = 0.7;           // zmienna ktora tez bedzie widoczna w kazdej funkcji tego kodu, ale w czasie uruchomiania nie bedziemy jej mogli zmienic

int init() 
     {
       // tu rozne rzeczy ktore chcemy zeby sie wykonaly tylko raz na poczatku dzialania naszego EA
       // mozemy tu wrzucic np. wstepne przetworzenie wartosci zmiennych,  czy  wprowadzenie wartosci tablic, 
       //  init() robi sie tylko raz - bo po co maja sie te tablice inicjalizowac przy kazdym ticku.
     }
int deinit() 
      {
       // tu mozna wrzucic to wszystko, co chcemy aby sie wykonalo jak juz nasze EA skonczy prace.... 
       // np. mozna usunac wszystkie obiekty jakie nasze EA wyrysowalo na ekranie....
     }

int start()
     {
       string komunikat = " Hallo I am Jan B.";   // zmienna typu string zostala zadeklarowana w funkcji glownej start() i jest widziana TYLKO wewnatrz tej funkcji
      // poniewaz start() jest wywolywana z kazdym tick-iem to ta zmienna bedzie od nowa deklarowana za kazdym razem i zostanie jej przypisana wartosc okreslona w " ".
     Comment(komunikat);        // ta funkcja wyswietli nam ten bardzo interesujacy komunikat na ekranie...
     // i nawet jesli teraz zmienimy wartosc naszej zmiennej na:
    komunikat="dwumlask";
     // to po kolejnym ticku zmienna ta zostanie ponownie zadeklarowana i przypisana jej zostanie wartosc:  " Hallo I am Jan B."
     }
Pytanie dla mlodszych adeptow sztuki programowania: kim byl Jan B. ? i co to jest dwumlask ? :)

gooral87
Stały bywalec
Stały bywalec
Posty: 28
Rejestracja: 07 paź 2010, 14:59

Nieprzeczytany post autor: gooral87 »

dzięki CoVal, przerzuciłem ten fragment do funkcji start().

A dwumlask to double-click myszą jeśli dobrze kojarzę.

Awatar użytkownika
Ciekawy
Pasjonat
Pasjonat
Posty: 384
Rejestracja: 20 lis 2009, 23:07

Nieprzeczytany post autor: Ciekawy »

Mam taką zagwostkę - chciałbym wyrysowywać linię dla każdego miesiąca ale nie mam pojęcia jak to w PROSTY sposób zrobić skoro niektóre miesiące mają inną długość nie mówiąc już o tym, że luty w każdym roku ma inną długość... brakuje mi polecenia w stylu TimeDayOfWeek. Nie wiedzieć czemu nie ma TimeDayOfMonth... Jest co prawda TimeDayOfYear ale on liczy po kolei dni a nie miesiące... tu pojawia się problem jak to zrobić?

z góry dzięki za odpowiedzi ;)

Pozdrawiam ;)

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

hmmm a nie wystarczy Ci

Kod: Zaznacz cały

Timeday
??

wkoncu 1 to pierwszy dzien miesiaca

pozdrawiam
Andrzej Pierz

Dodano po 3 minutach:

ewentualnie skorzystaj z

Kod: Zaznacz cały

iTime
dla PERIOD_MN

a pozniej z

Kod: Zaznacz cały

iBarsShift
dla w/w czasu
z poważaniem
Andrzej Pierz
FOREX-SERVICE

gooral87
Stały bywalec
Stały bywalec
Posty: 28
Rejestracja: 07 paź 2010, 14:59

Nieprzeczytany post autor: gooral87 »

mam hydro-zagadkę

dlaczego wyniki wskaźnika są inne w realu i w testerze dla identycznego okresu w przeszłości ?
u góry tester, na dole real:
http://ifotos.pl/zobacz/testerJPG_rxxrxhh.JPG/

nurtuje mnie to ponieważ w takim wypadku tester nie symuluje zleceń.
parametry wskaźnika się niezmienione, skala na wykresie również

Będę wdzięczny za oświecenie.

ODPOWIEDZ