Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: terminal .exe meghívása .ini vel és a "/skipupdate" #4167
Köszönöm!
Ezt ki fogom próbálni.Hozzászólás: terminal .exe meghívása .ini vel és a "/skipupdate" #4165Az ini-t nem törli. Ha frissít akkor kilép és újra indul, de akkor már az ini nélkül (mintha csak ráklikkelnél az ikonra). Tehát nem tölti be még egyszer az ini-t. Nem volna semmi gondom akkor sem, ha frissítene és amikor elindítja az új verziót akkor azokkal a paraméterekkel indítaná el ahogy eredetileg kellett volna.
Sajnos nem tudtam eddig olyan kódot beírni ami ellenőrizné, hogy az adott terminál azt teszi-e amit kell.
Ha már fut, akkor nem lehet újra elindítani, előbb be kell zárni. Ezzel meg az a gond, hogy nem tudja hogy a két terminál közül melyiket kell bezárni.Azon már végig mentem fejben hogy működhet-e az, hogy elindítja a robot a másik terminált, vár egy kicsit aztán leállítja, és újra elindítja de már az ini-vel együtt. Viszont a leállítást nem tudom kivitelezni. Esetleg azt is egy ini-vel ami leállítja a terminált, viszont ha frissít és újraindul, akkor megint csak ott van nekem egy futó terminál (ami nem csinál semmit), amit nem tudok bezárni (mivel másodszorra megint csak ini nélkül indult el).
Ez a számítógép amin fut leginkább egy szerverre hasonlít, és nincs rajta monitor sem. Tehát RDP-vel, vagy vnc-vel tudok ránézni (ha bezárom az ablakot (rdp, vnc, stb. :) ), akkor kijelentkezteti a Windows a felhasználót az Active session-ból…). Makrót nem tudok olyan gépen futtatni amelyikből épp kijelentkezett a felhasználó, tehát ott kellene ülnöm a gép előtt… Vagyis folyamatosan bejelentkezve kellene maradnom ami nem lehetséges az időkorlátok miatt. Meg a két gép működtetése mégis csak értelmetlen.
Ha létrehozok egy virtuális gépet a „szerveren” belül, akkor futnak a makrók amik elindítanák/leállítanák a terminálokat, viszont olyan memória címre próbál írni az mt4 a vm-ben, amit akadályoz a Windows és „Az alkalmazás leállt” típusú hibaüzenetet kapok minden terminál indításkor (A terminál üresen nem áll le, de ha a robottal indul, akkor jönnek a problémák). Arról nem is beszélve, hogy ahhoz mindennek a vm-en belül kellene futnia. Tehát elég erős gép kellene hozzá. A MacroScheduler nevű program pedig nem biztos hogy tudja azt ami nekem kell, és ahhoz elég drága, hogy egyszer kipróbáljam (azt írják, hogy bejelentkeztet egy usert, tehát szerintük tudja).
Szóval a legjobb megoldás a frissítés akadályozása, vagy a terminál robottal való bezárása lenne vagy az, hogy a Metaquotes kijavítaná ezt a problémát.
Köszi még egyszer!Hozzászólás: terminal .exe meghívása .ini vel és a "/skipupdate" #4151Tulajdonképpen én korábban már bemásoltam azt a konfigurációt amit használok.
„;start strategy tester”
Ez egy teszter. Egy stratégia optimalizáció. Az eredményt pedig a Metatrader egy .htm fájlban tárolja az optimalizáció végeztével. Ebből lehet kinyerni az adatokat, és pl. exel táblázatban szűrve a legjobb paraméterekkel futtathatjuk a robotunkat. Nem kell a gép előtt ülni, csak ha már kész van ( vasárnap este…).
Itt a forrás: http://forum.mql4.com/33965Automatikusan indítja a robot a másik mappába telepített terminal-t ahová már be is másolta az ini fájlt, és amikor kész akkor elküldi e-mail-ben az eredményt (külső dll segítségével), vagy küld egy értesítést hogy kész. Esetleg egy online fájl szinkronizációval (dropbox, cubby, drive stb…) a gépedre is varázsolja.
Az ini fájl ott van a terminal.exe mellett. Tehát nem adok meg neki bonyolult útvonalakat. így néz ki: „C:\………\Terminal\…\terminal.exe optimise.ini” . (Nyilván a Windows csodája miatt a rendszer mappája nem mindig a Program Filesben van, de ez nem érdekes.)
Mi (értsd te és én már leveleztünk korábban priviben akkor konkrétan elküldtem neked egy expertet is ami akkor még nem működött… (Igen… tudom… XD)) már megbeszéltük kb. egy éve, hogy az automatikus optimalizáció egy bonyolult dolog, és legjobb az ilyet c-ben megírni… De végül megoldódott a dolog, és mq4-ben is működik.Sajna eléggé elmentünk a témától, nem azzal volt gondom, hogy indul-e az ini-vel hanem az, hogy az update sok újabb kis bug-ot tol minden héten az arcomba. És mellesleg teljesen értelmetlenül. Amikor konfigurációs fájllal indítom el, nem is szabadna restartolnia! Persze én hiába is írok nekik. Nem akarom elhinni, hogy ilyen logikai hiba senkinek nem böki a szemét rajtam kívül. Gondolom nem akarsz újabb hibajegyet generálni erről is… :)
A kérdésemre viszont kaptam egy elég jó ötletet, amit köszönök szépen.Félek bármennyire is igyekszem nem sikerül minden kérdésedre maximálisan megfelelnem, talán esetleg félre értettem a kérdést, vagy csak másra fókuszáltam írás közben.
Ha vannak kérdéseid ezzel kapcsolatban, szólj (szájba rágósan írj (!) mert nem biztos, hogy egy rugóra jár…), és írok neked (akár privátot is).Hozzászólás: terminal .exe meghívása .ini vel és a "/skipupdate" #4149Köszönöm az infót, ezt fogom alkalmazni!
„Egyébként hol van ez a gép? Mi a cél? Már csak hogy értsem, miért és milyen felhasználókat kell korlátozni:)”
Ha korlátozom a mappához való hozzáférést a system (ill. a létrehozó tulajdonos) számára akkor semmi sem fog hozzáférni (vagyis fájlokat másolni) a webinstall tartalmához tehát soha sem fog frissíteni (ez a célom). De ez a megoldás nem jó, mert engem is akadályoz, a hozzáféréshez (bonyolult vissza csinálni, ha mégis frissítenem kell). Nem a felhasználó korlátozás a cél.
A gép otthon van és nincs egyéb funkciója. Nem is fér hozzá más (fizikailag :) ).Köszi még egyszer!
Hozzászólás: terminal .exe meghívása .ini vel és a "/skipupdate" #4141„Mellesleg, meg egy idő múlva a terminál frissítési figyelmeztetéssel kilép.”
Értem ez alatt, hogy akár fél évig is működik az adott verzió, de egy idő múlva kényszerít a frissítésre és az adott verzió nem is lesz tovább használható. Erre gondoltam.„Feladatütemezőből rendszeresen futtatott WebInstall törlés.”
Azt hogyan kell? Ez valami nagyon egyszerű és kézenfekvő megoldás lehet, mert eddig ez nekem nem jutott az eszembe (jellemzően mindig a legkomplikáltabb megoldást választom mert nem vagyok okos)! XD
Már itt is valami kódon, vagy hozzáférés korlátozáson gondolkoztam…Hozzászólás: terminal .exe meghívása .ini vel és a "/skipupdate" #4127Szia!
Legvégső esetben arra gondoltam, hogy korlátozom a létrehozó tulajdonos hozzáférési jogát a biztonsági házirendben. Csak éppen ezt nem tartom szerencsésnek, mert kizárom a user-t is, és elég macerás visszakapcsolni. Mellesleg, meg egy idő múlva a terminál frissítési figyelmeztetéssel kilép. Ezértlett volna jó egy másik megoldás.
Gondoltam még arra, hogy minden indítás előtt egy .bat fájllal vagy makróval kitöröltetem a webinstall tartalmát (ha nincs benne fájl, nem frissít…), de azt sem tartom elegánsnak. Ez a /skipupdate meg tök jó lenne, ha nem akadna össze az .ini-vel. Idönként elindul és nem frissít, máskor meg indítás után kilép, és nem indul újra.Ami az ini-t illeti, a felhasználók keze eléggé meg van kötve. Az alábbiakat engedi manipulálni:
Common settings:
pl.:; common settings Profile=test 3 MarketWatch=set.set Login=12345 Password=xxxxxx Server=MetaQuotes-demo AutoConfiguration=false DataServer=192.168.0.1:443 EnableDDE=true EnableNews=false Proxy Server Settings
expert beállítás:
; experts settings ExpertsEnable=true ExpertsDllImport=true ExpertsDllConfirm=true ExpertsExpImport=true ExpertsTrades=true ExpertsTradesConfirm=false
expert script, vagy template indítása parancsfájllal:
; open chart and run expert and/or script Symbol=EURUSD Period=H4 Template=popular.tpl Expert=MACD Sample ExpertParameters=macd.set
Én ezt használom:
;start strategy tester ExpertsEnable=false TestExpert=robotom.ex4 TestExpertParameters=robotom.set TestSymbol=EURUSD TestPeriod=15 TestModel=1 TestRecalculate=false TestOptimization=true TestDateEnable=true TestFromDate=2014.11.28 TestToDate=2015.04.10 TestReport=Report_EURUSDmicro_2015.04.10.htm TestReplaceReport=true TestShutdownTerminal=true TestSpread=16.00
stb…
A részletes infó itt található.
http://metatrader.helpmax.net/en/tools/configuration-at-startup/Szóval nem egy extra. Viszont ezek mind megszűnnek létezni amikor az mt4 kitalálja hogy most aztán frissít egy jót.
És persze én hiába is írok nekik, le sem …. amit írok. Egyszer sem jeleztek vissza, és nem is tettek semmit, pedig az ő nyelvükön szólt az üzenet. Úgy gondolom, hogy ez egy hiba, és nem okozhatna gondot beírni a kódba, hogy ha ini-vel indítják el, ne frissítsen. Szerintem ez tök elvárható lenne. A terminál ki is írja sikeres indulás után, hogy „parancsfájllal” indult, log-olja is. Mégis kilép…
Ha te írsz nekik, azt elolvassák? Ha igen, nem javasolnád nekik?Szia!
Működik az OnTimer hétvégén!
Köszi az emlékeztetést. Végiggondoltam, és hát próbálkozhat a hétvégén is mert kap timer tick-et…
Eddig még nem bombázott hibaüzenetekkel, pedig van időalapú lezárás beállítva.
Szétválasztottam az „örökké futtatandó folyamatokat” a „pozíció kezelőktől”.
A „pozíció kezelők” és „örökké futtatandó folyamatok” az OnTick-ben vannak meghívva (tehát ott mindkettő indul), és csak az „örökké futtatandó folyamatok” :) vannak az OnTimer alatt. Szóval elvileg nem akar lezárni, megnyitni semmit hétvégén…
Szerintem ez így már jó.//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { AlwaysOn(); Expert (); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { AlwaysOn(); }
Köszi mégegyszer a segítséget!
Köszönöm a segítséged!
Hétvégén csekkolom.
A kód a módosításokkal most fut hibátlanul (péntek). Majd hétvégén jön a fekete leves.Még annyi, hogy úgy találtam, hogy az OnInit csak egyszer fut az induláskor és aztán leáll. Tehát max egyszer hívja meg az OnTicket… és hétvégén meg nincs tick…
Megint villámgyors voltál!
Mi történik, ha OnInitböl hívom meg? Milyen hibát eredményezhet?
A közölt kódban az EventSetTimer-t használom.
Ha nem az OnTick()-et használom akkor jó lehet a struktúra?
Tehát:if (!IsOptimization() && !IsTesting() && !IsVisualMode()) Expert();
Vagy hasonló.
Az OnTick itt csak egy feladatot hív meg… folyamatosan…Hozzászólás: kernel32.dll #3361Köszi bejglee!
Ez a megoldás nagyon elegáns (a 2.)! Adoptálom!
Sokkal jobb mint az enyém.Hozzászólás: kernel32.dll #3357Köszi a kiigazítást!
Valóban. Eddig ez nem okozott gondot, de ami késik…
Módosítottam.Hozzászólás: kernel32.dll #3351Nekem a fentiek nem működtek az új MT4-ben, ezért ezt használom:
#import "Kernel32.dll" int GetFileAttributesA(uchar& lpFileName[]); #import int init() { if (!FileExists( CustomIndicator+".ex4")) Alert(Symbol()+", "+comment+": Hiba! "+CustomIndicator+".ex4 nincs meg."); } //----------------------------------------------------------------------------- // function: FileExists() // Description: Check if a file exists //----------------------------------------------------------------------------- bool FileExists(string sIndicatorName) { char szFileName[255]; string sFile=TerminalPath()+"\\MQL4\\Indicators\\"+sIndicatorName; StrCpy(sFile,szFileName,sizeof(szFileName)); if (GetFileAttributesA(szFileName)==-1) { return(False); } return(True); } //----------------------------------------------------------------------------- // function: StrCpy() // Description: Copy string to null terminated char array // (for dll string parameter in mql4.5) //----------------------------------------------------------------------------- int StrCpy(string sSrc, uchar& szDest[], int iMaxSize) { for (i=0; i<MathMin(StringLen(sSrc),iMaxSize-1); i++) { szDest[i]=(uchar)StringGetChar(sSrc,i); } if (iMaxSize>0) szDest[i]=0; return(i); }
Hozzászólás: Access violation write to …. #3046Nagyon gyorsan reagáltál! :-) Köszi
Tulajdonképpen okultam ebből, és az egyik gépemen még nem frissült régi mt4-et letömörítettem zip-be.
Ha módosítanom kell, ha „bug” van, akkor kicsomagolom a rootba, és onnét indítom el. Szerencsére nem kell feltelepített verziónak lennie. Ha frissíteni akarja magát, akkor uac akadályozza, vagy a net le van kapcsolva. Az eredeti ex4 valóban jól fut. Itt annyi történt, hogy ott tároltam az mq4 fájlt is az expert mappában. Frissítéskor átmásolta, újraindult és lefordította magának az mq4-et.
A robotról annyit, hogy egy FFcal indikátort integráltam ami persze ugyanúgy nem indul ha lefordult a 600-ban. Ezeken kívül a következőket hívja meg: stderror.mqh, stdlib.mqh, Kernel32.dll. Az utóbbival kapcsolatban vannak kétségeim. A dll-nél azt írta, hogy az értéke mindenképpen nulla lenne. De ebben az esetben nem egy ilyen hibát írna ki a terminál. Ez a hiba szerintem leginkább egy írásvédett blokkba történő írási kisérlet megakadályozódása miatt lehet. A Hexa kód a memória, vagy valamilyen windowsos állomány dll-je, vagy exéje lehet.
Kivetteem a robotból a kernel32 behívást, és eltávolítottam a társított funkciókat. Sőt kivettem a custom indikátort is. Szerintem ez egy korai MT4 bug lehet, mert nem írt hibát lefordításkor, csaak amikor futtatni akartam. Viszont olyankor volt, hogy hirtelen halállal halt…
Nekem még kicsit szokatlan az „új” metaeditor (mivel ez az mt5-ből köszön vissza).
Biztosan van valami megoldás, ami megmutatja melyik sor okozza az összeomlást.
Nem akartam megtanulni az mq5-öt de már látom, az felé megyünk.Hozzászólás: Pozíciók darabszámának szabályozása #2824Szerintem próbálj meg valami hasonlót:
if(CountTradesByMagic(MasterMagicNumber)>0){ if(OrderType()==OP_BUY)LongAllowed=false; if(OrderType()==OP_SELL)ShortAllowed=false; } if((EMA0>SMA0 && EMA1<=SMA1) || (EMA0<SMA0 && EMA1>=SMA1)) enddirection=true; if((CountTradesByMagic(MasterMagicNumber)==0 || (CountTradesByMagic(MasterMagicNumber)>0 && OrderType()!=OP_BUY)) && (signal==0 || signal==2))LongAllowed=true; if((CountTradesByMagic(MasterMagicNumber)==0 || (CountTradesByMagic(MasterMagicNumber)>0 && OrderType()!=OP_SELL)) && (signal==0 || signal==1))ShortAllowed=true;
A signal =
** if(A_M5_Close-Támasz_MN1<=0.0005 && Vétel_M15==True && Eladás_M30==False && Eladás_H1==False && Vétel_H4==True && Vétel_D1==True){
Az enddirection-hoz bármilyen feltételt beállíthatsz a mozgó átlagok helyett.
Tulajdonképpen ez akadályozza meg a visszanyitást.if(!Ticket_EURUSD_Buy_a_MN1 && enddirection && LongAllowed){ ** if(A_M5_Close-Támasz_MN1<=0.0005 && Vétel_M15==True && Eladás_M30==False && Eladás_H1==False && Vétel_H4==True && Vétel_D1==True){
A magicnumber számláló elég egyszerü:
int CountTradesByMagic(int magic) { int count = 0; for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber()!=magic) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber()==magic) if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++; } return (count); }
Remélem tudsz kezdeni vele valamit.
Hozzászólás: Saját gombok létrehozása expertben #2780Köszönöm a segítséged!
Azért remélem, hogy talán valaki más is használ még valami hasonlót és esetleg közzé teszi.
Én nem nagyon írok c++ban :-( . Írtam mql-ben egyet, de iszonyat lassan reagált. Szerintem is egy dll-es megoldás segíthet. Ha találok megoldást, közzé teszem a kódot.
Köszi még egyszer, és köszi a gyors választ is! -
SzerzőBejegyzés