EA N7S_AO_772012 - página 23

 

Agora um pouco sobre as bandeiras que não estão incluídas na função FLG , já que são independentes.

A) Flg é uma bandeira de inicialização, é necessária para evitar a abertura da postura após uma falha ou início de operação, se houver um sinal de entrada (este sinal é duradouro), porque pode ser tarde demais. A lógica é a seguinte, se VSR!=0 ou seja, houver um sinal, então defina Flg=falso; assim que o sinal desaparecer, a bandeira é zerada

if (!Flg){if (VSR () ==0) {Flg=verdadeiro; retornar (0);}}}

B) Flq - bandeira interessante, proibindo a abertura de uma segunda posição na mesma barra. No início eu queria proibir a abertura de uma posição com prejuízo em um bar, mas vou implementá-la quando terminar com minha função BuSll, o que facilitará as coisas. Por enquanto, existe uma variante desse tipo.

É colocado na abertura de posição

{se (Trd_Up_X && VSR() > 0 && bu <HM_Up_X ) {

if (MOS( 0, lots, sl, tp, WindowExpertName(), mn)>=1) {Flq=false;}}}

if (Trd_Dn_Y && VSR() < 0 && sll<HM_Dn_Y ) {

if (MOS( 1, lots, sl, tp, WindowExpertName(), mn)>=1) {Flq=false;}}}}

A propósito, escrevi anteriormente sobre a correção nesta função.

Ela é reinicializada a cada 4 horas. Se você acha que isso é demais para alguns pares, você pode adicionar à função H1() reiniciar a bandeira a cada hora para todos, exceto alguns pares if (Symbol()!="GBPJPY" || Symbol()!="USDCHF"){ Flq = true ; }

 
WitoHOH писал(а) >>

Algo sobre a última versão não funciona.

O otimista nem sequer abre um único negócio na primeira etapa.

O testador com parâmetros otimizados para a EA anterior funciona da mesma forma.

Você já descobriu porque ela não está otimizada?

 
SHOOTER777 писал(а) >>

Você já descobriu por que não otimizou?

Não.

Não teve muito tempo.

Da última vez houve um problema por causa da falta de história.

Estou apenas retomando a história e funcionando.

Eu o informarei pela manhã.

 
SHOOTER777 писал(а) >>

Você já descobriu porque ele não otimizou?

Ele não quer otimizar.

A sétima versão é otimizada com os mesmos dados históricos.

O mais recente não o fará.

O resultado em todos os lugares é 0.

 

Relançou o especialista. Provavelmente, uma versão corrompida. O fórum estava congelando.

E preste atenção a estas linhas em Expert Advisor

equilíbrio inicial, mínimo e máximo, quando o Expert Advisor está negociando.

//------------------------------------------------------------------//
bool TrBlnc = true; int StrtBlnc = 3000; int DBlnc = 1500; int UBlnc = 4000;
//------------------------------------------------------------------//

A proibição é implementada em função bool FLG (int cs )

Arquivos anexados:
 

Um pouco mais sobre a lógica do conselheiro.

Há um problema - lacunas freqüentes. Durante as lacunas, os parâmetros e condições otimizados para entrar no mercado não são sincronizados, porque os valores dos indicadores e preços se rasgam. Leva tempo para se recuperar. Para a AO eu defini 12 horas, e considero uma lacuna significativa como uma mudança de preço em mais de 20 pontos padrão (para alguns pares pode e deve haver outros valores).

Assim, o que temos feito:

No início, determinamos se havia uma lacuna

string dttm = StringConcatenate (Ano(),",Mês(),",Dia());
datetime smtm=StrToTime(dttm);
bool Gp;
int shft = iBarShift(NULL,0,smtm);
iOpn duplo = iOpen (NULL,0,shft); iCls duplo = iClose (NULL,0,shft+1);
duplo dOC = MathAbs ((iOpn - iCls)/(Ponto*10)) ;
se (dOC>20) Gp = verdadeiro ;

Se foi e Gp = verdadeiro, então a condição para o banimento é

((DayOfWeek( ) == 1 && Hora( ) <14) && Gp))

Embora eu tenha algumas dúvidas de que a função

iBarShift (NULL,0,smtm);

talvez fosse melhor escrever da seguinte maneira

iBarShift (NULL,60,smtm,true); mas não, o último parâmetro padrão ainda é falso ?

Estou aguardando suas idéias e sugestões.

 
SHOOTER777 >> :

Preste também atenção a estas linhas na EA

equilíbrio inicial, mínimo e máximo, quando a EA está sendo negociada.

//------------------------------------------------------------------//
bool TrBlnc = true; int StrtBlnc = 3000; int DBlnc = 1500; int UBlnc = 4000;
//------------------------------------------------------------------//

Esta proibição é implementada em função bool FLG (int cs )

Por que você precisa de tais restrições?

 
capellini писал(а) >>

Por que você precisa de tais restrições?

Se você não precisa dela, não a use! Estou preparando a EA de verdade e como uma EA em várias moedas. No futuro, será um garfo, onde a EA não poderá negociar por baixo, para não perder tudo numa situação de força maior, assim como por cima - uma ave na mão é melhor do que um guindaste))) MM no entanto

 

E agora notícias do campo ou da frente))

No fim de semana passado, não tive tempo de preparar os arquivos do conjunto para a versão L9, terminei o trabalho tarde mais os feriados))))

Portanto, decidiu colocar a experiência. Coloquei a versão da L9 com conjuntos da semana passada e de outra versão.

O que temos ao final de dois dias: saldo -$70 Equidade +$420 Boa jogada!

 
SHOOTER777 писал(а) >>

Portanto, se você estiver testando ou otimizando, certifique-se de que a Equidade esteja dentro da faixa definida nos parâmetros

bool TrBlnc = true; int StrtBlnc = 3000; int DBlnc = 1500; int UBlnc = 4000;

ou adicionar a int init() linha se ( IsOptimization( ) ) TrBlnc = falso;// se ( IsTesting() ) TrBlnc = falso;

Funcionou.

A otimização está em andamento.

Talvez tais variáveis devam ser movidas para fora do código?

Seria mais fácil durante a otimização e no trabalho real, também.

O Expert Advisor não terá que ser recompilado toda vez que o saldo for alterado.

Razão: