Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 650

 
AlexeyVik:

La mia comprensione è che ha bisogno di ottenere i parametri dell'oggetto da un altro grafico.

Se da un altro grafico, fategli usare la variante di funzione con l'identificatore del grafico.

nessun problema.

 
sergeev:

Se viene da un altro grafico, lascia che usi una variante di funzione con un identificatore di grafico.

Nessun problema.

Assolutamente giusto, ma non ho ancora avuto bisogno di usare un identificatore di grafico e sono solo teoricamente familiare con esso, ecco perché ho suggerito l'opzione di mappare gli oggetti al grafico corrente.
 
rov_kvn:



È fantastico! Questo era esattamente il punto. Grazie, caro compagno!
 
sergeev:

Se viene da un altro grafico, lascia che usi una variante di funzione con un identificatore di grafico.

nessun problema.


Da quanto ho capito, le uniche opzioni sono ObjectGetDouble() per il prezzo e ObjectGetInteger() per la data nel mio caso.

Cerco di ottenere il prezzo nel TF corrente con chart_id = 0

double price1 = ObjectGetDouble(0,"Supply",3);

- valore come dovrebbe essere. Ho provato entrambi gli ID e i valori da qui https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes invece di 0, ma restituisce 0. Come dovrebbe essere un chart_id "corretto"?

 
.roman.:

Da quanto ho capito, le uniche opzioni sono ObjectGetDouble() per il prezzo e ObjectGetInteger() per la data nel mio caso.

Sto cercando di ottenere il prezzo nel TF corrente con chart_id = 0

- valore come dovrebbe essere. Ho provato entrambi gli ID e i valori da qui https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes invece di 0, ma restituisce 0. Come dovrebbe essere un chart_id "corretto"?

chart_id = 0 non è il TF, è il grafico corrente. Dovete trovare il chart_id del grafico che ha l'oggetto desiderato. Questo è quello che non ho fatto perché era temporaneamente non necessario.
 
.roman.:

Da quanto ho capito, le uniche opzioni sono ObjectGetDouble() per il prezzo e ObjectGetInteger() per la data nel mio caso.

Cercando di ottenere il prezzo nel TF corrente con chart_id = 0

double price1 = ObjectGetDouble(0,"Supply",3);


cos'è il 3?



- Il valore è come dovrebbe essere. Ho provato entrambi gli ID e i valori da qui https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes invece di 0, ma restituisce 0. Come dovrebbe essere un chart_id "corretto"?

Cosa c'entrano i periodi TF con chart_id?


hai un buco irrealistico nella tua comprensione di cosa usare


Descriva il suo problema, non sia troppo oscuro e si aggiri intorno alla pancia.

Di cosa ho bisogno per recuperare dati da un oggetto?

- ObjectGet Perché non ti è piaciuto?

 
sergeev:

cos'è il 3?


Il valore del prezzo del limite inferiore del rettangolo. https://docs.mql4.com/constants/objectconstants/enum_object_property


cosa hanno a che fare i periodi TF con l'ID del grafico?

Non ho idea di come. Ecco perché sto cercando di farlo da solo e di chiedere, visto che ho fallito.

sergeev:
Descrivi il tuo compito, non diventare oscuro e brancolare nel buio. cosa ti serve esattamente? ottenere dati da un oggetto? - ObjectGet Cosa c'è che non va?

Lo stai chiedendo seriamente? Ho già scritto 3 volte che ho bisogno di ottenere i dati dei rettangoli (2 coordinate di prezzo e due coordinate temporali utilizzate per costruire i rettangoli) da altri due timeframe (H4 e D), pur essendo sul terzo (H1).

ObjectGet non è adatto perché non può ricevere nulla da un altro lasso di tempo.

L'indicatore disegna rettangoli su tutti i timeframes e ho aggiunto del codice ad esso, trasmetterà le coordinate dei rettangoli di altri timeframes senza passare ad essi. Non so come spiegarlo in altro modo.

 
.roman.:

Il valore del prezzo del limite inferiore del rettangolo. https://docs.mql4.com/constants/objectconstants/enum_object_property



Non ho idea di come. Ecco perché sto cercando di farlo con l'istinto e chiedendo, perché non ha funzionato.

Lo stai chiedendo seriamente? Ho già scritto 3 volte che ho bisogno di ottenere i dati dei rettangoli (2 coordinate di prezzo e due coordinate temporali su cui costruire i rettangoli) da altri due timeframes (H4 e D), pur essendo sul terzo (H1).

ObjectGet non è adatto perché non posso ottenere nulla da un altro lasso di tempo con esso.

Disegna rettangoli su tutti i timeframes e sto aggiungendo del codice con il quale passerà le coordinate dei rettangoli di altri timeframes senza passare a questi. Non so come spiegarlo in altro modo.

Basta capire che un altro timeframe e un altro grafico o diagramma sono concetti diversi e, di conseguenza, approcci diversi alla soluzione dei problemi.
 
AlexeyVik:
Capire che un TF diverso e un grafico o un diagramma diverso sono concetti diversi e quindi approcci diversi alla soluzione dei problemi.

Quindi sono solo felice di capire e accettare qualsiasi soluzione, se ho delle idee. Ecco perché chiedo consigli su come implementarlo.
 
Top2n:

Grazie! Ricevuto. Tranne che con l'errore OrderSelect, non è chiaro come fermarsi se non percontinuare.

Cancellato il messaggio in ritardo, ha fatto quasi lo stesso come descritto.

A volte è possibile combinare il valore di ritorno e il segno di errore. Quando ha senso prendere qualche valore come segno di errore. Per esempio, un prezzo medio pari a 0.

Quindi, non appena OrderSelect() restituisce un segno di errore, la nostra funzione restituirà un segno di errore:

#property strict

/******************************************************************************/
double CenaUsrednenija(const int type,const int Magic){
  double nn = 0, bb = 0;

  for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() == Symbol() && OrderType() == type && OrderMagicNumber() == Magic)
      {
        double op = OrderOpenPrice();
        double llot = OrderLots();

        bb += op * llot;
        nn += llot;
        Print("  type = ", type, " Цена открытия = ", op, " Лот = ", llot, " itog = op * llot = ", op * llot, " factb = bb / nn = ", bb / nn);
      }
    } else {
      return 0; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
    }
  }

  return nn != 0 ? NormalizeDouble(bb / nn, _Digits) : 0; // Делить на 0 не следует
}

/******************************************************************************/
void OnStart() {
  Print("CenaUsrednenija(OP_BUY, 536525) = ", CenaUsrednenija(OP_BUY, 536525));
}

Se lo gestisco da solo, ce l'ho:

23:32:03 Script 1 EURUSD,H1: loaded successfully
23:32:03 1 EURUSD,H1: initialized
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.36626
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.367785
23:32:03 1 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525) = 1.36779
23:32:03 1 EURUSD,H1: uninit reason 0
23:32:03 Script 1 EURUSD,H1: removed

Sembra essere vero...

Sì, non ho usato un'espressione condizionale in Print() per evitare un'ipotetica divisione per 0, perché questa Print() è un debug...