MMA_Breakout_strategy_strategy_volume I (sem MM ou MF) - codificado por WhooDoo22 - página 2

 
Novamente, há várias maneiras de selecionar pedidos, por exemplo, eu poderia usar Booleano para verificar se um pedido está aberto ou fechado. Exemplo: o pedido é enviado, cinco Booleanos são definidos como verdadeiros. Como as médias móveis começam a cruzar, o Booleano será definido como falso. Se certas variáveis booleanas forem verdadeiras e certas médias móveis se cruzarem, certas variáveis booleanas são declaradas falsas e um certo lote da ordem é fechado. Existem outras formas, mas não tenho pensado muito nisso. Desejo simplesmente oferecer-lhe uma solução. Espero que tenha sido satisfatória. Acredito que encontraria uma maneira mais simples de fazer isto, mas novamente, não pensei muito nisso. Ainda é importante, mas não tão difícil de codificar como MF ou MM nesta estratégia. Obrigado.
 
Se eu tiver uma conta ativa com a qual já negociei antes e não houver nenhuma ordem ativa aberta atualmente ... se eu executar sua EA nela em EURUSD M30 o que acontecerá ? será necessário negociar?
 

A propósito, eu executei sua EA no Testador de Estratégia e acabei com um arquivo de log de erros de 11GB . . por exemplo . .

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: OrderModify error 1

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: fechar #6 comprar 0,01 EURUSD a 1,36028 sl: 1,31028 ao preço 1,35960

23:08:49 2007.05.06 22:01 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: bilhete 6 desconhecido para a função OrderModify

não pode modificar o bilhete nº 6, pois acabou de ser fechado . . . .
 
WhooDoo22:
Acredito que existem várias maneiras de selecionar ordens, Todos os métodos de seleção de ordens devem usar a função OrderSelect(). Com isto dito, não vejo porque isto falharia porque a EA executa claramente a função OrderClose() para todas as ordens sem erro no testador de estratégia.

Seu pedidoFechar claramente não está funcionando. Se você tivesse verificado seus códigos de retorno, você saberia disso. Seu pedidoSelect não está funcionando, mas você não verifica.

se eu não for um número de bilhete, então seu pedidoSelect falha e tudo o mais também falha.

se eu for um número de bilhete, o próximo número de bilhete NÃO é i+1 (exceto no testador)

   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.04)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,25,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.03)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.02)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,100,0,MODE_SMMA,PRICE_CLOSE,1)))     {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
 

Simon,

Se eu tiver uma conta Live...

RE: Eu altamente não recomendo que você administre o volume I em um saldo de conta ativa! É claro que a escolha é sua, mas em seu nome, eu não recomendo vivamente que você a execute em conta real até que sua evolução do volume I para o II tenha sido concluída. O volume I ainda está em seu desenvolvimento e não deve ser executado até que tenha sido completamente codificado. Não tenho certeza do que aconteceria porque eu mesmo não o testei em uma conta LIVE. Entendo sua falta de conclusão e optei por atender às suas exigências essenciais antes de iniciar o teste de conta AO VIVO.


A propósito,...

RE: Acredito que entendo o que está acontecendo logo de cara com este erro. Este erro reflete um erro dentro do bloco de código "EMERGÊNCIA SL". Eu nunca realmente concentrei meu poder sobre isto, pois não é tão difícil de codificar. Codifiquei-o parcialmente e não completei a sua maturidade. O bloco de código "EMERGÊNCIA SL" carece de uma alfaiataria importante. Estou confiante de que se você remover completamente os blocos de código "EMERGÊNCIA SL" e COMPRAR, você não receberá a lista de erros de 11 gigabytes. A razão pela qual são 11 gigs para começar é porque acredito que é o mesmo erro que se repete ao longo da história sendo testada.

Obrigado.


William,

Direi que não tenho tanta história discutindo código com você como Simon, mas desejo continuar com seu posto (obrigado por seu posto! É bem-vindo!).

O que você deseja ver no Volume I/II?

Estou estritamente fazendo testes e adicionando o código essencial para testes, a fim de garantir seu valor comercial. Em seguida, vou afinar o que resta de questões de código para garantir uma negociação segura em LIVE/DEMO.

Obrigado.

 
RaptorUK:
Se eu tiver uma conta ativa com a qual já negociei antes e não houver nenhuma ordem ativa aberta atualmente ... se eu executar sua EA nela em EURUSD M30 o que acontecerá ? será necessário negociar?

WhooDoo22:

Simon,

Se eu tiver uma conta Live...

RE: Eu altamente não recomendo que você execute o volume I em uma conta ativa! É claro que a escolha é sua, mas em seu nome, eu não recomendo vivamente que você a execute em conta ativa até que sua evolução do volume I para o II esteja completa. O volume I ainda está em seu desenvolvimento e não deve ser executado até que tenha sido completamente codificado. Não tenho certeza do que aconteceria porque eu mesmo não o testei em uma conta LIVE. Entendo sua falta de conclusão e optei por atender às suas exigências essenciais antes de iniciar o teste de conta AO VIVO.


O ponto que eu estava tentando fazer e encorajá-lo a olhar é que se houver algum histórico de conta, essas linhas em seu código impedirão que qualquer negociação seja feita ...

   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  
   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  


Os outros lugares onde um pedido é feito usando OrderSend() é onde há um pedido existente aberto . . . então se há algum pedido antigo na História, seu EA não colocará nenhum negócio jamais . . . se você tivesse testado seu código em Demo ou Live, você provavelmente teria descoberto isto.

 

Simon,

O que eu estava tentando fazer...

RE: Entendido. Você acredita que é possível usar a função OrderSelect() para procurar uma variável de bilhete única, então abaixo estará o bloco de código contendo o "se (OrderHistoryTotal()==0){". Isto não funcionaria BECAUSE a função OrderSelect() seleciona a variável de bilhete único "ticket" e a função OrderHistoryTotal() está pesquisando o histórico comercial da variável de bilhete único somente, por causa da função OrderSelect() acima. A função "if statement" está pesquisando apenas as ordens no histórico para uma variável específica, a variável de bilhete único.

//*************************
// BUY ORDER OPEN SECTION ;
//*************************

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   if(OrdersHistoryTotal()==0)                                                                 {
   if(OrdersTotal()<MaxOrders)                                                                 {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,2)<(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,2)))     { 
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)>(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1)))     { 
     {
      ticket=OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);    
      i++;
     }
     }}}}

Obrigado.

 
WhooDoo22:

Simon,

O que eu estava tentando fazer...

RE: Entendido. Você acredita que é possível usar a função OrderSelect() para procurar uma variável de bilhete única, abaixo estará o bloco de código contendo o "if OrdersHistoryTotal()==0{". Isto não funcionaria BECAUSE a função OrderHistoryTotal() está pesquisando somente as negociações anteriores da variável bilhete único? A função "if statement" está buscando apenas ordens no histórico para uma variável específica, a variável de bilhete único.

Obrigado.

Acho que você está ficando um pouco confuso ... você disse"Isto não funcionaria BECAUSE a função OrderHistoryTotal() está procurando por negócios anteriores apenas da variável de bilhete único?" isto está incorreto, verifique a documentação,OrderHistoryTotal() faz isto . . .

"Retorna o número de ordens fechadas no histórico da conta carregada no terminal. O tamanho da lista do histórico depende das configurações atuais da guia "Account history" do terminal".


não tem nada a ver com qualquer número de tickets ou variáveis de tickets ou números mágicos ou qualquer outra coisa . . retorna o número total de operações no pool de históricos . . o único fator limitante é o que você escolheu mostrar na aba Histórico de contas . . todo o Histórico, últimos 3 meses, último mês ou período personalizado.
 
Outro ponto . . . se eu tenho usado o seu EA e ele tem uma troca colocada . . . então eu preciso desligar o meu PC por alguns minutos, quando eu inicio o MT4 de volta e o seu EA inicia, ele nunca vai encontrar a ordem aberta . . todas as suas chamadas OrderSelect() são selecionadas por ticket . . . usando sua variável ticket ou sua variáveli, nenhuma das quais tem como manter o número do ticket do meu pedido aberto.
 

Simon,

Acho que você está ficando um pouco confuso . . .

RE: O Volume II deve iniciar o processo de envio do pedido com base em uma condição. Uma vez que a primeira ordem tenha sido enviada (baseada na condição), os blocos de função OrderClose() executam todas as operações futuras. Por favor, tente pensar nisto como um ciclo. Faça a bola rolar com base na condição, então o ciclo é iniciado uma vez que a primeira ordem (ordem de rolos de bola) tenha sido fechada. O ciclo continua a comprimir os números e a verificar se as condições ativas são cumpridas até que as condições futuras UNTIL sejam cumpridas.

Obrigado