iMAOnArray 2015-10-05T19:44:01+00:00
15 bejegyzés megtekintése - 1-15 / 15
  • Szerző
    Bejegyzés
  • BillyBill
    Tag
    Bejegyzések száma: 33

    Szia Radu!

    Ha nem gond, kérnék egy kis segítséget, csúnyán elakadtam. Erősen leegyszerűsítve:

    Adott egy indikátor, amely az indításakor kezdi el az adatgyűjtést (tehát nincsenek histórikus adatok).
    A példa kedvéért ez az adat legyen az épp aktuális Close[0], a chart legyen M1-es.
    Ahogy telnek a percek, gyűlnek az újabb Close[0]-ok, és most jön a lényeg:
    szeretném megkapni a Close[0]-ok exp.mozgóátlagát az iMAOnArray segítségével.
    A zanzásított kód:

    //----------------------------------------------------------------------------
    //--- indicator buffers
    double         MainBuffer[];
    double         SignalBuffer[];
    
    extern int SPeriod=5;
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //--- indicator buffers mapping
       IndicatorDigits(Digits);
       SetIndexBuffer(0,MainBuffer);
       SetIndexBuffer(1,SignalBuffer);
    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total,
                    const int prev_calculated,
                    const datetime &time[],
                    const double &open[],
                    const double &high[],
                    const double &low[],
                    const double &close[],
                    const long &tick_volume[],
                    const long &volume[],
                    const int &spread[])
      {
    //---   
    
       MainBuffer[0]=Close[0];
       SignalBuffer[0]=iMAOnArray(MainBuffer,0,SPeriod,0,MODE_EMA,0);
    
    //--- return value of prev_calculated for next call
       return(rates_total);
      }
    //----------------------------------------------------------------------------

    Hogyan írnád át ezt a kódot, hogy értelmes eredményt kapj a SignalBuffer-nek?
    (A példaprogram nyilván teljesen értelmetlen, de a válaszodból megkapom, amire kíváncsi vagyok.)
    Előre is köszi!

    BillyBill
    Tag
    Bejegyzések száma: 33

    Talán kicsit értelmesebben hangzik így:
    Adott egy tömb, ami 0 elemet tartalmaz a program indításakor, és minden újabb tickkel gyűlnek bele az adatok. Ennek a tömbnek a mozgóátlagát szeretném megkapni az iMAOnArray segítségével.
    Egy egyszerű ciklussal kapnám meg az értékeket:

    for(int i=0; i<Counter; i++)
         {
          Signal[i]=iMAOnArray(Main_Array,0,Ma_Period,0,MODE_EMA,i);
         }

    A gondom az, hogy az első x érték értelmezhetetlen lesz, gondolom azért, mert nulláról indítva átlagol.
    Mi a megoldás?

    BillyBill
    Tag
    Bejegyzések száma: 33

    Sikerült. 😉

    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    Örülök. Bár azt figyelembe vagy kénytelen venni, hogy perces a legkisebb időfelbontás, emiatt a tick alapú megjelenítés nem lehetséges.

    BillyBill
    Tag
    Bejegyzések száma: 33

    Pont ez a poén, hogy tick chartról van szó. 😉
    A lényeg az volt, hogy csak akkortól kezdje a számolást, amikor már van elég (azaz periódusnyi) adat a feed tömbben. Tudtam, hogy erről van szó, csak bénáztam az indexeléssel.

    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    Az idő tengelye biztosan nem lesz egy percnél kisebb felbontású, hiszen azt még offline charton sem tudod elérni.

    BillyBill
    Tag
    Bejegyzések száma: 33

    Pedig bizony kisebb az. Olyan gyakorisággal lépteted a chartot, ahogy akarod. Nyilván független az “anyachart” időskálájától.

    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    Ez offline chart? Csinálnál egy screenshotot? Az adat ablakban eleve nincs másodperc a gyertyakezdethez, ezért írom.

    BillyBill
    Tag
    Bejegyzések száma: 33

    Az adat ablak nem játszik, ez attól független. Emilben ment a screenshot.

    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    Nem kaptam tőled e-mailt, radu kukac radu.hu -ra küldted?

    BillyBill
    Tag
    Bejegyzések száma: 33

    Nem, hanem a blogos emailre. Elküldöm újra.

    BillyBill
    Tag
    Bejegyzések száma: 33

    Hali Radu, struktúrákban otthon vagy? Struktúra egyik elemét ki lehet emelni tömbként, hogy az iMAOnArray számára hozzáférhető legyen?

    Radulovic Attila
    Tag
    Bejegyzések száma: 644

    Nem dolgozom struktúrákkal. Az iMAOnArray speciális tömböt fogad, szóval ha a tömb típusa stimmel, még akár működhet is. Ki kell próbálni.

    Itt van leírás a struktúrákról és osztályokról, hátha találsz idevágó infót.

    Illetve itt van még szó a struktúrákról a “Arrays in structures” bekezdésben.

    mpeter
    Tag
    Bejegyzések száma: 38

    Az iMAOnArray első paramétere dinamikus double tömb. Az alábbi kód szintaktikailag helyes (nincs fordítási hiba)

    struct sTeszt
      {
        int    id;
        double db[];
      };
    
    sTeszt Teszt[10];
    
    void OnStart()
      {
        // ... Itt kell adatokkal feltölteni ...
    
        for( int i = 0; i < ArraySize( Teszt ); i++ )
        {
          if( ArraySize( Teszt[ i ].db ) > 10)
          {
            Print( iMAOnArray( Teszt[ i ].db, 0,10 ,0 ,MODE_EMA, 0 ) );
          }
        }
      }
    
    BillyBill
    Tag
    Bejegyzések száma: 33

    Köszi a választ. A szintaxis tényleg jó, de sajnos nem alkalmazható arra, amire nekem kell. Nálam így nézne ez ki (a struct-ban nincs tömb).

    struct sTeszt
    {
    int id;
    double db;
    };
    sTeszt Teszt[10];
    //
    for(int i=0; i<10; i++)
    {
    Print(iMAOnArray(???,0,10,0,MODE_EMA,i));
    }

    A kérdőjel helyére kellett volna az okosság, de nem lelem (valószínűleg azért, mert nincs).
    Az általad javasolt verzió sajna nem jó nekem, egyrészt feleslegesen duplikálja a tömböt (db, Teszt – nekem csak a Teszt kellene tömbként), másrészt nincs előnye így a struct-nak azzal szemben, mintha az elemeit használnám külön-külön tömbökként.
    De, köszi ismét! 🙂

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

A hozzászóláshoz jelentkezz be!

Adhatok Neked még több ingyenes tartalmat?

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