Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: Instrumentum lista lekérdezése #6187
A for(i=0;i<db;i++ ) helyett a for(i=0;i<db-1;i++ ) jobbnak tűnik, mert különben egy plussz instrumentumot jelenit meg, de ha 2-nél kevesebb az instrumentum azt nem tudom kipróbálni, mert van nyitott pozícióm és azokat nem engedi az MT4 kitörölni a piacfigyelőből.
Hozzászólás: Instrumentum lista lekérdezése #6186Apró hiba van a kódban, nem mindig működik,
if(AllSymbolOpen && i<CHARTS_MAX) kell a if(AllSymbolOpen && db<CHARTS_MAX) helyett a 43 sorbanHozzászólás: Instrumentum lista lekérdezése #6185Mi értelme van letölteni a szimbólum listát?
Gondolkoztam rajta, aztán írtam egy scriptet a LoadSymbols függvényhez. Az orosz módszert nem néztem meg, mert az bonyolultabbnak tűnt. Vigyázni kell, hogy legyen valamilyen profil a MetaTraderben mert, 100 ablakot elég nehéz kézzel, egyenként bezárni, persze lehetne arra is írni scriptet. Sok időt lehet spórolni ezzel a programmal.#property description "A piacfigyelő által megjelenített szimbólumok csv fileba írása, és/vagy megnyitása" #property description "Csak korlátozott számban: maximum 100 nyitható meg, a már megnyitottakkal együtt" #property script_show_inputs #property strict //+------------------------------------------------------------------+ #include <stdlib.mqh> //ErrorDescription-hoz kell //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ enum boole {nem,igen}; input boole FileWriting=nem;//fileba írás input boole AllSymbolOpen=igen;//az összes szimbolum megnyitása maximum 100 input int TimeFrame=PERIOD_H1;//Idősík void OnStart() { string Szimbolumok[]; int i; int db=0; int filehandle=INVALID_HANDLE; int Error; //+--- if(!FileWriting && !AllSymbolOpen) { Alert("A script ezzel a beállítással nem csinál semmit"); } else { LoadSymbols (Szimbolumok); db=ArraySize(Szimbolumok); if(db) { if(FileWriting) { filehandle=FileOpen("Symbollist.csv",FILE_WRITE|FILE_CSV); } for(i=0;i<db;i++ ) { if(FileWriting && filehandle!=INVALID_HANDLE) { FileWrite(filehandle,Szimbolumok[i]); } if(AllSymbolOpen && db<CHARTS_MAX) { if(!ChartOpen(Szimbolumok[i],TimeFrame)) { Error=GetLastError(); Print(__FUNCTION__," ",__LINE__," Error code = ",Error," ",ErrorDescription(Error)); } } } if(filehandle!=INVALID_HANDLE) { FileClose(filehandle); } } } }
Most telepítettem, egy új MT4-et Build 1045-öt Windows 10 alatt kizárólag a stratégia tesztelés céljából. Szokásomtól eltérően semmit nem állítottam rajta át, az eredeti fekete háterű oszlop chartokkal hagytam. Futtattam két tesztet vizuális módban, és mind kettőnél ott van EA által használt összes indikátor, az EA-ban megadott beállításokkal. Évek óta, létező problémám, megoldódott. A globális változókat csak az indikátorok kis részénél használtam. Lehet, hogy MT4 build 1045 előtt valamelyik korábbi verziónál is ez így működöt, csak nem tudtam róla.
Köszönöm a választ. Lényegében csak a nem saját indikátoroknál van a probléma. Saját indikátoroknál a programom létre hozza terminal globális változókat CHART_WINDOW_HANDLE-t tartalmazó névvel. Ha éppen saját indikátort tesztelek, akkor az indikátorom az alapján állítja be a paramétereit, amikor ráhúzom a chartra. A nem saját indikátorok paramétereinek beállítására megoldás, lehet, egy indikátor megjelenítő indikátort készíteni. Az indikátor a globális változókon keresztül beállítja a nem saját indikátor paramétereit, és mivel azt hiába hívja meg, nem jelenik meg; a saját bufferein keresztül meg is jeleníti
Hozzászólás: Instrumentum lista lekérdezése #4824Elnézést, de az előző bejegyzésem második bekezdése fals. Kiderül, hogy a _Symbol nem rak bele szóközt, csak nem proporcinális a betű típus és úgy néz ki van benne szóköz P és J betű között pedig nincs. Más instrumentumnál nem tűnne úgy.
Hozzászólás: Instrumentum lista lekérdezése #4823A CHART_WINDOW_HANDLE is le lehet kérdezni így azonos szimbólumú, és idősíkú chartoknak különböző globális változó nevet lehet adni (bár általában erre ritkán van szükség). Az egyértelmű azonosításhoz CHART_WINDOW_HANDLE 5 jegyű szám elég (súgóban még egy függvény forráskódja is van ennek a lekérdezéséhez), de a könnyebb értelmezhetőség miatt a globális változók nevébe a szimbólumot és idősíkot érdemes bele tenni.
Az MT4 build 900 következő problémával találkoztam, egy chartra 2 indikátort raktam fel, az egyik létre hozta a globális változót, GBP JPY60 67338 valami néven, a név generáláshoz a _Symbol MQL4 előredefiniált változót használtam, ez rakta bele a szóközt. A másik indikátor lekérdezte a globális változót, de nem létezett. A hiba az volt, hogy amit kérdezett:
GBPJPY60 67338 valami volt, de a _Symbol itt nem rakta bele a szóközt. Tehát _Symbol kénye kedve szerint vagy belerakja vagy kihagyja a szóközt. Kénytelen leszek szóköztelenítő függvényt írni, és át nézni az összes forráskódom van-e benne _Symbolra kényes rész. -
SzerzőBejegyzés