[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 60

 
7777877: transferência de parâmetro de transferência de parâmetro por referência?

aqui está a transferência de parâmetros por referência, faça um roteiro como este:

int start(){
   int res = 999;
   Print("func = ",func(res)," , res = ",res);
return(0);
}
//__________________________
int func(int &a){
   a = 10;
   return(a*10);
}

a guia Expert mostrará o seguinte registro: 2012.04.08 11:19:35 teste EURUSD,M5: func = 100, res = 10

e tentar responder à pergunta por que atribuímos res = 999; e o registro recebeu res = 10

 

Você pode me dizer como conectar as bibliotecas? Eles estão presentes nos arquivos mqh, mas quando copiam, eles dão

strlib.mqh' - não pode abrir o arquivo do programa

 
IgorM:

aqui está a transferência de parâmetros do link, faça um roteiro como este:

a guia Expert mostrará a seguinte entrada: 2012.04.08 11:19:35 teste EURUSD,M5: func = 100, res = 10

E tente responder à pergunta por que atribuímos res = 999; mas no registro temos res = 10


Aqui está minha explicação:

A função de impressão chama a função func. do usuário. O parâmetro res=999 é passado para a função func. Quando a função func em si é avaliada, o parâmetro a=10 é usado. O valor a*10=100 é passado de volta para o lugar onde a função func é chamada. Como acabamos com res=10, deduzo disso que passar um parâmetro por referência significa o seguinte: você pode passar QUALQUER valor do tipo relevante (neste caso, res=999) na função chamada (neste caso, no func), mas a própria função já será avaliada com esse valor (ou seja(ou seja, em nosso caso com a=10), que será inicializada dentro da própria função (que em um caso particular também pode coincidir com o valor passado para a função chamada, ou seja, neste caso, para o func). E ao transferir o valor calculado na função (neste caso, para func) de volta para a string de chamada da função, a variável (neste caso, res) já terá um valor diferente do que antes, ou seja, o valor que recebeu quando o func da função foi calculado (ou seja, neste caso, res=10). Assim: ao passar um parâmetro para uma função por referência, dentro de uma função avaliada, o valor do parâmetro pode mudar, e ainda, após o valor calculado ser retornado na cadeia de chamada da função, este parâmetro terá um valor MODIFICADO (em um caso particular, o mesmo), que ele recebeu durante a avaliação da função chamada.

Eu acertei?

 
7777877: Quando um parâmetro é passado para uma função por referência, o valor do parâmetro pode mudar dentro da função avaliada
sim, ele faz
 
IgorM:
É isso mesmo.

Grosse danke schoen!!!
 

Por favor, me diga, quero fazer uma modificação no pedido, para que a EA altere o valor de stop-loss no momento que eu especificar, mas ela começa a trapacear.

aqui está meu código

int externo tp = 350; // lucro valor takeprofit
int externo sl = 400; // perda valor stoploss

int ticket;

int start()
{
//
if (OrdersTotal()==0 && Hour( )==2 && Minuto( )==0) // pedido abre às 2:00 horas hora do terminal
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//

if (OrderTotal()==1 && Hour( )==3 && Minute( )==0) // aqui eu estabeleço a condição de que o pedido com o bilhete selecionado deve ser modificado às 3h00 hora do terminal. tempo.

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // aqui especifiquei a seleção do pedido, negociar
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // modificar o pedido com o ticket selecionado, a partir do preço da posição aberta, alterar o valor SL em pontos, TP deixado inalterado


}
//--

}


Há um problema durante os testes: o Expert Advisor começa a fazer muitas modificações inúteis no tempo, das 3 horas 00 minutos até 3 59 minutos. A EA está brincando e fazendo modificações a cada segundo! Por quê? O que há de errado com o código?

 
oleg_felix:

Por favor, me diga, quero fazer uma modificação no pedido, para que a EA mude o valor do stop loss no momento que eu especificar, mas ela começa a brincar.

aqui está meu código

int tp externo = 350; // valor de lucro
sl int externo = 400; // valor de stop loss

int ticket;

int start()
{
//----
se (OrderTotal()==0 && Hour( )==2 && Minute( )==0) // o pedido abre às 2:00 hora do terminal
ticket=OrderSend(Symbol(),OP_SELLL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

se (OrderTotal()==1 && Hour( )==3 && Minute( )==0) // aqui eu especifiquei uma condição que o pedido com o bilhete selecionado deve ser modificado às 15h, de acordo com o horário do terminal.

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // aqui eu especifiquei a seleção do pedido, o comércio
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // modificar o pedido com o ticket selecionado, a partir do preço da posição aberta, alterar o valor do SL em pontos, deixar TP inalterado


}
//--

}


Ao testar, surge um problema: o Expert Advisor começa a fazer muitas modificações inúteis dentro do tempo, das 3 horas 00 minutos às 3 59 horas. O Expert Advisor está brincando e fazendo modificações a cada segundo! Por quê? O que há de errado com o código?



Por que em tempo..... no lucro!!!

 

Como escrever a função correta para modificar uma ordem aberta em uma conta ECN, onde você não pode colocar parada e lucro de uma vez, mas você tem que fazer isso através de modificação.

O problema é que algo está errado, por favor, ajude-me a encontrar o erro.

int externo tp = 350; // lucro valor takeprofit
int externo sl = 400; // perda valor stoploss

int ticket;
int start()
{
//----
if (OrdersTotal()==0 && Close[1]<Open[1] && High[1]<Bid) )==0) // encomenda abre em condições
ticket=OrderSend(Symbol(),OP_SELLL,1,Bid,0,0,0,0t,",123,0,Red);
//
if (OrderTotal()==1 ) // aqui eu defini uma condição que modifica uma ordem com uma única ordem selecionada.
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // aqui especifiquei a seleção do pedido, transações
OrderModify(ticket, OrderOpenPrice(), Ask+sl*Point,Ask-tp*Point,0,Blue); // modificar o pedido com o ticket selecionado, a partir do preço da posição aberta, alterar o valor SL em pontos, deixar TP inalterado
}
}

 
oDin48:
  • Rapazes, como faço para conectar bibliotecas? Quando eu tento compilar a EA, ela dá

  • strlib.mqh' - não pode abrir o arquivo do programa

Um achado:
#include <strlib.mgh>

e substituir por:

#include <stdlib.mgh>
 
7777877:

Pessoas, por favor expliquem de forma simples, o que é transferência de parâmetros por referência. Eu li a documentação, mas entendi apenas que é possível e após a identificação da variável é obrigatório colocar um modificador &. Seria ótimo se a explicação fosse acompanhada de um pequeno programa com explicações... Qual é a diferença entre os parâmetros habituais de passagem e os parâmetros de passagem por referência?

O sentido geral de passar parâmetros por referência não é passar uma variável em si, mas seu endereço. No caso oposto, uma cópia da variável é passada para o parâmetro.