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

 
Chicos, esta es una pregunta para la que no he encontrado respuesta en ningún sitio. Qué función escribir en el indicador para que no se abran nuevas barras y tickear en la barra cero, hasta que funcione mi condición, por favor contestadme en privado))
 

¡Hola!

Estoy confundido en tres pinos:

Establezco números extern int a =2; extern int b =3; extern int c =4; ¿cómo puedo ahora establecer el número abcpara que cambie su valor al cambiar a, o b, o c para compararlo con algún d dado (por ejemplo,d=344)?

Gracias.

 
novichok2018:

¡Hola!

Estoy confundido en tres pinos:

Establezco números extern int a =2; extern int b =3; extern int c =4; ¿cómo puedo ahora establecer el número abcpara que cambie su valor al cambiar a, o b, o c para compararlo con algún d dado (por ejemplo,d=344)?

Gracias.

x = c + b*10 + a*100

 
Сергей Таболин:

x = c + b*10 + a*100

¡Oh, Dios mío! Me estoy devanando los sesos. Gracias.

 
Hola, 2020.10.03_13:33 GMT+3. Tomé el Asesor Experto de Media Móvil estándar para MetaTrader 4. Y empezó a cambiarlo para que fuera rentable. Al tratar de describir las condiciones de cierre utilizando la función OrderProfit() en el probador de estrategias, el Asesor Experto dejó de cerrar las operaciones en esa condición. No llega a cerrar una operación. Sin embargo, dudo que haya escrito correctamente las condiciones de cierre. De lo contrario, el Asesor Experto cerraría las operaciones. Probablemente intentaré escribir el precio de apertura de la operación y los últimos precios. Una vez que se alcanza la diferencia máxima entre el precio de apertura y el último precio y esta diferencia se reduce -- cierre la operación. Adjunto el archivo del Asesor Experto. 13:50 GMT+3.
Archivos adjuntos:
 
Николай Никитюк:
Hola, 2020.10.03_13:33 GMT+3. Tomé el EA de media móvil estándar para MetaTrader 4. Y empezó a cambiarlo para que fuera rentable. Al tratar de describir las condiciones de cierre utilizando la función OrderProfit() en el probador de estrategias, el Asesor Experto dejó de cerrar las operaciones en esa condición. No llega a cerrar una operación. Sin embargo, dudo que haya escrito correctamente las condiciones de cierre. De lo contrario, el Asesor Experto cerraría las operaciones. Probablemente intentaré escribir el precio de apertura de la operación y los últimos precios. Una vez que se alcanza la diferencia máxima entre el precio de apertura y el último precio y esta diferencia se reduce -- cierre la operación. Adjunto el archivo del Asesor Experto. 13:50 GMT+3.
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
   //--- check order type
      // 
      if(OrderType()==OP_BUY)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }  
         else break;     
         break;
        }
      if(OrderType()==OP_SELL)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())        // Исходя из ваших условий, то вот
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         else break;  
         break;
        }
     }      

//+------------------------------------------------------------------+
 

¡Hola!

He empezado a escribir una función para normalizar los datos de entrada. Pero no puedo "sustituir" los valores originales por los normalizados. En otras palabras, no puedo actualizar los valores en el buffer Open timeseries con los nuevos valores del array Temp. ¿Cuál es mi error? Tengo la sensación de que estoy tratando de cruzar OOP y no OOP)).

Open=new CiOpen();
   if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
      return;
//---
   int bars=10;
   double Temp[];                //Создаем массив для временного хранения входных данных
   ArraySetAsSeries(Temp,true);  //Устанавливает флаг AS_SERIES
   Open.GetData(0,bars,Temp);    //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);    //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize(double &buffer[],int bars)
  {
   double d1=-1;
   double d2=1;
   double x_min=buffer[ArrayMinimum(buffer,0,bars)];
   double x_max=buffer[ArrayMaximum(buffer,0,bars)];
   for(int i=0; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return;
  }

Estoy seguro de que se puede hacer de forma más sencilla. En este caso, por favor, enséñeme)

 
Aleksei Lesnikov:

¡Hola!

He empezado a escribir una función para normalizar los datos de entrada. Pero no puedo "sustituir" los valores originales por los normalizados. Es decir, no puedo actualizar los valores del buffer Open timeseries con los nuevos valores del array Temp. ¿Cuál es mi error? Tengo la sensación de que estoy tratando de cruzar OOP y no OOP)).

¡Seguro que se puede hacer de forma más sencilla! En este caso, por favor, enséñeme)

Lea la documentación del idioma

El valor de las variables predefinidas es establecido por el terminal cliente antes de iniciar un programa mql4 para su ejecución. Las variables predefinidas son constantes y no se pueden modificar desde el programa mql4.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov:

Leer la documentación del idioma

Alexey, ¡gracias! Ahora está claro que no es posible.

Es cierto, no soy exactamente mql4. Estoy tratando de cambiar los datos a través de la clase CiOpen. Estoy confundido con el método Update, que debería cambiar el elemento en la posición especificada del array.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov:

Alexei, ¡gracias! Ahora está claro que no es posible.

Es cierto, no tengo exactamente mql4. Estoy tratando de cambiar los datos a través de la clase CiOpen. Me confunde el método Update, que debería cambiar el elemento en una posición determinada del array.

Como la pregunta está planteada en la sección de mql4, estaba respondiendo en relación con mql4. No hay pistas para mql5 en su pregunta. Pero el resultado es el mismo.

Razón de la queja: