Popularni Postovi

Izbor Urednika - 2019

MQL5: Pisanje pokazatelja i savjetnika na temelju indeksa korelacije

Otvarajući poziciju na forexu, pretpostavljamo da će potražnja za nekom od valuta para rasti i, kao rezultat, promjena tečaja dovesti do povećanja plutajuće dobiti. Grubo govoreći, prije izlaska na tržište, utvrđujemo koja je od valuta „jača“, odnosno koji će čimbenici prebaciti cijenu na prvo mjesto. Forex po svojoj specifičnosti ne pruža potrebne alate za takvu analizu, pa su trgovci smislili puno načina da opravdaju sam koncept moći na temelju sekundarnih značajki. Neki od njih čak su iznjedrili zasebnu doktrinu, nedaleko od astroloških predviđanja, koja se pogrešno ne naziva "humanitarnom analizom".

Izvodeći analogiju, kada bi temperatura svemira u velikoj mjeri bila potpuno ista, život ne bi postojao. Tržište postoji i zbog stalnog kretanja - mogućnosti trgovanja pojavljuju se samo kad postoji nagib ponude i potražnje. Zamislite u ovom trenutku da bi sve valute deviza bile jednake, na primjer, jednakoj - ne bi se moglo ništa trgovati.

Materijal je namijenjen običnim trgovcima, i vjerujte mi, svi smo ovdje, osim ako, naravno, imate vlastitu trgovačku platformu - svi insajderi u ovom slučaju su vam otvoreni. Forex tržište u ovom aproksimaciji je crna kutija. Na temelju toga pokušat ćemo prepoznati prednosti i slabosti valuta samo na temelju informacija iz dostupnih izvora i donositi odluke o trgovanju na temelju tih procjena. Ideja uopće nije nova, ali pristup koji će se koristiti u članku nije široko korišten. Ako bismo mogli uzeti u obzir sve čimbenike koji utječu na promjenu relativne vrijednosti valuta, stvaranje profitabilne strategije na temelju njih bio bi trivijalni zadatak, čak i bez potpuno zatvorenog sustava.

Danas ćemo pokušati napisati vlastiti alat: Pokazatelj i savjetnik na temelju indeksa korelacije valutni parovi. I istovremeno ćemo vježbati programiranje.

Zakon o očuvanju energije

Zatvoreni sustav pretpostavlja da novac ne nadilazi sustav. Zatvoreni sustav možemo zamisliti kao izolirani trezor banke u kojem se novac može kretati od ćelije do ćelije, ali ne može napustiti granice uvjetovane sobe. Prema tome, nakon izračuna gubitka određene količine novca, imamo točnu predodžbu o količini raspoloživih sredstava koja će se ubuduće preraspodijeliti u druge ćelije.

Da postoji idealni zatvoreni sustav na forexu, promatrali bismo fino podešen odnos - evo, stigao je i stigao. To znači da rast jedne valute treba izazvati pad druge, i tako svuda. Na taj način, izradivši sintetički instrument iz „košarice na tržištu“, dobivamo win-win sustav trgovanja koji se temelji na prirodnom transferu novca. Nažalost, kretanje valutnih parova ne slijedi točne zakone, a stvarno tržište daleko je od koncepta zatvorenog sustava.

Izvori informacija

Zbog nedostatka punopravnih insajdera, većina se oslanja na temeljne čimbenike, kažu, pati ekonomija određene zemlje - vrijednost valute pada. Zapravo, razni ekonomski pokazatelji, vrijeme trgovanja, čisto umjetna manipulacija gospodarstvom, politička događanja, pa čak i samo glasine velikih ulagača i financijskih institucija mogu uvelike utjecati na tečaj. U ovom su slučaju vrlo lako naći uzročne veze nakon činjenice, ali izuzetno je teško unaprijed predvidjeti stupanj njihovog utjecaja. Panika koja nastaje u takvim trenucima čak i usložnjava pronalaženje obrazaca, zbog čega mnogi radije ne trguju vijestima.

Pričanje sudbine nikad nije bilo tako zabavno. Na primjer, određena tvrtka je bankrotirala, a sredstva su tekla poput planinskog ribnjaka kroz prirodno oblikovane kanale, prosipajući se kroz stoljetne pukotine, istodobno isparavajući ostatke u atmosferu. Naš je zadatak ovdje pratiti ove transformacije s prilično velikom točnošću, tako da su i snaga ovih faktora i njihova prisutnost neosporni dokaz: oni su premjestili naš glavni alat za stvaranje prihoda - tržišnu cijenu.

