15 bejegyzés megtekintése - 1-15 / 21
  • Szerző
    Bejegyzés
  • kelgyo
    Tag
    Bejegyzések száma: 13

    Radu!
    Szeretném beszínezni az RSI szinteket, hogy jobban lássam, és rectangle megoldással próbálkoztam de nem sikerült, tudnál segítséget adni?
    Választ előre is köszönöm

    kelgyo
    Tag
    Bejegyzések száma: 13

    annyit még hozzá tennék, hogy az RSI-ben alapban szeretném megoldani, úgy, hogy a sávok színeit, meg is adhassam

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Horizontális vonalak nem elegendőek?

    kelgyo
    Tag
    Bejegyzések száma: 13

    a különböző sávokat szeretném beszínezni, hogy jobban kiemeljem az RSI szalagját és a színsávok könnyebben megmutatják hol tart. Ezért nem elégséges, ha vonalakkal van megoldva, hanem a mögöttes terület szín külömbsége segít gyorsabb értékelésben.
    Tehát pl 30-50 sávot kék színűre. az 50-70 sávot zöldre és így tovább.
    Segítséget előre is köszönöm

    int Create()
    {
    datetime T1= TimeYear(1994);
    datetime T2=TimeYear(2033);
    ObjectCreate(„koci-1”,OBJ_RECTANGLE,1,T1,0,T2,0);
    ObjectSet(„koci-1”, OBJPROP_COLOR,bullszin);
    WindowRedraw();
    return (0);
    }
    egy ilyen megoldásban gondolkodtam, de mivel nem ismerem elég jól a nyelvet ezért biztos nem jól adtam meg a paramétereket.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Sebtében összerakva ez alapnak jó. Természetesen a függvény szebb paraméterezésével igényesebben meg lehet oldani.

    Figyelj oda arra, hogy a subWindow (alablak azonosító) helyes legyen! A 0 a chart azonosítója, 1-től kezdődnek az indikátorok. Indikátor ablakot a WindowFind() függvénnyel kereshetsz meg.

    void Create() {
    
       color
          bullszin = clrLime;              // Szín
          
       datetime
          T1= StrToTime("1994.01.01"),     // Dátum start
          T2= StrToTime("2033.01.01");     // Dátum end
          
       double
          RSI_Up = 33,                     // Szint (tól)
          RSI_Dn = 55;                     // Szint (ig)
       
       int
          subWindow = 1;                   // Indikátor subwindow azonosítója
          
       ObjectCreate(0, "koci-1", OBJ_RECTANGLE, subWindow, T1, RSI_Up, T2, RSI_Dn);
       ObjectSet("koci-1", OBJPROP_COLOR, bullszin);
       
       WindowRedraw();
    }
    
    kelgyo
    Tag
    Bejegyzések száma: 13

    Nagyon köszönöm, hogy szakítottál erre időt, be is raktam egy teszt sablonba, sajnos még nem jelenik meg a színezés, de próbálkozom vele, annyit tettem, hogy
    az
    int
    subWindow = WindowFind(„proba”);

    amit javasoltál hogy kérdezzem le a subWindow számát

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Ne a „proba” -ra keress rá, hanem pontosan arra az indikátorra, aminek az ablakát keresed. Helyezd fel tehát az RSI indikátort, és arra keress rá, amit az indikátor ablak bal felső sarkában kiír. Alapbeállításnál tehát:

    RSI(14)
    

    Kód szintjén:

       int
          subWindow = WindowFind("RSI(14)");
    
       Print(subWindow);
    

    Amennyiben a visszakapott érték -1, akkor nem jó szövegre kerestél rá.

    kelgyo
    Tag
    Bejegyzések száma: 13

    Megint kénytelen vagyok hozzád fordulni, mert a könyvben leírtak alapján próbálok előre jutni, de nagyon nem megy.

    extern color bullszin = clrWhite;
    extern color savszin = clrGold;

    int
    subWindow = WindowFind(„RSI(14)”); // Indikátor subwindow azonosítója

    //+——————————————————————+
    //| Custom indicator initialization function |
    //+——————————————————————+

    void Create() {

    //Print(subWindow);

    datetime
    T1= StrToTime(„1994.01.01”), // Dátum start
    T2= StrToTime(„2033.01.01”); // Dátum end

    double
    RSI_Up0 = 0, // Szint (tól)
    RSI_Up1 = 10,
    RSI_Up2 = 21; // Szint (ig)

    //——-subwin érték kiiratása———-
    string sub_Win = IntegerToString(subWindow);

    ObjectCreate(„SubWindow”, OBJ_LABEL,0, 0,0);
    ObjectSetText(„SubWindos”,sub_Win,12,”Comic sans Ms”,clrWhite);
    ObjectSet(„SubWindow”,OBJPROP_CORNER,3);
    //——————————————-

    ObjectCreate(0,”vonal”,OBJ_HLINE, subWindow,0,RSI_Up0);
    ObjectSet(„vonal)”,OBJPROP_COLOR, savszin);

    ObjectCreate(0,”koci-1″, OBJ_RECTANGLE, subWindow, T1, RSI_Up0, T2, RSI_Up1);
    ObjectSet(„koci-1”, OBJPROP_COLOR, bullszin);

    WindowRedraw();

    }

    A felesleges részt nem raktam be már azt is próbálgattam, hogy külön kiíratom a számot hogy lássam de nem ír ki semmit, vagyis jól adtam meg keresett ablakot, de próbáltam sima vonalat bele rajzolni – mint láthat- de azzal se jutottam közelebb, mit rontottam el?
    Választ előre is köszönöm
    Péter

    kelgyo
    Tag
    Bejegyzések száma: 13

    Radu!
    Nagyon szépen köszönöm a segítségedet, probléma megoldva, hamarosan a teljes megoldást is közzé teszem, ha valakit érdekelne.
    Péter

    kelgyo
    Tag
    Bejegyzések száma: 13

    Szóval ha valakit érdekel ez a probléma, egy megoldást már tudok mutatni íme:

    #property indicator_chart_window
    extern string alap ="Ird be az kivánt indicator bal felső sarkában lévő szöveget";
    extern string indicator = "RSI(14)";
    extern string datum ="Itt állathatod a sávok időbeli hosszát";
    extern datetime T1 = D'1994.01.01 00:00';
    extern datetime T2 = D'2034.01.01 00:00';
    extern string sav ="Sáv szélességének beállítása 0-100 érték között";
    extern double sav6 = 0.0;
    extern double sav5 = 0.0;
    extern double sav4 = 0.0;
    extern double sav3 = 0.0;
    extern double sav2 = 0.0;
    extern double sav1 = 0.0;
    extern double sav0 = 0.0;
    extern string savszin = "Sáv színének beállítása";
    extern color savszin6 = clrWhite;
    extern color savszin5 = clrWhite;
    extern color savszin4 = clrWhite;
    extern color savszin3 = clrWhite;
    extern color savszin2 = clrWhite;
    extern color savszin1 = clrWhite;
    extern color savszin0 = clrWhite;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int ertek = WindowFind(indicator);
    string szoveg = StrToInteger(ertek);
    
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //--- indicator buffers mapping
       
    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int deinit(){
    //ObjectDelete("Kijelzés");
    //ObjectDelete("vonal");
    ObjectDelete("koci-1");
    ObjectDelete("koci-2");
    ObjectDelete("koci-3");
    ObjectDelete("koci-4");
    ObjectDelete("koci-5");
    ObjectDelete("koci-6");
    ObjectDelete("koci-7");
    
    
    return(0);
    }  
      
    int start(){
       ObjectCreate(0,"koci-1", OBJ_RECTANGLE,ertek, T1, sav1, T2, sav0);
       ObjectSet("koci-1", OBJPROP_COLOR, savszin0);
       
       ObjectCreate(0,"koci-2",OBJ_RECTANGLE,ertek,T1,sav2,T2,sav1);
       ObjectSet("koci-2", OBJPROP_COLOR, savszin1); 
       
       ObjectCreate(0,"koci-3",OBJ_RECTANGLE,ertek,T1,sav3,T2,sav2);
       ObjectSet("koci-3", OBJPROP_COLOR, savszin2);
       
       ObjectCreate(0,"koci-4",OBJ_RECTANGLE,ertek,T1,sav4,T2,sav3);
       ObjectSet("koci-4", OBJPROP_COLOR, savszin3);
       
       ObjectCreate(0,"koci-5",OBJ_RECTANGLE,ertek,T1,sav5,T2,sav4);
       ObjectSet("koci-5", OBJPROP_COLOR, savszin4);
       
       ObjectCreate(0,"koci-6",OBJ_RECTANGLE,ertek,T1,sav6,T2,sav5);
       ObjectSet("koci-6", OBJPROP_COLOR, savszin5);
       
    //   ObjectCreate(0,"koci-7",OBJ_RECTANGLE,ertek,T1,sav7,T2,sav6);
    //   ObjectSet("koci-7", OBJPROP_COLOR, savszin6);
       WindowRedraw();
       
    return(0);
    }  
    

    Ami a lényeg, hogy kis hiba még van az indikátorban, de azt megoldani, már igen egyszerű feladat. Ami a lényeg, hogy több indikátorra is lehet használni pl Stohastikra, illetve minden olyanra, amelyik 0-100 között hozza a grafikonját. Ha valaki ezt átmásolja az editorba, egyből fordíthatja is le, és megy probléma nélkül, illetve a kis problémát aki lefordítja az első használatnál észre fogja venni, de könnyen javítható.
    Bárdos Péter

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Köszönöm, hogy megosztottad. Módosítottam a hozzászólásodat, hogy ki legyen emelve a kód. Milyen kis hibára gondolsz egyébként?

    kelgyo
    Tag
    Bejegyzések száma: 13

    A hiba annyi, hogy nem a megfelelő helyre rakja a színezést, és keresgélni kell ha valaki jól be akarja színezni az indikátorát. Ennyi, de majd ha lesz egy kis időm akkor megnézem az okát. minden esetre annyit hozzátennék, hogy az első 0.0 az a Nulla, az utolsó pedig minden esetben 100.0 kell hogy legyen, nem tudom mért nem tudok belépni, hogy módosítsam, de ez van.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Módosítom neked, csak konrkétan írd meg, mely változókat akarod milyen értékre javítani.

    kelgyo
    Tag
    Bejegyzések száma: 13

    az igazság az ez nem is akkora probléma ,mert gyorsan orvosolható viszont az, hogy nem veszi komolyan a program a rákeresést, az már nagyobb gond. pl
    RSI(14)- re megcsinálok egy beállítást, remekül végre is hajtja, ám ha ha előveszek még egy RSI(3)-at mondjuk akkor már nem különbözteti meg a két indikátort, és csak az elsőt fogja megtalálni erre mi a megoldás?

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Írd át a kódot úgy, hogy a WindowFind() -os lekérdezés minden start() -ban fusson le. Állandóan le kell futtatni, hiszen az ablaksorrend változhat.

    Az ObjectCreate elé rakj egy ObjectFind() -ot – azaz kérdezd le egy változóba, hogy jelenleg melyik alablakban van az objektum. Ennek kettős célja van:

    • ha már létezik az objektum, akkor meg kell nézned hogy az általad – WindowFind() segítségével – lekérdezett és az ObjectFind() által visszakapott szám megegyezik-e. Ha megegyezik, akkor a megfelelő ablakban létezik az objektum, vagyis nem kell mindig megpróbálni létrehozni (felesleges), elegendő csak a tulajdonságait álligatni, és azokat is csak akkor, ha szükséges.
    • ha nem egyezik meg (-1) vagy más ablakban van, akkor ki kell törölni az objektumokat ObjectDelete-tel, újra létrehozni őket.
15 bejegyzés megtekintése - 1-15 / 21
  • Be kell jelentkezni a hozzászóláshoz.