[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 776

 
vasya_vasya:
criando um objeto errow onde você seleciona o código do símbolo ou usando um objeto de etiqueta

Obrigado) Eh, é uma pena que não haja pontos(
 
FoxUA:
Não sou um trabalhador, mas estou tentando escrever um consultor especializado para a semana em que estou trabalhando. Estou tentando escrever um EA para um trabalho, mas aprendi mais do que seu nome e aplicação há apenas uma semana, Não sei para que serve, mas achei difícil desmontar as coisas sem saber para que servem, então decidi tentar fazer algo novo, mas é claro que você não pode ver tudo, só fiz a única coisa que queria fazer - tirar a ORDEM REMOTA pelo preço REMOTO e é uma coisa sem cérebro. MAS OBRIGADO POR SEU TEMPO,

Sem ofensa. Seu código é complicado para um iniciante. Você tem que ir do simples ao complexo. Deve haver uma abordagem sistemática do aprendizado, caso contrário, não servirá de nada.
 
Posso usar o mql4 para descobrir o número da barra ou qualquer parâmetro de preço desta barra que não esteja no período atual do gráfico, se a hora de sua abertura (desta barra) for conhecida?
 
drknn:

Não fique ofendido. Seu código é complicado para um iniciante. Você tem que ir do simples ao complexo. Você deve ter uma abordagem sistemática da aprendizagem, caso contrário, não haverá utilidade.

Quanto à complexidade, o que não é tão complicado e simples com o robô comercial de amostra? Não estou fazendo uma grande EA com cálculos complicados, mas uma simples que abre o mercado, caneta, modifica e apaga o quadro inteiro para aprender a operação e os métodos de afetar o outro!
 
FoxUA:

Quanto à complexidade, o que você acha que é simples e fácil de construir? Não estou fazendo um grande EA com cálculos e indicadores complexos, mas um simples que abre um de mercado, depois modifica e elimina o quadro inteiro para aprender o princípio de trabalho e os métodos de afetar o outro!


Mudar a lógica de construção do código e a lógica de nomeação de variáveis. Esta é a primeira coisa que você deve fazer. Não há problema se um nome variável for maior que 5 caracteres. Na luta pela clareza do código, a clareza dos nomes, delimitando blocos com espaços, sinais de parágrafo e comentários, é muito importante. Quanto mais você aprender um idioma (e não apenas MQL), mais complicado se tornará seu código. Se você não tem o hábito de dar nomes de variáveis fáceis de ler, e se não tem o hábito de organizar o código em blocos (com explicações), mais cedo ou mais tarde você criará um código onde lhe será difícil encontrar o erro lógico, amaldiçoando-se por tornar seu código tão ilegível.

Se o código que você mostrou não lhe parece complicado como um iniciante, isso é apenas uma vantagem para você.

 
FoxUA:
bem, o que você recomenda? eu estaria muito interessado em sua opinião!

Aqui está um exemplo de código que está organizado em blocos e onde os nomes das variáveis não causam dúvidas quanto ao porquê de uma determinada variável ser aplicada - veja seus nomes, os comentários aos blocos...

 
RekkeR:
Boa noite a todos e tenham uma boa semana pela frente. Acho que estou sendo burro com o calor, na verdade a questão é como determinar a distância entre as linhas em pips?

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Distância=(Price1-Price2)/Ponto;

Isto se for necessário determinar a distância entre duas linhas no momento atual.

 
drknn:

Aqui está um exemplo de código que está organizado em blocos e no qual os nomes das variáveis não causam dúvidas sobre por que esta ou aquela variável é aplicada - veja seus nomes, os comentários aos blocos...

Concordo com o fato de que às vezes é preciso lembrar o que se queria escrever ali e não lembrar, mas é mais um método de trabalho, mas não um estudo, é o pincel nas mãos de um artista, e estou interessado na escolha de cores e técnicas para escrever uma pequena imagem simples, pois já tenho uma paisagem e ela é claramente moldada, então eu estava me perguntando se é possível ter em mãos um livro interessante descrevendo técnica de escrita para em tudo o mesmo na internet e no livro didático, apenas em outras palavras e o que você escreveu sobre o exemplo das raízes, é uma técnica de robótica então eu ficaria feliz em ler se os exemplos e imagens!

 
tara:

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Distância=(Price1-Price2)/Ponto;

Isto se for necessário determinar a distância entre duas linhas no momento atual.

Existem várias linhas horizontais, preciso determinar as cotas entre elas em diferentes combinações, em princípio, nesta fase estou bastante satisfeito com a determinação entre as duas linhas, o resto farei manualmente. Talvez exista um roteiro pronto ou tal indicador? Obrigado por seu feedback.
 
FoxUA:

...

esse é o tipo de coisa que eu adoraria ler com exemplos e fotos!

Bem, vamos fazer uma experiência! Vamos escrever dois roteiros. Um deles conterá uma descrição correta da função. A outra conterá a errada. Portanto, este é o roteiro certo:

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы правильного скрипта                 |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("---- Правильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

E este é o roteiro errado:

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы неправильного скрипта               |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("----НЕправильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue=36){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

É incorreto porque a linha duplica MyKoren(duplo MyValue=36){ inicializa a variável MyValue com valor = 36. Não faz sentido porque passamos valor = à variável DlyaKornya para a sub-rotina .

Agora lançamos os dois roteiros sequencialmente no gráfico. Eis o que vemos:

Infelizmente, os dois roteiros produziram o mesmo resultado.

O segundo roteiro (incorreto) deveria ter produzido valor = 6. O compilador provavelmente tem uma característica infalível incorporada desde o duplo MyKoren(duplo MyValue=36){ linha não tem sentido. A inicialização da variável nela contida com valor =36 provavelmente só funcionará se a função for chamada sem especificar parâmetros. Em nosso caso, deve ter acontecido o seguinte - ao chamar a subrotina, a variável MyValue duplo foi declarada primeiro, depois foi-lhe atribuído o valor = 36 e somente depois o valor armazenado na variável DlyaKornya. Não consigo pensar em nenhuma outra explicação.

De qualquer forma, é melhor não usar construções como o duplo MyKoren(duplo MyValue=36){, mas escrevê-lo como deve ser - duplo MyKoren(duplo MyValue){, caso contrário você vai se perguntar por que o subprograma não funciona como deveria.

Razão: