Funciones útiles de KimIV - página 22

 
rid:

Ahora he puesto una función en el comentario - Comentario (isCloseLastPosByStop());

¿Estás probando en el probador? Si en el probador, entonces seguramente puede haber una situación en la que dos o más últimas posiciones cerradas no tendrán un OrderCloseTime() diferente.

 

Ya veo. Si se cierran varias posiciones simultáneamente en el comprobador (según la señal), entonces la función isCloseLastPosByStop() puede "fallar" y fallar? Pero en línea parece funcionar.

Sí, - lo he comprobado en el probador ahora al trabajar con una posición. Todo funciona correctamente. La función muestra correctamente en el comentario (isCloseLastPosByStop()) el cierre por Stop Loss y cambia la bandera en el tiempo cuando se cierra por otra razón.

 
rid писал (а):
Ya veo. Si se cierran varias posiciones en el probador al mismo tiempo, entonces la función isCloseLastPosByStop() puede "fallar" y no funcionar?

Sí, porque isCloseLastPosByStop() identifica la última posición cerrada por el tiempo máximo de cierre, que se mide en segundos. Por lo tanto, necesitamos que pase más de un segundo entre el cierre de varias posiciones. En el probador, puede pasar menos de un segundo.

rid escribió:
Y en línea aparentemente funcionará.
También puede haber fallos en el modo online, pero con mucha menos frecuencia que en el probador. Incluso el robot de trading automático requiere algo de tiempo para cerrar las posiciones. Si tienes alguna idea de cómo identificar de forma más fiable la última posición cerrada, la aceptaré con gratitud e intentaré modificar la función.
 

Buenas tardes, KimIV. Necesito tu consejo, o mejor dicho, tu ayuda. Necesito que la función start() no funcione por ticks, sino que se ejecute cada segundo, independientemente de si ha llegado un nuevo tick o no. Así es como he intentado llevar a cabo esta tarea:

int start()
  {
   if(first==true)return(0); 
   else 
   {   
      for(int j=0;j<10;j++)
         {
         RefreshRates();//обновляем котировки 

         //Код эксперта

         first=true;
         Sleep(1000);//задержка в 1 секунду
         j=0;
         }
   }
   return(0);
  }
 
StatBars писал (а):
Quiero que la función start() se ejecute cada segundo, independientemente de si ha llegado un nuevo tick o no.

Lo he hecho así:

void start() {
  while (IsExpertEnabled() && !IsStopped()) {
    // код .............
    Sleep(1000);
  }
}
 

¡¡¡¡Muchas gracias!!!! ¿Aún puede decirme si mi código funciona? No en el probador... ¿Funciona en el probador...? O tengo que...

Void start()...

 
StatBars писал (а):
¿Puede decirme también si mi código funciona en absoluto?

No lo sé... No lo he comprobado...

StatBars escribió (a):
Noen el probador... ¿Funcionará en la vida real...?

En el probador cualquier cosa en bucle no funciona. Sólo los de las garrapatas funcionan...

En línea, tu código debería parecer que funciona. Al menos parece funcionar de forma lógica...

Barras de estadísticas:

O tienes que...

Void start()...

No, no es necesario. ¿Por qué declarar una función tipificada si no devuelve ningún valor, y si lo hace, ese valor no se utiliza de ninguna manera?
 

Ya veo. Gracias de nuevo.

 
KimIV:
. Si tienes alguna idea de cómo identificar de forma más fiable la última posición cerrada, la aceptaré con gratitud y trataré de rediseñar la función.

Gracias por su amable oferta. Por desgracia, las buenas ideas no suelen (por desgracia...) aparecer en mi cabeza. No hace mucho, por ejemplo, me di cuenta de que sus funciones casi no utilizan el "componente" - OrderComment

Sin embargo, tal vez, la aplicación de esta función le dé nuevas ideas (para deleite de todos los presentes).

Por ejemplo, si (OrderComment()==" [sl]" && .... - puede ampliar el abanico de tareas que puede realizar.

//---------------------------------------------------------------------------------

"Más funciones, ¡buenas y diferentes!" (c)

 
rid:
KimIV:
. Si tienes alguna idea de cómo identificar de forma más fiable la última posición cerrada, la aceptaré con gratitud e intentaré revisar la función.

Por ejemplo, como si(OrderComment()==" [sl]" && .... - podría ampliar el abanico de tareas a realizar.

rid, has sugerido una forma de identificar la activación de la parada por la entrada en los comentarios de la orden. Gracias, pero puede haber otras entradas además de [sl] en los comentarios.

Resuelvo el mismo problema comparando el precio de cierre con el precio de parada.