Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 110

 
artmedia70:
¿En qué parte de esta función se lee el StopLoss del último cerrado? No hay nada allí.

Está aquí. Directamente apuntado.
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
 
borilunad:
¡A dormir, todos! Siempre es mejor por la mañana. ¡Es la 1:00 de la mañana! ¡Buenas noches! ¡Y Artyom ya se ha acostado!

Llevo cinco días haciendo lo mismo que tú, y ya he empezado a pensar por la noche. Buenas noches.
 
Ooh! El error 130 aparece en el cuaderno de bitácora. Estas son las paradas equivocadas, ¿no? PERO el nuevo stop loss es 1,3282. El stop loss en este momento es 1,3275 (también es el precio de apertura de la orden) y la cotización actual es 1,3297. ¿Dónde está el error?
 

Hola. ¿Por qué en la variable predefinida "Punto", no se definen ceros en el registro del probador de estrategias, al final, números redondos?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}

 
artmedia70:
Soy un siberiano, sí. Cerca de Krasnoyarsk.


Sibiryak, así, casi, zamlYak)).
 
webip:

Pero llevo cinco días haciendo lo mismo que tú y ya he empezado a pensar por la noche.

Es más fácil decir quién no piensa por la noche, si es al revés. Yo tengo la misma situación. Además, nadie me molesta por la noche en absoluto. Por cierto, una vez leí que el cerebro piensa mejor por la noche. Es como si los científicos hubieran descubierto...
 
semiromid:

Hola. ¿Por qué en la variable predefinida "Punto", no se definen ceros en el registro del probador de estrategias, al final, números redondos?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}



¿Y qué es lo que realmente produce Alert?
 
artmedia70:
DoubleToStr(number,digit) es para ti


¡Muchas gracias! Lo necesitaba para comparar las características de las velas (más, menos, etc.) Lo atornillé y funciona. Sólo no puedo entender cómo se compara el tipo de datos cadena? O doble a la cadena no se traduce número a la cadena? :-D


PS. No funciona en el indicador - sólo en el script... Cuando llamo a High[i] - obtengo sólo 4 decimales en él.

Estoy escribiendo:

Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5)
{
Alerta ("Más");
}
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alerta ("Más pequeño");

}

Funciona, escribe el resultado con cinco dígitos, cuenta por encima/por debajo. El problema es que en el indicador la matriz de cadenas no aparece en el gráfico. Por lo tanto...

...escribir:

Alert ("Normalized Double High = ", NormalizeDouble(High[1],5));

No funciona - el resultado es > 1,1234

No entiendo a los desarrolladores, ¿por qué han tenido que complicar tanto las cosas? ¿Por qué si muestra tantos dígitos en el gráfico, no raya la función llamada con cinco dígitos? ¿Quizás haya una solución sencilla?

 

Estoy luchando con una función que debe devolver True si la última posición de mercado se cerró con beneficios, y False si no se cerró con pérdidas. Si esta función devuelve True, se cierran todas las posiciones (tanto las pendientes como las de mercado).

Esto es lo que salió:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         int j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}

Artyom arriba sugirió donde tenía un error. Lo reescribí para mí. Todavía no es la variante final, pero... ya está bastante claro. Después de ejecutar el Asesor Experto, me di cuenta de inmediato que las posiciones restantes no se cerraron y no se están cerrando en absoluto. Empecé a averiguar cuál era la razón. He recomendado un par de funciones y me he dado cuenta de que la razón está en este bloque:

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

El comentario se activa todo el tiempo exactamente:

Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");

Lo comenté y seguí conduciendo. Me he dado cuenta de que este comentario:

Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);

Nunca se dispara en absoluto, incluso cuando hay una posición cerrada en último lugar. ¿Qué podría estar mal?

Mis pensamientos, aunque puedo estar equivocado... Tal vez tengas que poner este bloque

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

¿ponerlo también en el bucle for? De lo contrario, quién sabe en qué dirección irá el desbordamiento. La variable j contendrá el número de índice de la posición y no se especifica explícitamente en qué dirección irá la búsqueda.

 
hoz:

Estoy luchando con una función que debe devolver True si la última posición de mercado se cerró con beneficios, y False si no se cerró con pérdidas. Si esta función devuelve True, se cierran todas las posiciones (tanto las pendientes como las de mercado).

Esto es lo que salió:

Artyom arriba sugirió donde tenía un error. Lo reescribí para mí. Todavía no es la variante final, pero... ya está bastante claro. Después de ejecutar el Asesor Experto, me di cuenta de inmediato que las posiciones restantes no se cerraron y no se están cerrando en absoluto. Empecé a averiguar cuál era la razón. He recomendado un par de funciones y me he dado cuenta de que está en este bloque:

El comentario se activa todo el tiempo exactamente:

Lo comenté y seguí conduciendo. Me he dado cuenta de que este comentario:

Nunca se dispara en absoluto, incluso cuando hay una posición cerrada en último lugar. ¿Qué podría estar mal?

Mis pensamientos, aunque puedo estar equivocado... Tal vez tengas que poner este bloque

¿ponerlo también en el bucle for? De lo contrario, quién sabe en qué dirección irá el desbordamiento. La variable j contendrá el número de índice de la posición y no se especifica explícitamente en qué dirección irá la búsqueda.

La variable j debe inicializarse explícitamente al principio de la función con un valor negativo. Pruébalo. Todavía no he mirado más allá.