[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 410

 
Integer:


Sono impressionato dal livello di fantasia. Perché i dati sono disponibili solo per alcuni personaggi (che non sono stati aperti), e non per tutti nella revisione del mercato? Come faceva la funzione RefreshRates() a sapere che alcuni simboli dovevano essere aggiornati e altri no?

Junko, smettila di farneticare.


Dmitry, non litighiamo tra di noi. È meglio aiutarsi a vicenda, perché tu e Vadim avete avuto così tanti disaccordi ultimamente. Mi sono annoiato con i miei pensieri per un paio di giorni, non ho visitato il thread, e poi, come al solito, sono andato a guardare tutto. Ad essere onesti è stato divertente da leggere, davvero divertente! Ci sono tali scaramucce, e tali discussioni e congressi che mi chiedo solo :) Occasionalmente frasi e parole astruse, ma in realtà completamente senza senso. Non giudicherò nessuno, anche se sono lontano dal pensiero avanzato, io stesso ancora da imparare a imparare (in alcuni luoghi a nuotare), e poi capito e vedere chiaramente che il dibattito ha raggiunto l'assurdità completa.

Sembra essere un raduno di professionisti, altrimenti non lo direi. Non posso dire il contrario di voi, perché vedo che tutti capiscono quello che fanno. Ma ciò che è interessante è che i professionisti sono a volte in tali reazioni eccessive quando non vogliono ammettere i loro errori. Ma impariamo dai nostri errori! Non c'è niente di cui vergognarsi. Quindi, se qualcuno ha fatto un errore, non è necessario andare fuori tema, ma piuttosto confessare. Per decine di pagine di spazzatura del programmatore che si trasforma in personalità, non è in qualche modo un'opzione. Lo scopo di almeno questo ramo o forum non è quello di smerdarsi a vicenda da capo a piedi, ma di migliorare nella programmazione e condividere i nostri pensieri sull'argomento. Quindi viviamo insieme. Basta con i battibecchi.

 
hoz:

Bene, è così. Tu "leggi" la funzione riga per riga e capisci come funziona, se sei troppo annoiato per scriverla da solo, e tutto andrà a posto...

Avete un parametro di funzione:

è l'ora di apertura dell'ultima barra del giorno, cioè tutte le posizioni chiuse prima dell'apertura della barra del giorno corrente saranno calcolate e sommate! Ha senso? Quindi fissate un'altra barra, che è richiesta o qualunque cosa sia. Ma dovete vedere voi stessi.


spiacente, non funziona ancora.

Voglio che la funzione restituisca il profitto totale per oggi, non per oggi.

e non importa come ho provato ... non funziona. Il risultato è solo tutta la storia.

Se si sottrae il PRIMA di oggi da TUTTA la storia, si ottiene il totale di oggi.

double tm1=GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
double tm2=GetProfitFromDateInCurrency (Symbol(), -1, -1, TimeCurrent());  

Print(  m2-m1 );

stampa nil .....

 
È sempre più facile per uno sciocco dimostrare di essere sciocco a un uomo intelligente che viceversa, perché è intrinsecamente più facile per un uomo intelligente dubitare.
 
lottamer:


In teoria, se si sottrae ciò che è successo PRIMA di oggi da TUTTA la storia, si ottiene ciò che è successo oggi.

stampa ZERO, per la miseria.....


L'idea è di capire cosa fa questa funzione. E per capirlo, bisogna scomporlo riga per riga nella sua interezza. Ve l'ho già detto. È tutto elementare. Ed è inutile aiutarvi, perché dipende da voi se capite o meno il codice di una semplice funzione.

L'ho descritto sopra.

 
hoz:


Vadim, ho eseguito il tuo script su un terminale sul quale non ho mai aperto alcuno strumento a parte le major e i cross con lo yen. Comunque, ecco uno screenshot:

Niente è pompato perché la matrice dei dati di mercato è vuota, a giudicare dai commenti.

1. Come l'hai gestita? Dovete prima eseguirlo senza refresh. Cioè IsRefreshRates = false. I dati non saranno aggiornati.

2. Allora dovete eseguirlo con IsRefreshRates = true. I dati saranno aggiornati.

Ecco uno screenshot 1: schermata 2:

Notate i tempi della barra. Potete anche vedere che MarketInfo() prende i dati dalla panoramica del mercato.

Ecco l'Expert Advisor. L'ho corretto un po'. L'ho corretto un po'.

extern string Tool           = "AUDNZD"; // Имя инструмента.
extern bool   IsRefreshRates = true;     // Флаг включения обновления таймсерий.
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
 {
  string sTool = Tool; // Имя инструмента.
  if (Tool == "") sTool = Symbol();
  while (!IsStopped())
   {
    if (IsRefreshRates) RefreshRates();
    string sComment = StringConcatenate("MarketInfo() (", sTool, ")\n",
                                        TimeToStr(MarketInfo(sTool, MODE_TIME), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(MarketInfo(sTool, MODE_BID), Digits), "  ", DoubleToStr(MarketInfo(sTool, MODE_ASK), Digits),
                                        "\n\nПредопределенные переменные (", Symbol(), ")\n",
                                        TimeToStr(Time[0], TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(Bid, Digits), "  ", DoubleToStr(Ask, Digits),
                                        "\n\nМассивы-таймсерии (", sTool, ")\n");
    for (int i = 0; i < 10; i++)
     {
      sComment = sComment + StringConcatenate(TimeToStr(iTime(sTool, 0, i), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "  ",
                                              DoubleToStr(iOpen(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iLow(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iHigh(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iClose(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iVolume(sTool, 0, i), 0), "\n");
     }
    Comment(sComment);
    Sleep(300);
   }
 } 
hoz:


Dimitri, non litighiamo. È meglio aiutarsi a vicenda, perché tu e Vadim avete avuto così tanti disaccordi ultimamente. Una volta ho passato un paio di giorni nella mia testa, non sono andato al ramo, e poi, come al solito, sono andato a setacciare tutto. Ad essere onesti è stato divertente da leggere, davvero divertente! Ci sono tali scaramucce, e tali discussioni e congressi che mi chiedo solo :) Occasionalmente frasi e parole astruse, ma in realtà completamente senza senso. Non giudicherò nessuno, anche se sono lontano dal pensiero avanzato, io stesso ancora da imparare a imparare (in alcuni luoghi a nuotare), e poi capito e vedere chiaramente che il dibattito ha raggiunto l'assurdità completa.

Credo che abbiamo riunito dei professionisti. Per il resto non dirò nulla su di voi, perché vedo che ognuno capisce cosa sta facendo. Ma ciò che è interessante è che i professionisti sono a volte inclini a sbagliare quando non vogliono ammettere i loro errori. Ma impariamo dai nostri errori! Non c'è niente di cui vergognarsi. Quindi, se qualcuno ha fatto un errore, non è necessario andare fuori tema, ma piuttosto confessare. Per decine di pagine di spazzatura del programmatore che si trasforma in personalità, non è in qualche modo un'opzione. Lo scopo di almeno questo ramo o forum non è quello di smerdarsi a vicenda da capo a piedi, ma di migliorare nella programmazione e condividere i nostri pensieri sull'argomento. Quindi viviamo insieme. Basta con i battibecchi.

Victor, non prestare attenzione. Ci sono persone che non sanno formulare un pensiero e non sanno costruire un discorso ragionato. Per loro l'argomento più convincente è la bestemmia.

Inoltre tali persone non sono ricettive a nulla di nuovo. Dmitri ancora non capisce come si possa lavorare con i flussi senza organizzare la coda. Non ha nemmeno dato un esempio in cui questa coda sia necessaria.

Ora sta discutendo di nuovo. Invece di controllare e argomentare la sua posizione.

 
Zhunko:

Victor, non stai prestando attenzione. Ci sono persone che non sanno formulare un pensiero e non sanno come costruire un discorso ragionato. Per loro, l'argomento più potente è la bestemmia.

Inoltre tali persone non sono ricettive a nulla di nuovo. Dmitri ancora non capisce come si possa lavorare con i flussi senza organizzare la coda. Non ha nemmeno dato un esempio in cui questa coda sia necessaria.

Ora sta discutendo di nuovo. Invece di controllare e argomentare la sua posizione.


Junko, stai esagerando. Tutto ciò che è scritto qui si applica direttamente a voi. Non capisci dei flussi, non capisci perché i dati si sono aggiornati, ecc., ma pretendi di essere un esperto, ed è una stronzata. E voi fate finta di essere così giusti.
 
Integer:


Il livello di immaginazione è impressionante. Perché i dati sono apparsi solo per alcuni simboli (che non sono stati aperti) e non per tutti nella revisione del mercato? Come faceva la funzione RefreshRates() a sapere che alcuni simboli dovevano essere aggiornati e altri no?

Junko, smettila di farneticare.

RefreshRates() aggiorna solo i valori con cui lavora l'Expert Advisor. Ecco come lo scopre. Da Expert Advisor. Molto tempo fa qualcuno di Metakvot ne ha scritto.
 
hoz:


L'idea è di capire cosa fa questa funzione. E per capirlo, bisogna smontarlo linea per linea. Te l'ho già detto. È tutto elementare. Ed è inutile aiutarvi, perché dipende da voi se capite o no il codice di una semplice funzione.

L'ho descritto sopra.


L'ho capito.

in generale, la funzione restituisce il profitto totale, ma solo del periodo che avete impostato nella scheda Storia. e lo cambia lungo il percorso immediatamente se cambiate il periodo nella scheda STORIA

Non ne ho bisogno.

Mi serve per impostare il periodo in base a un dato parametro.

Sto cercando di cambiare la funzione stessa...

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=iTime (NULL, PERIOD_D1, 0)   )
{
  double p=0;
  int    i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}

ma il compilatore si lamenta che

'iTime' - inizializzazione attesa

Cosa devo aggiungere?

 
Zhunko:
RefreshRates() aggiorna solo ciò che l'Expert Advisor sta lavorando. Ecco come lo scopre. Dal consulente esperto. Molto tempo fa qualcuno di Metakvot ne ha scritto.

Non date alle funzioni del linguaggio di programmazione delle caratteristiche e proprietà mistiche che non hanno.

 
Nella pagina precedente alla fine ho scritto cosa aggiorna i dati.
Motivazione: