[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 545

 
Lonely_man:

Boa tarde. Você pode me aconselhar - a tarefa é traçar linhas verticais a cada minuto. Como vincular o desenho não apenas à ata, mas ao preço de abertura da ata. A dificuldade é que o preço de abertura do minuto deve ser identificado em tempo não-padrão, ou seja, não um minuto. Eu escrevi um trecho de código, mas não entendo como inserir o preço de abertura do minuto, se a variável induzida será definida para um tempo não-padrão

new_Minute=TimeMinute(Time[i]) != TimeMinute(Time[i+1]); // new_Minute

Ind_Buffer_0[i]=0

if(new_Minute && Period()<30 ) Ind_Buffer_0[i]=max;

...e depois o desenho padrão usando objetos.

Talvez alguém possa me dizer o que, se algo, pode ser feito.

A linha vertical não tem coordenada - preço.
 
paladin80:
Enquanto isso, devemos estabelecer uma condição que possa aceitar pelo menos dois valores, por exemplo, bandeira (verdadeira ou falsa). Se for uma constante (verdadeira) e não uma condição, então enquanto não for necessária. Remova enquanto (true) e parênteses e você obterá o mesmo resultado.


Se você remover a declaração de enquanto, então como a declaração continuará a funcionar?

Afinal de contas, em caso de erro, precisamos verificar novamente as condições e abrir pedidos.

 if (Fun_Error(GetLastError())==1)      // Обработка ошибок
 continue;                              // Повторная попытка
 return;                                // Выход из start()

A declaração contínua transfere o controle para o início da declaração externa mais próxima enquanto ou para declaração, causando o início da próxima iteração.

Talvez eu não entenda alguma coisa?

 

Boa tarde.

Tenho uma estratégia comercial formada para abrir ordens pendentes em uma penúltima barra já formada [número 1]. Ou seja, abre posições (ordens pendentes de compra e venda) e elas serão acionadas se o preço se mover 20 pips além do máximo/mínimo da faixa de preço da 1ª barra (Preço de abertura).

Há também uma eliminação automática de ordens pendentes que não tenham sido acionadas, com base no seguinte: Se uma nova barra chamada 1 tiver sido formada, o preço aberto de uma ordem pendente não coincidirá com o máximo/máximo da nova barra atual 1 +/- 20 pips (muito provavelmente, porque máximas/mínimas de duas barras adjacentes raramente coincidem).

Mas por alguma razão acontece que primeiro abrirá as duas posições, mas em poucos segundos fechará uma delas (embora a nova barra número 1 ainda não tenha se formado).

Senhores especialistas, sou um principiante e talvez não esteja levando em conta algumas sutilezas. Pode me dizer onde o erro é possível?

 RefreshRates();
for(int n=1;n<=OrdersTotal();n++)            //цикл перебора всех имеющихся ордеров
{
  if(OrderSelect(n-1,SELECT_BY_POS)==true)   //если найден ордер, то...
  {
    if((OrderType()==4)&& (OrderOpenPrice()!= High[1]+20*Point))                      // проверяем его тип (buystop/sellstop), если его тип buystop и цена покупки не совпадает с максимумом текущего 1-го бара, то..
      {
          OrderDelete(OrderTicket());                                                  // удаляем его
         
       }
    if((OrderType()==5) && (OrderOpenPrice()!= Low[1]-20*Point))                       // если его тип sellstop и цена продажи не совпадает с минимумом текущего 1-го бара, то ...
    {      
           
            OrderDelete(OrderTicket());                                                //удаляем его
         
    }
  }
}
Arquivos anexados:
 

Ao comparar números fracionários, eles devem ser normalizados com um dígito significativo.

Ao apagar as ordens, faça uma contagem regressiva a partir do final, não do início.

 
... isso mesmo,- e também - proibir o especialista de trabalhar até que um novo bar tenha sido formado.
 
Pacman:


Se você remover a declaração de enquanto, como a declaração continuará a funcionar?

Afinal de contas, em caso de erro, precisamos verificar novamente as condições e abrir pedidos.

A declaração contínua transfere o controle para o início da declaração externa mais próxima enquanto ou para declaração, causando o início da próxima iteração.

Talvez eu não entenda alguma coisa?

Não se preocupe, enquanto as declarações (verdadeiras) são muito freqüentemente usadas quando não se conhece o número de iterações, nem as condições para a terminação do loop.

É por isso que sua terminação, digamos, quando muitas condições aninhadas no laço dado são cumpridas, é terminada pelo operador do rompimento.

Ou então, há corujas (por exemplo, mcllts) que funcionam não por um tique e, portanto, não com a função de partida, mas continuamente e em loop em uma base contínua usando o operadorwhile(true).

 
Equilibrium:
Olá, bom dia, por favor me ajude, não posso depurar meu consultor especializado (as ordens de abertura e fechamento não funcionam como esperado (atravessando um estocástico cada vez), abrem em estocástico muito raramente e não consigo entender porque ((((), também todas as ordens são fechadas somente em estocástico ou takeprofit (erro no número do bilhete, também não consigo entender onde o erro ocorreu). obrigado por qualquer resposta:

O erro de Ticket é mais provável porque sua variável Ticket é inicializada duas vezes - no início e na função

Tente outro nome na função, pelo menosTicket1 :)

 
Você pode me dizer como descobrir o preço da linha de tendência em cada barra?
 
sss2019:
Você pode me dizer como descobrir o preço da linha de tendência em cada uma das barras?

ObjectGetValueByShift().
 
Equilibrium:
Bom dia! Por favor, ajude-me, não consigo afinar meu Consultor Especialista (abertura e fechamento de pedidos não funciona por critério como deveria (atravessando estocástico toda vez), abre por estocástico muito raramente e não consigo entender porque), também todos os pedidos fecham apenas por estocástico ou takeprofit (erro no número do bilhete, também não consigo entender onde está o erro). obrigado por qualquer resposta:


Se uma variável é declarada globalmente não precisa mais ser passada para suas próprias funções, basta usar as variáveis Ticket e Ans, elas serão visíveis nas funções.

Você escreve nos comentários que M_1 e S_1 são a primeira barra, e na função iStochastic() você extrai o valor para eles na barra zero. Se você realmente precisa de dados sobre a barra de zero, então primeiro verifique se há ordens de fechamento e depois, se você vai trabalhar com uma ordem, saia por condição: se(Total > 0) retornar; e somente então uma condição para a abertura de um novo pedido. Se você está planejando trabalhar com grandes TFs, então seria melhor substituir a condição de saída pela seguinte: se a ordem for aberta na barra atual, nada de novo é aberto na barra atual ainda. Caso contrário, no H4, uma ordem pode abrir em uma barra várias vezes e acionar uma parada de perda em uma condição.

Eis o que está acontecendo no momento: a barra principal cruzou o sinal, por exemplo, para cima, a ordem de compra é aberta. No próximo tick, a condição é salva, mas você tem Total mais que zero e a condição de fechamento tenta acionar, e você tenta usar sua função Close_Order_S() para fechar a posição de Compra ao preço de Pedido. Fazer uma verificação do tipo de pedido e uma função para fechá-lo, passar Ask ou Bid em parâmetros, dependendo do tipo de pedido.