Realice una sola prueba, una sola pasada. No se trata de una optimización, sino de una sola pasada. Así podrás ver el registro con seguridad.
¿Qué quieres decir con "visual"? Bueno, tengo el registro. No veo nada malo ahí. Los parámetros son todos pasados. Incluso corrió, pero la salida sigue siendo 20.000.
¿Qué quieres decir con "visual"? Bueno, tengo el registro. No veo nada malo en ello. Los parámetros son todos pasados. Incluso se ejecutó. Pero el balance de salida fue de 20000 y todavía lo es.
Por lo tanto, cambie el código para que démensajes de error cuando haya errores o si no se puede realizar la operación comercial. O en general, el código está mal y no da señales. Los milagros no ocurren.
Импортируемая функция не может иметь такого параметра (нельзя передавать указатель, класс или структуру, содержащую динамический массив, указатель, класс и т.д.) Недопустимый возвращаемый тип. Например, такая ошибка будет выдана для функций, импортированных из...
Por lo tanto, cambie el código para que démensajes de error cuando se produzcan errores o si la operación no se puede ejecutar. O el código es defectuoso y no da ninguna señal. No hay milagros.
Sí.
Por lo tanto, la optimización no está incluida en Ontick. Se está procesando OnInit. Pero no se genera On-Tick. Este es el problema.
He integrado los puntos de impresión ( ) en las entradas y en las salidas. Sólo la entrada se escribe en el registro.
P.D.
Yo me encargo de los errores. La fuerza de la costumbre. Llevo escribiendo programas desde 1987.
Sin el código, sólo los telépatas pueden ayudar, y ahora, por suerte, todos los telépatas están de vacaciones.
He encontrado la razón. Por alguna razón, los indicadores no se recalculan en Ontick (no da el número de barras recalculadas). Tal vez tenga que actualizar las comillas.
Sin embargo, he perdido mi agradecimiento. Me he vuelto más inteligente. He aprendido dónde se escriben los registros.
Convertido un indicador simple de MQL4 -> MQL5, pero no hay señal en las últimas barras. Por favor, ayúdenme a encontrar la razón. El código fuente y el resultado están en el archivo adjunto. Pondré aquí el convertido también.
#property indicator_chart_window#property indicator_plots4#property indicator_buffers4#property indicator_color1 PaleVioletRed
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
#property indicator_color4 LimeGreen
inputint dist2 = 21; // Distance#2inputint dist1 = 14; // Distance#1double b1[];
double b2[];
double b3[];
double b4[];
int handle_atr;
int min_rates_total;
double atr[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit() {
SetIndexBuffer(0,b1,INDICATOR_DATA);
SetIndexBuffer(1,b2,INDICATOR_DATA);
SetIndexBuffer(2,b3,INDICATOR_DATA);
SetIndexBuffer(3,b4,INDICATOR_DATA);
ArraySetAsSeries(b1,true);
ArraySetAsSeries(b2,true);
ArraySetAsSeries(b3,true);
ArraySetAsSeries(b4,true);
PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ARROW);
PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ARROW);
PlotIndexSetInteger(2,PLOT_ARROW,159);
PlotIndexSetInteger(3,PLOT_ARROW,159);
ResetLastError();
handle_atr = iATR(NULL,PERIOD_CURRENT,50);
if(handle_atr==INVALID_HANDLE) {
Print(" *** ATR handle was unable to create. Error ",GetLastError());
returnINIT_FAILED;
}
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PlotIndexSetString(0,PLOT_LABEL,"SuperSignals Upper");
PlotIndexSetString(1,PLOT_LABEL,"SuperSignals Lower");
PlotIndexSetString(2,PLOT_LABEL,"SuperSignals Sell");
PlotIndexSetString(3,PLOT_LABEL,"SuperSignals Buy");
returnINIT_SUCCEEDED;
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &High[],
constdouble &Low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[]) {
int counted_bars=prev_calculated;
int i,limit;
ArraySetAsSeries(Low,true);
ArraySetAsSeries(High,true);
if(counted_bars<0) return0;
if(counted_bars>0) counted_bars--;
limit=rates_total-counted_bars;
limit=MathMax(limit,dist1);
limit=MathMax(limit,dist2);
for (i = limit-1; i >= 0; i--) {
int hhb1 = ArrayMaximum(High,i-dist1/2,dist1);
int llb1 = ArrayMinimum(Low, i-dist1/2,dist1);
int hhb = ArrayMaximum(High,MathMax(0,i-dist2/2),dist2);
int llb = ArrayMinimum(Low, MathMax(0,i-dist2/2),dist2);
b1[i] = EMPTY_VALUE;
b2[i] = EMPTY_VALUE;
b3[i] = EMPTY_VALUE;
b4[i] = EMPTY_VALUE;
ArraySetAsSeries(atr,true);
int copied=CopyBuffer(handle_atr,0,0,limit,atr);
if (copied<=0) Print(" *** ATR failed to copy.");
double tr = atr[i];
b1[i] = High[hhb];
b2[i] = Low[llb];
if (i==hhb1) b3[i] = High[hhb1]+tr/2;
if (i==llb1) b4[i] = Low[llb1] -tr/2;
}
return rates_total;
}
//+------------------------------------------------------------------+
Convertido un indicador simple de MQL4 -> MQL5, pero no hay señal en las últimas barras. Por favor, ayúdenme a encontrar la razón. El código fuente y el resultado están en el archivo adjunto. Pondré aquí el convertido también.
El resultado.
El culpable puede ser algo que no se hace lógicamente entre las plataformas
Preste atención a los diferentes parámetros de entrada
MT4
ArrayMaximum
Ищет в одномерном числовом массиве максимальный элемент.
intArrayMaximum(
constvoid& array[], // массив для поискаint count=WHOLE_ARRAY, // количество проверяемыхint start=0// с какого индекса начинаем поиск
);
MT5
ArrayMaximum
Ищет максимальный элемент в первом измерении многомерного числового массива.
intArrayMaximum(
constvoid& array[], // массив для поискаint start=0, // с какого индекса начинаем поискint count=WHOLE_ARRAY// количество проверяемых
);
El culpable podría ser algo que no se hace lógicamente entre plataformas
Tenga en cuenta los diferentes parámetros de entrada
MT4
MT5
Gracias Vitaliy.
El orden de las variables en este lugar es correcto. Las he intercambiado durante la conversión. También las funciones iHighest / iLowest estaban en MQL4.
La optimización la hacen los AGENTES (en su caso, los AGENTES LOCALES).
Para ver los registros del agente local: haga clic con el botón derecho en la pestaña Log y vaya a la carpeta del agente
Esa es la cuestión, no hay errores. Todo está comprobado. Quizá haya un cortafuegos o algo así.
Esa es la cuestión, no hay errores. Todo cuenta. ¿Tal vez haya cortafuegos o algo así?
Haz una sola prueba, una sola pasada. No es una optimización, sino una sola pasada. Así podrás ver el registro.
Realice una sola prueba, una sola pasada. No se trata de una optimización, sino de una sola pasada. Así podrás ver el registro con seguridad.
¿Qué quieres decir con "visual"? Bueno, tengo el registro. No veo nada malo ahí. Los parámetros son todos pasados. Incluso corrió, pero la salida sigue siendo 20.000.
¿Qué quieres decir con "visual"? Bueno, tengo el registro. No veo nada malo en ello. Los parámetros son todos pasados. Incluso se ejecutó. Pero el balance de salida fue de 20000 y todavía lo es.
Por lo tanto, cambie el código para que démensajes de error cuando haya errores o si no se puede realizar la operación comercial. O en general, el código está mal y no da señales. Los milagros no ocurren.
Por lo tanto, cambie el código para que démensajes de error cuando se produzcan errores o si la operación no se puede ejecutar. O el código es defectuoso y no da ninguna señal. No hay milagros.
Sí.
Por lo tanto, la optimización no está incluida en Ontick. Se está procesando OnInit. Pero no se genera On-Tick. Este es el problema.
He integrado los puntos de impresión ( ) en las entradas y en las salidas. Sólo la entrada se escribe en el registro.
P.D.
Yo me encargo de los errores. La fuerza de la costumbre. Llevo escribiendo programas desde 1987.
Sí.
En general, la optimización no está incluida en Ontick. Se procesa OnInit. Pero no se genera On Tick. El problema.
He integrado los puntos de impresión ( ) en las entradas y en las salidas. Sólo la entrada se escribe en el registro.
P.D.
Yo me encargo de los errores. La fuerza de la costumbre. Llevo escribiendo programas desde 1987.
Sólo los telépatas podrán ayudar sin el código, y ahora todos los telépatas están de vacaciones, pues es una pena.
Sin el código, sólo los telépatas pueden ayudar, y ahora, por suerte, todos los telépatas están de vacaciones.
He encontrado la razón. Por alguna razón, los indicadores no se recalculan en Ontick (no da el número de barras recalculadas). Tal vez tenga que actualizar las comillas.
Sin embargo, he perdido mi agradecimiento. Me he vuelto más inteligente. He aprendido dónde se escriben los registros.
Convertido un indicador simple de MQL4 -> MQL5, pero no hay señal en las últimas barras. Por favor, ayúdenme a encontrar la razón. El código fuente y el resultado están en el archivo adjunto. Pondré aquí el convertido también.
El resultado.
Convertido un indicador simple de MQL4 -> MQL5, pero no hay señal en las últimas barras. Por favor, ayúdenme a encontrar la razón. El código fuente y el resultado están en el archivo adjunto. Pondré aquí el convertido también.
El resultado.
El culpable puede ser algo que no se hace lógicamente entre las plataformas
Preste atención a los diferentes parámetros de entrada
MT4
MT5
El culpable podría ser algo que no se hace lógicamente entre plataformas
Tenga en cuenta los diferentes parámetros de entrada
MT4
MT5
Gracias Vitaliy.
El orden de las variables en este lugar es correcto. Las he intercambiado durante la conversión. También las funciones iHighest / iLowest estaban en MQL4.
Esto es otra cosa. Ya me he devanado los sesos.