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

 

Simon,

1. . . . qual o número do bilhete que está selecionando ?

RE 1. ..: Eu tive um mal entendido no uso da função OrderSelect() em combinação com a função OrderHistoryTotal(). Nenhuma das funções tem nada a ver com a outra. Com isto entendido, eu posso simplesmente remover a função OrderSelect() do início do primeiro bloco de código de envio de ordem. É desnecessário (lembre-se, este código foi escrito estritamente para fins de teste, não para ser executado em demonstração ou ao vivo. Obviamente, eventualmente deve ser corrigido para que possa ser usado em contas demo e ao vivo).

Além disso, acredito ter seu ponto repetitivo, "verificar valores de retorno com a função GetLastError()". GOT IT. Ha ha :)

2. Se você entendeu OrderHistoryTotal() você...

RE 2: Eu entendi as funções OrderHistoryTotal(). Eu tinha uma concepção errada do uso da função OrderSelect() em combinação com a função OrderHistoryTotal().

3. Se você entendesse como { } as chaves funcionam...

RE 3.: Eu acredito que entendo o uso correto dos aparelhos. Também entendo que o uso de aparelhos pode ser desnecessário neste caso

if(OrderType()==OP_BUY)  
   OrderModify(ticket,0,OrderOpenPrice()-5000*Point,0,0,Blue);

Decidi usar aparelhos desnecessários para garantir que a(s) expressão(ões) de cada bloco de código isolasse(m) suas chamadas de função para cada bloco de código específico a ser usado. Muito arrumado, não quero que os blocos de código da EA saltem acidentalmente suas chamadas de função devido à falta de aparelhos.

4. Usando a variável i como um número de bilhete:

RE 4: Estou um pouco surpreso que você não entenda minha interpretação de usar a variável i como um número de bilhete falso, não como um número de bilhete. A variável i é simplesmente um dígito que é adicionado toda vez que a função OrderClose() é executada. A variável i não é definida como um número de bilhete real. Estou lidando com fechamento parcial da ordem. Esta é a única forma que conheço para realizar esta tarefa. Eu estaria com a mente aberta para uma solução diferente. Você tem uma solução melhor? :) Creio que pode haver outra maneira, mas por enquanto, não vejo razão para mudar o processo que está sendo utilizado. Mais uma vez, estou aberto a idéias produtivas.

5. . . . se a OrderSend() falhar oticket = -1:

RE 5. ..: Por favor, seja específico a qual função OrderSend() você está se referindo (ou o "rolo de esferas", primeiro envio de ordem OU envio de ordem dentro das chamadas de função de fechamento de ordem) Este esclarecimento guiaria nossos pensamentos para a mesma direção e fortaleceria a comunicação entre os dois membros desta discussão.

1. 1. Por que a 1ª ou 2ª ordem (corrigir este plz) de envio falharia? (talvez por causa do mau uso da função OrderSelect() e OrderHistory...()? Isto será corrigido).

2. Se a ordem de envio falhou, por que a variável ticket representaria -1? Acredito que se o envio da ordem falhou, a variável ticket ainda representaria 0 e não -1. Por favor, explique.

Obrigado.

 
WhooDoo22:

Simon,

RE 5..: Por favor, seja específico a qual função OrderSend() você está se referindo (ou o "rolo de esferas", primeiro envio de ordem OU envio de ordem dentro das chamadas de função de fechamento de ordem) Este esclarecimento guiaria nossos pensamentos para a mesma direção e fortaleceria a comunicação entre os dois membros desta discussão.

1. Por que o 1º ou 2º pedido (corrigir este plz) enviado falharia? (talvez por causa do mau uso da função OrderSelect() e OrderHistory...()? Isto será corrigido).

2. Se a ordem de envio falhou, por que a variável ticket representaria -1? Acredito que se o envio da ordem falhou, a variável ticket ainda representaria 0 e não -1. Por favor, explique.

Obrigado.

Se OrderSend() falhar, por qualquer razão ."Retorna o número do ticket atribuído à ordem pelo servidor da empresa ou -1 em caso de falha" retirado da documentação. Você usa o ticket variável para reter o valor devolvido . . portanto, se o OrderSend() falhar () por qualquer razão ) o número do ticket é agora -1 . . . . você não verifica apenas o melhor e usa o que quer que você receba . .


Você está usando a variáveli como um número de bilhete . . . neste código . . .

OrderClose(i, 0.01, Ask, 30, CLR_NONE);

. . da documentação para OrderClose() a primeira variável na chamada de função é umbilhete int. . - Número único do bilhete de ordem. Então vamos supor que você acabou de fechar o ticket número34282694 o que o faz pensar que fazendo i++; o próximo vai ajudá-lo de qualquer forma ou forma ? talvez você possa responder a este ponto em particular e explicar como ele funciona ?



"Não quero que os blocos de código da EA saltem acidentalmente suas chamadas de função devido à falta de aparelhos. " . . pular acidentalmente ? como você acha que isso pode acontecer ? a CPU entra em um ataque de tosse ou pega um resfriado ?


OK, então você está dizendo que entendeu completamente todos os problemas ainda ao invés de escrever o código que poderia funcionar no Testador de Estratégia e também em um ambiente Live/Demo você escolheu especificamente aleijar seu código escrevendo-o para que ele só funcionasse no Testador de Estratégia ? isto é o que você está dizendo ?

 

Simon,

1. Se OrderSend() falhar, por qualquer razão . .

RE 1.: Hipoteticamente, vamos apenas dizer que uma ordem falha... Se o que você disse for verdade, então a contagem do bilhete é subtraída por 1 (-1 do total do bilhete). Assim, a EA enviou e fechou 25 pedidos bem sucedidos. O sinal chega para enviar o pedido e a função OrderSend() falha. A contagem atual de bilhetes é de 24? Se sim, a variável i indicaria uma contagem falsa de bilhetes porque a variável i não subtrairia também 1 (-1). A variável i simplesmente não aumentaria e agora há uma contagem falsa de bilhetes. A contagem correta do bilhete é 24 e a variável i é 25. A função OrderSelect() está agora selecionando o número incorreto do bilhete. Estamos de comum acordo? :) Portanto, parece que a solução óbvia seria subtrair 1 da variável i se a função OrderSend() falhar. Whew... Limpando o suor do meu rosto nessa :).

2. a CPU entra em um ataque de tosse ou pega um resfriado ?...

RE 2.: Normalmente, se eu apanho um vírus da gripe, tendo a saltar alguns pensamentos sensatos quando falo. Eu assumi que o mesmo se aplicava às CPUs :) Com o humor posto de lado, acredito que qualquer possibilidade de uma chamada de função ser pulada devido à falta do "{ }", seria um problema simples a ser corrigido. Por que não ser mais cuidadoso? Se realmente não há nenhuma preocupação de uma chamada de função ser pulada, então não vejo nenhuma razão para que os aparelhos não devam ser removidos.

3. OK, então você está dizendo...

RE 3: Creio entender os problemas que você me apresentou até o momento.

4. você escolheu especificamente aleijar seu código escrevendo-o para que ele só funcionasse no Testador de Estratégia ?...

RE 4.: Eu escolhi sacrificar o que eu acreditava ter menos prioridade e mantive o que eu acreditava ter mais prioridade. Esta foi uma escolha feita com base em limitações de tempo e níveis de prioridade.

Obrigado.

 
WhooDoo22:

Simon,

1. Se OrderSend() falhar, por qualquer razão . .

RE 1.: Hipoteticamente, vamos apenas dizer que uma ordem falha... Se o que você disse for verdade, então a contagem do bilhete é subtraída por 1 (-1 do total do bilhete). Assim, a EA enviou e fechou 25 pedidos bem sucedidos. O sinal chega para enviar o pedido e a função OrderSend() falha. A contagem atual de bilhetes é de 24? Se sim, a variável i indicaria uma contagem falsa de bilhetes porque a variável i não subtrairia também 1 (-1). A variável i simplesmente não aumentaria e agora há uma contagem falsa de bilhetes. A contagem correta do bilhete é 24 e a variável i é 25. A função OrderSelect() está agora selecionando o número incorreto do bilhete. Estamos de comum acordo? :) Portanto, parece que a solução óbvia seria subtrair 1 da variável i se a função OrderSend() falhar. Whew... Limpando o suor do meu rosto nessa :).

Se o que eu disse é verdade ? leia a documentação por si mesmo, eu lhe dei um link, clique nele e leia . . .

Você está totalmente equivocado sobre como isso funciona . . desculpe, mas você está. Os números dos bilhetes só são executados sequencialmente no Strategy Tester . . a contagem do bilhete não é subtraída . . a variável que você está usando para manter o número do bilhete = -1 você nunca subtrai o bilhete variável de nada em seu código . . .

"O sinal chega para enviar o pedido e a função OrderSend() falha.A contagem atual do ticket é 24?" Não, a variávelticket contém o número -1, não 25 ou 24, ela contém -1, portanto qualquer OrderSelect(ticket, . . .) chamadas que seguem isto falharão porque não há ordem com o número -1, é um número de bilhete inválido . . . então qualquer chamada OrderType() também falhará porque a OrderSelect() falhou . . . . e então a OrderModify(ticket, . . . . .) falha também . .

Como você disse, entendeu todas essas questões, mas optou por ignorá-las e submeter esse código ao codebasee . . acho que não preciso perder mais tempo tentando explicar nada disso, pois você já tem um bom controle sobre isso. Desculpe pelo inconveniente, não vou ocupar mais o seu tempo tentando ajudar.

 

Simon,

Vou ler a documentação como você solicitou.

1. a variável que você está usando para segurar o número do bilhete = -1

RE 1..: Qual variável você está apontando? Variável i OU bilhete variável?

2. a variável que você está usando para segurar o número do bilhete = -1

RE 2: Isto também pode ser dito: "quando uma ordem de envio falha, o número do bilhete é menos um (-1)"?

se este for o caso, se a EA enviou e fechou 24 pedidos bem-sucedidos e não enviou o 25º pedido, o número atual do bilhete é menos um (-1). Correto? :)

Obviamente, qualquer bloco de código contendo a função OrderSelect() falhará devido ao erro de "número de bilhete inválido". Acho que o número de erro é 4108 como você escreveu anteriormente e a documentação também lê isto.

Eu não escrevi: "Eu entendo todas estas questões". Eu escrevi:"Creio entender os problemas que você me apresentou até o momento".

3. "Como você disse compreender todas estas questões, mas escolheu ignorá-las e submeter este código ao codebasee ... acho que não preciso perder mais tempo tentando explicar nada disto, pois você já tem um bom controle sobre isso. Desculpe pelo inconveniente, não vou tomar mais do seu tempo tentando ajudar".

RE 3: Não estou ignorando estas questões no momento. Minha discussão com você mostra isto. Estou interessado em todos os pontos que você levantou e continua a levantar. Além disso, respeito seu conhecimento da documentação MQL4 e aprecio seu desejo de ajudar. Não passou despercebido e lhe agradeço por isso.

Muito obrigado.

 

Olá a todos,

Neste código eu percebo que não posso alterar nenhum dos preços do lote....porquê é que...

o tempo todo que eu estava tentando fazer isso eu recebi um erro....

Obrigado...e aguardando a nossa resposta....

Muito bom trabalho WhooDoo22!!!! ;)