[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 667

 
artmedia70:

Amigos, não consigo entender porque não funciona:

Se uma posição com magia 5100 for encontrada no laço, o laço deve ir para uma nova iteração:

... Mas isso não acontece e a posição selecionada com um número mágico 5100 começa a participar de outros cálculos como a mais perdida...

Este é o de fechamento... E então, de acordo com isso, outro travamento é colocado nele.

Ajude-me a entender onde o cão está escondido...

Isso é tudo, obrigado, não é necessário. Eu mesmo encontrei o cachorro...
 

Até agora, eu trabalhei com funções simples que produzem um único valor de saída.

A função pode produzir os valores de várias variáveis? Por exemplo: Tempo_1, Alto_1, Baixo_1, Tempo_2, Alto_2, Baixo_2.

Obrigado!

 
chief2000:

Uma função pode produzir os valores de várias variáveis?


Uma função só pode retornar um parâmetro, mas ninguém proíbe uma função de trabalhar com variáveis declaradas fora da função start()(variáveis globais).
 
DDFedor:

A função pode retornar apenas um parâmetro, mas ninguém proíbe a função de trabalhar com variáveis declaradas fora da função start() (variáveis globais).


Vamos dar um exemplo simples - se [MA_1>=Ma_2], você deve retornar os valores Tempo_1, Alto_1, Baixo_1

para a barra em que ocorreu o cruzamento. Este módulo em start() é

 
chief2000:


certo?


Mas deve-se levar em conta que os valores de tais variáveis são relevantes até que a função seja chamada novamente. portanto, as variáveis devem ser usadas IMEDIATAMENTE após a chamada da função. então as variáveis conterão os valores calculados para esta chamada de função.
 
DDFedor:

Mas deve-se levar em conta que os valores de tais variáveis são relevantes até que a função seja chamada novamente. portanto, as variáveis devem ser usadas IMEDIATAMENTE após a chamada da função. então as variáveis conterão os valores calculados para esta chamada de função.

Sim, isso é compreensível. Obrigado!

 
chief2000:

Até agora, eu trabalhei com funções simples que produzem um único valor de saída.

A função pode produzir os valores de várias variáveis? Por exemplo: Tempo_1, Alto_1, Baixo_1, Tempo_2, Alto_2, Baixo_2.

E o que o impede de usar parâmetros passando por referência e não por valor na declaração de função? Exemplo (Fundamental de linguagem/Variáveis/Parâmetros formais):

É possível passar parâmetros por referência. Neste caso, a modificação de tais parâmetros afetará as variáveis correspondentes na função chamada passada por referência. Não é possível passar elementos de arrays por referência. Os parâmetros podem ser passados por referência somente dentro dos limites de um único módulo, tal oportunidade não é fornecida para funções de biblioteca. A fim de especificar que um parâmetro é passado por referência, o & modificador deve ser colocado após o tipo de dado.

Exemplo:

func(int& x, double& y, double& z[]) { double calculated_tp; ... for(int i=0; i<OrdersTotal(); i++) { if(i===ArraySize(z)) break; if(OrderSelect(i)==false) break; z[i]=OrderOpenPrice(); } x=i; y=calculated_tp; }

As matrizes também podem ser passadas por referência, todas as mudanças serão refletidas na matriz original. Ao contrário de parâmetros simples, as matrizes também podem ser passadas por referência às funções da biblioteca.

Note que o func() é do tipo void, mas sua execução mudará todos os três parâmetros declarados fora dele, já que todos os três são fornecidos com o & modificador. Incluindo, a propósito, a matriz z[] muda completamente.
 
Mathemat:

E o que o impede de usar parâmetros de passagem por referência e não por valor na declaração da função? Exemplo (Fundamental de linguagem/Variáveis/Parâmetros formais):

Note que a função func() tem tipo void, mas sua execução mudará todos os três parâmetros declarados fora dela, já que todos os três são fornecidos com o & modificador. Incluindo, a propósito, a matriz z[] muda completamente.

Muito obrigado!

 
Como fazer isso ! Se o último comércio não foi lucrativo, você precisa mudar o lote, se não, você não muda)?
 
rovlent:
Como fazer isso! Se o último comércio não foi rentável, devemos mudar o lote, se não - não?)


Por exemplo, como este

//=================================================
// Расчет размера позиции
//==================================================
double CalculateLots(){
   double Res=dLots;
   bool bProfit=true;
   int PrevTime=-1;
   double tmpLots;
   for (int i=0;i<OrdersHistoryTotal();i++){
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderSymbol()!=Symbol())                    continue;
      if (OrderMagicNumber()!=MAGIC)                  continue;
      if (OrderCloseTime()<PrevTime)                  continue;
      PrevTime=OrderCloseTime();
      if (OrderProfit()>0) bProfit=true; else bProfit=false;
      tmpLots=OrderLots();
   }
   double Lots_Step=MarketInfo(Symbol(), MODE_LOTSTEP);
   if (!bProfit) Res=tmpLots+Lots_Step;
   return(Res);
}

Aumentado pela etapa estabelecida pela CD. Embora as variantes possam ser diferentes

dLots - tamanho da posição padrão