Reakcija tržišta u mnogim je slučajevima izravno suprotna dostupnim prognozama, što, čini se, sugerira misao, ali što zapravo proučavamo? U tom smislu, redoslijed masona, ova vrsta analize obično nije povezana s makroekonomskim događajima, već s definiranjem glavnih svjetskih trendova.

Za razliku od burze, Forex je malo kompliciran. Da, možda možemo utvrditi neki potencijal valute, a ako se prognoza ostvari, doći će do važnog sloma razine ili će se promijeniti kratkotrajni trend. Ovdje se ne treba pouzdati u iskustvo i osjećaj tržišta - trgovci sa sličnim sposobnostima odavno su napustili tržište i svoje iskustvo podučavali manje iskusnim pojedincima.

Tada se postavlja pitanje, zašto analizirati trendove u gospodarstvu, ako cijena već govori sama za sebe? Kao što znate, najvažniji pokazatelj na Forexu je cijena. Međutim, ne znamo točne količine, niti količinu i vrijeme trgovanja. Istodobno, smatramo da je cijena pravična procjena trenutnog stanja, unatoč neizvjesnoj prirodi. Takva izjava proizlazi iz same definicije distribuiranog tržišta - ne postoji niti jedna strana koja kontrolira vrijednost imovine kojom se trguje. Stoga ćemo samo pojednostaviti ovu tvrdnju istinom.

Vrste postojećih indeksa

Najpravednija procjena vrijednosti valuta je izračun indeksa na temelju platne bilance. Međutim, ostaje li otvoreno pitanje ovisi li nominalna težina valuta o trgovinskoj bilanci između država. Očito ta vrijednost nije fiksna i stalno se mijenja. Stoga, prilikom izračuna indeksa, analitičari često dolaze do nekih pojednostavljenja uklanjanjem nepotrebnih varijabli iz jednadžbe. Općenito, na deviznom tržištu postoji nekoliko općenito prihvaćenih metoda za procjenu potencijala i utvrđivanje trenda.

Primjećujemo tri takve metode:

  1. Ponderirani prosječni indeks koji odgovara pokazateljima vanjskotrgovinskog prometa. Ovdje je sve jednostavno: čini se da uzimamo u obzir valute svih zemalja koje vode najaktivniju trgovinu i izračunavamo geometrijsku srednju težinu primljene košarice. Ova metoda je službeno priznata i temelji se na stvarnoj količini valute u optjecaju.
  2. Izračunavanje geometrijske srednje vrijednosti svih križeva. Budući da nismo u mogućnosti izračunati količinu trgovanja za Forex, uzimamo sve parove koji su uključeni u proračun unaprijed za instrumente s približno istim volumenom trgovanja. Opet, ne uzimamo u obzir sve valute, već samo najpopularnije.
  3. Izračunavanje valutnog indeksa prema stopi rasta povezanih valutnih parova pomoću pomoćnog pokazatelja. To je najčešći način izračuna snage valute na temelju raspoloživih cijena. Za izračun možete upotrijebiti bilo koji dostupni tehnički pokazatelj, koji se obično temelji na pomičnom prosjeku, a koji ćemo naknadno koristiti kao početnu točku našeg izračuna.

Koristit ćemo malo drugačiji pristup - razmotriti ovisnosti između para valuta i na temelju toga izgraditi pretpostavke o jačini utjecaja određene valute. Odnosno, da bismo odredili snagu određene valute, utvrdit ćemo njihov ukupni utjecaj. Svaki par imat će jednu zajedničku valutu, iz čega proizlazi da što je veća vrijednost ovisnosti, to će veći utjecaj zajednička valuta imati. Da bismo procijenili ovisnosti, razmotrit ćemo povezanost. Rezultirajući koeficijent uključivat će geometrijsku srednju parnu unakrsnu korelaciju.

Alat

