Errores, fallos, preguntas - página 308

 
aharata:
Intenta leer sobre BarsCalculated en la ayuda, que, por cierto, da el ejemplo correcto.

Intentemos hacerlo con este. Gracias.
 
Im_hungry:

es decir, mientras CopyBuffer>0 lo calculamos, y el nuevo parámetro (Close())

aparece cuando la posición está cerrada. En otras palabras, tenemos que hacer un bucle a través de While. Resulta así.

Yo lo pondría así: "Mientras CopyBuffer<0, repetimos la llamada de esta función".

La línea While (vhandle>0) no parece llevar ninguna carga especial, porque en caso de que el primer CopyBuffer<0 retorne(0);

yo trabajaría en esta dirección:

if(!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
  {
   for(uchar u=0;u<100;u++)  //запускаем цикл с ограниченным количеством шагов
    {
     if(CopyBuffer(vhandle,0,0,50,Sp1Buffer) && CopyBuffer(vhandle,1,0,50,Sp2Buffer))
      {
       return(true);  //дождались копирования буферов - выходим
      }
     else
      {
       if(u==99) //т.е. выявляем последний шаг нашего цикла for, который не принёс ожидаемых результатов
         {
          Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
          return(0);
         }
       Sleep(50);  //засыпаем ненадолго (хотя я сам не сторонник использования Sleep в теле OnTick)
      }
    }
  }

En general, algo en esta línea, a criterio del autor. Como se ha señalado acertadamente, una guía de referencia no estaría de más.

 
aharata:
Trate de leer en la ayuda sobre BarsCalculated, por cierto, el ejemplo correcto se da allí.

Gracias por la referencia hecha - funciona, parece no tener errores (1 mes probado)

Aquí está mi código de trabajo para el primer par

void OnTick()
{ 
   if (isNewBar()==true && proverkaHANDLA()==true)
     {
      if (!PositionSelect(Symbol1))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
  ArraySetAsSeries(Sp1Buffer,true);
  ArraySetAsSeries(Sp2Buffer,true);
  vhandle=iCustom(NULL,0,"МТ5",Symbol1,100,Lots,1,Close());
  ResetLastError();
  int copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
  int copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
  if(copied0<=0 || copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(vhandle)>0)
         break;
         Sleep(50);
        }
      copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
      copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
      if(copied0<=0 || copied1<=0)
        {
         Print("Не удалось скопировать Буфера индюков :-)",GetLastError(),
         "copied0",copied0,"copied1=",copied1);
         return (false); 
        }
       Print("Удалось скопировать Буфера :-)copied0",copied0,"copied1=",copied1);
       return (true);
     }
   Print("Удалось скопировать Буфера. Sp1Buffer=",ArraySize(Sp1Buffer),
         "Sp2Buffer=",ArraySize(Sp2Buffer));
   return (true);
}
 
Yedelkin:

Yo diría: "mientras CopyBuffer<0, repite la llamada a esta función".

La línea While (vhandle>0) no parece tener mucha carga, porque en caso de que el primer CopyBuffer<0 devolviera(0);

Yo trabajaría en esta dirección:

Básicamente, algo así, a discreción del autor. Como se ha señalado acertadamente, un libro de referencia no estaría de más.

Es aún más simple, veamos cuál de estos 2 enfoques es mejor y más rápido - eso es lo que vamos a tomar,

¡Gracias a todos! Vamos a probar.

 
desarrolladores, por favor, presten atención a la solicitud #33601 (hay una "gran característica" sobre el apalancamiento en diferentes SOs)...
 
Interesting:
desarrolladores, por favor, presten atención a la solicitud #33601 (hay una "gran característica" sobre el apalancamiento en diferentes OS)...

¿Tal vez esté utilizando terminales instalados originalmente de diferentes corredores? Añada detalles a su solicitud, por favor.
 
Rosh:
¿Quizá esté utilizando terminales instalados originalmente de diferentes corredores? Añada detalles a su solicitud, por favor.
Aclarado lo de los terminales y lo que tengo que conseguir al final.
 

Pregunta para los desarrolladores.

Todo está claro en cuanto a los diferenciales, se almacenan en barras y el probador puede ejecutar todo el historial, teniendo en cuenta los cambios en los diferenciales (si el historial se carga normalmente), pero ¿qué pasa con los swaps?

Es decir, ¿qué ocurre si el corredor/agente cambia los tipos de los swaps o las comisiones?

Entiendo que la situación es un poco absurda, pero aun así.

Si he entendido bien ahora tester como en MT4 tomará swaps y comisión last....

PS

Aclarado de nuevo, ahora con capturas de pantalla....

 
Interesting:

Pregunta para los desarrolladores.

Todo está claro en cuanto a los diferenciales, se almacenan en barras y el probador puede ejecutar todo el historial, teniendo en cuenta los cambios en los diferenciales (si el historial se carga normalmente), pero ¿qué pasa con los swaps?

Es decir, ¿qué ocurre si un corredor/intermediario cambia el tamaño de los swaps o la comisión?

El historial de canjes y comisiones no se almacena, estos ajustes se toman de la última conexión
 
Rosh:
El historial de intercambios y comisiones no se almacena, estos ajustes se toman de la última conexión
Ya veo, eso es lo que pensaba. Esperemos que no cambien a menudo/no lo hagan.