Jump to content
Co nového? Mé kurzy
Komunita:
Diskuze Sledované příspěvky Žebříčky

MetaTrader 4


Volf

Doporučené příspěvky

DarkMan a ostatní: díky.

Ještě mírně plavu v globálních/statických proměnných... Globální/lokální jsou asi jasné (v rámci intencí TP, C++ apod.) ale statické proměnné? (už ten protichůdný název ;) Co se stane s jednotlivými typy proměnných, když ukončím EA/MT4?

Dále: Existuje nějaká f-ce na zjištění maximálního indexu pole s definovanou hodnotou? Něco jako ubound(Pole)... Nebo to musím procházet cyklem dokud nenarazím na NULL? Díky za pomoc, tyhle detaily v manuálu nejsou a MQL je takový děsný hybrid :-( - syntaxe zbytečně složitá ve tvaru C++, datové typy téměř na úrovni Basicu a do toho finanční funkce :D

Poslední z této dávky dotazů: proč nemůžu definovat hodnoty pole v globálním rozsahu? Konkrétně v bloku definice vstupních hodnot (před blokem f-ce Init) mám toto:

int HH_TP[4]; // 4 hodnoty - index 0-3
HH_TP[0] = 55; // zde to háže error 'HH_TP' - expression on global scope not allowed

Díky moc předem za odpovědi, potřebuju se jen zorientovat v zákonitostech MQL... ;-)

Link to comment
Sdílet pomocí služby

  • Odpovědí 4,3k
  • Vytvořeno
  • Poslední

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

kubrt:

Mozna jsem te trosku zmatl zkusim trosku objasnit.....

MT ma 4 moznosti jak definovat promenou

1) Globalni - ja ji budu rikat Uplne Globalni :)) za chvili bude jasne proc ta se nastavuje pres fce GlobalVariableSet() hodnota z ni se ziskava pres GlobalVariableGet() atp... tyto typy promenych jsou primarne urceny k vymene dat mezi jednotlivymi EAs - cili pokud chces aby jedna EA cetla promene z jine EA pouzijes tento typ (v MT kdyz das F3 vydis definovane globalni promene)

2) Globalni v ramci EA - to jsou promene ruznych dat. typu ktere jsou definovany mimo bloky start(), init(), deinit() cili v globalnim rozsahu, na tyto promene se lze odkazovat ve vsech funcich, myslim ze neni treba dal rozvadet....

3) Staticke promene - se definuji v ramci funkce pomoci magickeho sluvka [bold] static [/bold], a jsou pristupne pouze v teto funkci .... touto deklaraci docileme toho ze si tato promena pamatuje svou hodnotu i pri kazdem novem volanim fce
priklad....

int start(){
static string Text;
if(DayOfWeek()==5) Text = "Datum posledniho patku bylo "+TimeToStr(TimeCurrent());
Print(Text); //Kazdym tickem mi to zapise do logu datum posledniho patku
}

4) Klasicke promene v ramci funkce - neni treba popisovat....


Co se tyce fce na zjisteni indexu pole s null hodnotou tak se obavam ze nic takoveho neni, kdysi jsem neco takoveho resil prave pres smycku a porovnanim hodnot...
A to ze nejde prirazovat hodnoty v globalnim rozsahu, tak s tim se proste smir :) zacalo to delat nedavno.... ale proste je to tak a zda se mi i to cistejsi od toho je tam blok init.....

MT se zda ze zacatku jako pekna pakarna ale nakonec zjistis ze je to easy, aspon samotna syntace co se tyce nekterych sotku ktere MT umi tak to je jina to nekdy zustava rozum stat :)



Mira

Link to comment
Sdílet pomocí služby

DarkMan: díky za detailní vysvětlení, myslím, že to pomůže nejen mi, ale i ostatním.

Vrátím-li se tedy k problematice uchovávání více objednávek stylem (globalniho/statického) pole s obsahem ticketu... Co se stane, naplním-li pole hodnotama a vypnu MT4 a za pár minut/hodin/dnů ho zase zapnu? Zůstanou některé z nich zachovány? A co když např.změním timeframe nebo měnový pár (to by se měl spuuštět EA znovu, včetně f-ce Init, jestli jsem to dobře pochopil)? Co se stane s těmi proměnnýnm?

Díky, snad už dám pokoj a budu schopen něco naprogramovat ;-) Kubrt

Link to comment
Sdílet pomocí služby

DarkMan & All:

Pozor na staticke promenne... - pokud statickou promennou definujete ve funkcni - rekneme start() a zaroven ji inicializujete, NIKDY VICE neprobehne inicializace... a to dokonce ani pri novem spusteni (instancovani - viz zalozka Expert) takove EA! (pro mne na staticke promenne nezvykle chovani, no budiz)

Vychodiska jsou dve:

- definovat promennou taktez staticky, ale na globalni urovni a teprve v init() ji inicializovat hodnotou (vzdy provest prirazeni)

- definovat promennou pouze globalne a dle toho s ni nakladat - as ussually

(Koukam do jedne z mnou vytvorenych EA a zrejme preferuji 2. zpusob)

Link to comment
Sdílet pomocí služby

Zdar všem,

tak mám hotový nějaký první jakž takž funkční EOS a potýkám se s jednou věcí, na kterou jsem narazil při testování, a sice rollovers. V testeru je to jako swap close a swap open. Opravdu to tak funguje i v reálu? Že se o půlnoci všechny pozice zavřou a znovu otevřou [bold]S JINÝM ČÍSLEM TICKETU a s NOVĚ definovanou hodnotou OrderOpenPrice ???? [/bold](programuju něco jako Vegase a potřebuju posouvat SL podle prvotní OpenPrice a tohle mi tam dělá pěkné zmatky. Docela dlouho trvalo, než jsem na to přišel... Není problém to programově ošetřit, jen bych nerad něco programoval, aby to v reálu bylo jinak... Díky za odpovědi, Kubrt.

[ital] PS: Pozn.: Mám v reálu Saxo a ti řeší rollovery tak, že posouvají původní open cenu o swap, takže např. reálně otevřu long pozici za 1,2000 a druhý den vidím, že ji mám otevřenou např. za 1,2004. [/ital]

Link to comment
Sdílet pomocí služby

Návštěvník
Téma je uzavřené.

×
×
  • Vytvořit...