[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 416

 
VladimirR:

Esa opción tampoco funciona



Me pregunto qué es lo que busca. Hay otras opciones para encontrar el área máxima. Por ejemplo, el análisis
 
Vinin:

Me pregunto por qué hay que cambiar los valores del contador dos veces en el bucle. Y por alguna razón no hay asignación (preliminar) de S2. Este valor al inicio es 0, y sólo en la segunda iteración (más precisamente en la tercera) va la comparación de valores reales (depende de cómo contar desde cero o desde uno).
No hay asignación, porque la enumeración comienza con el valor mínimo del área es estrictamente positivo, por lo que 0 es suficiente. ¿Dónde cambian los valores del contador por segunda vez?
 
Vinin:

Yo también me pregunto qué es lo que busca. Hay otras opciones para encontrar el área máxima. Como la analítica.
No es el problema en absoluto. Es una tarea sencilla que se utiliza como ejemplo de cómo funciona el operador de ruptura. ¡Necesito saber por qué no se puede escribir for(int=1, j=499; i<500; i++,j--) si no se consignan las variables i,j antes del bucle para poder escribir después programas correctos!
 
VladimirR:
Ese no es el problema en absoluto. Esta es una tarea sencilla que se utiliza como ejemplo de cómo funciona el operador de ruptura. ¡Necesito saber por qué no se puede escribir for(int i=1, j=499; i<500; i++,j--) si no se consignan las variables i,j antes del bucle para poder escribir después los programas correctos!

Probablemente se trate de un error en el compilador.

No se compila así:

for( int i=1, j=499; i<500; i++,j--) //последовательный перебор значений площади

Y así es como se compila:

int i, j;
for( i=1, j=499; i<500; i++,j--) //последовательный перебор значений площади

Y así es como se compila:

int i=1, j=499;
for( ; i<500; i++,j--) //последовательный перебор значений площади
 

¡¡¡Hola a todos!!!

Por favor, ayúdenme a sacar el número de RiskReward del indicador. No puedo meterlo en mi Expert Advisor.

Archivos adjuntos:
 
demlin:

¡¡¡Hola a todos!!!

Por favor, ayúdenme a sacar el número de RiskReward del indicador. No puedo meterlo en mi Expert Advisor.


¿Dónde está el código fuente?
 

Gente, ¿por qué es tan difícil responderme o simplemente no quieren hacerlo? Estás clasificando esta mierda aquí, pero eres demasiado vago para ayudar a escribir parte del código. Intentaré pedírtelo una vez más, si no me ayudas, me iré a los cursos, estoy cansado de rogarte aquí.


Una vez más: después de que el EA se haya unido al gráfico con el primer tick, fija el precio Ask. Luego, durante la negociación, tan pronto como el precio aumente, digamos, un 10% (está claro que no puede ser, es figurativo), el EA debería notificar al trader con el mensaje "El precio ha aumentado un 10%".

 
demlin:

¡¡¡Hola a todos!!!

Por favor, ayúdenme a sacar el número de RiskReward del indicador. No puedo meterlo en mi Expert Advisor.

Recorre todos los objetos del gráfico, encuentra un objeto llamado lbl, saca de él la cadena FXRanger: Risk:Reward=x.xxx, analízala y convierte x.xxx en doble.
 

Ayuda para arreglar si las órdenes se abren con SL, y si hay dos órdenes opuestas, para la segunda elimina SL.... pero esto no es necesario

Gracias

void Trailing()
{
//-----
  double Up = iCustom(NULL,0,"NLO",TrailPeriod,0,1);
  double Dn = iCustom(NULL,0,"NLO",TrailPeriod,1,1);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if(OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && Up > OrderOpenPrice()
      && OrderStopLoss() != Up && (OrderStopLoss() == 0 || Up > OrderStopLoss()))
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && Dn < OrderOpenPrice()
      && OrderStopLoss() != Dn && (OrderStopLoss() == 0 || Dn < OrderStopLoss()))
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),Dn,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}
 

Hola. Una vez más no puedo resolver el ejemplo del tutorial.

Tarea 17. Hay 1.000 ovejas en la primera granja. Cada día el número de ovejas de la primera granja aumenta un 1%. El día en que el número de ovejas de la primera explotación alcanza los 50.000 ejemplares, el 10% de las ovejas se traslada a la segunda explotación. ¿Cuánto tiempo tardará el número de ovejas de la segunda explotación en alcanzar los 35.000 ejemplares? (Supongamos que hay 30 días laborables en el mes).

//--------------------------------------------------------------------
// othersheep.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                               // Специальная ф-ия start()
  {
//--------------------------------------------------------------------
   int
   day,                                   // Текущий день месяца
   Mons;                                  // Искомое количест. месяцев
   double
   One_Farm    =1000.0,                   // Количество на 1 ферме
   Perc_day    =1,                        // Ежедневный подъём, %
   One_Farm_max=50000.0,                  // Пороговое значение
   Perc_exit   =10,                       // Разовый вывод, %
   Purpose     =35000.0,                  // Необх. колич. на 2 ферме
   Two_Farm;                              // Количество на 2 ферме
//--------------------------------------------------------------------
   while(Two_Farm < Purpose)              // До достижения цели
     {                                    // Начало тела внешн. цикла
      //--------------------------------------------------------------
      for(day=1; day<=30 && Two_Farm < Purpose; day++)// Цикл по дням 
        {
         One_Farm=One_Farm*(1+Perc_day/100);//Накопл. на 1 ферме
         if (One_Farm < One_Farm_max)     // Если меньше допустимого,.
            continue;                     // .. то овец не переводим
         Two_Farm=Two_Farm+One_Farm*Perc_exit/100;//Накопл. на 2 ферме
         One_Farm=One_Farm*(1-Perc_exit/100);     //Остаток на 1 ферме
        }
      //--------------------------------------------------------------
      if (Two_Farm>=Purpose)              // Если цель достигнута,..
         continue;                        // .. то месяцы не считаем
      Mons++;                             // Считаем месяцы
     }                                    // Конец тела внешнего цикла
//--------------------------------------------------------------------
   Alert("Цель будет достигнута через ",Mons," мес. и ",day," дн.");
   return;                                // Выход из функции start()
  }
//-------------------------------------------------------------------

En este ejemplo, la salida del bucle

 for(day=1; day<=30 && Two_Farm < Purpose; day++)// Цикл по дням 

Siempre se añade el "día extra", es decir, se añade un día para el que no se realiza ningún cálculo, pero como el ciclo está anidado, el "día extra" permanece.

Cada vez que el control vuelve a él, los días se vuelven a contar, por lo que no es imprescindible. Pero cuando se sale del bucle

while(Two_Farm < Purpose)              // До достижения цели

el "día extra" permanece. Y como resultado se imprimirá la respuesta incorrecta.

¿Puede decirme si mi razonamiento es correcto o me he equivocado en algo?