String globális változó? 2015-04-12T11:27:59+00:00

Címkézve: 

5 bejegyzés megtekintése - 1-5 / 5
  • Szerző
    Bejegyzés
  • KDani
    Tag
    Bejegyzések száma: 8

    Szia Radu,

    Szeretnék Terminálon belül a robotok között string alapú adatcserét biztosítani, de nagy sebességgel(fájlt ezért nem erőltetem). A global változó csak double lehet. Hogyan tudok hasonló módon string adatot tárolni? A globális változó azért jó itt, mert azt tárolja a rendszer és ha netán újraindul a MT4 akkor is visszatölti. Van valami ötleted? A Windows SDK ESENT könyvtára jó lehetne, de ahhoz, meg nem találtam példát, hogyan tudom bepakolni MT4 alá.

    köszi!!

    Dani

    KDani
    Tag
    Bejegyzések száma: 8

    A végső cél az, hogy ne kösse be a robot ugyanazt a jelet kétszer. A robot fut ugyanazon a devizapáron több idősíkon is és meg kell oldanom, hogy tudjanak róla, ha az egyik már megtalálta a jelet, amit a másik is éppen bekötne.

    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    A több idősíkra történő elkülönített GV adatmentést én úgy szoktam megoldani, hogy külön hozok létre a magic számokon belül idősík-adatokat: pl. ha a robot neve ‘robot’, akkor a következő gv neveket adom:

    • _robot_EURUSD_90_M1_
    • _robot_EURUSD_90_M5_
    • _robot_EURUSD_90_M15_
    • _robot_EURUSD_90_M30_
    • stb.

    A robot a robotneve, az EURUSD az instrumentum, a 90 a magic szám.

    Ezen felül még odafigyelek arra is, hogy egy plusz _t szövegrészt adok hozzá a GV névhez akkor, ha IsTesting módban vagyunk. A neveket az OnInit() eljárásban gyártom le, szuperglobális stringekben tárolom és természetesen – amennyiben backtesztről van szó – OnDeInit() -ben törlöm az érintett GV-ket.

    String adatok tárolását ezen túlmenően régen szintén GV-vel, mostanában ezzel oldom meg. MQL5-re készült, de minimális (tényleg!) munkával MQL4 alatt is csodálatosan működik.

    A ‘régen gv-ben tároltam a stringeket’ alatt arra gondolok, hogy a globális változó nevében gyakorlatilag kis túlzással bármilyen karakter előfordulhat. Definiáltam egy alap sablont, amire lehet matchelni a ciklusos ellenőrzéssel, utána pedig had’ szóljon. Például: a feladat az volt, hogy egy fő instrumentumon futtatott robot további instrumentumokon kössön pozíciót. A bevont alinstrumentumok nevei folyamatosan változtak, azokat muszáj volt GV-ben tárolni. Így az alap változónév – a fenti példa alapján – _robot_EURUSD_90_pozicio_ volt, az adatokat így tároltam:

    _robot_EURUSD_90_pozicio_EURUSD_
    _robot_EURUSD_90_pozicio_GBPUSD_
    _robot_EURUSD_90_pozicio_EURJPY_

    A GV-k értékeiben további hasznos double adatot lehetett tárolni. Volt, hogy oda raktam pl. az érintett robot magic számát, hogy még egyszerűsítsek a keresésen.

    Ez utóbbi helyett ma már az INI megoldást választanám.

    KDani
    Tag
    Bejegyzések száma: 8

    köszi!! Named Pipe-ot használtál már MT4 alatt?

    #import "kernel32.dll" //http://msdn.microsoft.com/en-us/library/windows/desktop/aa365467%28v=vs.85%29.aspx
            int CreateNamedPipeW(string PipeName,int dwOpenMode,int dwPipeMode,int nMaxInstances,int nOutBufferSize,int nInBufferSize,int nDefaultTimeOut,int lpSecurityAttributes);
            int CreateNamedPipeA(string PipeName,int dwOpenMode,int dwPipeMode,int nMaxInstances,int nOutBufferSize,int nInBufferSize,int nDefaultTimeOut,int lpSecurityAttributes);
            int ConnectNamedPipe(int hPipe, int lpOverlapped);
            int CallNamedPipeW(string PipeName, string outBuffer, int outBufferSz, uint& inBuffer[], int inBufferSz, int& bytesRead[], int timeOut);
            int CallNamedPipeA(string PipeName, string outBuffer, int outBufferSz, uint& inBuffer[], int inBufferSz, int& bytesRead[], int timeOut);
            int ReadFile(int hPipe, int& inBuffer[],int NumberOfBytesToRead, int& bytesRead[], int lpOverlapped);
            int WriteFile(int hPipe, string sBuffer, int NumberOfBytesToWrite, int& bytesWritten[], int lpOverlapped);
            int FlushFileBuffers(int hPipe);
            int DisconnectNamedPipe(int hPipe);
            int CloseHandle(int hPipe);
    #import
    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    Egyszer asszem nézegettem, de nem alkalmaztam – nem emlékszem már, miért. Van MQL4/MQL5 lib is belőle a Codebase-n, nézz körbe arrafelé!

5 bejegyzés megtekintése - 1-5 / 5

A hozzászóláshoz jelentkezz be!

Adhatok Neked még több ingyenes tartalmat?

Értesítelek hetente megjelenő új tartalmaimról.