[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 452

 

Estimados programadores. por favor ayúdenme a escribir un código con el siguiente principio - Señal de COMPRA - abrirposición de COMPRA 1.SL.TP.transferir a Breakeven

Señal de VENTA - abrir posición de VENTA 1. SL.TP.transfer a lossless . COMPRA: si hay una posición abierta de COMPRA 1 y VENTA 1, abrimos la COMPRA 2. Señal de VENTA - si hay posiciones abiertas COMPRA 1 y COMPRA 1 entonces abrimos VENTA 2. Señal de COMPRA-si hay posiciones abiertas VENDER 1. COMPRAR 1. VENDER 2. luego cerrar VENDER 2. abrir COMPRAR 2. Señal de VENTA - si hay una COMPRA abierta 1. VENDER 1. COMPRAR 2. entonces cerraremos COMPRAR 2. abrir VENDER 2. El mercado no debería funcionar más de 3 órdenes. si alguien puede ayudar, muchas gracias.

 
Sepulca:

No te molestes en usar matrices dinámicas, especifica de antemano, con una reserva, o no tienes suficiente memoria?

Mi memoria es aceptable, pero ese no es el punto aquí :)

¿Qué sentido tiene especificar una matriz con un número potencialmente enorme de elementos, si habrá muchas veces menos?

Al fin y al cabo, al crear un array, éste ya ocupará parte de la memoria operativa.

 
ilunga:
exactamente

He modificado un poco el guión:

//+------------------------------------------------------------------------------------------+
//|                                                                     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 -

El resultado es el siguiente:


Naturalmente, surgió una pregunta: En este caso copié los datos de las barras del gráfico actual en un array bidimensional array1 utilizando la función ArrayCopyRates(array1). Luego en la siguiente línea con la función ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) copié los datos de array1 en array2. Luego, utilizando la función ArrayGetAsSeries, comprobé si array2 es un array-serie de tiempo. Y resultó (como puedes ver en la captura de pantalla), que el array es un array de series temporales, aunque no lo había "procesado" con la función ArraySetAsSeries antes.

Pregunta: por qué en el primer caso (pregunta anterior) necesitaba utilizar la función ArraySetAsSeries (para hacer que mi array se organizara como un array de series temporales), mientras que en este caso no necesito dicho procesamiento.

P.S. Perdón por la insistencia, sólo quiero entenderlo bien, para que no queden "lagunas en la historia". Gracias por todas las respuestas anteriores.

 

No puedo entenderlo, o soy tonto ....

En teoría debería ser 0,3 pero por alguna razón es 0,00 ....

  Comment(3/10);

También da 0... Entonces, ¿cómo se obtienen los números fraccionarios ?????

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

   return(0);
  }

también cero ....

No sé qué tipo de pandereta saltar con .......

 
VOLDEMAR:

No puedo entenderlo, o soy tonto ....

En teoría debería ser 0,3 pero por alguna razón es 0,00 ....

También da 0... Entonces, ¿cómo se obtienen los números fraccionarios ?????

también cero ....

No sé qué tipo de pandereta saltar con .......

Leer la documentación 3 veces al día durante 4-5 horas. Y sólo entonces salta con una pandereta.

3.0/10.0

 

¿Tiene alguna idea de por qué?

Tal vez deberíamos hacer libros de texto adecuados...

¿Tal vez hacer un entrenamiento adecuado?

¿Tal vez deberías escribir estas cosas en algún sitio?

¿Quizás entonces desaparezcan las preguntas?

Y no tendrás que responder a otras 100500 preguntas estúpidas.

Si hay preguntas de este tipo, no es culpa del alumno, sino tuya. ¡¡No lo has descrito en ningún sitio!!

No está escrito en la ayuda, no está escrito cómo traducir de int a double.

Pero dice que si asignas el tipo double a int, la parte fraccionaria se borrará,

Una persona normal llegaría a la conclusión lógica de que si se asigna int a double, sólo se añadirá un punto con un número determinado de ceros...

Así que es como este ....

 
Roger:

Sustituir

a


Muchas gracias, ¡lo probaré!
 
VOLDEMAR:

¿Alguna idea de por qué?
Tal vez debamos hacer tutoriales adecuados.
¿Tal vez hacer una enseñanza adecuada?


Estas preguntas no son para mí. Soy un usuario, como tú.

Tal vez deberías escribir estas cosas en algún lugar.

Bueno, te mostré donde dice.

Tal vez entonces desaparezcan las preguntas...

No, no van a desaparecer. Se lo aseguro.

Y no tendrás que responder a otras 100500 preguntas estúpidas.
Si hay preguntas de este tipo, no es culpa del alumno, sino tuya. ¡¡¡No lo has descrito en ningún sitio !!!

Estas preguntas no son para mí. Soy un usuario, como tú.

No está escrito en la ayuda, no está escrito cómo traducir de int a double.
pero dice que si asignas el tipo double a int , entonces la parte fraccionaria se borrará,

una persona normal se haría a la idea lógica de que cuando se asigna un número int a un número doble, entonces sólo se añadirá un punto con un número determinado de ceros...


Sí. La asignación funciona en ambos sentidos.

Excepto que no has incorporado tu lógica más allá.

Si quieres ser lógico, no puedes hacer dos cosas a la vez. Deberías haber asignado primero un número al doble y sólo después dividirlo por otro número. Pero es al revés, tarde o temprano habrías llegado a ella.

 
VOLDEMAR:

¿Tiene alguna idea de por qué?

Tal vez deberíamos hacer libros de texto adecuados...

Tal vez hacer una enseñanza adecuada...

¿Tal vez escribir estas cosas en algún lugar?

¿Quizás entonces desaparezcan las preguntas?

Y no tendrás que responder a otras 100500 preguntas estúpidas.

Si hay preguntas de este tipo, no es culpa del alumno, sino tuya. ¡¡No lo has descrito en ningún sitio!!

No está escrito en la ayuda, no está escrito cómo traducir de int a double.

pero dice que si asignas el tipo double a int, la parte fraccionaria se borrará,

Una persona normal llegaría a la conclusión lógica de que si se asigna int a double, sólo se añadirá un punto con un número determinado de ceros...

Así que es como este ....

Vladimir, tienes derecho a expresar toda esta histeria al soporte técnico del terminal que compres. Y mientras usas un terminal gratuito, puedes dar las gracias a los entusiastas que lo han descubierto por sí mismos y a los ociosos como tú que ni siquiera quieren dedicar tiempo a buscar materiales en la web y siguen respondiendo a algo por enésima vez. Nadie te debe nada. Intentan hacerlo por su cuenta. Si quieres que te molesten, contrata a un instructor y métete con su cabeza. Te dará un chupete y un babero.