Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 396

 
Alexey Viktorov:

A variável string x; não deve ser confundida com o caractere da string "x".

Eu não entendia a tarefa específica. Portanto, não há uma resposta específica.

Talvez seja melhor você pensar em sobrecarregar as funções?

A situação é tal que eu preciso criar uma função universal function_xy onde o programa principal entenderia que o nome da variável string object_xy muda dependendo dos parâmetros passados(..., ..., string x, string y). Caso contrário, mais abaixo o código em function_xy() terei que soletrar manualmente o nome da variável object_xy.
Por exemplo,

void function_xy(..., ..., string x="EURUSD", string y="GBPUSD")
{
...
string object_xy=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
}

Caso contrário, ao criar vários objetos gráficos em function_xy(), terei que atribuir manualmente parâmetros de funções gráficas

void function_xy(..., ...,...)
{
...
string object_EURUSDGBPUSD=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_EURUSDGBPUSD,...,...)
ObjectSet(object_EURUSDGBPUSD,...,...)
ObjectSetText(object_EURUSDGBPUSD,...,...)
...
}

void function_wz(..., ...,...)
{
...
string object_USDCHFUSDJPY=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_USDCHFUSDJPY,...,...)
ObjectSet(object_USDCHFUSDJPY,...,...)
ObjectSetText(object_USDCHFUSDJPY,...,...)
...
}

Existem até 2 centenas de tais funções, você pode de alguma forma reduzir e resolver este problema?
Espero ter expressado meu pensamento.



 
Timur1988:

A situação é tal que eu preciso criar uma função universal function_xy onde o programa principal entende que o nome da variável string object_xy muda dependendo dos parâmetros passados(..., ..., string x, string y). Caso contrário, mais abaixo o código em function_xy() terei que soletrar manualmente o nome da variável object_xy.
Por exemplo,

Caso contrário, ao criar vários objetos gráficos em function_xy(), terei que atribuir manualmente parâmetros de funções gráficas

Existem até 2 centenas de tais funções, você pode de alguma forma reduzir e resolver este problema?
Espero ter expressado meu pensamento.

Tudo o que você precisa fazer é escrever um pedaço de código que formará o nome do objeto dependendo de X e Y, por exemplo, pegue-o de uma matriz como esta: n=10*x+y. Quando x=0 e y=0...9, serão escolhidos os primeiros 10 elementos. Quando x=1 e y=0...9, serão escolhidos os próximos 10 elementos

 
DOCTORGAD: Existe um código para abrir um único comércio com verificações de erro? Exatamente para real, não para teste... Pode como função, apenas um impasse :(

Para que serve verificar os erros - você tem que reagir a eles!!! Como? Imprimir("Erro - ...") - isto só é bom durante a depuração. E mesmo isso seria melhor do que Alert(). Você tem que reagir a um erro através de pausa = atraso. Havia um artigo sobre isso em algum lugar. Mas onde? Se alguém o viu - lembre-me!

 
Timur1988:

A situação é que eu preciso criar uma função universal function_xy, na qual o programa principal entenderia que o nome da variável string object_xy muda dependendo dos parâmetros passados(..., ..., string x, string y). Caso contrário, mais abaixo o código em function_xy() terei que soletrar manualmente o nome da variável object_xy.
Por exemplo,

Caso contrário, ao criar vários objetos gráficos em function_xy(), terei que atribuir manualmente parâmetros de funções gráficas

Existem até 2 centenas de tais funções, você pode de alguma forma reduzir e resolver este problema?
Espero ter expressado meu pensamento.





//+------------------------------------------------------------------+
void OnStart()
  {

   function_xy();

  }
//+------------------------------------------------------------------+x1 x2 x3
void function_xy(string x="EURUSD",string y="GBPUSD")
  {
   string object_xy;
  string c = "object_EURUSDGBPUSD";
//Для начала,  склеим переданные в функцию строковые переменные 

   object_xy=StringConcatenate("object_",x,y);
   
   Alert("object_xy = ",object_xy);
   
// Cравниваем
   if(StringCompare(c,object_xy)==0)
     {
      Alert("       Ура получилось ))))))))");
      Alert("object_EURUSDGBPUSD == object_xy");
     }
//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD 
  }
//+------------------------------------------------------------------+

Se eu o entendi corretamente,

é mais ou menos assim.

 
Ptichka12: Olá, um parêntese bebe sangue de mim, não posso emparelhar (dá um monte de erros de imediato). O parênteses está na primeira linha.

Isso é uma descompilação? Retire-o imediatamente! É proibido aqui!!!! Proibido...

 
Ptichka12:

Olá, um parêntese bebe sangue de mim, não posso emparelhar (dá um monte de erros de imediato). O parênteses está na primeira linha.


Você é avisado por publicar o código descompilado.
 
Artyom Trishkin:
Você foi avisado para a postagem do código descompilado.

Desculpe, não o farei novamente...

 
Alexey Viktorov: tem que ser completamente reescrita. Quem precisa disso?

Obrigado)
Para evitar a reescrita, talvez você possa sobrepor as linhas de tendência nos segmentos que são >=100pts.

Você pode me dizer como definir as coordenadas dos pontos da linha de tendência para traçar desde a calha até o topo do ziguezague -a.

 

Olá!

Há quinze dias estou trabalhando em um roteiro que verificará se os preços na matriz estão agora....

Agora fiquei paralisado enquanto procurava através da matriz. Por alguma razão, não está dando o que se espera.


int start()
{
   while(!IsStopped())
    {    
      double prmas[5] = {11,22,33,44,99}; // Будем проверять каждую цену, есть ли ордер с такой ценой или нет
         for(int ordsel=0; ordsel<=4;ordsel++) {  // Цикл прохода по ценам в массиве
            for(int nmbr = 0; nmbr < OrdersTotal() ;nmbr++) {   // Проверяем каждую цену по всем ордерам
               int os = OrderSelect(nmbr, SELECT_BY_POS, MODE_TRADES); // Выбираем ордер по порядку цикла
               int maspos = ArrayBsearch(prmas,OrderOpenPrice(),5,0,MODE_ASCEND); //Ищем позицию цены в массиве по текущему проверяемому ордеру
               Alert ("Номер в цикле  ", nmbr, " Выбранный ордер  ", os, " Цена из массива ", prmas[maspos]); //Выводим скорбный результат
               Sleep(10000);  
      }
}
     if(!IsExpertEnabled()) break;
    }
return(nmbr);
}

não dá o errado...

mandados:



 
Dimitry-1983:

Olá!

Há uma quinzena que venho tentando inventar um roteiro que verificaria se o preço na matriz está agora....

Agora eu fiquei preso na busca de matrizes. Por alguma razão, isso não nos dá o que esperamos.


Está correto:

ArrayBsearch

Valor retornado

Índice de retorno do primeiro elemento encontrado. Se o valor procurado não for encontrado, ele retorna o índice do elemento mais próximo por valor, entre os quais se encontra o valor procurado.

Você tem os preços do pedido (pedido por tempo de colocação)
o primeiro é 11.00000
o segundo 22.00000
terceiro 0,98020
quarto 0,98004
quinta 33.00000

1, 2 e 5 respectivamente, encontrar corretamente, mas para 2 e 3 o valor mais baixo mais próximo...