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

Forex Klub

csütörtök, 24 december 2015 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: 1481 alkalommal Utoljára frissítve: csütörtök, 05 május 2016 13:41
A hozzászóláshoz be kell jelentkezned
 

Keresés

Idézet

"Ne gondold, hogy ami neked nehezedre esik, az emberileg lehetetlen. Inkább úgy fogd fel, hogy ami emberileg lehetséges és megszokott, azt te is elérheted."

Marcus Aurelius

Reklám