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

 
VAM_ 08.06.2010 18:48editar | borrar

¿Cómo se silencia? Condujo a las rodillas blancas. Hay muchas ventanas de herramientas (33). No hay EAs. Sólo medio y Zup. No puedo saber de dónde canta. Te ruego que me ayudes. Servicio, los eventos han sido. Las cruces en los eventos no ayudan. Sigue cantando, el muy cabrón.

Tecnología:


el estornino puede sentarse en el pavo )))

He mirado el código y no hay alertas en ninguna parte. ¿Qué hacer?
 
VAM_:

He mirado el código y no hay alertas en ninguna parte. ¿Qué hacer?

Comprueba en PlaySound().
 
¿Cómo puedo hacer que se puedan asignar diferentes valores a una variable definida globalmente en el curso de la ejecución al llamar a diferentes funciones y que las guarde?

Necesito asignar ciertos valores a la variable Part, que se establece globalmente, para el cierre parcial de una posición, y pasarla como parámetro a la función que ejecuta el cierre parcial de la orden. Esta variable es un simple divisor. En otras palabras, si el valor inicialmente es 1, el lote se divide por 1 y se cierra toda la posición. Cuando las condiciones de la operación cambian, esta variable obtiene nuevos valores y puede ser igual a, por ejemplo, 1,5 o 2, entonces el lote de la posición se divide por este número, y se realiza el cierre parcial. La llamada a la función con paso de parámetros tiene el siguiente aspecto literal:

// На глобальном уровне
double Part = 1;                           // на сколько разделить лот для частичного закрытия 
//..........

void ClosePartPosBySelect(double Part)    // Объявление функции
// ... тру-ля-ля ... тело функции ...
ll=NormalizeLot((OrderLots()/Part));      // рассчёт лота внутри функции
// ... дальнейший код ф-ции ...

//--------- Вызов функции частичного закрытия ---------
// Происходит из тела этой функции
void TrailingPositionsTLE(int MAGIC, int CloseMethod, double Part, int LastTrailing)
// таким образом:
if (CloseMethod==1)
            ClosePartPosBySelect(Part);

Así que, a pesar de que cuando se llama a la función ...

TrailingPositionsTLE(561, 1, 2, 1);

... Si se establece CloseMethod = 1 (cierre parcial) y se especifica explícitamente Part = 2, la función pasa su valor inicial = 1 que se estableció globalmente en lugar del valor de Part especificado en el curso del programa (por ejemplo, 2)...

¿Cómo puedo vencer esto? Gracias...

 
artmedia70: Cuando las condiciones de la operación cambian, esta variable obtiene nuevos valores y puede ser igual, por ejemplo, a 1,5 o 2, entonces el lote de la posición se divide por este número y se realiza el cierre parcial.


Pues bien, cuando las condiciones de negociación cambien, entonces cambia tu variable de la Parte. ¿O los tienes en otro EA? Entonces esta variable tiene que ser leída todo el tiempo, es decir

int init()

{

.....

GlobalVariableSet("Part0",Part);

.....

}

int inicio()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

 
Roger:

Pues bien, cuando las condiciones de negociación cambien, entonces cambia tu variable de la Parte. ¿O los tienes en otro EA? Entonces esta variable tiene que ser leída todo el tiempo, es decir

int init()

{

.....

GlobalVariableSet("Part0",Part);

.....

}

int inicio()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

No, la variable está en el mismo EA. Está definido globalmente y las funciones pueden utilizarlo, pero su valor, modificado internamente, no se devuelve a las funciones externas. Por lo tanto, las funciones ven su valor como se establece inicialmente. Si no lo establezco a nivel global, entonces las funciones se aparean en la variable no establecida...
 

Cuando se pasa una variable a una función a través de su parámetro, la variable se pasa por valor, lo que significa que el cambio de la variable en la propia función no hará que se sobrescriba.
Intente pasarla por referencia insertando un "&" delante del nombre del parámetro

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
VAM_:

He mirado el código y no hay alertas en ninguna parte. ¿Qué hacer?

En la pestaña "Eventos", desmarque la casilla "Permitir".

 

Hola queridos profesionales.

Me gustaría escribir un EA que abriera dos órdenes de venta y compra al mismo tiempo.

Entonces, después de una determinada cantidad de puntos (parámetro lim), la orden perdedora se cerraría,

y una rentable se cerrará cuando el precio haya caído por debajo del precio máximo desde que se abrió la orden

(una especie de trailing stop virtual).

En la agonía he creado esto, pero no funciona... no funciona

Por favor, sugiera algo

int start()
  {
 
  double 
   max, min;                                            
  int b, s;
   if (Bid>max) max=Bid; 
    if (Ask<min) min=Ask;  
       if (OrdersTotal()>0)
       {                                   
           if ((max-Bid)>=lim*Point) 
           {                   
          OrderSelect(b,SELECT_BY_TICKET);                                  
          b=OrderClose(OrderTicket(),0.1,Bid,3,Blue);
          }
          
          
          if ((Ask-min)>=lim*Point)  
          {         
      OrderSelect(s,SELECT_BY_TICKET); 
      s=OrderClose(OrderTicket(),0.1,Ask,3,Red);
         }
}
else
{
  if (OrdersTotal()<1)
  {
 b=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",5,0);
      
 s=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",5,0); 
    }                           
   }
         return;

   return(0);
  }
 
artmedia70:
¿Cómo hacer posible la asignación de diferentes valores a una variable definida globalmente en tiempo de ejecución cuando se llama a diferentes funciones y las guarda?

dos formas

1. Añade un amperímetro a la función donde se modifica el valor,

por ejemplo, void function( double& Part ){}

entonces, cuando se cambie un valor dentro de la función, el nuevo valor volverá al lugar de la llamada

2. eliminar la variable de la lista de parámetros de la función, ya que la variable está definida globalmente, su valor puede ser cambiado en cualquier lugar del código sin pasarla como parámetro...

Pero para evitar confusiones, es mejor la 1ª variante, para no pensar qué es esa variable, ya que puede haber más de una de esas variables definidas globalmente (y dentro de una misma función)...


He ojeado el post, la respuesta ya está dada...

 
artmedia70:
pero su valor, cambiado dentro de las funciones, no se devuelve a las externas.


Mostrar la función en sí.

Si es void ClosePartPosBySelect(double Part), cambia a

void CerrarPartPosBySelect()

Razón de la queja: