Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 396

 
Alexey Viktorov:

La cadena variable x; no debe confundirse con el carácter de cadena "x".

No entendí la tarea específica. Por lo tanto, no hay una respuesta específica.

¿Quizás sea mejor pensar en sobrecargar funciones?

La situación es tal que necesito crear una función universal function_xy donde el programa principal entienda que el nombre de la variable de cadena object_xy cambia dependiendo de los parámetros pasados(..., ..., string x, string y). De lo contrario, más adelante en el código en function_xy() tendré que deletrear manualmente el nombre de la variable object_xy.
Por ejemplo,

void function_xy(..., ..., string x="EURUSD", string y="GBPUSD")
{
...
string object_xy=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
}

De lo contrario, al crear varios objetos gráficos en function_xy(), tendré que asignar manualmente los parámetros de las funciones gráficas

void function_xy(..., ...,...)
{
...
string object_EURUSDGBPUSD=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_EURUSDGBPUSD,...,...)
ObjectSet(object_EURUSDGBPUSD,...,...)
ObjectSetText(object_EURUSDGBPUSD,...,...)
...
}

void function_wz(..., ...,...)
{
...
string object_USDCHFUSDJPY=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_USDCHFUSDJPY,...,...)
ObjectSet(object_USDCHFUSDJPY,...,...)
ObjectSetText(object_USDCHFUSDJPY,...,...)
...
}

Hay hasta 2 centenares de funciones de este tipo, ¿se puede reducir y resolver este problema de alguna manera?
Espero haber expresado mi pensamiento.



 
Timur1988:

La situación es tal que necesito crear una función universal function_xy en la que el programa principal entienda que el nombre de la variable de cadena object_xy cambia dependiendo de los parámetros pasados (..., ..., string x, string y). De lo contrario, más adelante en el código en function_xy() tendré que deletrear manualmente el nombre de la variable object_xy.
Por ejemplo,

De lo contrario, al crear varios objetos gráficos en function_xy(), tendré que asignar manualmente los parámetros de las funciones gráficas

Hay hasta 2 centenares de funciones de este tipo, ¿se puede reducir y resolver este problema de alguna manera?
Espero haber expresado mi pensamiento.

Todo lo que tienes que hacer es escribir un trozo de código que forme el nombre del objeto dependiendo de X e Y, por ejemplo, tomarlo de la matriz así: n=10*x+y. Cuando x=0 e y=0...9, se elegirán los 10 primeros elementos. Cuando x=1 e y=0...9, se elegirán los 10 siguientes elementos

 
DOCTORGAD:¿Existe un código para la apertura de una sola operación con comprobación de errores? Exactamente para la realidad, no para la prueba... Puede como una función, sólo un punto muerto :(

De qué sirve comprobar los errores: ¡¡¡hay que reaccionar ante ellos!!! ¿Cómo? Print("Error - ...") - esto es bueno sólo durante la depuración. E incluso eso sería mejor que Alert(). Hay que reaccionar a un error mediante una pausa = retraso. Había un artículo sobre ello en alguna parte. ¿Pero dónde? Si alguien lo ha visto, ¡recuérdemelo!

 
Timur1988:

La situación es que necesito crear una función universal función_xy, en la que el programa principal entendería que el nombre de la variable de cadena objeto_xy cambia dependiendo de los parámetros pasados(..., ..., cadena x, cadena y). De lo contrario, más adelante en el código en function_xy() tendré que deletrear manualmente el nombre de la variable object_xy.
Por ejemplo,

De lo contrario, al crear varios objetos gráficos en function_xy(), tendré que asignar manualmente los parámetros de las funciones gráficas

Hay hasta 2 centenares de funciones de este tipo, ¿se puede reducir y resolver este problema de alguna manera?
Espero haber expresado mi pensamiento.





//+------------------------------------------------------------------+
void OnStart()
  {

   function_xy();

  }
//+------------------------------------------------------------------+x1 x2 x3
void function_xy(string x="EURUSD",string y="GBPUSD")
  {
   string object_xy;
  string c = "object_EURUSDGBPUSD";
//Для начала,  склеим переданные в функцию строковые переменные 

   object_xy=StringConcatenate("object_",x,y);
   
   Alert("object_xy = ",object_xy);
   
// Cравниваем
   if(StringCompare(c,object_xy)==0)
     {
      Alert("       Ура получилось ))))))))");
      Alert("object_EURUSDGBPUSD == object_xy");
     }
//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD 
  }
//+------------------------------------------------------------------+

Si te entiendo bien,

es algo así.

 
Ptichka12: Hola, un paréntesis me bebe la sangre no puedo emparejarlo (da un montón de errores enseguida). El paréntesis está en la primera línea.

¿Es una descompilación? ¡Quítalo inmediatamente! ¡¡¡Está prohibido aquí!!! Prohibido...

 
Ptichka12:

Hola, un paréntesis me bebe la sangre no puedo emparejarlo (da un montón de errores enseguida). El paréntesis está en la primera línea.


Se le advierte por publicar código descompilado.
 
Artyom Trishkin:
Has sido advertido por publicar código descompilado.

Lo siento, no lo volveré a hacer...

 
Alexey Viktorov: tiene que ser completamente reescrito. ¿Quién lo necesita?

Gracias)
Para evitar la reescritura, tal vez puedas superponer las líneas de tendencia en aquellos segmentos que son >=100pts.

¿Me puedes decir cómo establecer las coordenadas de los puntos de la línea de tendencia para trazarla desde el valle hasta la parte superior del zigzag -a.

 

¡Hola!

Durante quince días he estado trabajando en un script que comprueba si los precios de la matriz son ahora....

Ahora he llegado a un punto muerto mientras buscaba en la matriz. Por alguna razón no da lo que se espera.


int start()
{
   while(!IsStopped())
    {    
      double prmas[5] = {11,22,33,44,99}; // Будем проверять каждую цену, есть ли ордер с такой ценой или нет
         for(int ordsel=0; ordsel<=4;ordsel++) {  // Цикл прохода по ценам в массиве
            for(int nmbr = 0; nmbr < OrdersTotal() ;nmbr++) {   // Проверяем каждую цену по всем ордерам
               int os = OrderSelect(nmbr, SELECT_BY_POS, MODE_TRADES); // Выбираем ордер по порядку цикла
               int maspos = ArrayBsearch(prmas,OrderOpenPrice(),5,0,MODE_ASCEND); //Ищем позицию цены в массиве по текущему проверяемому ордеру
               Alert ("Номер в цикле  ", nmbr, " Выбранный ордер  ", os, " Цена из массива ", prmas[maspos]); //Выводим скорбный результат
               Sleep(10000);  
      }
}
     if(!IsExpertEnabled()) break;
    }
return(nmbr);
}

no da el error...

las garantías:



 
Dimitry-1983:

¡Hola!

Llevo quince días intentando crear un script que compruebe si el precio de la matriz es ahora....

Ahora me he atascado en la búsqueda de matrices. Por alguna razón, no nos da lo que esperamos.


Es correcto:

ArrayBsearch

Valor devuelto

Devuelve el índice del primer elemento encontrado. Si no se encuentra el valor buscado, devuelve el índice del elemento by value más cercano, entre los que se encuentra el valor buscado.

Tienes los precios de los pedidos (ordenados por tiempo de colocación)
el primero es 11,00000
el segundo 22.00000
tercero 0,98020
cuarto 0,98004
quinto 33,00000

1, 2 y 5 respectivamente encuentran correctamente, pero para 2 y 3 el valor más pequeño más cercano...