[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 1127

 
drknn:
Muito obrigado por sua ajuda =)
 
Alexandr24:
Muito obrigado por sua ajuda =)


Não se esqueça de que no testador o indicador não joga a janela de alerta, mas, em vez disso, escreve mensagens de alerta nos registros. É melhor depurar tais pedaços de código com scripts - é mais rápido.

Além disso, as mensagens indicadoras, curiosamente, não são escritas no testador para os logs do testador, mas para os logs em tempo real.

 
Como considero a comissão ao testar um EA no testador?
 
Parece ser levado em consideração, pois o testador utiliza todas as configurações de um determinado corretor. Uma pesquisa lhe dirá com mais precisão.
http://www.google.ru/search?as_sitesearch=mql4.com&as_q=%EA%EE%EC%E8%F1%F1%E8%FF+%E2+%F2%E5%F1%F2%E5%F0%E5
 
Abzasc:

Não há uma maneira "direta" de fazer isso.

Você poderia fazer desta maneira.

Ou também encontrei isto


Obrigado!
 

Eu não entendo bem como funcionam as condições.

Decidi descobrir como funciona um indicador fractal, qual é a diferença entre MODE_UPPER e MODE_LOWER, e escrevi o seguinte código

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
for (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
if (up>==1|down>=1){
Alerta("Previous upper fractal is:", para cima, " O fractal inferior anterior é:", para baixo);Alerta ("y",y);}}}

WindowFirstVisibleBar() dá o número de barras no gráfico, esta coisa funciona se você riscar se (para cima>=1||down>=1) da EA, dá uma boa série de barras contadas, só que são tantas.

É como um sinal ||| ou, o operador parece fazer os parênteses {} se pelo menos uma das condições é verdadeira, ou ambas são verdadeiras ao mesmo tempo, certo?

Nada mudou para mim!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Acho que entendi bem. Ajude-me!!!!!!!

 
Dimka-novitsek:

Eu não entendo bem como funcionam as condições.

Decidi entender como funciona um indicador fractal, qual é a diferença entre MODE_UPPER e MODE_LOWER.

int start()
{\i1}int y;
y= WindowFirstVisibleBar();Alerta ("y",y);
para (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
se (acima>==1|| abaixo>=1){
Alerta ("Previous upper fractal is:", up, " Previous lower fractal is:", down);Alerta ("y",y);}}}} Alerta ("Previous upper fractal is:", up, " Previous lower fractal is:", down)

WindowFirstVisibleBar() dá o número de barras no gráfico, esta coisa funciona se você riscar se (para cima>=1|baixo>=1), dá uma boa série de barras calculadas, mas há muitas delas.

É como um sinal ||| ou, o operador parece fazer os parênteses {} se pelo menos uma das condições é verdadeira, ou ambas são verdadeiras ao mesmo tempo, certo?

Nada mudou para mim!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Acho que tudo está correto. Ajude-me!!!!!!!



código normal lugar via counter-alt - M - resposta mais rápida...sem exclamações.
 
via counter-alt - M - E mais detalhes?
 
Dimka-novitsek:

É como ||||

https://docs.mql4.com/ru/basis/operations/bool

Uma operação OU lógica.

Zy counter-alt - M é como um botão de pressão SRC e codifica através dele.

 
drknn:

Eu tentei o código que você sugeriu. O resultado é sempre o mesmo - ele continua abrindo negócios durante o dia. Mais uma vez, eu gostaria de manter a opção de ligar/desligar.

Aqui estão as variantes testadas:

bool WaitForNewDay = verdadeiro;

init() vazio

{

SMB=Símbolo();

retornar;

}

início nulo()

{

bool Trade=verdadeiro;

if(WaitForNewDay){if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)!=0) Trade=false;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); return;}

}

//-----------------------------------------------------------------

int HistoryBuy(int MAGICMA)

{int BuyOrders=0;

para (int i=OrdensHistóriaTotal()-1;i>=0;i--) {

se (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Imprimir(" ",GetLastError()," ",i);

}

senão {

if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGICMA){ continuar;}

if(OrderType()==OP_BUY){

if(OrderOpenTime()>=iTime(SMB,PERÍODO_D1,0)){

BuyOrders++;

}

}

}

}

devolução(BuyOrders);

}

//-----------------------------------------------------------------

int HistorySell(int MAGICMA){

int SellOrders=0;

para (int i=OrdensHistóriaTotal()-1;i>=0;i--){

se (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Imprimir(" ",GetLastError()," ",i);

}

senão {

if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGICMA){ continuar;}

if(OrderType()==OP_SELL){

if(OrderOpenTime()>=iTime(SMB,PERÍODO_D1,0)){

VENDEDORES++;

}

}

}

}

devolução(SellOrders);

}

//////////////Outra opção/////////////////////

bool WaitForNewDay = verdadeiro;

Comércio=verdadeiro;

init() vazio

{

SMB=Símbolo();

if(WaitForNewDay) {Trade=false;}

retornar;

}

início nulo()

{

if(WaitForNewDay) {if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)==0) Trade=true;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); Trade=false; return;}

}