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

 
snail09:
Conte todos os parênteses à esquerda, depois todos os parênteses à direita, depois compare as quantidades, ou comente as funções um a um até encontrar o erro. O gosto e a cor de cada um (design do código fonte) é diferente.
há 4 parênteses de abertura e 4 parênteses de fechamento, tudo bem. Mas como os comentários podem me ajudar, não estou bem certo
 
Pinki:
Há 4 braçadeiras de abertura e 4 de fechamento, tudo bem. Mas como os comentários podem me ajudar a não entender bem

Você pode comentar primeiro funções personalizadas, depois comentar loops, construções lógicas... Posso assegurar-lhe que você encontrará uma correspondência com seu parêntese através de cortes seqüenciais. Ou talvez você tenha esquecido de colocar ";" em algum lugar também...

Você não está enganado SE por FOR?

Desculpe, eu não percebi de imediato.

   // Перебор в цикле всех рыночных и отложенных ордеров
   for(int i=0;i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         // Если инструмент и магик соответствуют - значит ордер наш
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
            // Подсчитываем только рыночные ордера
            if(_Type==OP_BUY || _Type==OP_SELL) 
               {
               op++;
               }
            }
         }
     }

Compare-o com este fragmento. É apenas uma variante.

 
001:

Quem pode explicar por que a 6ª ordem não abriu no castiçal e o que fazer para que ele se abra?

Diário de bordo.

2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4: aberto #7 stop de venda 0,10 GBPUSD a 1,62233 sl: 1,64443 tp: 1,57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Testador: #6 apagado devido a expiração
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4: aberto #6 stop de venda 0,10 GBPUSD a 1,63373 sl: 1,64570 tp: 1,62652 ok
2011.11.04 19:42:09 1999.11.04 08:00 Testador: #5 eliminado devido a expiração
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4: aberto #5 stop de venda 0.10 GBPUSD a 1.63622 sl: 1.64702 tp: 1.63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 Testador: #4 eliminado devido a expiração
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4: aberto #4 stop de venda 0.10 GBPUSD a 1.63365 sl: 1.64917 tp: 1.61097 ok

O quarto, quinto e sexto pedidos pendentes foram eliminados devido à expiração.

Aumentar sua vida útil ou estabelecer 0 (zero), ver. OrderModify()

 
мmersi:

O quarto, quinto e sexto adiamentos foram eliminados devido à data de vencimento.

Aumentar sua data de expiração ou defini-la como 0 (zero) ver OrderModify(). OrderModify()


O que me confunde é que antes de expirar o 6º pedido (ele expirou às 20:00) havia uma vela apagada às 16:00. Isto pode ser visto na foto.
 
mersi:

1. A função encontra a ordem com o maior ticker da história, o que significa a última ordem fechada (a menos, é claro, que haja um caso excepcional, para o qual sua opção com o tempo máximo de fechamento é preferível).

2. De acordo com as condições , a primeira ordem é aberta com o TP/SL especificado e somente a segunda ordem pode ser aberta com o novo TP/SL, o que significa que a função pode retornar zero somente se a primeira ordem foi zero, mas não se não houver ordens fechadas na história.

Uma última coisa. Em sua variante, o uso de j e outro SELECT na função é redundante.

é suficiente:

if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);

1. Você pode confiar 100% em seu corretor (ou no corretor do cliente), sobre sua numeração de bilhetes? O tempo ainda é um valor mais estável - aqui ele só pode mudar o tempo manualmente, ajustando o histórico. IMHO - melhor usar o tempo.

2. Se o cliente precisar mudar a lógica, então sua função poderá ter que ser reescrita.

3. Você sugere

Profit=OrderProfit()+OrderSwap()+OrderCommission();

para utilizá-lo dentro de um loop? Para quê? Você só pode utilizá-lo uma vez para o último pedido já encontrado.

А... Seu cliente não irá testar e otimizar. Estou vendo...

 

GlobalVariableSetOnCondition() - você pode explicar em linguagem simples o que esta função faz? A descrição na ajuda é muito confusa, não consigo entender alguns pontos?

Define um novo valor da variável global existente se o valor atual da variável for igual ao valor do terceiro parâmetro check_value. Se a variável não existir, a função gerará um erro ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) e retornará FALSE. A função retornará VERDADEIRA se executada com sucesso, caso contrário retornará FALSA. Para obter as informações de erro, a função GetLastError() deve ser chamada. Se o valor atual da variável global for diferente do check_value, a função retornará FALSO.
Esta função permite o acesso atômico à variável global, de modo que ela pode ser usada para criar um semáforo para comunicação simultânea entre vários Expert Advisors no mesmo terminal do cliente.

 
fore-x:

GlobalVariableSetOnCondition() - você pode explicar em linguagem simples o que esta função faz? A descrição na ajuda é muito confusa, não consigo entender alguns pontos?

Define um novo valor para uma variável global existente, se o valor atual da variável for igual ao terceiro parâmetro check_value. Se a variável não existir, a função gerará um erro ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) e retornará FALSE. A função retornará VERDADEIRA se executada com sucesso, caso contrário retornará FALSA. Para obter as informações de erro, a função GetLastError() deve ser chamada. Se o valor atual da variável global for diferente do check_value, a função retornará FALSO.
Esta função permite o acesso atômico à variável global, de modo que ela pode ser usada para criar um semáforo para comunicação simultânea entre vários Expert Advisors no mesmo terminal do cliente.

GlobalVariableSetOnCondition("Имя переменной", устанавливаемое значение, проверяемое значение);

Suponha que você tenha uma variável global GL_Var.

Atualmente, tem um valor de 1,0.

Você precisa verificar se esta variável tem um valor 1.0 e, em caso afirmativo, definir esta variável como 2.0

Será assim:

GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0);

Para lidar com os valores de retorno desta função, você pode chamá-la via

if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
   // здесь код обработки, если функция вернула false
   // false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
   // или если вообще ещё нет глобальной переменной GL_Var
   }

Antes de chamar a função, você pode verificar se a variável global GL_Var existe, para evitar o erro ERR_GLOBAL_VARIABLE_NOT_FOUND

 

Por favor, ajude a resolver um pequeno problema geométrico. Há uma linha com as coordenadas p1 e p2 (mostradas em vermelho na foto). Preciso encontrar a coordenada da p3, que é 38,2% da coordenada da p2. Eu fiz o seguinte:

if(p2>p1) p3=p2-(p2-p1)*0,382; verdadeiro para a parte superior da figura

if(p1>p2) p3= p2+(p1-p2)*0,382; verdadeiro para a parte inferior da figura

Há alguma maneira de escrever isso em uma equação sem "se"?

 

Bem, escreva dessa forma.

p3=p2-(p2-p1)*0,382

 
Roger:

Bem, escreva dessa forma.

p3=p2-(p2-p1)*0,382


E de fato! Obrigado por sua ajuda.
Razão: