Pare rzeczy

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
marmon
Gaduła
Gaduła
Posty: 124
Rejestracja: 27 cze 2009, 18:39

Pare rzeczy

Nieprzeczytany post autor: marmon »

Witam, chcę potestować strategie ale pomyślałem że lepiej mi to wyjdzie jak się nauczę pisać EA i samo się potestuje.

Programowałem w C i C++ tak więc wiem mniej więcej o co w tym chodzi.

Tutaj http://www.metatrader.info/node/34 jest trochę mało informacji i sporo pustych artykułów (a może to moja przeglądarka? )

Interesują mnie takie rzeczy jak:
-Wykorzystanie wartości wskaźnika ATR na wykresie daily (jak się odwołać do wartości).
-Świeczki 4h (jak się do nich odwołać)
-czy obiekt klasy świeczka ma pole czy świeczka jest UP czy DOWN (to akurat jest proste do sprawdzenia ale po co jeśli takie pole by było)
-Składanie zleceń, usuwanie zleceń, zmiana poziomu SL
Żeby warunki nie były sprawdzane co 1sek tylko przy następnej świeczce

Gdzie szukać tych podstaw? czyli jeszcze raz
-świeczki jak się do nich dostać
-składanie zleceń
-wykorzystanie wartości wskaźnika
Dzięki za wszelką pomoc :)

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

jesli chodzi o wskazniki to icustom masz do pobierania ich wartosci

do swieczek sie bardzo latwo odwolac np iClose("EURUSD",240,1) - para, jaki tf w minutach, ktora swieczka, tworzaca ma index 0

tu masz kurs
http://www.forex.nawigator.biz/dyskusje ... php?t=3764

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

Najlepiej w edytorze mql wciśnij Ctrl+D w zakładce Dictionary masz Technical indicators i tam iATR albo w zakładce search wpisz ATR - wychodzi na to samo :)
double iATR( string symbol, int timeframe, int period, int shift)
Calculates the Indicator of the average true range and returns its value.
Parameters:
  • symbol - Symbol the data of which should be used to calculate indicator. NULL means the current symbol.
    timeframe - Timeframe. It can be any of Timeframe enumeration values. 0 means the current chart timeframe.
    period - Averaging period for calculation.
    shift - Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago).
Sample:
if(iATR(NULL,0,12,0)>iATR(NULL,0,20,0)) return(0);
-czy obiekt klasy świeczka ma pole czy świeczka jest UP czy DOWN (to akurat jest proste do sprawdzenia ale po co jeśli takie pole by było)
Musisz dać warunek dla UP:

Kod: Zaznacz cały

if( iOpen(Symbol(),Period(),1)<iClose(Symbol(),Period(),1))
Co do skladania zlecen to funkcja OrderSend u mnie wygląda to mniej więcej tak:

Kod: Zaznacz cały

ticket=OrderSend(Symbol(),OP_BUY,Lot,(NormalizeDouble(Ask,Digits)),slippage,(Ask-SL*Point),(Ask+TP*Point),"KUPUJ",magic,0,Blue); 
Żeby zamknąć:

Kod: Zaznacz cały

OrderClose(ticket,OrderLots() ,(NormalizeDouble(Bid,Digits)),slippage,Blue);
Co do kursów to masz to przyklejone na nawi w dziale programowanie :)
http://www.forex.nawigator.biz/dyskusje ... 64&start=0

Edit: xpep wyprzedziles mnie :)
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

Awatar użytkownika
marmon
Gaduła
Gaduła
Posty: 124
Rejestracja: 27 cze 2009, 18:39

Nieprzeczytany post autor: marmon »

O gitara wszystko bardzo fajnie.
Dzięki xpep i gieroj
Będe miał co czytać jutro i mam nadzieje że do końca weekendu EA będzie śmigać.

Jak chce żeby strategia działała na kilku parach, tak samo ATR żeby pobierało wartości z kilku par to dla każdej pary odpalam to EA czy to się jakoś inaczej robi?
W zasadzie na razie się bez tego obejde ale zakładając że strategia działa to będzie potrzebne. (hmm na ATR to wystarczy mi tablica ze wskaźnikami na różne pary ale co z ustalaniem warunków dla różnych par co te 4 godziny?)

Na tym kursie część linków prowadzi do pustych stron nie ?

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

marmon pisze: Jak chce żeby strategia działała na kilku parach, tak samo ATR żeby pobierało wartości z kilku par to dla każdej pary odpalam to EA czy to się jakoś inaczej robi?
To zależy jeśli chcesz porównać ATR z rożnych par to musisz to zaprogramować przyklad:

Kod: Zaznacz cały

if( iClose(EURUSD,240,1)>iClose(GBPUSD,240,1))
ale np jak chcesz żeby EA działało na jednaj parze to zamiast symbolu EURUSD daj Symbol() wtedy pobierze z aktualnego wykresu.
marmon pisze: ale co z ustalaniem warunków dla różnych par co te 4 godziny?)
N apoczatku programu zadeklaruj

Kod: Zaznacz cały

static datetime lastTime;
Potem w funkcji przed wszystkim daj:

Kod: Zaznacz cały

if (lastTime != iTime(Symbol(),Period(),1))
i pod koniec funkcji

Kod: Zaznacz cały

lastTime = iTime(Symbol(),Period(),1);
Gotowe EA działa tylko co świeczkę w zależności od tego na jakim TF wykresie została włączona. Jak chcesz żeby zawsze dzialala tylko i wylacznie na TF 4h to zmień Period() na 240
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

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

Nieprzeczytany post autor: Tig3r »

ewystarczy przejrzec to i w razie czego wyszukac komendy
http://kjk.za.pl/pliki/Kurs%20MetaQuote ... ge%204.zip
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
marmon
Gaduła
Gaduła
Posty: 124
Rejestracja: 27 cze 2009, 18:39

Nieprzeczytany post autor: marmon »

Tig3r ten link bardzo pomocny, dzięki

Tam wyczytałem że z każda zmianą ceny uruchamiana jest funkcja start(){} tak też jest?

Czy to w ogóle dobre podejście do sprawy:
1. Jedna funkcja sprawdza warunki i zwraca wartość która będzie oznaczało odpowiednie zlecenie
2. Funkcja składa zlecenie na podstawie otrzymanej wartości
No i w tym momencie zostają składane nowe zlecenia tylko pytanie jak mam się dobrać do tych już zleconych wcześniej i otwartych? Musze dla każdego zlecenia łapać ten ticket i gdzieś go trzymać?
3. Kolejne sprawdzanie warunków (innych) w celu modyfikacji zleceń

Jeszcze jedna sprawa z takeprofitem co się bardziej opłaca czy skladanie 1 zlecenia i zamykanie części pozycji na 3 różnych poziomach? (więc potem ewentualnie przesuwam stop'a tylko dla jednego zlecenia)
Czy skladanie od razu 3 zleceń z TP na różnych poziomach? (wtedy nie zamykam części zlecenia bo od razu jest podzielone na 3 ale za to muszę 3 x przesuwać stoplossa i mieć 3 tickety gdzieś zapisane)

Tak trochę metodycznie kuleje jak to działa czy muszę sobie robić jakiegoś while'a żeby to wszystko się kręciło czy pisze w tym starcie a on się sam kręci do zamknięcia EA

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

Nieprzeczytany post autor: Tig3r »

EA działa co tick - tzn uruchamiania jest funkcja START
tam co tick sprawdzasz warunki do otwarcia/zamknięcia/modyfikacji i wszystko może być w funkcjach tak jak piszesz - jak Ci wygodnie.
A czy lepiej jedną, czy 3 to zależy od Ciebie ale chyba lepiej jedną się zarządza.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
marmon
Gaduła
Gaduła
Posty: 124
Rejestracja: 27 cze 2009, 18:39

Nieprzeczytany post autor: marmon »

Aha no to rozumiem o co chodzi jak co tick to wypadało by najpierw sprawdzać czy zlecenia trzeba zamknąć jeśli bym robił 1 zlecenie. Bo musze sprawdzać wtedy czy cena jest na 1,2,3 targecie i ewentualnie zamknąć.
A jak zrobie 3 zlecenia to zamknie się automatycznie na TP i nie bede musiał ceny sprawdzać co za tym idzie będę mógł dać warunek gdzieś na początku startu żeby czekał aż pojawi się nastepna świeczka i dopiero wtedy żeby poszło dalej.
Wydaje mi się że to może trochę przyspieszyć program a dokładniej odciążyć kompa jeśli EA by pracowało na kilkunastu parach, co o tym sądzisz Tig3r?

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

Nieprzeczytany post autor: Tig3r »

masz racje, jeśli nie masz TS czy innego mechanizmu zamykającego jak TP
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

ODPOWIEDZ