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

 
Alexey Viktorov:

cadena AUDUSD = "AUDUSD";

Al menos así.

¡¡Eso es!! Así fue para mí))), borrado y olvidado))

¡¡¡Muchas gracias!!! ¡Paz en tu casa!

 
Valeriy Yastremskiy:

No se accede al asesor, al script, al indicador, sino que se trabaja en la ventana actual. Y las variables globales de diferentes ventanas/gráficos no se superponen. Por lo tanto, debería funcionar)

string AUDUSD; // Esta es una variable de texto, además de estar inicialmente vacía, es decir, igual a ""

(Symbol() == AUDUSD) // esta cadena no tiene nada que ver con la variable AUDUSD.

Pero los criterios de apertura de la orden no deben ser los mismos para diferentes instrumentos/ventanas. Si son iguales, efectivamente se abrirá en todas las ventanas.

Gracias.

Implementé la lógica para que el Asesor Experto no recibiera la señal de abrir órdenes cuando se abrieran en varias ventanas y entendiera que la señal de compra se daba para tal símbolo para que el EA no interfiriera con otros.

 
Denis Diakonov:

¡¡Ahí está!! Así fue para mí))), borrado y olvidado))

¡¡¡Muchas gracias!!! ¡La paz en tu casa!

O así, a nivel de variable global

#define  AUDUSD "AUDUSD"
 
Alexey Viktorov:

O como esto en el nivel de la variable global

En realidad es genial)) Ahora el robot recibe una señal y abre órdenes en diferentes pares en varias ventanas a la vez))

Gracias de nuevo.

 
Yerkin Sagandykov:

El problema no está en los valores de la variable en mi opinión. Acabo de tener en mi código uulsovii recálculo en la ocurrencia de una nueva hora. y resulta que el símbolo actual nueva barra aparece y calcula el valor de la barra = 1, pero el símbolo de la señal es una nueva barra aún no se ha formado o lo que si y valores calculados para la barra = 2

El problema se resuelve fácilmente: sólo he rastreado el inicio de una nueva barra por el símbolo de la señal

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar || iTime(nameSymSignal, LPeriod, 0 ) == counted_Signalbar) return; 
 
Por favor, dame una pista.
¿Es posible pasar varios parámetros de switch case desde el cuerpo de la función? Tengo tipos de órdenes a abrir en caso de switch y he conseguido pasar sólo 1 parámetro para abrir una orden desde la función que define el punto de entrada al mercado, como ya he entendido es imposible, así que no sé cómo implementarlo ni siquiera secuencialmente
 
Denis Diakonov:
Por favor, avisa.
¿Es posible pasar varios parámetros de switch case desde el cuerpo de la función? Tengo tipos de órdenes a abrir en caso de switch y he conseguido pasar sólo 1 parámetro para abrir una orden desde la función que define el punto de entrada al mercado, como ya he entendido es imposible, así que no sé cómo implementarlo ni siquiera secuencialmente todavía

Por favor, muéstreme en el código qué es exactamente lo que le interesa

 
Denis Diakonov:
Por favor, avisa.
¿Es posible pasar varios parámetros de switch case desde el cuerpo de la función? Tengo tipos de órdenes a abrir en caso de switch y he conseguido pasar sólo 1 parámetro para abrir una orden desde la función que define el punto de entrada al mercado, como ya he entendido es imposible, así que no sé cómo implementarlo aunque sea secuencialmente

¿Se refiere a un rango de valores?

 
Vitaly Muzichenko:

Muestre el código exactamente lo que le interesa

int OpenOrder()                                             
{
   switch(AUDUSD_Analizing)
   {
      case 0 : Alert("Нет условий для открытия ордера. Выход"); break;    
      case 1 : // кейс для открытия Buy по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_BUY,lot,Ask,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
      case 2 : // кейс для открытия Sell по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_SELL,lot,Bid,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if(AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
      if(raznica > s5)
      {
         Alert("--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---");

и вот тут я могу либо прописать конкретное открытие ордера или несколько их штук(чем и решил заняться так 
как не нашел решения), либо вернуть номер кейса в первую функцию(что сократило бы код). 
Но мне нужно по условиям открывать сразу несколько сделок. К примеру нужно 2 на бай разом открыть, 
а возвращается только одно значение и исполняется один кейс и дальше уже на новый круг все идет, 
а мне нужно сразу несколько кейсов, допустим 5 выполнить, поставить 5 отложек и вот как передать не пойму, 
или как вызвать срабатывание кейсов в последовательности. Если с кейсами можно как-то придумать, то по
факту код влезет в рамку 400-600 строк, а так полагаю все 1000+ выйдет в лучшем случае
(разбитые по 100-200 строк на .mqh, но и из файлов тоже помойка сложится)

 
Alexey Viktorov:

¿Se refiere a un rango de valores?

No, por ejemplo pasar primero el caso 1, luego el caso 2, etc.

casos ejecutan la apertura de pedidos