[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 488

 
hoz:

Voy a duplicar la pregunta, quizás nadie se ha dado cuenta por las preguntas de seguimiento.

Decidí entender cómo funciona el indicadorATR y, al mismo tiempo, estudiar su código. Entendí la esencia de la misma, pero está escrita de forma extraña.

Aquí está su función deinicio:

Aquí está el primer bloque con algo de confusión:

Qué sentido tiene hacer algo si el valor de counted_bars <1. En mi opinión, significa que el indicador no ha contado ninguna barra y que debería salir de la función porque aún no hay valores... ¿Cuál es la trampa?

¿Por quéAtrBuffer tiene el índice[Bars-i]? He entendido que la idea es poner el buffer a 0,0 si no hay valores. Pero resulta que el valor 0.0 está definido sólo para las barras desde(Bars) hasta(AtrPeriod), mientras que desdeAtrPeriod hastala barra 0 no se escribe nada en el buffer. ¿Por qué?

No entiendo la lógica de este fragmento de código

En el siguiente bloque:

En la línea:

Condición sii==Bars-1. Parece que se tiene en cuenta el valor dela 1ªbarra desde el principio del gráfico de la izquierda...Pero esto está muy lejos, ¿de qué sirve este valor?


Las barras se cuentan de derecha a izquierda (de 0 a la última (Barra) menos 1). Con cada nueva barra (0) todas las barras se incrementan correspondientemente en uno, y la última (a la izquierda) nunca se especifica en términos numéricos, y esta variable Bars, porque nadie sabe qué historia tiene, pero garantiza el trabajo del indicador en toda la historia, que tiene. Entrena tu lógica, ¡no hay manera de entender nada sin ella!
 
laveosa:
Tengo 1 pip-1 cent. ¿Significa eso que necesito 20USD para poder soportar un stop de 200 pips a la baja?
Si un lote de 0,01 puntos = 1 céntimo, entonces para una posición de 0,1 lotes con un stop loss de 200 pips = 20 USD.
 
borilunad:

Las barras se cuentan de derecha a izquierda (de 0 a la última (Barra) menos 1). Con cada nueva barra (0) todas las barras se incrementan correspondientemente en una, y la última (izquierda) nunca se especifica numéricamente, y esta variable Bars, porque nadie sabe qué historia tiene, pero garantiza el trabajo del indicador sobre toda la historia, que la tiene. Entrena tu lógica, ¡no hay manera de entender nada sin ella!

Sé que las barras se cuentan de derecha a izquierda. Si hay 5000 barras en el gráfico y el periodo ATR = 14, entonces[Bars-i] tomará el valor de (5000 - 1) a (5000 - 14), es decir, de 4999 a 4986.

Así queel AtrBuffer será con índice i igual a 4999 a 4986. ¿Y dónde están las barras restantes de 0 a 4986?

 
hoz:

Sé que las barras se cuentan de derecha a izquierda. Si hay 5000 barras en el gráfico y el periodo ATR = 14, entonces[Bars-i] tomará el valor de (5000 - 1) a (5000 - 14), es decir, de 4999 a 4986.

Así queel AtrBuffer será con índice i igual a 4999 a 4986. ¿Y dónde están las otras barras de 0 a 4986?


¿Cómo se calcula? Si el período ATR = 14, entonces la barra cero da la media de las 14 barras anteriores a la barra cero y así sucesivamente en la profundidad de la historia.

La i repasa los 14 compases últimos en tiempo, pero primeros en número para promediarlos o qué hacer con la fórmula. También cuenta el valor del compás 4986 por los 14 compases anteriores en el tiempo, es decir, por los que están a la izquierda.

¡Estudia el operador for en Doc y en el tutorial!

 
borilunad:


¿Cómo se calcula? Si el periodo ATR = 14, entonces la barra cero da la media de las 14 barras anteriores a la barra cero y así sucesivamente en la profundidad de la historia.

i pasa por encima de la última barra de 14, pero por encima de la primera por número para promediarlos o lo que hacer por la fórmula. También cuenta el valor del 4986º compás por los 14 últimos compases en el tiempo, es decir, por los que están a la izquierda.

¡Estudia el operador for en Doc y el tutorial!

Esa no era la pregunta, lo que has dicho lo entiendo. Fui yo el que trabajó demasiado y fue estúpido. Había un problema en el hecho de que el bufferAtrPeriod pasa el número de barras de la historia... Y lo estuve mirando y no lo entendí. Me pongo así cuando trabajo demasiado...
 
hoz:

Víctor, tus suposiciones son ilógicas.

Si el indicador no ha procesado ni una sola barra, significa que debe procesar todas las barras y no terminar el programa.

Y los valores de los indicadores en el historial son necesarios para analizar el historial:)

 
Estimados profesionales, ¿un spread del EA matodiado de 4 al probar todos los ticks en 5mins sigue siendo malo, o es más o menos?
 
kakin:
Estimados profesionales, ¿el 4 spread de un EA en un test de 5 min todos los ticks sigue siendo malo, o es más o menos?

No hay mucha información, y los profesionales están dormidos:)
 
paladin80:
Si un lote de 0,01 = 1 céntimo, entonces para una posición de 0,1 lotes con un stop loss de 200 pips = 20 USD.
gracias amigo pensé que así era...... gracias :)
 

Por favor, ayude a que esta función sea viceversa:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 11.09.2008                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника):
//|    int LevelProfit - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.
//|    int LevelWLoss - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      po=MarketInfo(OrderSymbol(), MODE_POINT);
      if (OrderType()==OP_BUY) {
        if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
          pp=MarketInfo(OrderSymbol(), MODE_BID);
          if (pp-OrderOpenPrice()>LevelProfit*po) {
            ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
          }
        }
      }
      if (OrderType()==OP_SELL) {
        if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
          pp=MarketInfo(OrderSymbol(), MODE_ASK);
          if (OrderOpenPrice()-pp>LevelProfit*po) {
            ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
          }
        }
      }
    }
  }
}

Es decir, si el precio va a pérdida desde una orden abierta por el número de pips LevelProfit (puedes llamarlo LevelLoss), tienes que mover TakeProfit a cero o a pérdida por 1 pip 2, etc., dependiendo de lo que pongas en el parámetro LevelWLoss, de manera que si el precio incluso se da la vuelta, no habría más beneficio. ¿O tal vez tenga uno listo?

Gracias de antemano))