Naš je zadatak utvrditi koliko sinkronijski parovi idu i, prema tome, koliki utjecaj ima vodeća valuta. Koristit ćemo korelaciju kao najpoznatiju metodu za utvrđivanje ovisnosti dvaju vremenskih serija. Kako ne bismo bili ovisni o jednoj metodi izračuna, razmotrit ćemo i Pearsona i Spearmana istovremeno. Prema svojim karakteristikama, svemirska letjelica Pearson nije otporna na emisije vremenskih serija. Zauzvrat, Spearmanova rang-veza može se primijeniti na gotovo sve serije. Stoga ćemo za donošenje odluke upotrijebiti i jednu i drugu metodu.

Dakle, na raspolaganju smo popis glavnih instrumenata trgovanja koji će sudjelovati u proračunima. Broj alata ne bi trebao radikalno utjecati na rezultat, već samo povećava njegovu točnost. To jest dodavanjem ili uklanjanjem valuta prognoza bi trebala ostati približno ista. Naravno, najpopularnije valute će ipak snažno utjecati na rezultat, tako da je potrebno zadržati minimum.

Pisanje pokazatelja

Pravilna priprema izvornih podataka izuzetno je važan proces. Svaka netočnost u ovoj fazi može dramatično utjecati na krajnji rezultat, čineći ga beskorisnim. Trebamo riješiti dva problema - dostupnost povijesti i vremensku sinkronizaciju. Počet ćemo učitavati povijest nešto kasnije, ali, za početak, indikator se mora inicijalizirati, to jest, treba obraditi ulazne parametre i označiti međuspremnike indikatora.

int OnInit () {valuteToSimbols (valute); ...}

Prvo što radimo je inicijalizirati popis znakova. Prvo pređite liniju u zasebne valute i uklonite dodatne razmake. U sljedećem koraku prikupljamo valute u parovima, unaprijed provjeravajući dostupnost valutnog para u pregledu tržišta.

void valuteToSymbols (string currs) {string arr; StringSplit (currs, ',', arr); int sz = ArraySize (arr); iznosCurrs = sz; za (int i = 0; i

Slijedi inicijalizacija međuspremnika.

int OnInit () {... // međuspremnikom za svaku valutu za (int i = 0; i

S obzirom na složenost izračuna, na velikim količinama podataka pokazatelj se može zaglaviti za pristojno vrijeme. Da se to ne bi desilo, učinit ćemo prikaz kroz tajmer, prikazivanje rezultata u dijelovima, počevši od prve (ekstremne) trake na grafikonu.

EventSetMillisecondTimer (10);

Zbog ograničenja hardvera, timer se ne može pokrenuti brže od nekoliko desetaka milisekundi. Stoga ćemo proračune razdijeliti na komade za 50 ms. Za sinkronizaciju vodimo vrijeme otvaranja trake posljednjeg vremena i ulazimo duboko u povijest dok se ne dosegne vremensko ograničenje. Zatim crtajte grafikon pomoću ChartRedraw (). Prikazivanje će se dogoditi odmah i postupno, s desna na lijevo, gotovo trenutno otvarajući pristup najnovijim podacima.

void OnTimer () {ulong st = GetMicrosecondCount (); // ako je prva vožnja ako (currTime == 0) {// dobije vrijeme ekstremne trake na grafikonu currTime = (datum (vrijeme)) SeriesInfoInteger (_Symbol, _Period, SERIES_LASTBAR_DATE); za (int l = 0; l0) {datumsko vrijeme tm; CopyTime (_Symbol, _Period, Count-1,1, tm); startTime = tm0; } else startTime = StartDate; } // kad sve nacrtamo, nastavite pratiti trenutnu traku if (currTime= startTime && GetMicrosecondCount () - st

Tajmer indikatora, nažalost, ne radi u ispitivaču strategije, a za kratka je razdoblja potpuno suvišan. Stoga, radi kompatibilnosti, još uvijek ćemo napustiti funkciju OnCalculate, koja će biti uključena u posebnu zastavu TestMode. Ova je zastava potrebna za korištenje pokazatelja u stručnjaku; za stvarnu upotrebu bolje je ostaviti lažnu.

int OnCalculate (const int rate_total, const int prev_kalkulirano, const datum i vrijeme const, const double & open, const double & high, const double & low, const double & close, const long & tick_volume, const long & volume, const int & spread) {if (TestMode) {int pos = rate_total-prev_kalkulirano; if (prev_calculated == 0) {if (Count> 0) {datetime tm; CopyTime (_Symbol, _Period, Count-1,1, tm); startTime = tm0; pos = Broj-1; } else pos = getBarIndexByTime (StartDate); za (int l = 0; l= 0; ind-) {for (int t = 0; t

Dakle, glavni izračun se odvija u glavnoj funkciji, gdje se prosljeđuje indeks bar i valutni broj. Ako u terminalu nema dovoljno povijesti, indikator će ga pokušati preuzeti, nakon čega će pokušati kopirati podatke. Nadalje, ako je potrebno, prelazimo na podatke o cijenama i odabiremo način izračuna korelacije. Funkcija vraća geometrijsku sredinu svih korelacija.

dvostruki glavni (int indeks, int valuta) {for (int k = 0; k

Broj redaka odgovara broju valuta navedenim u ulaznim parametrima. Naziv valute može se vidjeti u opisu kada zadržite pokazivač iznad linije.

Budući da linije većinu vremena idu sinkrono, ponekad je indikatorske signale teško razlikovati. Stoga indikatoru dodamo funkciju OnChartEvent s obradom događaja CHARTEVENT_MOUSE_MOVE. Ovo je neophodno za isticanje pojedinih linija kada mišem pokažete po njima.

void OnChartEvent (const int id, const long & lparam, const double & dparam, const string & sparam) {if (id == CHARTEVENT_MOUSE_MOVE) {// pohranjuje koordinate i pretvara piksele u vrijeme / novac int x = (int) lparam; int y = (int) dparam; datumsko vrijeme; dvostruka cijena; int sub; ChartXYToTimePrice (0, x, y, sub, vrijeme, cijena); int linije = 0; int bar = getBarIndexByTime (vrijeme); int sz; ako je (bar> = 0) {for (int t = 0; t= sz) prekid; // Provjerite je li linija blizu kursora, odaberite je ako (buffer.historybar + 0,03> price && buffert.historybar-0,03

Kad mišem pokažete iznad grafikona, indeksna linija ispod pokazivača istaknut će se od ostalih, što pojednostavljuje njegovu analizu.

Pisanje robota

 

Budući da indikator ne pokazuje smjer kretanja, može se koristiti samo kao filter za postojeći sustav. Za provjeru, uzmimo jednostavnu strategiju trgovanja na RSI-u. Pravila ulaska - izlaz iz zone prekomjerne kupnje / preprodaje. Odluku o unosu ili ne preuzet će filtar u obliku pokazatelja korelacije.

Prvo testirajte EA bez ikakvih filtera. To će nam dati potrebnu referentnu vrijednost na kojoj bi trebalo biti vidljivo poboljšanje ili pogoršanje rezultata drugog testa. Kao što vidite, savjetnik nije u mogućnosti zaraditi novac, a jedan RSI očito nije dovoljan za stabilan trgovinski sustav.

Zatim pokušajte dodati filter. Uvjeti su također jednostavni - kad koeficijent korelacije prelazi 0,5, vjerujemo da je valuta dovoljno jaka i daje zeleno svjetlo za ulaz. Uvjeti za ulazak na tržište ostaju isti. Kao što vidite, broj transakcija značajno je smanjen. Ali sam grafikon izgleda stabilnije, a na kraju čak pokazuje i profit.

S obzirom da se radi o vrlo površnom ispitivanju, rezultati bi mogli biti i bolji. Razlika između dvaju testova je očita, uzimajući u obzir utjecaj valutnih parova uklanja kratkoročne trendove iz trgovanja, stoga se tečajevi koriste samo za jake valute. Tako se svjesno lažnih oklada rješavamo trgovanjem u samo jednom smjeru.

Zaključak

Izračunavanje linearne korelacije nije najpouzdaniji način određivanja obrazaca. Činjenica da parovi s eurom neko vrijeme odlaze sinkrono, ne znači da postoji izravna veza između njih, već se to pretpostavlja. U metodi postoji zvučna veza, to potvrđuju testovi, ali metoda određivanja ovisnosti nije jedina ispravna. Cijeli se izračun odvija u glavnoj funkciji, njegov izlaz možete promijeniti dodavanjem vlastite formule - ima dovoljno prostora za eksperimente. U ovom slučaju, analiza prosječne korelacije pomaže u utvrđivanju dugoročnog trenda.

Pogledajte video: How to Create a Trading Robot in the MQL5 Wizard of MetaTrader Platforms (Prosinac 2019).

Ostavite Komentar