Probando 'CopyTicks' - página 3

 

No estoy probando, estoy recordando a los desarrolladores. La práctica demuestra que nunca es superflua)).

En cuanto a la dirección del comercio, en Forts siempre la da la bolsa.

El algoritmo que se utiliza actualmente en el terminal no es adecuado para esto: hay que tomar la información de la bolsa.

 
Dmitriy Skub:

No estoy probando, estoy recordando a los desarrolladores. La práctica demuestra que nunca es superflua)).

Sobre la dirección del trato - en los fuertes siempre se da por el cambio.

El algoritmo que se utiliza ahora en el terminal no es adecuado para esto: debemos tomar necesariamente la información del intercambio.

Sólo hay varios temas sobre copyticks (y mqltickinfo) que terminan con "waiting".

Aquí hay más, por ejemplo:

https://www.mql5.com/ru/forum/61607


Así que realmente, "esperando". :-)

CopyTicks на медленном рынке
CopyTicks на медленном рынке
  • www.mql5.com
На нём видно, что после получения первых 10 тиков после запуска терминала, CopyTicks перестаёт работать:. - - Категория: автоматические торговые системы
 
¿Cuál es la situación de CopyTicks() ahora en la versión 1210?
 
Михаил:
Y ahora, en la compilación 1210, ¿cómo va CopyTicks()?
Todo está bien:Historia de la garrapata
 
Михаил:
Y ahora, en la compilación 1210, ¿cómo es con CopyTicks()?

Casi funciona. No hay duplicados. Los volúmenes no se pierden.

Pero falta la dirección de las operaciones en las banderas. El cálculo de la oferta y la demanda no ofrece una fidelidad adecuada.

La estructura real es antigua y difiere de lo descrito en la ayuda. Así que entiendo que se trata de una construcción intermedia. Así que, como siempre, estamos esperando el siguiente))

 
Dmitriy Skub:

Casi funciona. No hay duplicados. No faltan los volúmenes.

Pero falta la dirección de las operaciones en las banderas. El cálculo de la oferta y la demanda no ofrece una fidelidad adecuada.

La estructura real es antigua y difiere de la descrita en la ayuda. Así que entiendo que se trata de una construcción intermedia. Así que, como siempre, estamos esperando el siguiente))

Gracias
 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

MqlTick

zimbabve15, 2016.02.03 06:15

Herramienta "Apertura" del broker ED-3.16 tabla izquierda - los datos de los ticks son escritos por el indicador en el procedimiento OnCalculate a través de la petición SymbolInfoTick, tabla derecha - a través de CopyTicks. Estructura de ambos: tiempo, bid, ask, flipper, volumen, time_msec, flag.

¿Por qué los mismos ticks tienen volúmenes y banderas diferentes?

Si recibimos los datos en bruto del corredor con cero banderas a través de SymbolInfoTick, entonces parece que el terminal procesa el tick entrante y le asigna una bandera basada en la comparación con el tick anterior? ¿Qué hacer con los volúmenes? La diferencia es significativa.


Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

MqlTick

zimbabve15, 2016.02.03 06:39

Tabla de ticks de la izquierda del corredor FiboFroupa través de SymbolInfoTick , tabla de la derecha a través de CopyTicks. Estructura de ambos: hora, bid, ask, strike, volumen, time_msec, flag.

Las banderas son diferentes, porque los valores de oferta y demanda en los mismos ticks, se escriben de diferentes maneras.


 
zimbabve15:


¿Es una epidemia publicar "hojas" sin ningún código?
 

CopyTicks

//////////////////////////////////////////////////////////////////////////////////////////////////////////

MqlTick tick_array[];

int OnInit()
{
int copied=CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,0,countHistoryTicks);
if(¡Guardar_archivo!=NOT_SAVE)
{
SaveTicksToFile(tick_array);
}
return(INIT_SUCCEED);

}


void SaveTicksToFile(MqlTick &massiveTicks[])

{

cadena nombre_archivo,archivo_buffer;

StringConcatenate(nombre de archivo,Symbol(),".txt");

int file_handle=FileOpen(nombre de archivo,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ);

FileSeek(file_handle,0,SEEK_END);

int sizeMassiveTicks=ArraySize(massiveTicks);

int i=0;

while(i<sizeMassiveTicks)

{

StringConcatenate(file_buffer,TimeToString(massiveTicks[i].time,TIME_DATE|TIME_SECONDS)," ",DoubleToString(massiveTicks[i].bid,_Digits)," ",DoubleToString(massiveTicks[i].ask,_Digits)," ",DoubleToString(massiveTicks[i].last,_Digits)," ",IntegerToString(massiveTicks[i].volume,_Digits)," ",IntegerToString(massiveTicks[i].time_msc)," ",IntegerToString(massiveTicks[i].flags,_Digits));

FileWrite(file_handle,file_buffer);

i++;

}

FileClose(file_handle);

}

SymbolInfoTick

////////////////////////////////////////////////////////////////////////

int OnCalculate(const int rates_total,

const int prev_calculado,

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[])

{

MqlTick last_tick;

SymbolInfoTick(Symbol(),last_tick);


TickStruct tick={0,0,0,0,0,0,0};

tick.time=TimeCurrent();

tick.bid=last_tick.bid;

tick.ask=last_tick.ask;

tick.flag=last_tick.flags;

tick.last=last_tick.last;

tick.time_msc=last_tick.time_msc;

tick.volume=last_tick.volume;

int total=ArraySize(g_ticks);

if(ArrayResize(g_ticks,total+1,1000)<0)

{

Alert(": el indicador no tiene suficiente memoria para guardar los datos del siguiente tick;)

}

si no

{

g_ticks[total]=tick;

UpTick[rates_total-1]=total;

}

if(total>999)

{

SaveTempTicks();

ArrayFree(g_ticks);

}

return(rates_total);

}

void SaveTempTicks()

{

// Creación del archivo de historial de ticks

int hTicksFile=FileOpen(Symbol()+"fullTicks.tks",FILE_BIN|FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE);

if(hTicksFile<1)

volver;

FileSeek(hTicksFile,0,SEEK_END);

// registro de archivos

int total=ArraySize(g_ticks),i=0;

while(i<total)

{

if(FileWriteStruct(hTicksFile,g_ticks[i])==0)

{

Print("El almacenamiento de datos en un archivo temporal ha fallado...");

volver;

}

i++;

}

FileClose(hTicksFile);

}

 
Por favor, corrija su mensaje(Inserte el código correctamente en el foro). Sería bueno que adjuntaras el archivo en sí (*.mq5) además del código en tu mensaje.