[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 348

 
FAQ:
Por que você não se lembra do bilhete da ordem e não de sua posição. e o que acontece em uma transferência direta se não houver tal ordem? você vai apagar a ordem zero?


Eu já tentei. Isto também não funciona:

//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 
hoz:


Eu já tentei isso antes. Isto também não funciona:

Você tem que ser mais cuidadoso.
//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 

Finalmente está funcionando! Funcionou, em princípio, e a versão anterior. A principal falha estava na chamada de função, não na função em si.

Do ponto de vista de um profissional, todas as variáveis devem ser zeradas ao entrar em uma função, a menos que sejam estáticas, ou seja, não há necessidade de manter seu valor específico, certo?

 
hoz:

Finalmente está funcionando! Funcionou, em princípio, e a versão anterior. O erro principal estava na chamada de função, não na função em si.

Do ponto de vista de um profissional, todas as variáveis devem ser zeradas ao entrar em uma função, a menos que sejam estáticas, ou seja, não há necessidade de manter seu valor específico, certo?

Inicializar as variáveis na função com valores que não causarão o mau funcionamento da função e os erros mais difíceis de encontrar.

Normalmente uso 0 ou -1, dependendo da finalidade da variável. Se a variável na função irá armazenar o índice de posição encontrado, então inicialize-a para -1. Se você a inicializar a zero, depois de procurar a posição correta e sua ausência, você ainda poderá escolher a posição com índice 0, embora não seja a posição que você está procurando. Em -1 a posição não será escolhida. Este é um de todos os exemplos possíveis de onde o erro é difícil de encontrar - tudo parece estar correto na função, mas a saída está totalmente errada... e a EA não trabalha com a ordem/posição que esperávamos.

 

Uma função deve ser curta (opcional, mas desejável) e perfeitamente clara (seu propósito). como 2*2=4. ou seja, o programador deve entender claramente para que serve e qual a operação que realiza. então ele deve tirá-la de sua mente e esquecer o que ela tem dentro, e usá-la como uma "caixa preta".

Todas as variáveis utilizadas por uma função devem ser transmitidas a ela como argumentos. A utilização de variáveis globais sem passá-las como argumentos só se justifica se forem, por exemplo, Externs (no caso da MT). Mudar os totais em uma função é inaceitável, se faltar um valor de retorno, passe as variáveis por referência na lista de argumentos.

Isto é, se você tiver que jogar fora esta função, então você não precisa se lembrar por que a versão descascada não funciona porque nenhum globo nesta função foi modificado. Tudo isso para garantir que, se você tiver que refazê-lo, não causará uma reação em cadeia

 

Olá a todos!

Teste Pound-En.

O pedido deveria ter sido fechado no TAKE PROFIT antes do STOP LOSS.

Mas meu pedido não foi encerrado com a Take Profit por algum motivo.

PERGUNTA: POR QUE MEU PEDIDO NÃO FECHOU COM LUCRO, CONFORME PRESCRITO NA FUNÇÃO COMERCIAL?

Método de modelagem - todos os carrapatos.

Exemplo no link

http://clip2net.com/s/55pdDU

OBSERVAÇÃO: Tais casos - não acontecem com freqüência. Na maioria dos casos, as negociações são fechadas a 10 pips stop. no tempo.

Ou seja, parece-me que provavelmente não tem nada a ver com a distância mínima aceitável entre o preço e a parada.

Qual mais pode ser a razão?

Obrigado.

 

Ajuda para levar dados para variáveis globais a partir de um indicador

aproximadamente:

USD 6,5

EUR 6,6

3,3 LIBRAS ESTERLINAS

etc.

Obrigado antecipadamente por sua ajuda!

/*Decompilação removida. Advertência*/.

 
FAQ:

Uma função deve ser curta (opcional, mas desejável) e perfeitamente clara (seu propósito). como 2*2=4. ou seja, o programador deve entender claramente para que serve e qual a operação que realiza. então ele deve tirá-la de sua mente e esquecer o que ela tem dentro, e usá-la como uma "caixa preta".

Todas as variáveis utilizadas por uma função devem ser transmitidas a ela como argumentos. A utilização de variáveis globais sem passá-las como argumentos só se justifica se forem, por exemplo, Externs (no caso da MT). Mudar os totais em uma função é inaceitável, se faltar um valor de retorno, passe as variáveis por referência na lista de argumentos.

Isto é, se você tiver que jogar fora esta função, então você não precisa se lembrar por que a versão descascada não funciona porque nenhum globo nesta função foi modificado. Tudo isto pretende que, se eu tiver que refazê-lo, não causará uma reação em cadeia


Obrigado, e, Artem, claro! Você abriu meus olhos para esses pontos, que são lógicos em princípio, mas às vezes a falta de experiência deixava despercebida.

Há apenas alguns outros mal-entendidos. Você escreveu que se há variáveis globais na EA, elas devem ser usadas em funções apenas passando-as como argumentos, certo?

Estou apenas tentando entender, existem razões para criar variáveis globais (não externs)... Se elas devem ser passadas apenas através de argumentos, uma longa cadeia de funções dependentes pode coletar muitos argumentos, e os nomes das funções com argumentos serão muito longos.

E novamente, você pode criar uma variável global, passá-la para uma função por referência e fazer o que quiser com ela, e devolvê-la por referência de volta ao global, certo?

Quando li seu post hoje, comecei a pensar nisso e transferi algumas variáveis do global para uma função. Então percebi que estas variáveis são necessárias em outra função, que não está relacionada com a função onde as declarei. Se você o escuta aqui: "Mudar os Globais e a função não é aceitável", então acontece que a função que obtém diretamente as variáveis necessárias deve ser chamada em diferentes lugares? Mas isso já faz com que o código, por assim dizer, não seja agradável. Você quer que a função seja chamada quando for necessária e não com mais freqüência do que é necessário. Por exemplo, a função que procura todos os pedidos, compra e venda de ordens. É razoável supor que deve ser chamado apenas uma vez por carrapato e não mais do que uma vez. Mas se for chamada no início, nem todas as funções que utilizam estas variáveis retornadas pela função de busca de ordem podem ser passadas por seus parâmetros. Então ainda voltamos às variáveis globais, ou o quê?

 

Favor ajudar a resolver o problema com o limite do valor do turno em iHigh(Symbol(),timeframe,shift), que é limitado ao número 1000.

iTime(Symbol(),timeframe,1001) dá 1970.01.01.01 00:00
 
Como diabos você desliga o alerta ???????? por que depois de pressionar a barra de espaço, ela ?(!%"?:?? continua apitando ??????????
Razão: