[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 417

 
okvseok:


por ejemplo, no girar la rueda del ratón (tecla) durante 3 minutos a la izquierda o a la derecha)), sino simplemente introducir una fecha de barra específica o algo más.

Gracias por su respuesta.


Pulse la barra espaciadora e introduzca la fecha deseada.

La respuesta es tan correcta como inútil. Totalmente relevante para la pregunta.

 
TarasBY:
En la esquina inferior izquierda del gráfico (donde está la fecha), haga doble clic y en la ventana que se abre, introduzca la fecha deseada en formato DD.MM.YYYY - ¿es lo suficientemente "no manuscrita"?
Sí, muchas gracias. Vale.
 
Run:

o en otras palabras
el script se supone que escribe aproximadamente n número de líneas, pero sólo escribe una

Para empezar, mueva el procedimiento de apertura y cierre de archivos fuera del bucle.
 

Gracias, está funcionando.

  handle=FileOpen("AUDJPY.csv", FILE_READ|FILE_WRITE, '\t');
  for (int i=NumberOfCandels; i>0; i--) {
    arrowbuy = iCustom(NULL, 0, "xxx", 0, i);
    arrowsell = iCustom(NULL, 0, "xxx", 1, i);
    if(arrowbuy != EMPTY_VALUE && arrowsell == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Buy");
        }
      }
    if(arrowsell != EMPTY_VALUE && arrowbuy == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Sell");
        }
      }
  }
  FileClose(handle);
 
okvseok:


Por ejemplo, no hay que girar la rueda del ratón (tecla) 3 minutos a la izquierda o a la derecha)), sino que hay que introducir una fecha determinada de la barra o cualquier otra cosa.

Gracias por la respuesta.

Existe una función

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)
Buscar un bar por tiempo. La función devuelve el desplazamiento de la barra a la que pertenece la hora especificada. Si no hay ninguna barra para el tiempo especificado ("agujero" en el historial), la función devuelve, dependiendo del parámetro exacto, -1 o el desplazamiento de la barra más cercana.
Parámetros:
símbolo - Nombre del símbolo del instrumento. NULL significa símbolo actual.
marco temporal - Período. Puede ser uno de los marcos temporales de un gráfico. 0 significa el período del gráfico actual.
tiempo - Valor del tiempo a buscar.
exacto - Valor devuelto si no se encuentra ninguna barra. FALSE - iBarShift devuelve lo más cercano. TRUE - iBarShift devuelve -1.
Ejemplo:
 datetime some_time=D'2004.03.21 12:00'; int shift=iBarShift("EUROUSD",PERIOD_M1,some_time); Print("el desplazamiento de la barra con tiempo de apertura ",TimeToStr(some_time)," es ",shift);

 
Chiripaha:

: )))))))) (sin anotación... y sin comentarios)

De los dos, el que pregunta y el que responde, es más probable que usted, el que pregunta, no entienda bien qué pasa con las órdenes pendientes cuando se activan. Una orden pendiente se ejecuta a CUALQUIER precio más cercano a ella. La regla general para una orden pendiente es que si el precio la ha alcanzado, la operación entrará en el mercado. Y el precio no importará. Esto se aplica también a los Stop Loss, ya que también son órdenes pendientes, sólo que en la posición contraria a la de la propia operación. Esto es ligeramente diferente a las operaciones en la bolsa. Tal vez por eso está usted confundido.

En este sentido, depende mucho de la calidad del corredor. Con ello nos referimos tanto a la normativa de ejecución de las operaciones, como a la disponibilidad de liquidez en ese broker, y quizás a un montón de características más: presumiblemente honestidad, etc. Si lees el contrato con casi cualquier bróker (DC), resulta que tu operación (y la de cualquier otro operador) puede cerrarse a cualquier precio conveniente de este "bróker" y estará dentro de la ley y la normativa, porque lo has firmado. - Pero esos son otros temas. No tiene nada que ver con la programación.


Si tienes un robot en la demostración, todo suele abrirse bien allí para atraer a la gente. Y, de nuevo, repito, ¡las órdenes que se han abierto manualmente se han abierto en el lugar donde se han fijado!
 
Ekburg:

En cuanto al broker, no lo tengo claro, pero he operado en la demo. Y, de nuevo, repito, ¡las órdenes que se han abierto manualmente se han abierto donde se han fijado!

Conclusión: Por supuesto, podría, por interés, pedirle que describa las condiciones con más detalle, ya que sólo ha proporcionado una descripción general: cuándo se fijaron las órdenes del robot (con antelación o no; manualmente alrededor de la misma hora que el robot o no, etc.). Pero de todos modos, incluso en este caso sólo tendrá que tratar con su corredor, porque él tiene su propio hilo que probablemente pone en cola las operaciones. Supongamos que, si la orden pendiente manual fue colocada primero, entonces el tiempo de su ejecución será diferente (incluyendo la cola de otros clientes), por lo que el precio puede ser diferente. Si el robot ha colocado las órdenes dentro del periodo de señales formadas, entonces la llegada de órdenes a la cola no es evidente, de ahí el posible sesgo en el precio de ejecución. Además, puede verse afectado por el tamaño de las posiciones sobre las que no se escribe nada... etc...

Pero... De todos modos, esto sólo puede aclararse con un corredor (DC). Y supongo que encontrará un montón de razones que no he mencionado. - Y el consejo era correcto: el registro en sus manos y al corredor, a menos que, por supuesto, usted todavía piensa que sus órdenes pendientes se han movido. Pero no hay que confundir 2 conceptos diferentes: una Orden Pendiente y una Transacción sobre esta Orden Pendiente. La orden de límite es una instrucción para entrar en el mercado a cualquier precio más cercano con el volumen declarado. Y el Deal - es el precio al que fue posible ejecutar su orden por el volumen de dinero declarado (lote). - Y es probable que los precios de estos pedidos sean diferentes (sobre todo en el mercado rápido, que es al que te han dado el enlace). En el caso de una orden limitada, el precio de la orden y el precio de la ejecución son iguales (por definición).

¡Y el hecho de que la demo y las órdenes reales del broker no difieran es bueno! - Esto demuestra que el broker no falsea las operaciones para atraer a los clientes (como tú dices). - En este caso no se aprecia ninguna discrepancia.

 
Zhunko:

1. ¿Cómo empezó? Tienes que ejecutarlo sin actualizar primero. Es decir, IsRefreshRates = false. Los datos no se actualizarán.

2. Entonces debe ejecutarlo con IsRefreshRates = true. Los datos se actualizarán.

Aquí hay una captura de pantalla 1: pantalla 2:

Observe los tiempos de la barra. También puede ver que MarketInfo() toma los datos de la visión general del mercado.

Aquí está el Asesor Experto. Lo he corregido un poco. Tachar el nombre del instrumento.


1. ¡He utilizado un terminal no importa cómo, con o sin actualización, la pantalla es la misma! He descargado el terminal junto con los scripts para la prueba con el 99% de cotización de Dookie. Los vertí, ya que no se adjunta debido a la sobredimensión. Este es el enlace:http://www.load.to/PqWVW2JQ75/Тиковые_котировки_для_тестера_MT4_от_DukasCopy.zip

2. En cualquier otro terminal la situación ya es diferente. Aquí en Oanda, por ejemplo:

2.1 Inicialmente en el caso:

IsRefreshRates = false

Así que:

2.2 Más adelante en el caso:

IsRefreshRates = true

así.

Como puede ver en el primer modo, los precios están lejos del par AUDNZD... y en el segundo modo los precios son exactamente los que queremos ver...

Resulta que todavía RefreshRates() "tira" de las comillas del servidor. El soporte está dormido, por lo que esta variante está más cerca que la original.

 
Zhunko:
RefreshRates() sólo actualiza lo que el experto está trabajando. Así es como se descubre. Del experto. Hace tiempo alguien de Metakvot escribió sobre ello.


Vadim, dudo que RefreshRates() sepa qué herramientas necesita el Asesor Experto. No todos los Asesores Expertos tienen un nombre de herramienta definido en los parámetros globales, ¿no es así? Bueno... Si es así, cabe preguntarse en qué se basaRefreshRates() para saber qué datos de mercado de la herramienta deben actualizarse y cuáles no?
 
Integer:

Junko, página 409, el último puesto - dice por qué se actualizan los datos. Porque se llama a iOpen(), iClose(), y eso lo demuestras desde RefreshRates(). La primera vez se ejecutó el script sin RefreshRates(), pero se llamaron las funciones iOpen() e iClose(), y a partir de ahí el terminal carga los datos. En la segunda ejecución los datos ya estaban ahí y sabemos que la barra cero se carga primero, así que la impresión es que los datos están todos cargados, pero puede que no estén todos cargados, sino que estén en proceso.

...Y aún así demuestras que has descubierto la carga de datos.... de qué flujos y sincronizaciones podemos hablar aquí...


¿Por quéiOpen() extrae datos del servidor? Está escrito en la documentación que devuelve un valor... Así que está regresando, no descargando.
Razón de la queja: