Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 129

 
Roman.:

Olhe os tanques, reinicie, talvez ajude... :-)

P.S. Estou sendo gentil.

Nah. Os tanques não são uma opção. Se você realmente quer fazer algo assim. É apenas o resultado que acalma você))
 
hoz:
Nah. Os tanques não são uma opção. Se você realmente quer fazer algo assim. Acalmará apenas o resultado).

:-)
 

De jeito nenhum. No final das contas, acaba por ser um momento estranho. Eu não tinha o lote normalizado. Aqui temos a função de normalização de lotes:

//+-------------------------------------------------------------------------------------+
//| Проверка объема на корректность и округление                                        |
//+-------------------------------------------------------------------------------------+
double LotFloor(double value)
{
   return(MathFloor(MathMin(MathMax(value, g_minLot), g_maxLot)/g_lotStep)*g_lotStep);

Verifiquei onde houve um erro, na própria função de negociação de onde as funções de abertura de ordens são chamadas. Adicionei esta função no parâmetro de lote da função de chamada que envia as ordens. O erro não desapareceu.

E assim que adicionei a função de normalização diretamente à primeira função de maldição, e esta é a função que define as ordens pendentes, a maldição parou. O que você quer dizer com isso?

//+-------------------------------------------------------------------------------------+
//| Открытие отложенной короткой позиции                                                |
//+-------------------------------------------------------------------------------------+
bool OpenPendingSell(double lot, double price)
{
   int g_ticket = -1;
   double OOP = price - i_distanceFromLastPos * pt;
      
   if (OOP < Bid)
   {
       fCheck_ValidPendingOOP(Symbol(), OP_SELLSTOP, OOP);
       
       g_ticket = OrderSend(Symbol(), OP_SELLSTOP, LotFloor(lot), ND(OOP), 30, 0, 0, NULL, i_magic, 0, CLR_NONE);
   }
   if (g_ticket > 0)
   {
       return (true);
   }
   else
       pr ("OpenPendingSell(): Ордер послать не удалось " + GetLastError());
   
   return (false);
}

No primeiro caso, eu envio imediatamente um lote verificado, e no segundo caso, eu verifico o tamanho do lote na própria função OrderSend(). Mas qual é a diferença?

 
chief2000:
Eis o problema - existe uma matriz unidimensional, cujo tamanho pode variar.
Como fazer loop através de todas as combinações possíveis de elementos de matriz uns com os outros?
A ordem dos elementos não importa, ou seja, 123==213==321.

Aqui está um exemplo para um conjunto com 4 elementos:

Bem, um com o outro, não parece difícil.

int k = ArraySize(array);
for(int i=0;i<k-1;i++)
for(int ii=i+1;ii<k;ii++)
   {
   ...
   }
Mas, aqui, quando há mais de dois, não está claro como comparar. Mostrar um método para comparar três números 1, 2 e 3 ao mesmo tempo,
 
Alguém pode me dizer como fazer para que eu não tenha que reabrir a janela de otimização..... A janela estava com diferentes configurações de fundo, vela, etc.
 
Talvez haja roteiros como esse!!!
 
Olá a todos! Por favor, me aconselhem sobre este assunto... Se eu quiser mudar o nível para 798, é muito complicado calcular para muitos pares, como devo escrever um indicador que ou desenha o preço da média móvel deslocada ou o exibe na janela de dados sem contar manualmente?níveis para MA
 
Roger:

Bem, um com o outro, não parece difícil

Mas, quando há mais de dois, não está claro como comparar. Mostre-me um método para comparar três números 1, 2 e 3 ao mesmo tempo,

.

Se não estou enganado, o número de ciclos deve corresponder ao número de elementos da matriz. O problema é que o número de elementos não é fixo e pode ser muito mais do que 4, precisam pensar em como projetá-lo. Eu também me pergunto se existem outras opções de implementação que afetam a velocidade, o consumo de memória, etc.?
 
paladin80:



Obrigado! Não importa de que lado você começa a contar, ou seja, da 3ª barra?
 
Quero reformular e acrescentar à minha pergunta anterior.
Abaixo está o código para um conjunto de 4 elementos. Na realidade, o número de itens na matriz é variável.
Como posso mudar o código para que o número de laços aninhados 'para' se torne variável, um 'para' por item de matriz?
Obrigado!

int start() { 

   int Array[4]                                       = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size                                  = ArrayRange(Array,0);


   for(x1=0; x1<Array_Size; x1++) {
      Print("Combination                       = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++) {
         Print("Combination                    = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++) {
            Print("Combination                 = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++) {
               Print("Combination              = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }


   return(0);
}