Função que retorna 2 resultados? - página 4

 

gordon: It doesn't imply anything, but specifically in both C and C++ arrays are passed by reference as well (technically a pointer to the array's first element is passed, that pointer is passed by value).

Obrigado. Também preciso aprimorar meus conhecimentos sobre o ponteiro.

Matutin: Muito interessante! Infelizmente, a EA precisa de parâmetros, e às vezes muito, então não podemos evitá-los e temos que tomar cuidado por todos os motivos mencionados em https://www.mql4.com/go?http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

Por que não escrever para um arquivo e cada EAs pode lê-los.

gordon : Esta discussão é sobre variáveis definidas no escopo global (declaradas fora da função especial start(), init(), deinit()) e não sobre GV's... Não misture as duas.

Eu sempre digo variáveis de escopo global & GlobalVariables para evitar confusão. MT4 & MT5 podem fazer melhor usando terminologia diferente para estes.

 
gordon:
Por que resolver um problema que não existe? Por que reinventar a roda? Por que inventar um código pouco claro que só funcionaria em casos limitados?


Bem, porque eu escrevi uma função que funciona dessa forma, ela tem várias médias móveis em um array de 1 a 7 se alguma for cruzada por uma linha de sinal, ela toma o índice do array*1000 + a direção ( 0 para cima, 1 para baixo)*100 isto retorna um número de identificação único para cada ordem que contém três informações.

Por exemplo, um sinal de ordem aberta com o número 3100 é criado quando o terceiro MA foi cruzado para baixo, o sinal número 2000 é criado se o segundo MA for cruzado para cima.

Isto significa que minha função de cruzamento de linha pode enviar este número para minha função de pedidos abertos, pois agora contém 3 informações. primeiro é o próprio número mágico, segundo tipo de pedido = sinal%1000/100 resultado é um um ou um zero decide se deve ser um pedido de venda ou um pedido de compra.

Assim, o número mágico contém informações sobre qual linha MA foi cruzada para gerá-lo em primeiro lugar. int MA= número mágico/1000 resultado é um valor de 1 a 7 que corresponde ao índice original da matriz das médias móveis

em terceiro lugar, o número mágico é um identificador único para cada ordem e impede que várias ordens sejam abertas devido à repetição de sinais, pois duas ordens com o mesmo número mágico não são permitidas

mais tarde no programa se eu quiser realizar uma operação baseada no tipo de pedido que eu faço type=(magicnumber%1000)/100; se o resultado for 1 foi um pedido de venda se for zero foi um pedido de compra, se eu quiser saber qual linha MA criou esse pedido eu faço int MA=magicnumber/1000 obviamente o interger cai qualquer ponto flutuante e me dá o índice original de MA de 1 a 7

Pensei que esta era uma boa maneira de criar mais de uma informação recuperável e utilizável a partir de um único retorno funcional.

 
SDC:

Bem, porque [...]

Isso é ótimo, mas mais uma vez - por que não apenas fazê-lo da maneira direta, universal, clara e bem aceita. Por que se dar a todo esse trabalho? Não pense que isto é mais simples:

int  a,b;
void MyFunc( int& a, int& b )
   {
   //... function result should be 'passed' to a and b
 

Não sei, suponho que isso também teria funcionado, apenas pareceu uma boa idéia na época, foi principalmente porque eu estava trabalhando em um EA tp gerenciar várias estratégias de negociação diferentes ao mesmo tempo, então eu trabalhei nesse sistema para gerenciar ordens por números mágicos, dependendo de quais critérios de negociação eles pertenciam, por exemplo, você pode fechar todas as ordens de venda abertas por 55 períodos, movimentando em média uma cruz independente de todas as outras ordens porque 55 MA é o índice 3, os números mágicos dessas ordens seriam baseados em 3000, então percebi que poderia ir além e incorporar o tipo de ordem também para que as ordens de venda nessa linha MA tivessem o número mágico 3100 3101 3102 etc. Isso significa que você pode identificar todas as ordens abertas por esse critério de negociação, ou todas as ordens de compra abertas por esse critério de negociação ou todas as ordens de venda abertas por qualquer critério de negociação etc., todas pelo número mágico especial

Razão: