¡Gran EA en backtest! - página 114

 
DudeWorks:
también aquí hay un ejemplo de escritura de archivos, su derecho fuera del editor de MT ...

Esto le permitirá ya registrar a un archivo csv, modificar para su salida que desea.

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("c:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));

FileClose(handle);

}

Estoy en IBFX en vivo, puedo enviar la prueba en vivo para ti en micro lotes. Sin embargo, tengo otras operaciones en vivo en la cuenta por lo que tendría que eliminar los resultados de la TC por separado.

PM me para la dirección de correo electrónico

Tengo que conseguir todo esto impreso en el archivo, así como los indicadores que evalúo.... actualmente sólo está imprimiendo estos al diario.

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("C:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

no estoy seguro de como hacer esto...sin embargo es esto correcto? esto no esta generando un archivo. no debe ser correcto.

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: error(4101): nombre de archivo incorrecto

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro: la ruta absoluta del archivo "C:\cyberia_log.csv" no está permitida

????

¿que es lo que pasa?

 

ok, así está mejor....

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

datetime sorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

ok esto genera un archivo pero el archivo solo contiene 1 entrada no TODA la orden....oy

 
DudeWorks:
Te lo codifico, dame hasta la noche, dime que más quieres volcar

Junto con la lógica cibernética anterior...

Estoy pensando en probar el indicador de poderes de los osos y los toros, el cci, los 3 valores del adx, el macd y el estocástico, el rsi, y un 1MA basado en el cierre que se ejecuta en la barra actual.(el MA del cierre) Si hay otros indicadores que crees que podrían funcionar para ser evaluados, adelante y volcarlos también. Ya os hacéis a la idea de que sólo quiero generar un perfil, así que cuantos más ángulos mejor en realidad... hasta cierto punto supongo.

Hay otra cosa que tengo que añadir. Una pieza de trabajo que hice en otra EA que guarda el valor de la equidad de la cuenta cuando una orden se abre y luego lo compara con el valor de la equidad de la cuenta cuando la orden se cierra y determina si el comercio era un ganador o un perdedor ... Necesito este volcado de datos para incluir el resultado de los oficios así también para que sepamos qué categoría para poner el comercio en cuando lo analizamos.

Creo que voy a rehacer eso para ir de la orden de precio de apertura y orden de precio de cierre en su lugar ya que múltiples operaciones pueden cambiar la equidad de la cuenta ... espera un minuto ....

Estoy a mitad de camino ya tengo esto en el código ya sólo necesita un poco más de ajuste ...

/////////////record resultados/////////////////

void RegistrarResultadosLargos()

{

if(Oferta<PrecioAbiertoDeLaOrden())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Perdedor Long ",OrderTicket()," Abierta: ",OrderOpenPrice()," Cerrado: ", Bid);

}

return (0);

}

void GrabarCortoResultado()

{

if(Ask>OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Corto perdedor ",OrderTicket()," Abierto: ",OrderOpenPrice()," Cerrado: ", Bid);

}

return(0);

}

 

Así que lo que estábamos trabajando hacia aquí..también misma idea que tenía un tiempo atrás, pero era demasiado perezoso para hacerlo... es para registrar todas las variables y los valores de los indicadores en el momento de cada orden para que podamos ver exactamente lo que está sucediendo en cada orden para determinar las correlaciones

He tenido curiosidad por saber qué posibilidades había en el momento en que finalmente se dio una señal de orden, así que esto debería mostrarse realmente...

Sin embargo, el ancho de cada fila podría ser bastante amplia, pero creo que podemos conseguir en si hacemos para que sólo el registro de los indicadores que se seleccionan realmente.

La anchura del archivo de MT4 es de 64 campos creo... así que eso es suficiente para paly con.

Te envié mi correo electrónico a ti

 
DudeWorks:
Así que lo que estamos trabajando hacia aquí... también la misma idea que tenía un tiempo atrás, pero era demasiado perezoso para hacerlo... es para registrar todas las variables y los valores de los indicadores en el momento de cada orden para que podamos ver exactamente lo que está sucediendo en cada orden para determinar las correlaciones

He sido curioso que las posibilidades estaban en cuando finalmente dio una señal de orden por lo que este debe realmente mostrar..

Sin embargo, el ancho de cada fila podría ser bastante amplia, pero creo que podemos conseguir en si hacemos para que sólo el registro de los indicadores que se seleccionan realmente.

La anchura de los archivos de MT4 es de 64 campos, creo... así que eso es suficiente para jugar.

Te envié mi correo electrónico

¡Precisamente! La precisión es de hecho lo que estamos buscando en nuestros filtros y esto podría revelar cómo hacer que funcione para nosotros.

ok genial, te enviaré mi proyecto de Paciente para que lo explores pero no dejes que eso te distraiga de conseguir este volcado de datos, ¿ok?

Agradezco tener a un desarrollador con más experiencia cerca cuando me quedo atascado. Todavía soy un novato realmente, con no mucha experiencia todavía.

En cuanto a la salida. Nada de lo que saque de esta plataforma es probable que supere las dimensiones de excel. Lo que sí necesito es que sea fácilmente identificable para que cuando lo importe a excel pueda ver con qué estoy trabajando en lugar de ser un montón de números sin documentar todos aplastados y separados por delimitadores. Necesito etiquetas de datos con cada valor. Estamos viendo 15 campos CT más 8 indicadores, CCI, RSI, 1MA, bearspower, bullspower, adx(threevalues) más como sea que se haga el macd y estocástico si se calcula 6 para eso entonces el total de campos = 29 más los resultados de ganar (ver post anterior) o perder =30 la apertura y cierre y el tiempo suman 3 Gran Total=33 como lo cuento.

33 campos / orden. eso debería revelar algo ¿eh? Otro pequeño favor, si puedes hacer que la fecha se imprima (imprimir en un archivo) algo que un humano pueda entender para la fecha en lugar del valor intermedio que utiliza el ordenador, eso también ayudaría.

 

Algo de esto me dio el mensaje de error...

'ticket inválido para la función OrderClose' hasta que desactivé el OrderSelect.

pero creo que puedes ver lo que estoy tratando de conseguir.

/////////////record outcomes/////////////////

void RecordLongOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{

if(OrderType()==OP_BUY)

{

if(OrderOpenPrice() + Spread < OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Winning Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileClose(handle);

Print(" Winning Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

}

else

{

datetime buyorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Losing Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",buyorderOpen);

FileClose(handle);

Print(" Losing Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err1;

err=GetLastError();

Print("error(",err1,"): ",ErrorDescription(err1));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record long outcomes

void RecordShortOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{

if(OrderType()==OP_SELL)

{

if(OrderOpenPrice() - Spread > OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Winning Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileClose(handle);

Print(" Winning Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err3;

err3=GetLastError();

Print("error(",err3,"): ",ErrorDescription(err3));

return(0);

}

}

else

{

datetime sellorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Losing Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",sellorderOpen);

FileClose(handle);

Print(" Losing Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err4;

err4=GetLastError();

Print("error(",err4,"): ",ErrorDescription(err4));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record short outcomes
 

el código que acabo de añadir para registrar los resultados funciona bien excepto por el filewrite()

Ahora estoy generando el archivo pero sólo tiene una entrada que parece ser la orden final ejecutada a través del probador, así que lo que creo que me está pasando es que está sobrescribiendo cada entrada en lugar de añadirla al final del archivo. Si supiera como arreglar eso probablemente podría sacar este volcado de datos ahora.

 
Aaragorn:
ok esto genera un archivo pero el archivo solo contiene 1 entrada no CADA orden....oy

El archivo se está sobrescribiendo cada vez que se abre. Una solución es abrir el archivo en la función init() y cerrarlo en deinit()

 
tururo:
El archivo se está sobrescribiendo cada vez que lo abres. Una solución es abrir el archivo en la función init() y cerrarlo en deinit()

No estoy seguro de entender cómo utilizar las banderas de lectura y escritura.

Los veo en ejemplos como este...

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

o

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

¿es posible esto?

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');

ves que no entiendo cómo añadir al final exactamente.

No estoy seguro de cómo abrirlo en el init()

ENTONCES

añadirle cada nueva orden al final

ENTONCES

cerrarlo en el deinit()

Me imagino que es algo así como

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ, ';');

en el init y luego

FileWrite(handle, " Hora de apertura del pedido : ",sorderOpen);

FileWrite(handle, "SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle, "BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle, "UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle, "UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle, "SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle, "BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle, "UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle, "SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle, "BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle, "UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle, "SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle, "BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle, "UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle, "SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle, "BuyPossibilityMid:", BuyPossibilityMid); FileWrite(handle, "Winning Short OrderTicket: ",OrderTicket()," Precio de apertura @: ",OrderOpenPrice()," Cerrado @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

y luego en el deinit

FileClose(handle);

¿es correcto?

 
//+------------------------------------------------------------------+

//| We initialize the adviser |

//+------------------------------------------------------------------+

int init()

{

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

SavedBlockSell = BlockSell;

SavedBlockBuy = BlockBuy;

AccountStatus();

GetMarketInfo();

ModelingPeriod = ValuePeriod * ValuesPeriodCount; // Period of simulation in minutes

if (ValuePeriod != 0 )

ModelingBars = ModelingPeriod / ValuePeriod; // Quantity of steps in the period

CalculateSpread();

return(0);

}

Me sale un error que dice "demasiados archivos abiertos"?

Razón de la queja: