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

 

Eu tenho que trocar o stop loss em pips para parar a perda no candelabro anterior.

Aqui está o código, como colocá-lo aqui.

Muito obrigado quem dá gorjetas.

double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
Arquivos anexados:
 

Pessoal do Pro, por favor, avisem: comprei um EA ($300) através de um site e o instalei de acordo com as instruções do vendedor, mas quando o testei no histórico da conta, ou mostrava lucro e perda zero ou indicava que algo estava errado (embora, mais uma vez, o tenha instalado estritamente de acordo com as instruções). A propósito, após a instalação, o Expert Advisor estava cinza entre seus livres, como se estivesse inativo. Todas as outras eram coloridas: rostos amarelos com um chapéu azul. Eu mudei o consultor especializado para uma conta de demonstração. Tudo como deve ser: cara sorridente, computador ligado. Eu reclamei para o vendedor e ele me escreveu: "1) A cor cinza é código fechado, não o código fonte .2) meu consultor especializado não negocia com freqüência, portanto é só esperar o sinal". Vocês podem me dizer se eu devo esperar? Isto é possível ou é um esquema estúpido?

 
vpogarcev:

Eu reclamei com o vendedor e ele me escreveu: "1) a cor cinza é código fechado, não o código fonte .2) O Expert Advisor não negocia com freqüência, portanto, basta esperar o sinal". Vocês podem me dizer se eu devo esperar? É mesmo possível ou é um esquema estúpido?


1) Sim, a EA é cinza, pois não há código fonte;

Quem sabe se vale a pena esperar? Os médiuns estão de férias.

 
vpogarcev:

Pessoal do Pro, por favor, avisem: comprei um EA ($300) através de um site e o instalei de acordo com as instruções do vendedor, mas quando o testei no histórico da conta, ou mostrava lucro e perda zero ou indicava que algo estava errado (embora, mais uma vez, o tenha instalado estritamente de acordo com as instruções). A propósito, após a instalação, o Expert Advisor estava cinza entre seus pares livres, como se estivesse inativo. Todas as outras eram coloridas: rostos amarelos com um chapéu azul. Eu mudei o consultor especializado para uma conta de demonstração. Tudo como deve ser: cara sorridente, computador ligado. Eu reclamei para o vendedor e ele me escreveu: "1) A cor cinza é código fechado, não o código fonte .2) meu consultor especializado não negocia com freqüência, portanto é só esperar o sinal". Vocês podem me dizer se eu devo esperar? Isto é possível ou é um esquema estúpido?


Na melhor das hipóteses, você pode ter sido vendido um EA que logo deixará de ganhar dinheiro.
 
FAQ:


Certo, neste caso quando você apaga, por exemplo, 18 objetos, 19 torna-se seu lugar, 19=>18, ou seja, você obtém automaticamente uma iteração reversa. Use isto também para pedidos.

Além disso, como a lista de objetos e ordens são formalmente matrizes a partir de = 0, o índice máximo será um a menos do que o tamanho da matriz:

Seu último pensamento me levou às seguintes considerações... Suponha que tenhamos uma função deinit() da seguinte forma:

int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete(Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --

Suponha que haja apenas 3 objetos no terminal do cliente, dos quais o 1º e 2º correspondem às condições de eliminação definidas na função deinit(). Correspondentemente, eles serão indexados 0 e 1 de forma correspondente. Então, na primeira iteração, a variável k tomará o valor 0 e a função ObjectDelete(0) removerá o objeto correspondente. Além disso, como a lista de objetos é formalmente um array, após excluir um dos objetos, os objetos restantes serão reindexados (algo como formar uma nova barra e reindexar todas as barras que estão atualmente presentes no terminal do cliente): então o objeto que foi indexado número 1 (o objeto que também deve ser excluído por convenção) terá índice 0, e o objeto que tinha índice 2 terá índice 1. Após a eliminação do objeto número 0 na primeira iteração, o controle será dado à cadeia

for(int k=0; k<Quant_Objects; k++)

para executar a expressão k+++. A variável k receberá o valor 1 e como o valor da variável Quant_Objects é 3, as condições do operador for (k<Quant_Objects) são verdadeiras e a 2ª iteração será executada. Mas nesta iteração não haverá eliminação de objeto porque o objeto com índice 1 (anteriormente 2) não satisfaz as condições de eliminação. Mas acontece que desde que a reindexação dos objetos ocorreu após a remoção do primeiro objeto, o segundo objeto (que também por condição deveria ter sido removido) "pulou" a operação de remoção, pois no momento em que a variável k era igual a 1, o índice daquele objeto foi reindexado e tornou-se 0. Isto é o que significava a frase "note separadamente que você não pode excluir objetos no primeiro para loop, porque neste caso, após cada exclusão, o número total de objetos e sua numeração mudará, portanto, alguns nomes de objetos serão pulados".

Acertei ou há algum erro em meu pensamento?

Nota: a função deinit() refere-se à frase "note separadamente que não devemos excluir objetos no primeiro para loop, porque neste caso, após cada exclusão, o número total de objetos e sua numeração será alterada, de modo que alguns nomes de objetos serão pulados":

//--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[1];                 // Объявление массива
   int Quant_Del=0;                    // Количество удаляемых объекто
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
        {                              // .. начинающийся с Paint_
         Quant_Del=Quant_Del+1;        // Колич имён к удалению
         Name_Del[Quant_Del-1]=Obj_Name;//Запоминаем имя удаляемого
        }
     }
   for(int i=0; i<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
      ObjectDelete(Name_Del[i]);       // .. имеющимися в массиве
   return;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --

P.S. Obrigado antecipadamente por sua resposta.

 
7777877:

Seu último pensamento me levou às seguintes considerações... Suponha que tenhamos uma função deinit() do seguinte tipo:

Será que acertei ou me enganei em algum lugar em meu raciocínio?


Você acertou.

Em geral, é melhor usar a redução do índice em loops onde ocorre a eliminação:

int deinit()                           // Спец. функция deinit()
  {
   for(int k=ObjectsTotal()-1; k>=0; k--)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
         ObjectDelete(Obj_Name);
     }
   return;                             // Выход из deinit()
  }
 
sim
 

Cavalheiros, usando OrderSelect(), você pode facilmente encontrar o preço de abertura de um pedido. Podemos usar as cotações no gráfico para descobrir se existe um pedido a um determinado preço ou nada neste momento? É muito aborrecido olhar todos os pedidos em cada cotação no gráfico (especialmente se houver muitos) para descobrir se há ou não algo com este preço. Você pode me atirar o código se ele existir?

 
rosomah:

Senhores, usando OrderSelect(), podemos facilmente encontrar o preço de abertura do pedido. Podemos usar as cotações no gráfico para descobrir se existe um pedido a um determinado preço ou nada neste momento? É muito aborrecido olhar todos os pedidos em cada cotação no gráfico (especialmente se houver muitos) para descobrir se há ou não algo com este preço. Você pode me atirar o código se ele existir?

É desconfortável colocar as calças sobre sua cabeça © As pessoas dizem.

Não é você que está passando pelas moções, é o algoritmo. Se você é tão indigente, você pode transformar tudo isso em uma única função que lhe dará os resultados que você precisa sob demanda. Mas no corpo da função você ainda tem que escrever um código que irá procurar posições uma a uma.

 
Reshetov:

Não há como. Somente através de looping um a um com OrderSelect().

Você pode me dizer como calcular o volume total de todos os pedidos (lotes), percorrendo cada pedido em um loop usando OrderSelect()?