[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 80

 
drknn:
Talvez o valor ali termine com um zero e este último zero seja simplesmente descartado no processo de normalização? Descartado porque a entrada 0,1 é equivalente a 0,10 e zero é melhor descartado?

improvável, à mão olhei para o valor da linha no ponto da última barra, não havia zero... e em alguns casos o valor foi exatamente convertido para o 4º dígito, algumas vezes para o 3º. já que o dígito de fuga era >5
 
drknn:


Não funciona (retorna um valor correto para a string, mas a variável está cheia de porcaria, 3 dígitos ou 4.

existe alguma maneira de tirar este valor corretamente da cadeia?

 
NameLess:


Não funciona(( a string retorna um valor correto, mas a variável está cheia de porcaria, 3 dígitos ou 4.

Existe alguma maneira de obter o valor do cordão corretamente?


Você pode fazer uma caixa dll e arredondar nela. Eu tive que fazer tal coisa para simplesmente descartar a parte fracionária de um número. Eu não entendo outra coisa - o código indicador foi projetado para cinco dígitos? Esta pergunta provavelmente só pode ser respondida por um desenvolvedor. Ou simplesmente faça seu próprio indicador.
 
drknn:

Você pode fazer um dll e arredondar nele. Eu tive que fazer isso para simplesmente descartar a parte fracionária de um número. O que não está claro aqui - o código indicador é projetado para cinco dígitos? Esta pergunta provavelmente só pode ser respondida por um desenvolvedor. Ou simplesmente faça seu próprio indicador.

Eu verifiquei o iMA e parece estar tudo bem. Para ser honesto, não sei o que o causa.
 
NameLess:

Eu vi o iMA e parece estar tudo bem. para ser honesto, não entendo porque isso acontece. mas acontece. não tenho idéia do que fazer com dlls, você poderia ao menos me enviar um link para ler?


Eu não tenho idéia de onde obter o link para ler o conteúdo da caixa dll. Ou tente usar MQL4 para colocar valor em string e fazer uma função que pegará apenas X caracteres da string. Por exemplo, preço = 1,25254130 - este valor foi introduzido no cordão. A função deve passar pelos primeiros 7 caracteres e retornar exatamente aqueles - isto é, 1,2525254. Nós apenas introduzimos este valor em um novo fio, fio por fio, como uma gota. Em seguida, convertê-lo para o dobro e devolvê-lo da sub-rotina.

Sobre a dll - veja algo como isto neste fórum https://www.mql5.com/ru/forum/124088

 
drknn:


Isto já é um problema - você precisa pelo menos de um conhecimento superficial de uma linguagem de programação. Ou tente pegar o valor na corda e fazer uma função que retira apenas x caracteres da corda. Por exemplo, preço = 1,25254130 - este valor foi inserido na cadeia. A função deve passar pelos primeiros 7 caracteres e retornar exatamente aqueles - isto é, 1,2525254. Nós apenas introduzimos este valor em um novo fio, fio por fio, como uma gota. Em seguida, convertê-lo para o dobro e devolvê-lo da sub-rotina.

Sobre a dll - veja algo como isto neste fórum https://www.mql5.com/ru/forum/124088


eu sei, não em profundidade, mas não em nenhuma linguagem)))) sim o método é familiar. obrigado pelo conselho. eu nunca lidei com dlls, como nunca fiz programação profissionalmente.

Para ser honesto, estou confuso, porque o problema não é nada lógico, não posso tirar um valor do indicador, ou melhor, posso, mas apenas a um fio.

 

Favor aconselhar como permitir uma única execução de uma condição em uma EA (por exemplo, abrir uma ordem), em vez de repeti-la a cada tique. Neste caso, ao fechar uma posição, a EA não deve abrir uma nova posição. Eu tentei imaginá-lo, mas não funciona como pretendido.

extern bool    BUY         = true;
extern int     Magic       = 0;
extern double  Lot         = 0.1;
extern int     takeprofit  = 0;
extern int     stoploss    = 0;
extern int     slippage    = 3; 
double SL,TP;
int init(){
    return(0);
  }
int start()
{
   if (BUY)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
   }

return(0);
}
void OPENORDER(string ord)
{
int error;
 while (true)
 { error=true;
 if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){BUY = false;}
}
return;
}
Agradeço antecipadamente.


 
nemo811:

Favor aconselhar como permitir uma única execução de uma condição em uma EA (por exemplo, abrir uma ordem), em vez de repeti-la a cada tique. Neste caso, ao fechar uma posição, a EA não deve abrir uma nova posição. Eu tentei imaginá-lo, mas não funciona como pretendido.

Agradeço antecipadamente.



Resolvi este problema colocando uma bandeira na condição antes de qualquer ação (abertura neste caso); dentro da condição, após abrir uma ordem, a bandeira muda seu valor e, respectivamente, no próximo tick o programa não entrará nesta condição com a abertura da ordem. Se o processo for automatizado, então você pode colocar uma função que limpará todas as bandeiras quando não houver posições abertas, caso contrário, a EA só abrirá a ordem uma vez e se apagará, porque a bandeira não mudará seu valor
 
NameLess:

Resolvi este problema colocando uma bandeira na condição antes de qualquer ação (neste caso, abertura), dentro da condição após abrir uma ordem a bandeira muda o valor e, respectivamente, no próximo tick o programa não entrará nesta condição com a abertura de uma ordem. Se o processo é automatizado, então você pode usar uma função que limparia todas as bandeiras no momento da ausência de posições abertas, caso contrário a EA só abrirá a ordem uma vez e depois desaparecerá, porque a bandeira não mudará o valor

Por favor, me dê um exemplo. Estou apenas aprendendo, e ainda não enfrentei a tarefa de hastear uma bandeira. )
 
nemo811:

Por favor, me dê um exemplo. Estou apenas aprendendo, e ainda não enfrentei a tarefa de hastear uma bandeira. )

Não sou um profissional, só estou lhe dizendo como resolvi o problema. Não é um código pequeno e levará mais tempo para descobri-lo do que para ter a idéia do zero))))
Razão: