Grande EA no backtest! - página 114

 
DudeWorks:
também aqui está uma amostra de arquivo de escrita, que sai do editor de MT.

Isto permitirá que você se conecte a um arquivo csv, modifique para sua saída que desejar.

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);

}

Eu estou no IBFX ao vivo, eu posso encaminhar o teste ao vivo para você em micro lotes. No entanto, tenho outras operações ao vivo por conta, então eu teria que retirar os resultados do CT separadamente.

Me PM para endereço de e-mail

Tenho que imprimir tudo isso no arquivo, assim como quaisquer indicadores que eu avalie....c atualmente é só imprimir estes para a revista.

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);

}

não sei exatamente como fazer isto...ainda assim isto é correto...isto não está gerando um arquivo. não deve estar correto.

2006.11.08 11:21:542006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertaEuro EURUSDm,H1: erro(4101): nome de arquivo errado

2006.11.08 11:21:542006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertaEuro: não é permitido o caminho absoluto do arquivo "C:\cyberia_log.csv

????

o que há de errado nisso?

 

ok que é melhor....

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 isto está gerando um arquivo, mas o arquivo contém apenas 1 entrada e não TODOS os pedidos....oy

 
DudeWorks:
Vou codificá-lo para você, me dê até hoje à noite, me diga o que mais você quer despejar

Junto com as lógicas cibernéticas acima...

Estou pensando em testar o indicador de potência de ursos e touros, o cci, os 3 valores do adx, o macd e estocástico, o rsi e um 1MA baseado em corridas fechadas na barra atual (o MA do fechamento). Se houver outros indicadores que você acha que podem funcionar para serem avaliados, vá em frente e descarte-os também. Você tem a idéia de que eu só quero gerar um perfil para que quanto mais ângulos melhor realmente...até um ponto que eu acho.

Há uma outra coisa que tenho que acrescentar. Um trabalho que fiz em outro EA que economiza o valor patrimonial da conta quando uma ordem abre e depois o compara com o valor patrimonial da conta quando a ordem fecha e determina se a operação foi vencedora ou perdedora... Eu preciso que este despejo de dados inclua o resultado das operações como esse também para que saibamos em qual categoria colocar a operação quando a analisarmos.

Acho que vou retrabalhar isso para sair do preço de ordem aberta e do preço de fechamento da ordem, uma vez que múltiplas negociações podem mudar o patrimônio da conta...espere um minuto....

Já estou na metade do caminho, já tenho isto no código, só preciso de um pouco mais de ajustes...

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

RecordLongOutcomes() nulos

{

if(Bid<OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Perdedor Longo ",OrderTicket()," Aberto: ",OrderOpenPrice()"," Fechado: ", Bid);

}

retorno (0);

}

RecordShortOutcomes() nulos

{

if(Perguntar>OrdemPreço Aberto())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Perdedor curto ",OrderTicket()," Aberto: ",OrderOpenPrice()," Fechado: ", Bid);

}

retorno(0);

}

 

então o que estava trabalhando aqui...também a mesma idéia que eu tinha há algum tempo mas era preguiçosa demais para fazê-lo... é registrar todas as variáveis e valores indicadores no momento de cada ordem para que possamos ver exatamente o que está acontecendo em cada ordem para determinar correlações

Fiquei curioso para saber em que possibilidades estava quando finalmente deu um sinal de ordem, então isto deveria realmente mostrar...

Entretanto, a largura de cada fila pode ser bastante ampla, mas acho que podemos entrar se fizermos isso de modo que só registramos os indicadores que são realmente selecionados.

A largura do arquivo MT4 é de 64 campos, acho eu... portanto, isso é muito fácil de se entender.

Eu enviei meu e-mail para você

 
DudeWorks:
Então, o que estava trabalhando aqui... também a mesma idéia que eu tinha há algum tempo, mas era preguiçoso demais para fazê-lo... é registrar todas as variáveis e valores indicadores no momento de cada ordem para que possamos ver exatamente o que está acontecendo em cada ordem para determinar as correlações

Fiquei curioso para saber em que possibilidades estava quando finalmente deu um sinal de ordem, então isto deveria realmente mostrar...

Entretanto, a largura de cada fila pode ser bastante ampla, mas acho que podemos entrar se fizermos isso de modo que só registramos os indicadores que são realmente selecionados.

A largura do arquivo MT4 é de 64 campos, acho eu... portanto, isso é muito fácil de se entender.

Eu enviei meu e-mail para você

Precisamente! A precisão é de fato o que procuramos em nossos filtros e isto pode revelar como fazer com que funcione para nós.

ok ótimo, eu lhe enviarei meu projeto Paciente para explorar, mas não deixe que isso o distraia de obter este despejo de dados, ok?

Eu me congratulo em ter um desenvolvedor com mais experiência ao meu redor quando eu ficar preso. Eu ainda sou realmente um novato, com pouca experiência ainda.

Quanto à produção. Nada do que você colocar fora desta plataforma é susceptível de exceder as dimensões de excelência. O que eu preciso é que ela seja facilmente identificável para que quando eu a importar para o Excel eu possa ver com o que estou trabalhando em vez de apenas um monte de números indocumentados, todos esmagados juntos, separados por delimitadores. Eu preciso de etiquetas de dados com cada valor. Estamos olhando para 15 campos CT mais 8 indicadores, CCI, RSI, 1MA, bearspower, bullspower,adx(três valores) mais, no entanto, você faz o macd e os estocásticos se você figura 6 para isso, então os campos totais = 29 mais os resultados de ganhar (ver post anterior) ou perder =30 o aberto e o fechado e o tempo adiciona 3 Grand Total=33 como eu o conto.

33 campos / ordem. isso deve revelar algo eh? Um outro pequeno favor, se você puder fazer com que esse datetime realmente imprima (imprima para arquivar) algo que um humano possa entender para o datetime ao invés do intergervalue que o computador usa que também ajudaria.

 

Algo sobre isso me deu a mensagem de erro...

'ticket inválido para a função OrderClose' até eu desligar o OrderSelect.

mas acho que você pode ver o que estou tentando conseguir com isso.

/////////////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
 

o código que acabei de adicionar para registrar os resultados funciona bem, exceto para o filewrite()

Agora estou gerando o arquivo, mas ele tem apenas uma entrada, que parece ser a ordem final, que passa pelo testador, então o que eu acho que está acontecendo para mim é que ele está sobrescrevendo cada entrada em vez de anexá-lo ao final do arquivo. Se eu soubesse como consertar isso, provavelmente conseguiria tirar este despejo de dados agora.

 
Aaragorn:
ok isto está gerando um arquivo, mas o arquivo contém apenas 1 entrada e não TODOS os pedidos....oy

O arquivo está sendo sobregravado toda vez que você o abre. Uma solução é abrir o arquivo na função init() e fechá-lo na função deinit()

 
tururo:
O arquivo está sendo sobregravado toda vez que você o abre. Uma solução é abrir o arquivo na função init() e fechá-lo na função deinit()

Não tenho certeza se entendo como usar as bandeiras de leitura e escrita.

Vejo isso em exemplos como este...

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

ou

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

e quanto a isso é possível?

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

você vê que eu não entendo como anexar exatamente ao final.

Não tenho certeza de como abri-lo no init()

ENTÃO

anexar a ele cada novo pedido no final

ENTÃO

feche-o no deinit()

Imagino que seja algo parecido.

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

no init e depois

FileWrite(handle, "Order Open Time: ",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()"," Opened @: ",OrderOpenPrice()"," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

e, em seguida, no deinit

FileClose(handle);

isso é correto?

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

//| 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);

}

Estou recebendo um erro que diz "demasiados arquivos abertos"?