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

 
7777877:

In altre parole, se ho capito bene: qualsiasi array (incluso l'array di serie temporali) che copio usando la funzione ArrayCopy in un array UTENTE, devo "processarlo" con la funzione ArraySetAsSeries con valore impostato uguale a true affinché questo array utente diventi un array di serie temporali?

esattamente
 

Cari programmatori, per favore aiutatemi a scrivere un codice con il seguente principio - Segnale BUY - aprire laposizione BUY 1.SL.TP.transfer a Breakeven

Segnale SELL - aprire la posizione SELL 1. SL.TP.trasferimento a lossless . COMPRA - se c'è una posizione aperta di COMPRA 1 e VENDI 1, apriamo COMPRA 2. Segnale SELL - se ci sono posizioni aperte BUY 1 e BUY 1 allora apriamo SELL 2. Segnale BUY - se ci sono posizioni aperte SELL 1. BUY 1. SELL 2. poi chiudere SELL 2. aprire BUY 2. Segnale SELL - se ci sono aperti BUY 1. SELL 1. BUY 2. poi chiuderemo BUY 2. open SELL 2. Il mercato non dovrebbe funzionare più di 3 ordini. se qualcuno può aiutare, grazie mille.

 
Sepulca:

Non preoccupatevi degli array dinamici, specificate in anticipo, con una riserva, o non avete abbastanza memoria?

La mia memoria è accettabile, ma non è questo il punto qui :)

Che senso ha specificare un array con un numero potenzialmente enorme di elementi, se ce ne saranno molti meno?

Dopotutto, creando un array, occuperà già una parte della memoria operativa.

 
ilunga:
esattamente

Ho modificato un po' lo script:

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

Il risultato è il seguente:


Una domanda sorge spontanea: in questo caso ho copiato i dati delle barre del grafico corrente in un array1 bidimensionale usando la funzione ArrayCopyRates(array1). Poi nella linea successiva con la funzione ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) ho copiato i dati dell'array1 nell'array2. Poi, usando la funzione ArrayGetAsSeries, ho controllato se array2 è un array-timeseries. E si è scoperto (come potete vedere dallo screenshot), che l'array è un array di serie temporali, anche se non l'avevo "elaborato" con la funzione ArraySetAsSeries prima.

Domanda: perché nel primo caso (domanda precedente) avevo bisogno di usare la funzione ArraySetAsSeries (per organizzare il mio array come un array di serie temporali), mentre in questo caso non ho bisogno di tale elaborazione.

P.S. Scusate l'insistenza, voglio solo capire bene, in modo che non rimangano "vuoti nella storia". Grazie per tutte le risposte precedenti.

 

Non riesco a capirlo, o sono stupido ....

In teoria dovrebbe essere 0,3 ma per qualche motivo è 0,00 ....

  Comment(3/10);

Dà anche 0... Quindi come si ottengono i numeri frazionari ?????

int start()
  {
double t;
t=3/10;
   Comment(t);

   return(0);
  }

anche zero ....

Non so che tipo di tamburello saltare con .......

 
VOLDEMAR:

Non riesco a capirlo, o sono stupido ....

In teoria dovrebbe essere 0,3 ma per qualche motivo è 0,00 ....

Dà anche 0... Quindi come si ottengono i numeri frazionari ?????

anche zero ....

Non so che tipo di tamburello saltare con .......

Leggere la documentazione 3 volte al giorno per 4-5 ore. E solo allora saltare con un tamburello.

3.0/10.0

 

Ha un'idea del perché?

Forse dovremmo fare dei libri di testo adeguati.

Forse fare un addestramento adeguato?

Forse dovresti scrivere queste cose da qualche parte?

Forse allora le domande spariranno?

E non dovrai rispondere ad altre 100500 domande stupide!

Se ci sono queste domande, non è colpa dello studente, è colpa tua! Non l'hai descritto da nessuna parte!!!

Non è scritto nell'aiuto, non è scritto come convertire da int a double.

ma dice che se si assegna il tipo double a int, la parte frazionaria viene cancellata,

Una persona normale concluderebbe logicamente che se int è assegnato a double, solo un punto con un dato numero di zeri sarà aggiunto...

Quindi è così ....

 
Roger:

Sostituire

a


Grazie mille, lo proverò!
 
VOLDEMAR:

Qualche idea sul perché?
Forse dovremmo fare dei tutorial adeguati.
Forse fare un insegnamento adeguato?


Queste domande non sono per me. Sono un utente, proprio come te.

Forse dovresti scrivere queste cose da qualche parte.

Beh, ti ho mostrato dove c'è scritto.

Forse allora le domande spariranno.

No, non spariranno. Ve lo assicuro.

E non dovrai rispondere ad altre 100500 domande stupide!
Se ci sono queste domande, non è colpa dello studente, è colpa tua! Non l'hai descritto da nessuna parte!!!

Queste domande non sono per me. Sono un utente, proprio come te.

Non è scritto nell'aiuto, non è scritto come tradurre da int a double.
ma dice che se si assegna il tipo double a int, allora la parte frazionaria sarà cancellata,

una persona normale avrebbe logicamente l'idea che quando si assegna un numero int a un numero doppio, allora solo un punto con un dato numero di zeri sarà aggiunto...


Sì, l'assegnazione funziona in entrambi i sensi.

Tranne che non hai incorporato ulteriormente la tua logica.

Se vuoi essere logico, non puoi fare due cose contemporaneamente. Avresti dovuto prima assegnare un numero al doppio e solo dopo dividerlo per un altro numero. Ma è il contrario, prima o poi ci saresti arrivato.

Motivazione: