EA N7S_AO_772012 - página 30

 
SHOOTER777 >> :

А

infelizmente, esta observação é lamentável...também notada...

 

SHOOTER poderia nos dizer brevemente o que exatamente os grupos de parâmetros otimizam

  • x
  • y
  • z
  • X
  • Y
  • Z
Provavelmente entendo parte disso, mas ainda não consigo entender o quadro completo na minha cabeça.
 

Aqui está outra estranheza, ou talvez apenas uma falha

double BTS() {
	if (( prcptrnz1() > 0 || F==0) && bu< HM_Up_X) {
		if ( prcptx1 > 0 && Delta_G12>0) {
			sl = slx; 
			tp = tpx * slx; 
			mn = mnx1; 
			return (1);
		}
	} 
	if (( prcptrnz1() < 0 || F==0) && sll< HM_Dn_Y) {
		if ( prcpty1 > 0 && Delta_G12<0) {
			sl = sly; 
			tp = tpy * sly; 
			mn = mny1;
			return (-1);
		}
	}
	return (0);
}

Acontece que se agora F == 0 e não houver nenhuma posição em aberto - então podemos entrar primeiro no primeiro bloco, e depois no segundo, o que posteriormente levará a resultados incorretos.

Ou está me faltando algo?

 

Provavelmente não, porém. Não podemos entrar nos dois blocos ao mesmo tempo porque eles não nos deixam entrar.

Delta_G12

não nos deixam entrar.

 
ShestkoFF писал(а) >>

Eu não gosto de criticar as coisas que funcionam. Vou apenas fazer algumas críticas ao código:

cpsb. Eu não tomo as críticas como críticas, mas como um guia de ação, ou seja, para ler pelo menos um pouco do manual da MQL

  • Não preciso escrever tudo em uma linha, porque é impossível ler o código.

Aceito, mas provavelmente em trabalhos futuros. Recebi esta "caligrafia" depois de alguns outros projetos mais globais e devido à resolução superficial do meu monitor de 12 polegadas. Sua versão parece sem dúvida melhor, mas eu teria que rolar constantemente para trás e para frente através da listagem. Mas como não estou aqui por mim mesmo, vou dizer novamente - vou ter isso em mente.

  • Nomeando variáveis de uma forma significativa

Veja acima! Embora eu goste de meus nomes, basta acostumar-me a eles, como estamos acostumados com as abreviações GOELRO, OBHSS, IMHO etc. Se você olhar com atenção, eu dei alguns nomes mais ou menos significativos a algumas variáveis, mas abreviei todas as vogais.

  • Não faça variáveis globais se elas forem locais.

Ainda não tenho controle sobre as variáveis. Quando você está escrevendo código do zero, você não tem idéia de onde uma variável estará, então quase tudo é global.

  • Não faz sentido não tornar as variáveis globais estáticas. Se este não for o caso, por favor, explique.

empiricamente não é assim, vou me lembrar onde me deparei - acho que foi na função BuSll ()

  • Usar constantes padrão definidas no idioma. Por exemplo, a especificação de um intervalo de tempo. duplo iA_C (int pr){int tmfr=60; return(iAO(Symbol(), tmfr, pr));} Acho melhor substituí-lo por duplo iA_C (int pr){return(iAO(Symbol(), PERIOD_H1, pr));}.

Concordo, vamos corrigi-lo, novamente, quando você escreve um bloco de zero você ainda não tem idéia de quais parâmetros você vai passar para a função, e então o olho fica "sujo" e você não presta atenção a tais "bagatelas" ))

 
ShestkoFF писал(а) >>

SHOOTER poderia nos dizer brevemente o que exatamente os grupos de parâmetros otimizam

  • x
  • y
  • z
  • X
  • Y
  • Z
Provavelmente eu entendo em parte, mas ainda não consigo entender o quadro completo na minha cabeça.

A principal força motriz e orientadora do Expert Advisor é a notória)) função G12(). É nesta função que as direções comerciais preferidas são calculadas com base em indicadores. Mas uma direção não é suficiente - precisamos de pontos de entrada. Em "clássicos", se em um período de tempo se pesquisam os patterrons, ou o próprio indicador é igualado se houver parâmetros externos, se houver dois ou mais, eles também são otimizados. Tentei mais uma novidade para mim, o método NN

Aqui esta função

duplo prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

if (MathAbs(qw)>at) return(qw);else return(0);}

uma espécie de perceptron e projetado para obter.... algo. Aqui, em detalhes, estão algumas respostas a muitas perguntas, e melhores do que eu teria respondido. Como encontrar uma estratégia comercial lucrativa' e Receitas Neural Net. É verdade que eu mesmo li tudo na diagonal e fiquei mais interessante estudando o trabalho dos outros ver abaixo.

Esta EA é "criada com base" na MTS "Neural network + MACD" por Batohov, MTS"Сombo", "Combo_Right" & AI por Reshetov, PROphet por PraVedNiK,RSI_Test por zerkmax, auto_optimization.mqh por Igor Malcev e alguns outros.

 
ShestkoFF писал(а) >>

Aqui está outra estranheza, ou talvez apenas uma falha

Acontece que se agora F == 0 e não houver nenhuma posição em aberto - então podemos entrar primeiro no primeiro bloco, e depois no segundo, o que posteriormente levará a resultados incorretos.

Ou talvez eu não entenda alguma coisa?

F == 0 somente nos dois primeiros estágios de otimização, quando além de Delta_G12 há Trd_Up_X e Trd_Dn_Y.

Se todas as seis etapas forem passadas corretamente e os set-files de otimização forem usados sequencialmente, então F deve ser sempre igual a 1.

E eu encontrei meu outro erro ao rever o código. Vejo que as últimas versões funcionam pior. Este erro apareceu nas versões 7 e 9.

Alguém já notou?

 
SHOOTER777 >> :

Aqui esta função

duplo prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

if (MathAbs(qw)>at) return(qw);else return(0);}

tipo de perceptron e pretendia obter.... algo.

Isto é um pouco um mistério para mim no momento. É claro, eu entendo o que faz e para que serve. Mas a fórmula em si é um tanto incomum.
O resultado do trabalho dos neurônios deve ser um número que soma os inputs dos neurônios multiplicados pelos pesos desses inputs.
Isto é, logicamente, deveria ser algo como o seguinte:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Ambas são claramente alguma função de 4 variáveis (ou será 8?) envolvidas em encontrar o máximo (equilíbrio resultante), mas ainda é estranho :)

 
ShestkoFF писал(а) >>

Esta função ainda é um mistério para mim. Claro, entendo o que faz e por que faz isso. Mas a fórmula em si é um tanto incomum.
O resultado do trabalho dos neurônios deve ser um número que soma os inputs dos neurônios multiplicados pelos pesos desses inputs.
Portanto, logicamente, deveria ser algo como isto:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Claramente ambas são alguma função de 4 variáveis (ou será 8?) que está envolvida em encontrar o máximo (equilíbrio resultante), mas ainda assim é estranho :)

Você deu uma versão simplificada da função, pelo menos é assim que eu a entendo

É aqui que é discutido

'MTS 'Sombo'.

Para ser justo, não é uma rede neural em sua forma mais pura. Em primeiro lugar, falta-lhe um valor limite sem ele, a capacidade de divisão do NS é muito menor. Em segundo lugar, IMHO, vale a pena acrescentar um limite de ativação de saída. O que isso significa? Para retornar o sinal ao comércio somente se o limiar de ativação for ultrapassado. Por exemplo:

double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Dividir por Close[0] para unificação
if (MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- limiar de ativação

 
gorby777 писал(а) >>

As versões anteriores usavam Close(0) na fórmula de Perfetron z1, mas em 7 e 9 Close(1). É disto que estamos falando?

Não, acho que não se trata disso, afinal existe uma regra para trabalhar em bares formados.

Mas o fato de que a bandeira Flq=falsa; uma para comprar e outra para vender influencia fortemente a divisão destas direções de negociação e, portanto, os resultados.

Razão: