Hozzászólások
-
SzerzőBejegyzés
-
Visual Studio-val nekem is rendesen működik, a fenti linken pontos leírás van hozzá. Kell hozzá a def file, igen. A kérdés az lett volna, hogy G++ al konzolból hogyan fordítok; gondolom egy parancs lenne hozzácsapni a def-et, de valahogy sehogy nem akart működni.
Bár kicsit zavar, de el tudom fogadni: amikor DLL-re van szükségem (azóta nem is kellett) én is Visual Studio-t használok.
Hozzászólás: Indikátor lassulás, indokolatlan újratöltés #4087Tényleg szar, dobtam.
Köszönöm!Hozzászólás: Indikátor lassulás, indokolatlan újratöltés #4084Arra is gondoltam, hogy ugyanaz a problémám mint a hosszabb távú backtestnél: olyan chartokról akarok adatot szedni amiket valójában soha nem nyitottam meg a MetaTraderben, vagyis gyakorlatilag semmi gyertyaadatom nincs. Tehát elvileg csak rá kell venni a termált, hogy szerezze be azokat a gyertyaadatokat, amiknek megfelel a szimbólum-idősík tömb kettős.
Lehet, hogy ez még tovább gyorsítana rajta, de ettől függetlenül is érthetetlen, hogy második-harmadik nekifutásnál miért megy döcögve, ha elsőre gond nélkül megcsinálja egy másodperc alatt.
Azt tartom valószínűnek, hogy minden iCustomnál újra „felcsatolja” magának az EA, de közben otthagyja a régit is, így minden vizsgálatkor ArraySize(data)*ArraySize(tf) darab indikátorral többet kell a memóriában eltárolni és nem mellesleg újraszámolni.
Tehát tényleg csak azt kellene elérni, hogy miután használtam az indikátort, azonnal kilőjem a memóriából.
Hozzászólás: Indikátor lassulás, indokolatlan újratöltés #4083Minimálisat gyorsított a folyamaton, hogy az iCustom függvényhívásnál a változókat előre konvertálva úgy adom át, ahogy azt az indikátor várja.
double(var1), int(var2), bool(var3), ...
Egyéb ötlet?
Hozzászólás: Indikátor lassulás, indokolatlan újratöltés #4082Találtam egy ilyet:
http://forum.mql4.com/48398#643743Oké, backtestre jogos, erre nem figyeltem: nincs meg minden timeframe-em.
Viszont a chartra helyezésnél attól még nem kellene lelassulnia és második lekérésnél megenni a processzort.Ha nincs más megoldás, az is megfelelne, ha sikerülne valahogy teljesen kiirtani a memóriából az indikátort a vizsgálatom végén. Lényegében reprodukálnám azt az állapotot, amikor először indítom el az EA-t.
Hozzászólás: Számlák közti különbség #3966Sikerült működésre bírni, köszönöm!
Viszont utána rájöttem, hogy mégsem kell az egész EA-t átírni, mert nagy nehezen feltűnt, hogy ilyen számlákon nem csak „EURUSD”, hanem „EURUSD.” chart nyitását is felajánlja a MetaTrader. Azon pedig működik az eredeti kódom is, amit eddig használtam.
Hozzászólás: Számlák közti különbség #3933Köszönöm, tényleg ez volt a baj első körben, egy if-fel validáltam ezt a „.” dolgot.
Elkezdtem viszont más hibaüzenetet kapni.
Az alábbi teszt script eredménye:
ticket: -1
lasterror: 129void start(){ string symbol=Symbol(); if(StringLen(symbol)==6) symbol+="."; string minlot=MarketInfo(symbol,MODE_MINLOT); int magic=0; RefreshRates(); int ticket=OrderSend(symbol,OP_BUY,StrToDouble(minlot),Ask,3,NULL,NULL,NULL,magic,NULL,"LimeGreen"); Alert(ticket+" || " + GetLastError()); }
Hogy lehet invalid price (129), amikor a MarketInfo-t használja az Ask? Próbáltam így is:
int ticket=OrderSend(symbol,OP_BUY,0.1,NormalizeDouble(Ask,Digits),3,NULL,NULL,"",magic,0,"LimeGreen");
Érdekes, hogy az eddigi éles és demo számlákon az elmúlt 2 évben soha nem volt ezekkel probléma.
Hozzászólás: Számlák közti különbség #3929GetLastError() = 133
Hozzászólás: Indicator chartra helyezése #3508Elképesztő, hogy MQL4-ben is van „delete”, de „add” már nincs :D
http://docs.mql4.com/chart_operations/chartindicatordeleteMondjuk ez is sántít egy kicsit: megvárja a következő tick-et, mire végre is hajtja a delete parancsot.
Hozzászólás: Indicator chartra helyezése #3506MQL5-ben:
http://www.mql5.com/en/docs/chart_operations/chartindicatoraddNekem ugyanez kellene 4-ben.
Hozzászólás: Kommunikáció webszerverrel #3503A 600-as build óta a fent linkelt megoldás nem működik, de találtam egy másikat, gondoltam megosztom.
http://www.mql5.com/en/code/11119A használata csak ennyi:
string result = httpGET("http://somethingsomethingsomething.com/hm.php"); Comment(result);
Hasznos információk:
– érdemes megcsinálni a két apró módosítást, amit az mql fórum harmadik commentje ír
– ha UTF-8-ban van a PHP-d, akkor BOM nélkül töltsd fel, különben az eredmény beolvasásakor találsz néhány karakternyi szemetet a string előtt
– ha mindenképpen ékezetes karaktereket akarsz beolvasni, akkor használj ASCII kódolást
– amikor futtatod a programod, ne felejtsd el engedélyezni a külső DLL-ek használatátItt a javított kód annak, aki nem tudja hol kell módosítani.
//+----------------------------------------------------------------------------+ //| mql4-http.mqh | //+----------------------------------------------------------------------------+ //| Built by Sergey Lukin | //| contact@sergeylukin.com | //| | //| This libarry is highly based on following: | //| | //| - HTTP Wininet sample: http://codebase.mql4.com/8115 | //| - EasyXML parser: http://www.mql5.com/code/1998 | //| | //+----------------------------------------------------------------------------+ #import "wininet.dll" #define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100 // Forces the request to be resolved by the origin server, even if a cached copy exists on the proxy. #define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 // Does not add the returned entity to the cache. #define INTERNET_FLAG_RELOAD 0x80000000 // Forces a download of the requested file, object, or directory listing from the origin server, not from the cache. int InternetOpenW( string sAgent, int lAccessType, string sProxyName="", string sProxyBypass="", int lFlags=0 ); int InternetOpenUrlW( int hInternetSession, string sUrl, string sHeaders="", int lHeadersLength=0, int lFlags=0, int lContext=0 ); int InternetReadFile( int hFile, uchar & sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead ); int InternetCloseHandle( int hInet ); #import int hSession_IEType; int hSession_Direct; int Internet_Open_Type_Preconfig = 0; int Internet_Open_Type_Direct = 1; int hSession(bool Direct) { string InternetAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"; if (Direct) { if (hSession_Direct == 0) { hSession_Direct = InternetOpenW(InternetAgent, Internet_Open_Type_Direct, "0", "0", 0); } return(hSession_Direct); } else { if (hSession_IEType == 0) { hSession_IEType = InternetOpenW(InternetAgent, Internet_Open_Type_Preconfig, "0", "0", 0); } return(hSession_IEType); } } string httpGET(string strUrl) { int handler = hSession(false); int response = InternetOpenUrlW(handler, strUrl,"",0, INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD); if (response == 0) return(false); uchar ch[100]; string toStr=""; int dwBytes, h=-1; while(InternetReadFile(response, ch, 100, dwBytes)) { if (dwBytes<=0) break; toStr=CharArrayToString(ch, 0, dwBytes); } InternetCloseHandle(response); return toStr; }
Hozzászólás: Hiányos teszt rekonstruálása #2978Pesten vagyok, elsősorban egyetemi hallgató, közel 0 óra szabadidővel. (Pont emiatt fordulok meg a fórumon leginkább nyáron és télen.) De egy szegedi barátomnak megígértem, hogy hamarosan elugrom hozzá, akkor összefuthatunk. Vagy ha véletlen vasárnap járnál Pesten, szólj :)
Hozzászólás: Hiányos teszt rekonstruálása #2976Köszönöm a választ!
Néhány millió volt a terv, de pár száz ezer forinttal mindenképpen indítottam volna. Szóval köszönöm. Most már tényleg kezd esedékessé válni valamiféle sörkérdés.Hozzászólás: Kommunikáció webszerverrel #2701Leírom, hogy mire jutottam hajnalban.
Ez a script működik:
http://forum.mql4.com/6778#98936A robot betöltésekor engedélyezni kell a külső DLL importot (mert ugye használja wininet-et), és a parancsok végrehajtását kézi megerősítés nélkül. Emiatt nem működött nekem tegnap az EA.
Két fontos észrevétel:
01.: ANSI karakterkódolást kell használnia a PHP fájlnak.02.: Ez a script nem tud konkrét fájlt lekérni, hanem a mappában található index-et keresi, mindegy mit írsz URL-nek. Tehát http://valami.com/forex/update.php -t nem tudod behívni, mert igazából a http://valami.com/forex/index.php -t keresi. Ez nem is lenne nagy probléma.
A baj az, hogy így nem tudsz adatot küldeni a PHP-nek.
Fejben van már erre a megoldásom. Ha .htaccess-ben beállítod, hogy a valami.com/forex-ben belül bármilyen hivatkozást igazából a valami.com/forex/index.php-re dobja a szerver, akkor URL szétbontással el tudod érni a kommunikációt, a következőképpen:
Például el akarod küldeni, hogy MIKOR történt tőkeemelkedés, és MENNYIRE.
Így adnád be rendesen a PHP-nek:
http://valami.com/forex/index.php?date=201309161313&equity=31200Igen ám, de a forex mappában csak simán az index.php-t akarja megnyitni.
Viszont ha a .htaccess-ben beállítod, hogy a forex mappán belül bármilyen lekérést oda irányítson, akkor így nézhet ki a megnyitott url:http://valami.com/forex/201309161313/31200
A forex mappában az index.php-val pedig a „/” jelek szerint szétszeded az URL-t egy tömbbe, és megvannak az adatok, amikkel tudsz dolgozni.
Ezt még nem írtam meg (majd este lesz rá talán időm), csak ezt a megoldást találtam ki. Nem tudom, ennek van-e buktatója.
Ha van jobb megoldás, azt örömmel várom. Esetleg egyszerűen csak ki kellene egészíteni a script-et, hogy konkrét fájlt le tudjon kérni… Ez lenne a legjobb.
-
SzerzőBejegyzés