Errores, fallos, preguntas - página 284

 
alexvd:

¿Cómo se fijan los topes y los TP?

¿Primero abre una posición y sólo después la modifica, o especifica el SL y el TP adecuados inmediatamente?

Primero abres una posición y luego la modificas...
 
Voodoo_King:

build 384. parece que he encontrado otro error... Al ver el historial, las órdenes - los niveles de Stop Loss y Take Profit establecidos no se muestran...


Se "visualizan" cuando se está fijando una orden. No se muestran cuando una posición es cerrada por el servidor utilizando un stop, lo cual es natural, ya que el servidor no establece stops al cerrar una posición.
















































































































 

He descubierto algo así. No sé si es un error o no, pero lo parece. El siguiente código:

lot=NormalizeDouble(My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_BUY,latest_price.ask)/10,2);
printf(lot);

Salidas en el registro del probador (con un depósito de 1000 dólares):

2011.01.28 20:06:48    Core 1    2010.01.04 00:56:00   0.07000000000000001

¿No debería la función (NormalizeDouble) eliminar todos los dígitos distintos de cero después del 7?

Pensé que había encontrado una solución en el formulario: lote=floor((My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_SELL,latest_price.ask)/10)*100,

pero también obtuve resultados similares. ¿Qué hacer? ¿Qué importancia tiene en las consultas comerciales?

 

¡Buenas tardes!

Añadí la función Comment al cuerpo del bucle, para que pudiera mostrar el porcentaje del estado de ejecución del bucle y un par de valores más. El sencillo algoritmo tardó 5 minutos (si no más) en ejecutarse en el cuerpo del bucle, pero sólo recalculó 32000 valores de barra (Cierre,Alta,Baja,Apertura). Me quejé de que el array aumenta dinámicamente mientras se ejecuta el bucle, pero no es cierto. Después de depurar el algoritmo, se ha eliminado el comentario - el cálculo se realiza ahora en un dios.

¿La función Comentario realmente ralentiza la ejecución de los programas? Estoy francamente sorprendido.

Sistema: Windows XP, Terminal 5.00.384.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
KffAlex:

¡Buenas tardes!

Añadí la función Comment al cuerpo del bucle, para que pudiera mostrar el porcentaje del estado de ejecución del bucle y un par de valores más. El algoritmo simple tardó 5 minutos (si no más) en ejecutarse en el cuerpo del bucle, pero sólo recalculó 32000 valores de barras (Cierre,Alta,Baja,Apertura). Me quejé de que el array aumenta dinámicamente mientras se ejecuta el bucle, pero no es cierto. Después de depurar el algoritmo, se ha eliminado el comentario - el cálculo se realiza ahora en un dios.

¿La función Comentario realmente ralentiza la ejecución de los programas? Estoy francamente sorprendido.

Sistema: Windows XP, Terminal 5.00.384.

He notado el mismo efecto.
 

Al ejecutar el Asesor Experto en el historial utilizando sólo los precios de apertura, las posiciones de venta no se abren a los precios de apertura, sino a los altos, y se cierran a los bajos.

¿Por qué ocurre esto?

El Asesor Experto busca señales para abrir y cerrar posiciones utilizando sólo los precios de Open[0]. Se utiliza EventSetTimer(1);

 
Valmars:

Se emiten cuando se realiza un pedido. No está disponible cuando una posición es cerrada por el servidor utilizando un stop, lo cual es natural porque el servidor no establece stops cuando se cierra una posición.

¿Qué pasa?) ¿Dónde aparecen cuando se hacen los pedidos?

Me refiero al informe "Historial", y no veo nada en las columnas de Stop Loss y Take Profit, aunque las posiciones tienen estos valores.

¿Cómo puedo saber si se ha fijado un stop loss o no? Es decir, si se ha activado, puedo verlo, pero no?

 

Tengo la siguiente pregunta.

La tarea consiste en escribir los valores de la equidad en un archivo específico durante la fase de prueba, borrando los valores anteriores.

Pero lo que ocurre aquí es lo siguiente:

1. CuandoFileDelete() está ausente en OnInit(), se escribe además de los existentes.

2. Pero cuando FileDelete() en OnInit() está presente, a pesar de los mismos registros de equidad en OnCalculatde(), el archivo resultante resulta estar vacío.

¿Por qué ocurre esto y cómo evitarlo?

A continuación se muestra el código:

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
double   Values[];
string   Array[];
string   filename="equity FileWrite25.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, false);
   //---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   FileDelete(filename,FILE_COMMON);
   return(0);
}
int OnCalculate(const int        rates_total,
                const int        prev_calculated,
                const datetime&  time[],
                const double&    open[],
                const double&    high[],
                const double&    low[],
                const double&    close[],
                const long&      tick_volume[],
                const long&      volume[],
                const int&       spread[])
{  
   uint written;
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON|FILE_TXT);
   if(handle!=INVALID_HANDLE){
      FileSeek(handle,0,SEEK_END);
      written=FileWrite(handle,TimeToString(TimeCurrent())," ",AccountInfoDouble(ACCOUNT_EQUITY));//TimeToString(time[i]),
      PrintFormat("Equity FileWrite25 - OnCalculate(): Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
   }
   else {
      Print("Equity FileWrite25 - OnCalculate(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());     
   }
   FileClose(handle);
   return rates_total;
}
void OnDeinit(const int reason){
   FileClose(handle);
}
 
Voodoo_King:

qué pasa :) ¿Dónde se muestran cuando se hace un pedido?

Me refiero al informe "Historial", y no veo nada en las columnas Stop Loss y Take Profit, aunque las posiciones tienen estos valores.

¿Cómo puedo saber si se ha fijado un stop loss o no? si ha funcionado, puedo verlo, pero si no?

Se muestra en la pestaña 'Historial/Orden', ¿y a qué crees que equivalen el stop-loss y el take-profit de la orden, a los que el servidor cierra la posición cuando se activa el stop? Está viendo los parámetros exactos de las órdenes.
 
DV2010:

Tengo la siguiente pregunta.

La tarea consiste en escribir los valores de la equidad en un archivo específico durante la fase de prueba, borrando los valores anteriores.

Pero lo que ocurre aquí es lo siguiente:

1. Cuando FileDelete() está ausente en OnInit(), se escribe además de los existentes.

2. Pero cuando FileDelete() en OnInit() está presente, a pesar de los mismos registros de equidad en OnCalculatde(), el archivo resultante resulta estar vacío.

¿Por qué ocurre esto y cómo evitarlo?

El código se indica a continuación:

He inventado una solución para reconocer el modo de prueba, pero hay algo de empirismo en ella que me avergüenza

(Traté de encontrar una oportunidad para obtener la hora de inicio del probador programáticamente, para establecer la sangría de la misma a las profundidades de la historia y cortar así el tiempo real,

pero desgraciadamente no lo encontré):

   if(rates_total - prev_calculated > 1 && rates_total - prev_calculated < 10000){
    FileDelete(filename,FILE_COMMON);
   }   
Pero hay un problema de naturaleza bastante diferente, que es que después de cambiar el período de prueba los indicadores según los resultados de la prueba desaparecen por alguna razón, pero si después de eso se hace una compilación para un nuevo período, entonces al ejecutar el probador se mostrarán.

¿Bicho?

Razón de la queja: