aventuras de um novato - página 7

 
niko:

Para a CB:


Ei, alto-falante! Eu fiz tudo o que pude com as tarefas de Tim e assim decidi começar a olhar seu código com mais detalhes.


Eu analisei seu código, tentando entender e corrigir os erros nele contidos. Consegui reduzir os erros a apenas 'parênteses desequilibrados' para fnGenerateSignal(). Não sei por que diz "desequilíbrio" neste caso.


Como sempre, eu apreciaria sua opinião sobre meu progresso com seu código! Tenha em mente que ainda há muitos pedaços e bobs que não entendo, mesmo as coisas muito básicas.

Veja as anotações.

Notei o seguinte:

- você estava declarando funções para esperar que as variáveis fossem passadas a elas como parâmetros, mas depois não as passou na chamada de função - então eu pedi que você apenas movesse as variáveis até o bloco superior para que elas estivessem disponíveis para todas as suas funções por enquanto - vamos apenas mantê-las tão simples quanto possas por enquanto

- você parecia pensar que também tinha que declarar o nome de sua função como variável. Veja aqui como usar as funções, passar variáveis dentro e fora delas:


Para declarar:

int abcdef(int x, string s) // significando que a função com nome abcdef aceita a entrada de um inteiro e uma string e retorna um inteiro como sua saída (neste caso, 0 ou 9)

{

a função faz coisas com x e s

se (alguma condição)

retorno(9);

senão

retorno(0);

}


E para chamar:

...

myResponse = abcdef(myInteger, myString);

if (myResponse == 9)

