Sistemi di previsione strategica - pagina 39

 
-Aleksey-:
Domanda di chiarimento: i valori dell'indicatore condizionale sono necessari per tutte le candele sul grafico in qualsiasi momento, o per un certo numero di candele recenti?
Preferibilmente, per gli ultimi fissati da qualche finestra.
 

Ecco un pezzo del mio codice funzionante. Mai avuto un problema di chiusura (l'ho modificato un po')

int i, total = OrdersTotal(), slippage = 50;

bool Ans;
for (i = total-1; i >=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if(OrderType()==OP_BUY) {
Print("CLOSE BUY");
Ans = false;
while(Ans==false) {
Ans = OrderClose(OrderTicket(),OrderLots(),Bid, slippage, DodgerBlue);
Sleep(1000);
RefreshRates();
}
}
if(OrderType() == OP_SELL) {
Print("CLOSE SALE");
Ans = false;
while(Ans==false) {
Ans = OrderClose(OrderTicket(),OrderLots(),Ask, slippage, Orange);
Sleep(1000);
RefreshRates();
}
}
}
}

 
rulabs:

Ecco un pezzo del mio codice funzionante. Mai avuto un problema di chiusura (l'ho modificato un po')

...

Grazie mille!!! Farò un tentativo.
 
Farnsworth:
Grazie mille!!! Farò un tentativo.
Grazie per il thread. Chiedete se c'è qualcosa di cui avete bisogno.
 
Farnsworth:
preferibilmente per quest'ultimo, impostato da una sorta di finestra.

L'ho implementato in questo modo:

//---начало блока глобальных переменных---------------
int GLOBAL_DATA_LIMIT;
bool first_run=true;
//---конец блока глобальных переменных
//++++++++++++++++++++++++++++++++++++
//---начало блока инициализации
void OnInit()
   {
      GLOBAL_DATA_LIMIT= расчет числа данных(длины окна данных), необходимых для расчета окна условного индикатора заданной длины
      ....инициализация
  }
//---конец блока инициализации индикатора
//+++++++++++++++++++++++++++++++++++++++
//---начало блока обновления индикатора--
int OnCalculate (
                  const int rates_total,      // current size of the timeseries array
                  const int prev_calculated,  // size of the timeseries array got by reurn value the last time
                  const datetime& time[],     // Time
                  const double& open[],       // Open
                  const double& high[],       // High
                  const double& low[],        // Low
                  const double& close[],      // Close
                  const long& tick_volume[],  // Tick Volume
                  const long& volume[],       // Real Volume
                  const int& spread[]         // Spread
                )
   {
      if(rates_total<0)
      {
         printf("На графике отсутствуют исторические данные");
         return(0);
      }
      if(rates_total<GLOBAL_DATA_LIMIT)
      {
         printf("Недостаточно исторических данных, необходимое количество: "+string(GLOBAL_DATA_LIMIT));
         return(0);
      }
      if(prev_calculated==0) // срабатывает при первом запуске, или когда история поменялась
      {
         if (first_run==true) первый расчет при запуске - в момент первого тика после инициализации
         *{
            ArrayCopy(cur_price_array, close, 0, (rates_total-1)-GLOBAL_DATA_LIMIT, GLOBAL_DATA_LIMIT); - копируем в массив необходимое количество значений цены
            ...
            Со скопированным массивом проводим расчет
            Отображаем результат
            ...   
            first_run=false;
         *}
         else расчет на каждом тике
         {
         в это место вставить код *(без first_run=false;), если считать на каждом тике. Если считать не на каждом тике, а по новому бару, то вставить * в функцию isNewBar
         }         
      }
      
      if(isNewBar(_Period)) расчет на каждом баре
      {
          *{
                      ArrayCopy(cur_price_array, close, 0, (rates_total-1)-GLOBAL_DATA_LIMIT, GLOBAL_DATA_LIMIT); - копируем в массив необходимое количество значений цены
                      ...
                      Со скопированным массивом проводим расчет
                      Отображаем результат
                      ...
         *}
      }
      return(rates_total);
   } 
//---конец блока обновления индикатора---
 

Questo è uno schema per calcolare uno o più valori di n indicatori basati su valori di prezzo m(GLOBAL_DATA_LIMIT) copiati su ogni barra o tick.

Se i valori passati della finestra dei valori calcolati non cambiano, allora nel calcolo (interno) si può procedere come segue

-calcola solo il nuovo valore (uno);

-sposta la finestra dei valori calcolati (array con i risultati) a sinistra di 1 indice;

-scrive un nuovo valore nell'ultimo indice della matrice dei risultati.


Non so se è chiaro. Il codice è in MQL5, non so 4, ma dovrebbe essere simile credo.

 
-Aleksey-:

...

Grazie, darò un'occhiata.
 
Risk:

Amministratori, il potere assoluto porta alla dittatura. Anche il nostro timbo politicamente corretto non ha potuto sopportare questo marasma ed è andato da qualche parte :)

Ci deve essere un'opposizione che almeno a volte mette tutto al suo posto, ma qui non è chiaro chi definisce seriamente le sezioni di matematica, mentre non possono chiudere l'ordine senza l'aiuto degli scolari. Cosa succederà domani?

Se voi siete l'opposizione, io sono il papa. Non date all'autore una parola da dire e c'è zero sostanza nei vostri post. C'è un'opposizione reale e si oppone in modo costruttivo. E i troll non possono essere opposizione, sono distruttori di argomenti puri e semplici.
Sei presentato per un altro divieto.
 
rulabs:
Grazie per il thread. Per favore, chiedete se c'è qualcosa di cui avete bisogno.
Mentre discutevo con un collega, ho quasi perso un post accorato. Ognuno su questo sito contribuisce con qualcosa di diverso, quindi non posso prendere "grazie" completamente - se un thread risulta essere interessante, è grazie a tutti i suoi partecipanti :o)
 

Per mantenere vivo il thread:)

Lunedì alle 11:15 ora di Mosca, senza alcuna analisi, ho aperto delle coppie osservate in MT5 (dovrei abituarmi).

Non ho aperto EURUSD e GBPUSD perché erano piatti. Lo terrò fino a venerdì, però, dovrei guardare bene ed eventualmente correggere ogni giorno.

Se qualcuno è interessato, può guardarlo.

Accesso: 729566

Investitore: iuj2seh