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

 
sibemol >> :

Gracias por la respuesta, lo probaré y te diré los resultados.

Sólo he añadido algunas cosas como idea.


//+------------------------------------------------------------------+
//| CopyBars.mq4 |
//| Copyright © 2009, Sorento |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Sibemol & Sorento" // :)
#property link "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 White
//---- input parameters
extern int Max_Length=9;
double v1[];int pos, hFile;datetime CurentT;
string O="CB", strng, F=";", Filler="0000000000000000";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
string Name_File;
Name_File=StringConcatenate(O,Symbol(),TimeYear(Time[0]),"_",TimeMonth(
Time[0]),"_",TimeDay(Time[0]),"x",TimeHour(iTime(NULL,1,0)),"_",
TimeMinute(iTime(NULL,1,0)),".CSV");
Print ("Bars in ",Name_File," start!");
hFile=FileOpen(Name_File,FILE_CSV |FILE_WRITE,F);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,v1);
strng=StringConcatenate("<ticker>",F,"<per>",F,"<date>",F,"<time>",F,"<open>",F,"<high>");
strng=StringConcatenate(strng,F,"<low>",F,"<close>",F,"<volume>",F,"<oi>",F);
pos=pos+StringLen(strng);
FileWrite(hFile,strng);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
FileClose(hFile);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(), limit;
//----- первый вызов
if (counted_bars==0)
{CurentT=Time[0];// при записи может закрыться текущий бар и появится новый
limit=Bars-1;
CurentT =FilesWR(limit,1);
//----
return(0);
}
//---- последующие
if (counted_bars>0)
if (CurentT<Time[0])
{// мог быть обрыв связи - нужно найти последний и может еще не обновлённый бар
limit=iBarShift(NULL,Period(),CurentT,false);
CurentT=Time[0];// при записи может закрыться текущий бар и появится новый
FilesWR(limit+1,0);
}
else FilesWR(1,0); //бар еще текущий
//-----
return(0);
}
//+------------------------------------------------------------------+
datetime FilesWR(int startBar,int code){

int codec=code;

for(int i=startBar; i>=0; i--)
{
v1[i]=Close[i];
int _Year=TimeYear(Time[i]),
_Month=TimeMonth(Time[i]),
_Day=TimeDay(Time[i]),
_Hour=TimeHour(Time[i]),
_Minute=TimeMinute(Time[i]);

string Y, M, D, H, Mi, Date, _Time;

if(_Month<10) M="0"+DoubleToStr(_Month, 0); else M=DoubleToStr(_Month, 0);
if(_Day<10) D="0"+DoubleToStr(_Day, 0); else D=DoubleToStr(_Day, 0);
if(_Hour<1) H="00";
else if(_Hour<10 ) H="0"+DoubleToStr(_Hour, 0);
else H=DoubleToStr(_Hour, 0);
if(_Minute<1)Mi="00";
else if(_Minute<10) Mi="0"+DoubleToStr(_Minute, 0);
else Mi=DoubleToStr(_Minute, 0);
Date=DoubleToStr(_Year, 0)+M+D;
_Time=H+Mi;

strng=StringConcatenate(Symbol(),F, Period(),F, Date,F, _Time,F,
DS(Open[i]),F,DS(High[i]),F, DS(Low[i]),F,DS( Close[i]),F,IS( Volume[i],10),F);
pos=+StringLen(strng);// можно заранее просчитать длину и использовать предопределённую константу
if (codec==0)
{//обновим предпоследний бар тоже
FileSeek(hFile,pos-StringLen(strng),SEEK_SET);
codec=+1;
}

FileWrite(hFile,strng);// при записи может закрыться текущий бар и появится новый
if ( CurentT<Time[0]) i=+1;// сместим индексы

}
CurentT=Time[0];
FileFlush(hFile);
return ;
}
//----------Быстрая коричневая сука----------
//----------12345678901234567890----------!!!
string DS(double value)
{
string strng=DoubleToStr(value,Digits);
int k=StringLen(strng);
int l=StringFind(strng,".")+Digits+1;
if (l<k)
{ strng=StringConcatenate(strng,StringSubstr(Filler,0,k-l));k=2*k-l;}
int i=Max_Length-k;// add char
return (StringConcatenate(StringSubstr(Filler,0,i+1),strng));
}
string IS(int iValue, int Max_Length)
{
string strng=DoubleToStr(iValue,0);
int k=StringLen(strng);
int i=Max_Length-k;// add 0
return (StringConcatenate(StringSubstr(Filler,0,i+1),strng));
}
 

La optimización terminó con el siguiente mensaje:

There were 60 passes done during optimization
optimization stopped, 140 cache records were used, 140 cache records rejected

En este caso, en la ventana de configuración estaba:

200 / 1 280 (200)


1. ¿Puede alguien explicar qué significan estas cifras y cómo se han podido obtener? (60, 140, 200, 1280)

2. Si, por ejemplo, se optimizaran dos parámetros y el número de combinaciones posibles fuera de 15 y 20 respectivamente, ¿dónde se verían (entre estos números)?

3. ¿Existe alguna limitación en el número de ciclos de optimización? (¿se garantizará que se tengan en cuenta todas las combinaciones?).

Gracias.

 

¿Cómo puedo hacer que la descripción de los niveles del objeto Fibo esté disponible desde las propiedades? La forma de establecer sus valores en el código es clara:

      ObjectSet("fibo", OBJPROP_FIBOLEVELS,8);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+0,0.0);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+1,0.382);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+2,0.618);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+3,1.0);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+4,1.382);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+5,1.618);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+6,2.0);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+7,2.618);

¿Pero la descripción? ¿O no está disponible en el código?

 

Sorento, ¡muchas gracias! En cuanto termine el fin de semana me aseguraré de revisar su versión y alsu.

2alsu: Me confundí con los campos, contándolos como cadenas )).

 
sibemol >> :
Sorento, ¡muchas gracias! En cuanto termine el fin de semana, sin duda revisaré su variante y alsu.

sin comprobación del movimiento del mercado ahora. esto le permitirá concentrarse en la depuración de sólo dos situaciones.

el bar sigue siendo viejo

y hay uno nuevo.

Si hay una nueva barra, hay que actualizar la que está completamente formada.

hay algo que optimizar.

Y comprueba el algoritmo para saltarse un enlace y perder un fragmento de historia de forma artificial.


Buena suerte en tu camino.


PS. Sin embargo, creo que tengo que retroceder dos tramos. Piensa en ello.

 
Sorento, comprobado el código sin cambiar nada en el mercado de pie. Las líneas se ven así: EURUSD;15;20091224;1830;0001.43580;0001.43625;0001.43566;0001.43611;00000000163; EURUSD;15;20091224;1845;0001.43612;0001.43612;0001.43536;0001.43538;00000000180; y las dos últimas barras se escriben (duplicadas) al principio del archivo. Tendré que cambiarlo. Estudiaré su código. Gracias.
 

Los ceros iniciales y de relleno después de DoubleToStr(value,Digits) son necesarios para la constancia de la longitud - ese era el problema.

Puede buscar la posición desde el final. ;)

Buena suerte en su búsqueda.

 

2Sorento:

En su código.

int start()
{
int counted_bars=IndicatorCounted(), limit;
//----- первый вызов
if ( counted_bars==0)
{ CurentT=Time[0];// при записи может закрыться текущий бар и появится новый
limit=Bars-1;
CurentT = FilesWR( limit,1);
//----
//return(0);

He quitado return(0), luego el fichero se ha escrito como debe ser, solo que no hay valores del último campo <oi>, que contiene 0 en todos los registros, pero no es nada, lo arreglaré. Ahora tenemos que comprobar en movimiento. Gracias de nuevo.

¿No hay forma de eliminar los ceros de los campos de precio? Parece que la longitud no afecta.

 
Svinozavr >> :

¿Cómo puedo hacer que la descripción de los niveles del objeto Fibo esté disponible desde las propiedades? La forma de establecer sus valores en el código es clara:

¿Y la descripción? ¿O no es accesible desde el código?


Gracias a Sorento - sugirió ObjectSetFiboDescription.

Pregunta eliminada.

 
sibemol >> :

2Sorento:

En su código.

Eliminado return(0), entonces el archivo se escribe como debería, sólo que no hay valores del último campo <oi>, conteniendo 0 en todos los registros, pero es una nimiedad, ya lo resolveré. Ahora tenemos que comprobar en movimiento. Gracias de nuevo.

¿No hay forma de eliminar los ceros de los campos de precio? No parece afectar a la longitud.

carrera de oro. 1140 и 980

cambios en la longitud de los registros.

y <oi> lo he quitado por falta de uso ;)

Razón de la queja: