Tőzsde, CFD, Forex kereskedés, oktatás, tanácsadás, vagyonépítés, érdekvédelem. 

Forex Klub

2015. december 24., csütörtök 08:06

Mozgóátlagok másképpen 2. rész

Írta:
  • Betűméret Betűméret csökkentése Betűméret növelése
  • Nyomtatás
  • E-mail
Értékelés:
(4 szavazat)


Az első programozói lépések, avagy az elmélet gyakorlati továbbfejlesztése.

vikgas mozgo maskepp2

  1. Csinálj egy új Custom indicator-t a MetaEditor segítségével. Elég az OnCalculate (...) rendszerfügvényt beépíteni (ezt a varázsló helyetted elvégzi). Az OnCalculate rendszerfüggvény az aktuális gyertya összes változásakor meghívódik. A kódunk döntő, legfontosabb része ebben fog futni.
  2. Futtasd le (F7), majd tedd rá az üres csártra. Láss csodát, nem látsz semmit, hiszen ez egy üres indikátor:) 
    A "Limit_Ema_step01" néven megtalálod az üres indikátor kódját (.mq4). 
  3. Nyisd meg a "Limit_Ema_step02" indicator kódját és a tartalmát másold a Metaeditorba. Mentsd el, a lefordított állományt pedig húzd rá a csártra. Megjelenik egy EMA piros vonalat rajzolva. Tehát ez már egy működő indikátor. Ezen állománynak a mt4 "Indicators" könyvtárában kell lennie, hogy lássd a Navigator ablakban. 

Hasonlítsd össze a két kódot a Meta Editor segítségével. A különbség, azaz néhány plussz kódsor teszi a saját indikátorunkat működő képessé. A legfontosabb mindig az egyszerűség!

Gyorsan soroljuk fel az új kódsorokat:

#property indicator_color1 Red - beállítja az első indikátorunk színét pirosra

input int InpEMAPeriod=3; // 01_EMAPeriod - ez egy input változó, segítségével müködés közben az MT4-ben változtathatunk az indikátor működésén. Az így definált változók jelennek meg a "bemenő adatok" felsorolásban az MT4-ben. Itt az egy szem EMA indikátorunk periódus értékét állíthajuk be.

double Ema_Buffer[]; - ez az első indikátorunk Bufferje, ezen tömbváltozó segítségével tudjuk tartalommal feltölteni az esetünkben az Ema értékeit. Azért tömb, mivel az összes gyertya eleméhez társít egy ár(price) értéket.

double _ema; -az aktuális (utlosó) gyertyához tartozó indikátor érték változója

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,Ema_Buffer); - ez a két kód-sor kimondottan az OnInit() függvényhez tartoznak, segítségével az indikátorok működést tudjuk meghatározni. Az első paraméter ( 0 ) határozza meg hogy, melyik indikátorhoz tartoznak. első indikátor =0, nyolcadik indkiátor= 7, stb. SetIndexStyle meghatározza, hogy vonalat lássunk a csárton, a SetIndexBuffer összefüzi az első indkiátorunkat az Ema_Buffer tömbhöz.

{
int i=0;
for(i=rates_total-1; i>-1 && !IsStopped(); i--)
{
_ema=iMA(NULL,0,InpEMAPeriod,0,MODE_EMA,PRICE_MEDIAN,i);
Ema_Buffer[i]= _ema;
}
-A fenti kód az OnCalculate() rendszerfüggvényben az indkátorunk tényleges motorja, "for" ciklusutasítás segítségével feltölti az első indikátrounkat az összes gyertyához tartozó adatokkal. Az iMA() MQL4-es függvény végzi a tényleges számítást, tehát ez a kód valósítja meg a mi Ema-nkat. Akit érdekel a leírása, írja be a google-ba "mql4 iMA" szavakat és azonnal megkapja a függvény leírását angol nyelven.

_ema=iMA(NULL,0,InpEMAPeriod,0,MODE_EMA,PRICE_MEDIAN,i); -mediánra húzza a mozgó átlagot
_ema=iMA(NULL,0,InpEMAPeriod,0,MODE_EMA,PRICE_HIGH,i); -High értékre húzza
_ema=iMA(NULL,0,InpEMAPeriod,0,MODE_EMA,PRICE_LOW,i); -Low értékre húzza

A legutolsó paraméter az "i", a ciklusutasításból származik, tehát az iMA függvény annyiszor hívódik meg ahány gyertya van az aktuális csárton.

Ha a kódsor előtt "//" jelet látunk, akkor azt a sort fordításkor a Meta Editor nem veszi figyelmbe, mint ha ott sem lenne. Ez a kód-tesztelésénél nagyon hasznos segéd eszköz.

Ez a világ legegyszerűbb indikátora ("Limit_Ema_step02") mt4 alá, bátran kezdjétek el próbálgani a kód-sorokat ki-be kapcsolva, hogyan változik meg az indikátor működése azonnal (F7). A változás csak új ár jegyzésekor fog történni, ha nincs az instrumentumon forgalom (pl: hétvégén), akkor rakjátok fel az indikátort egy lassan futó BackTester csártjára és ott ugyanúgy fog müködni minden gyertya változáskor.


Legvégül az összefoglalás:

  1. Létrehoztunk egy üres costum indicator-t, ami lefordítva (F7) és a chartra húzva semmi eredményt nem produkált. Ez minden indikátor üres csontváza. - "Limit_Ema_step01"
  2. Beleépítettünk egy egyszerű Ema-t, az mql4-ből elérhető gyári fügvényhívással. A többi elérhető függvény listája: "http://docs.mql4.com/indicators".

Rendeltünk hozzá:

  • színt,
  • bemeneti (input) változót (mellyel meghatározhatjuk az EMA periódusát), 
  • buffert (ami a gyertyákhoz tartozó EMA értékek tömbje)
  • változót, amely az aktuális EMA értéket fogadja
  • vonal nézetet rendeltünk az indikátorhoz (DRAW_LINE)
  • összekötöttük a buffert az indkátorral
  • végül az onCalculate() függvényben egy ciklusutasítás segítségével az indikátor tömbjét feltöltöttük, és az eredményben lefordítás utána a csárton gyönyörködhettünk:)


A következős lépésben az saját fejlesztésű indikátorunkba újabb indikátorokat építünk, hisz a célunk továbbra is a felvázolt kereskedési stratégia leprogramozása, és ehhez egy valódi kompozit indikátorra lesz szükségünk. Jóccakát.

Megjelent: 956 alkalommal Utoljára frissítve: 2016. május 05., csütörtök 13:41
A hozzászóláshoz be kell jelentkezned

Keresés

Forex Tester 2

Manuális kereskedések szimulálására, és a különféle kereskedési stratégiák professzionális tesztelése alkalmas program. Vásárlás...

forextester2

Idézet

"Álmodj, amit csak akarsz, menj, ahova szeretnél, légy az, aki szeretnél, mert csak egy életed van, s csak egy lehetőséged, hogy olyan dolgokat csinálj, amit szeretnél!"

Paulo Coelho

Reklám