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

 
a1 = OrderTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());

}

Aqui está um script simples como este deve apagar todas as ordens pendentes, mas ele apaga exatamente metade das ordens ... ???

 
        
FAQ 04.03.2011 12:56 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));
Estava no FAQ, passei por ele nas primeiras vezes e não notei.
 
Neo333:
a1 = OrderTotal();
para (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket();

}

Este script simples deve apagar todas as ordens pendentes, mas apaga exatamente metade delas ... ???

Digamos que houve 10 pedidos.

Aqui você eliminou metade (zero a cinco)

agora você quer selecionar o sexto... e só restam 5. Há um erro e não há nada para apagar. É o mesmo com os outros.

 
Neo333:
a1 = OrderTotal();
para (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket();

}

Este script simples deve apagar todas as ordens pendentes, mas apaga exatamente metade das ordens ... ???

Mude a direção da busca de pedidos:

para (i=a1-1; i>=0; i--) {....}

 
artmedia70:

Mudar a direção da enumeração do pedido:

para (i=a1-1; i>=0; i--) {....}

Trabalha ... mas qual é a lógica - que diferença faz i++ ou i-- ???
 
Zhunko:

1. Você já verificou?

Relatório: Ajudou, mas parece estar com falhas.

Primeiro terminal. Removidos todos os gráficos e símbolos, acrescentados símbolos de 7 dólares, acrescentados gráficos. Todos com recargas.

Esticou o relógio para 3/4 da tela. Preenchidos os primeiros 6, o 7° ficou com até 5 quadrados.

Após o próximo reinício, nem tudo está completamente preenchido, a distribuição é quase aleatória - quanto mais baixo o símbolo na lista, menos células ele recebe.

O segundo terminal. Havia 7 pares de ienes sobre ele. Removidos caracteres extras, reiniciados - eles se enchem muito mais profundamente, mas a profundidade de enchimento acabou sendo distribuída aleatoriamente.

Eu me inclino ao fato de que isto é um bug por causa do pequeno cache - simplesmente não é suficiente para todos, enquanto a distribuição é aleatória ou "primeiro a chegar, primeiro a ser servido".

Em qualquer caso, para uma moeda, o método funciona. Resumo: receita para o fato :) Obrigado.

 
Neo333:
Funciona ... Mas qual é a lógica - que diferença faz i++ ou i-- ???

Você já foi informado qual é a razão. Não se trata de i++ ou i--, trata-se de qual final da lista você começa a excluir pedidos - o início da lista (como você fez) ou o final da lista (como você precisa fazer neste caso).

Para entender o que acontece quando as ordens são eliminadas, é preciso saber e entender como as ordens são armazenadas na matriz.

Quando você elimina a primeira ordem primeiro (é indexada por i=0), os índices de todas as ordens são deslocados na matriz - a primeira ordem torna-se nula, a segunda torna-se a primeira, a terceira torna-se a segunda e assim por diante. É por isso que todos os pedidos não são completamente eliminados - na verdade, quando eu me torno 6, o sexto pedido é deslocado para a quinta posição na matriz de pedidos e o pedido simplesmente não é selecionado pelo índice 6.

Quando você elimina ordens do final da lista, o turno não acontecerá - a primeira ordem tem uma posição zero na lista, e continuará a tê-la. A 10ª ordem tinha a posição 9, foi excluída, depois a 9ª ordem, que tem uma posição 8 na lista é excluída, e assim por diante, até a primeira ordem com uma posição zero no conjunto de ordens.

 
Neo333:
Obras .... mas qual é a lógica - que diferença isso faz i++ ou i-- ???
você já foi respondido por um usuário
152
ilunga a esta pergunta
 
nadya:
você já foi respondido por um usuário
152
ilunga a esta pergunta
Algo me disse que eu deveria tê-lo mastigado e dado uma resposta mais detalhada. :)
 
Zhunko:
... abrir o horário de forma autônoma.
O resto dos gráficos são "tique-taque". Não é uma opção.
Razão: