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

Forex Klub

2016. január 18., hétfő 19:29

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

vikgas mozgo4Következzen a Limit_EMA30 univerzális kompozit indikátor működési leírása.

A utolsó cikkem már tényleg erről az indikátorról szól, aminek sokkal hosszabb a tulajdonság listája a "Bemenő adatok" ablakában, mint az utolsó kettőnél (_step05 és _step06). Viszont cserében egy nagyon kezes eszközt kapunk, amivel az első cikkben felvázolt kereskedési szemléletet bármelyik instrumentum bármelyik chartjára tudjuk alkalmazni.

input int InpEMAPeriod=3; // 01_EMAPeriod
-ez határozza meg az EMA periódusát

input double InpMultiplier=150; // 02_Multiplier
-ezen a belépési szinteket tudjuk beállítani (_high_limit és _low_limit )
-100 : az eredeti EMA szintek

input double InpMultiplier_SL=380; // 03_Multiplier_SL
-ezzel a kilépési (sl) szinteket tudjuk módosítani, mindig nagyobb legyen az előző tulajdonságnál!

input double InpMomentum=100; // 04_Momentum
-ez egy hasznos tulajdonság, a belső sávot arányosan tolja a momentum irányába. (0 - kikapcsolt állapot) (nem szoktam állítgatni, de egy próbát néha megér)

input double InpWin_Loss_Rate = 0.8; //05_Win_Loss_Rate
-Rewar/Risk arányt határozza meg. A 4. cikkben volt róla szó.

input int InpPSAR_Step = 50; //06_PSAR_Step
-Parabolic Sar trendkövető indikátort hangolja, minél magasabb érték annál meredekebben követi a gyertyákat

input int InpFilter = 0; //07_Filter: 1-trend 2-CounterTrend 0-None
-PSAR segítségével megszűri a belépő jeleket.
-alapból 0 a beállítása: egyszerre köt longot és shortot
- 1 : Csak trend irányába enged kötni
- 2 : Trendfordulóra próbálunk spekulálni.

input int InpMinSL = 0; //08_Min_SL
-Ha az SL range kisebb, mint a fenti érték mtPoint-ban megadva akkor megnöveli azt. Hasznos lehet, de az indikátor elveszti az univerzális képességét, és csak egy idősíkon működik hatékonyan. (0 - kikapcsolt állapot)

input int InpMaxSL = 0; //09_Max_SL
-Ha az SL range nagyobb, mint a fenti érték mtPoint-ban megadva akkor lecsökkenti azt. Ha minkét érték (min és max) egyforma, akkor fix stoppokat kapunk. (0 - kikapcsolt állapot)

input int InpStepMode = 1; //10_StepMode: 1-wide 2-narrow 0-None
- 10_step tulajdonság működését szabályozza, alap beállítsa:1
- 1 : A 11_Step tulajdonság szélesíti a sávot, oldalazásban vagy alacsonyabb idősíkon célszerű
- 2 : A 11_Step tulajdonság szűkíti a sávot, meredek trendet segíthet utolérni

input int InpStep = 2; //11_Step !!!
-A vizsgált gyertyák számát kell megadni, az utolsó x gyertyát megvizsgálva megkeresi a legmagasabb vagy a legalacsonyabb értéket és azt veszi figyelembe a szintek meghatározásánál. Működését 09_StepMode tulajdonság irányítja. Nagyon hasznos tulajdonság, sokszor használom, megéri próbálgatni

input int InpGlobalShift = 00; //12_GlobalShift
-A tényleges szint kiszámításának utolsó lépése, értékét mtPointban kell megadni. Pozitív érték a sávot szélesíti, negatív érték szűkíti. Szintén nagyon jó, sokszor próbálgatom. Az időváltó képességet korlátozhatja.

input int InpMinRange = 0; //13_MinRange
-A belépsi sávot nem engedi a beállított érték alá csökkenteni, minél magasabb mtPoint-ban megadott érték a sáv annál szélesebb lesz, viszont elveszti az indikátor az idősík váltó képességét. Szintén hasznos, sokat próbálgatom

input int InpSpreadMin = 8; //14_Spread_min
-Ez és az alatta levő tuladonság segíti a pontos szintek meghatározását a buy_Limit és sell_limit függő megbízások elhelyezésénél. Az utolsó gyertya után található kék és piros téglalapok szintjeit befolyásolják. Hasznos segítség a spread meghatározásában a spreadmonitor indikátor, ami az adott gyertyához tartozó minimum és maximum spreadet megjegyzi és megmutatja visszamenőleg is. Ezeket az értékeket célszerű itt beállítani.

input int InpSpreadMax = 12; //15_Spread_max
-lásd eggyel feljebb

input int InpCandlesNumforTest = 0; //16_CandlesNumforTest
-A Villámteszt működését befolyásolja.
- 0 : kikapcsolt állapot, az összes gyertyát vizsgálja
- x > 0 : az utolsó X db gyertyára alkalmazza a villámteszt tulajdonságot.
-nagyon hasznos, először az összes gyertyára nézem meg a beállítást, és ha tetszik utána megnézem az utolsó pár napot vagy órát, és ha hasonlóan jó, akkor fogadom el a beállítást véglegesnek.

input int InpInactive = 0; //99_Inactive
- 1 : Az indikátor semmilyen működési jelet sem ad ki, gyakorlatilag alszik, de bármikor újra bekapcsolható és az beállításai megmaradnak
-0 : Alapállapot, az indikátor működik és az összes jele látható.

Ha az indikátor jól működik, akkor az utolsó nyitott gyertya mellett felül egy piros, alul egy kék téglalap található. Ezek segítségével lehet pontosan beállítani a sell_limit és buy_Limit függő megbízások belépési és sl szintjeit. A _high_limit és _low_limit szinteken a 13_Spread_min és 14_Spread_max értékével még finomít, hogy pontosabban teljesüljenek a megbízásaink. Sose kerekedjetek Stop nélkül!

Néha idősík váltáskor, vagy ha túl gyorsan rángatjuk a chartot az egérrel, hamis jelek tűnnek fel az charton, ez az mt4 bugja lehet. Az indikátor működését, a szinteket és a százalékos találati arányt nem befolyásolja. Jobb klikk az indikátor vonalán >> tulajdonságoknál, okézzuk le a beállításokat változtatás nélkül, a fantom jelek azonnal eltűnnek.

Ezen cikksorozat célját elérte, vagyis bemutatta, hogy lehet egy eredeti ötletet, elgondolást, technikát, lépésről lépésre felépíteni, egy kompozit indikátorban. Persze még sok-sok oldalt telegépelhetnék, a programsorokról, eljárásokról, tömbökről, stb, de akit igazán érdekel a téma, az járjon utána maga. Állítom, egy egyszerű indikátor létrehozása pár sor programkódból senkinek nem okozhat gondot, és magam is hobby-programozó volnék, iskolában programozást sose tanultam. Rajta, próbálkozzatok meg vele ti is. Ott van a programozók és kíváncsi emberek legjobb barátja, a Google kereső, esetleg a Youtube. Az a tudás, amit nem készen kapsz, hanem saját kútfőből származik és te magad szerzed meg a megtapasztalás rögös útján, a tied marad mindörökre és te is több leszel általa emberileg és talán anyagilag is.

Ne feledd! Nincs gondolkodó indikátor, nincs nyerő indikátor, de van a gondolkodva nyerő trader, akinek a dolgát bizonyos indikátorok meg tudják könnyíteni.

Jóccakát.

Kategória: Ti írtátok
2016. január 10., vasárnap 11:19

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

Kompozit indikátor, avagy mennyi indikátor fér bele egy indikátorba?

A válasz az, hogy nagyon sok. Ha belenéztek a Limit_EMA30.mq4 állományba, akkor a következő sort is megtaláljátok:

#property indicator_buffers 15

Vagyis 15 alindikátorból áll az egész kompozit. Valóságban a grafikai eszközök is indikátornak számítanak, pedig csak a tájékozódást segítik. De ne szaladjunk annyira előre. A következő példa-programunkba, Limit_Ema_step03.mq4-ben csak 2 új indikátort raktam az egy meglévő mellé, hogy könnyebben átlássátok az egészet. A lényeg a kis lépésekben való fejlődésben van.

A _step3 kódját hasonlítsátok össze a _step2 kódjával és vegyétek észre a különbségeket!

Két új EMA került beépítésre, _ema_High és _ema_Low. Így nem kell az üres chartra ráhúzni három különböző EMA-t, hanem egy mozdulattal megvan az egész. De van egy másik fontos változás, egy új tulajdonság, amelyet egy input változó valósít meg:

input double InpMultiplier=100; // 02_Multiplier

Ez is automatikusan bekerül a "bemenő adatok" listájába. Mire is való ez? Az alapbeállítását (100) változtassuk meg kisebbre vagy nagyobbra és azonnal kiderül. Észrevesszük, hogy a két _limit vonal távolsága hol közelebb hol távolabb kerül egymáshoz. A 100 alapbeállítás megegyezik az eredeti High és Low értékek által meghatározott EMA értékekkel, vagyis azon értékek 100%-a. Remélem így már világos, hogy a kompozit indikátorunk nagyon jól kalibrálható indikátorrá változik, amit könnyen rá tudunk állítani bármelyik instrumentum bármely idősíkjára. De ez csak a kezdet.

Az üres csártra most két _step03-as indikátort tegyünk fel, mondjuk 75 és 220-as "02_Multiplier" tulajdonságokkal. Így most már nemcsak a belépő szinteket kapjuk meg, hanem az ezekhez tartozó stop-loss szinteket is, ahol már tényleg nincs okunk hagyni a veszteségünket tovább növekedni. Ráadásul minden gyertyához eltérő mértékű stop-loss range tartozik, követve a piac mozgásának változását.

kep03
Ha egyszerre akarjuk látni a belépési és kilépési szinteket, akkor miért ne lehetne a kettőből újra egy indikátor? Naná hogy lehet.

kep04
Íme itt az indikátor is: Limit_Ema_step04.mq4 A kép egyre jobban kezd hasonlítani a Limit_EMA30-ra. A "bemenő adatok" listája újra bővült egy taggal:

input double InpMultiplier_SL=220; // 03_Multiplier_SL 

- amely tulajdonság segítségével tetszőleges sl szinteket állíthatunk be. Pont olyanokat amelyek a stratégiánknak és a személyiségünknek megfelel. Másik előnye, hogy az indikátorunkat univerzálissá teszi, mivel minden instrumentumon és idősíkon más-más stop-loss távolságot határoz meg, az adott gyertyák segítségével. A vonalak színét is megváltoztattam, de megjelentek a rejtélyes pöttyök is, amiknek csak vizuális feladatuk van. Szemléletesen jelzik, hogy a gyertyák hol érték el a belépési szinteket.

A 03_Multiplier_SL működése megegyezik a 02_Multiplier müködésével, tehát százalékos arányban téríti el a high és low ema értékeit. Értelemszerűen az értéke többszörese az előzőnek, így alakul ki a belépési (entry) és a kilépési (sl) szintek közötti távolság.

A kilépési szintek (stopplos) és a célszintek (takeprofit vagy breakevent) teljesülésének ábrázolása már sokkal összetettebb feladat, hiszen nem tudhatjuk hogy a megnyitott pozició sorsa hány gyertya múlva dől el. De mára szerintem ennyi is elég, jóccakát!

utóirat:
természetesen ezek még csak félkész indikátorok. Egy csomó fontos dolog hiányzik belőlük. hogy az ember akár 1 centet is rájuk bízhasson. Többek között nincs megoldva az a probléma hogy az aktuális gyertya low és high értékének változása mozgatja a belépési és kistopplódási szinteket. Célom csupán annyi, hogy megmutassam az a folyamatot, ami elvezehet egy komolyabb kompozit-indikátor felépítéséhez, ami már hatékonyan meg tudja valósítani az eredeti stratégiánkat.

Kategória: Ti írtátok
2015. december 24., csütörtök 08:06

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


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.

Kategória: Ti írtátok

Keresés

Forex Tester

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...

forextester

Idézet

"A különbség a sikertelen és a sikeres ember között nem feltétlenül a tehetség, hanem a kitartás."

Adam J. Jackson

Reklám