{

blá

Arquivos anexados:
 

Hey CB,

Obrigada. este é o pouco que eu não consegui entender, você me deixou muito claro. Acho que agora estou nas linhas certas.

CB, pergunta1:

bool fnOrderDuplicate()

{

iDuplicateOrders=0 // CB não deveria o iDuplicateOrders ser declarado como int ou duplo?

iOrders = OrdensTotal()-1 //I agora entendo com sua ajuda, isto chama a função OrderTotal. mas novamente iOrders não deveria ser declarado como uma variável?

CB,pergunta2:

int fnTrade() //Por que isto não é "int fnTrade(string sSignal)", já que estamos usando sSignal na função. ?

{ if(sSignal=="OP_BUY")

...

CB,quesytion3:

Você me pediu para remover o return(0) e } no final do código. mas isto significaria que o Start() não fecha com um típico 'return(0) e parênteses não são fechados, pois todos os parênteses prevoius (do que eu verifiquei) são particulares à abertura e ao fechamento das funções específicas que projetamos. ?

 
niko:

Hey CB,

Obrigada. este é o pouco que eu não consegui entender, você me deixou muito claro. Acho que agora estou nas linhas certas.

CB, pergunta1:

bool fnOrderDuplicate()

{

iDuplicateOrders=0 // CB não deveria o iDuplicateOrders ser declarado como int ou duplo?

iOrders = OrdensTotal()-1 //I agora entendo com sua ajuda, isto chama a função OrderTotal. mas novamente iOrders não deveria ser declarado como uma variável?

CB,pergunta2:

int fnTrade() //Por que isto não é "int fnTrade(string sSignal)", já que estamos usando sSignal na função. ?

{ if(sSignal=="OP_BUY")

...

CB,quesytion3:

Você me pediu para remover o return(0) e } no final do código. mas isto significaria que o Start() não fecha com um típico 'return(0) e parênteses não são fechados, pois todos os parênteses prevoius (do que eu verifiquei) são particulares à abertura e ao fechamento das funções específicas que projetamos. ?

P1: Ambas estas variáveis SÃO definidas. Veja as variáveis que sugeri que você subisse para a seção onde você definiu seus externs. Isto as tornará automaticamente disponíveis para todas as funções.

P2: A variável sSignal, se declarada fora de todas as funções, está disponível para todas as funções sem a necessidade de passá-la explicitamente na chamada de função.

P3: Ah - agora eu vejo seu mal-entendido. Pergunto-me por que você colocaria ali aquela declaração de retorno e o parêntese encaracolada. Foi atendido por meu comentário sobre a declaração fnTrade(). Você vai notar que eu lhe pedi para acrescentar uma chamada de retorno e fechamento do parêntese. A razão é que você estava (erroneamente) declarando todas as suas funções dentro do bloco de código de funções start().


CB

 
niko wrote >>

Hey Tim,

Eu fiz a parte que você me pediu para fazer para o código. Obrigado por fornecer respostas detalhadas às minhas perguntas e por escrever muitos comentários ao longo do código para me ajudar a entender o assunto. Estou começando a ver como as coisas se unem, como usar arrays corretamente e chamar funções específicas (e o papel das variáveis globais e locais).

Anexei a última versão de nosso código.

Uma pergunta, há alguma razão para não termos feito funcionar as Regras de Entrada para conter tudo (incluindo bandeiras) para nos dar uma condição de compra/curta, mas em vez disso, nós a chamamos com bandeiras mais tarde para tomar a decisão de entrada?

Oi Nick


Eu arrumei algumas coisas no código e espero ter respondido às suas perguntas. O EntryFunction está agora completo. Você só precisa chamá-lo desde o início (principal) como indiquei no código e passar-lhe os parâmetros necessários como mostrado. Apenas alguns minutos de trabalho, espero, e então você poderá fazer a compilação e o teste. Espero que você tenha alguns pequenos bugs para enfrentar, mas espero que nada de importante.


Quando compilado, tente executar o EA no testador e dê uma olhada no arquivo de registro para ver se ele parece estar fazendo o que você esperaria nesta etapa. Você deve ser capaz de ver sinais de COMPRA e VENDA para cada um dos pares de moedas.


Eu diria neste ponto que seu código está cerca de 75% completo.


O próximo passo após isto é escrever outra função para verificar as ordens abertas para um determinado par de moedas e a direção de negociação.


Sugiro dar uma olhada na documentação do MT4 em Funções de negociação. OrdensTotal(), OrderSelect(), Order Symbol() & OrderType() parecem candidatos prováveis para esta tarefa.


Quanto à sua pergunta sobre como fazer a função EntryRules conter tudo, inclusive as bandeiras, não vejo razão para não fazê-lo. Por que você não tenta modificar a função das Regras de Entrada?

Sugiro que você faça isso depois de ter compilado, executado e testado o que você já fez.


Atenciosamente

Tim

Arquivos anexados:
 

CB: Obrigado homem, isto ajuda a me esclarecer ainda mais as coisas. Por alguma razão eu pensei que tudo tinha que estar dentro da função inicial.

Pergunta: Não deveríamos declarar os ema's dentro da função de início, pois queremos que sejam calculados/atualizados a cada tick?

 

Hey Tim: Obrigado mais uma vez por sua ajuda. Eu prosseguirei com as coisas no meu fim assim que sair do trabalho esta noite. Trabalhando com você e com a CB tenho agora mais idéias sobre como montar as coisas e começar a pensar de forma mais flexível sobre tudo isso.

 
niko:

CB: Obrigado homem, isto ajuda a me esclarecer ainda mais as coisas. Por alguma razão eu pensei que tudo tinha que estar dentro da função inicial.

Pergunta: Não deveríamos declarar os ema's dentro da função de início, pois queremos que sejam calculados/atualizados a cada tick?

Não. Se você declarar uma variável dentro de uma função, ela só está disponível dentro dessa função. Se você a declarar fora de todas as funções, ela está disponível para todas as funções. Portanto, você pode declarar as variáveis ema no topo e depois fazer contas sobre elas dentro da função de início.


CB

 
cloudbreaker wrote >>

Não. Se você declarar uma variável dentro de uma função, ela só está disponível dentro dessa função. Se você a declarar fora de todas as funções, ela está disponível para todas as funções. Portanto, você pode declarar as variáveis ema no topo e depois fazer contas sobre elas dentro da função de início.

CB

Obrigado CB, eu entendi agora!

 

Hey Tim,


Voltei agora da Turquia. Tive um momento incrível em Kusadasi, e realmente não queria partir. O povo turco é muito mais amigável do que os britânicos. Eu me senti em casa lá, mesmo nunca tendo estado lá antes.


Passei as últimas 5 horas ou mais para atualizar o código que estamos projetando. Não anexei.

As principais emendas foram:

1. Criei uma função de contagem de ordens, e a chamei de função de início. Espero que isto esteja cheio de erros, pois ainda há bits que eu não recebo (por exemplo: como garantir que ela siga o laço [c] para que ela só funcione por par de moedas)

2. Tentei corrigir o código em relação ao nome currencySymbol vs. currencySym, pois mudamos o nome na metade do caminho. Mas isto poderia ter ficado confuso.

3. Eu chamei a função EntryRules dentro da função Start


Eu gostaria muito que você corrigisse os grandes e pequenos erros se continuar introduzindo // por que o código antigo está errado, comentários, isso me ajuda a corrigir meu pensamento lógico.


Como sempre, aguarde ansiosamente suas emendas!

Arquivos anexados:
 

Hey CB,


Acho que Tim está de férias agora, pois não tenho notícias dele há alguns dias. Portanto, continuo com seu código, pois ele me ajudará a negociar (como agora estou negociando manualmente a estratégia, e isso significa acordar cedo, etc.). Alterei todo o código como você pediu, mas por alguma razão ele ainda retorna um erro (para fazer com "==" desta vez, muito estranho).


Outra coisa é que notei que a função de início não estava fechada. Então acrescentei "}" após a primeira função dentro do início (), se não fizermos isso, o código gera um erro com a seqüência de funções subseqüente fnGenerateSignal() (dizendo que a definição da função para isso é inesperada).


Obrigado, como sempre. Aguardo com expectativa seus comentários/alterações!

Nick

Arquivos anexados:
Razão: