Ow... ¡Buena gente! ¡Ayuda, por favor! Estoy aprendiendo a programar. Sin su ayuda es un punto muerto.
Estoy tratando de escribir los datos del indicador en un archivo, para poder utilizarlo más tarde para construir un indicador. El indicador se dibuja como una línea basada en la diferencia entre el volumen de ticks positivos y el volumen de ticks negativos para la barra actual.
Utilicé MQL4 Reference para recibir información sobre cómo cargar una matriz de datos en un archivo. Como resultado obtuve un código lleno de errores. No puedo entender la esencia de los errores, y en general no he utilizado correctamente la pista del libro de referencia o no. ¿Alguien puede ayudar?
inputstring InpFileName="111.csv"; // Имя файла inputstring InpDirectoryName="Data"; // Имя каталога datetime Время=0; // Время прошлого бараdouble Bid1;
double Buf_1[];
// double ExtBuffer;long V1; // объем для текущего тика вверхlong V2; // накопленный объем для всех тиков вверх текущего бараlong V3; // объем текущего тика внизlong V4; // накопленный объем для всех тиков вниз для текущего бараlong V5; // отрицательные и положительные iVolume нарастающим итогомvoidOnInit()
{
IndicatorDigits(0);
SetIndexBuffer(0,Buf_1);
//SetIndexBuffer(1,Buf_2);
Bid1=Bid;
V5 = 0;
}
//+------------------------------------------------------------------+//| 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[])
{
datetime Вр=Time[0]; // Время текущего бараif(Вр>Время) // Если новый бар
{
Время=Вр; // Запомнить// Buf_1[0]=0; // и обнулить последний элемент буфера
}
datetime date_Buf_1; // массив дат индикатора datetime time_Buf_1; // массив времени // --- считаю объем для положительных и отрицательных тиков if(Bid >= Bid1)
{
if(Bid > Bid1) // если тик положительный..
{
V1 = iVolume(NULL, 0, 0); // если повышающий цену тик, то находим его объем
V2 = V1 + V2;
}
else
{
V1 = 0; // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
V2 = V1 + V2;
}
}
else
{
V3 = iVolume(NULL, 0, 0); // если понижающий цену тик
V4 = V3 + V4; // то находим его объем
}
V5 = V2-V4; // определяем разницу (дельту) между объемами положительных и отрицательных тиков
Bid1=Bid;
Buf_1 [0] = V5; // в буфер сгружаем дельту// ExtBuffer = Buf_1 [0];// double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0); // запись в файл данных буфера//--- установим для массивов признак таймсерии ArraySetAsSeries(Buf_1,true);
ArraySetAsSeries(date_Buf_1,true);
//--- скопируем таймсерию int copied=CopyTime(NULL,0,0,0,date_Buf_1);
//--- подготовим массив Buf_1 ArrayResize(Buf_1,copied);
//--- скопируем значения линии индикатора for(int i=0;i<copied;i++)
{
Buf_1[i]= V5;
}
//--- откроем файл для записи значений индикатора ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("Файл %s открыт для записи",InpFileName);
PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- сначала запишем значения индикатора FileWrite(file_handle,Buf_1);
//--- запишем время и значения в файл for(int i=0;i<Buf_1;i++)
FileWrite(file_handle,time_Buf_1[i],Buf_1[i]);
//--- закрываем файл FileClose(file_handle);
PrintFormat("Данные записаны, файл %s закрыт",InpFileName);
}
elsePrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
}
return(rates_total);
}
YarTrade: Estoy tratando de escribir los datos del indicador en un archivo para poder usarlo después para construir el indicador. El indicador se construye como una línea, basada en los datos de la diferencia entre el volumen de ticks positivos y el volumen de ticks negativos para la barra actual.
Si cree que alguien que mira su código puede encontrar rápidamente un error, se equivoca. El compilador busca errores. El texto del programa debe ser formateado - MetaEditor tiene una herramienta de estilo para eso. Si le gusta un estilo diferente, utilice, por ejemplo, el programa AStyle.exe. Después de la estilización, verá rápidamente que el programa 1) tiene un paréntesis de cierre extra. 2) Variable declarada: datetime date_Buf_1; // Indicador de matriz de fechas - para que sea una matriz, debe ser [size] o [] para una matriz dinámica y luego el tamaño debe ser establecido a ArrayResize parece. Y esto debería hacerse antes de usar un array - ver los posts anteriores sobre ello. 3) FileOpen(InpDirectoryName+"//"+InpFileName - parece que los palos deberían estar inclinados en la otra dirección. Y mejor prescindir de InpDirectoryName+"//" - de todos modos encontrará el archivo en la carpeta Files.
en la línea: int copied=CopyTime(NULL,0,0,0,date_Buf_1); el compilador se enfada, start=end=0 number=0
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
No veo el cero, has metido la pata en algún sitio.
¿Dan ambas impresoras los mismos valores?
Porque no hay funciones de impresión en mi código y estas líneas se suceden, por lo que los valores no cambian de ninguna manera.
Pero Var da 0 y Code da el valor necesario
Pero el valor que asigno sale de inmediato. Así que el código es esencialmente el siguiente:
a=b;
Imprime (a);
Imprimir (b);
Pero a es igual a cero mientras que b se imprime correctamente
Es posible que si int a y double b>0 y b<1 al asignar un valor real a una variable entera, se descarte la parte fraccionaria
Esto es posible si int a y double b>0 y b<1 cuando se asigna un valor real a una variable entera, se descarta la parte fraccionaria
b es mayor que uno mucho mayor que uno
a es un array de tipo double
El problema se ha resuelto.
He creado la matriz de la siguiente manera:
doble línea[];
Con esta opción, al asignar línea[0]=x; el elemento nulo seguía apareciendo vacío.
Cuando escribí
doble línea[20];
Todo funciona como debería. No entiendo por qué, en el primer caso simplemente creé un array no limitado; ¿cuál es la diferencia?
El problema se ha resuelto.
He creado la matriz de la siguiente manera:
doble línea[];
Con esta opción, al asignar línea[0]=x; el elemento nulo seguía apareciendo vacío.
Cuando escribí
doble línea[20];
Todo funciona como debería. No entiendo por qué, en el primer caso simplemente creé un array no limitado; ¿cuál es la diferencia?
Has creado un array dinámico, mientras que su tamaño debe ser establecido y controlado por ti mismo.
Has creado un array dinámico, pero tienes que establecer y controlar el tamaño tú mismo.
¿No hay nadie para ayudar? El callejón sin salida para mí se establece aquí:escribir la información actual de iVolumeen el archivo?
El código del software se describe aquí:https://www.mql5.com/ru/forum/160683/page378#comment_6053255
Indicador por datos del archivo - introdujo esta línea en la búsqueda y encontró
Para recuperar datos de un archivo, primero hay que rellenarlo.
Ow... ¡Buena gente! ¡Ayuda, por favor! Estoy aprendiendo a programar. Sin su ayuda es un punto muerto.
Estoy tratando de escribir los datos del indicador en un archivo, para poder utilizarlo más tarde para construir un indicador. El indicador se dibuja como una línea basada en la diferencia entre el volumen de ticks positivos y el volumen de ticks negativos para la barra actual.
Utilicé MQL4 Reference para recibir información sobre cómo cargar una matriz de datos en un archivo. Como resultado obtuve un código lleno de errores. No puedo entender la esencia de los errores, y en general no he utilizado correctamente la pista del libro de referencia o no. ¿Alguien puede ayudar?
Si cree que alguien que mira su código puede encontrar rápidamente un error, se equivoca. El compilador busca errores. El texto del programa debe ser formateado - MetaEditor tiene una herramienta de estilo para eso. Si le gusta un estilo diferente, utilice, por ejemplo, el programa AStyle.exe. Después de la estilización, verá rápidamente que el programa 1) tiene un paréntesis de cierre extra. 2) Variable declarada: datetime date_Buf_1; // Indicador de matriz de fechas - para que sea una matriz, debe ser [size] o [] para una matriz dinámica y luego el tamaño debe ser establecido a ArrayResize parece. Y esto debería hacerse antes de usar un array - ver los posts anteriores sobre ello. 3) FileOpen(InpDirectoryName+"//"+InpFileName - parece que los palos deberían estar inclinados en la otra dirección. Y mejor prescindir de InpDirectoryName+"//" - de todos modos encontrará el archivo en la carpeta Files.
en la línea: int copied=CopyTime(NULL,0,0,0,date_Buf_1); el compilador se enfada, start=end=0 number=0