iMAOnArray2015-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: 646

    Ö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: 646

    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: 646

    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: 646

    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: 646

    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.

Hozzájárulok, hogy az adatvédelmi nyilatkozat szerint biztonságosan kezeld megadott adataimat, valamint hasznos anyagokat és egyedi ajánlatokat küldj nekem termékeiddel, szolgáltatásaiddal kapcsolatban e-mailben