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

 
Alexey Viktorov:

A questão parece ser sobre o MT5. A resposta é: Não programática. A questão pode ser encerrada.

Obrigado

 

Boa tarde a todos, como prometido, estou de volta para mais tutorialsЈ ;-) É claro que tenho a máquina de grafite funcionando, mas tem sido lento nos testes, por isso tenho procurado maneiras de executar o código dentro dela, apenas quando uma nova barra chega. Encontrei a seguinte opção. No nível global, uma variável é definida

int intBars;// ГЛОБАЛЬНО ОПРЕДЕЛЁННАЯ ПЕРЕМЕННАЯ ДЛЯ ОПРЕДЕЛЕНИЯ НАСТУПЛЕНИЯ

Depois escrevi uma função que verifica se ocorreu uma nova barra - esta é uma obra-prima


bool f_IsNewBar()
{
   if(intBars != Bars) 
   {
      intBars = Bars;
      return(true);
   } 
return(false);
}

Quando encontrei esta variante, eles disseram que eu deveria criar uma função com toda a lógica do bastão. Eu não gosto desta abordagem com funções, francamente falando, então eu apenas verifico se há uma nova barra e se for verdade, eu executarei o código na barra. De forma simplificada - sem nenhum trabalho real, parece ser assim

void OnTick()
{//НАЧАЛО ОН ТИК
   // если появился новый бар:
   if(f_IsNewBar()) // ЕСЛИ ПОЯВИЛСЯ НОВЫЙ БАР
    {// ВЫПОЛНЯЕМ ВЕСЬ КОД В ОН ТИК
/*
МНОГО МНОГО СЕКРЕТНОГО ГРААЛЬНОГО КОДА😃😃😃
*/

    }
}// КОНЕЦ ОН ТИК

Eu tenho uma pergunta diferente. O graal, naturalmente, trabalhará no caso real. Então, esta verificação deve ser removida na versão do graal que não será testada no testador, mas será executada no tick real, para que a EA opere em cada tick, ou devemos deixar esta verificação para o tick real também? Se esta verificação também estiver incluída na versão de conta real, como devemos planejar uma segunda tentativa de abrir pedidos se eles não foram abertos na primeira vez?

 
DanilaMactep:

Boa tarde a todos, como prometido, estou de volta para mais tutorialsЈ ;-) É claro que tenho a máquina de grafite funcionando, mas tem sido lento nos testes, por isso tenho procurado maneiras de executar o código dentro dela, apenas quando uma nova barra chega. Encontrei a seguinte opção. No nível global, uma variável é definida

Depois escrevi uma função que verifica se ocorreu uma nova barra - esta é uma obra-prima


Quando encontrei esta variante, eles disseram que eu deveria criar uma função com toda a lógica do bastão. Eu não gosto desta abordagem com funções, francamente falando, então eu apenas verifico se há uma nova barra e se for verdade, eu executarei o código na barra. De forma simplificada - sem nenhum trabalho real, parece ser assim

Eu tenho uma pergunta diferente. O graal, naturalmente, trabalhará no caso real. Então, na versão do graal que não será testada no testador, mas funcionará na conta real, devemos remover esta verificação para fazer a EA funcionar em cada tic ou devemos deixá-la para a conta real também? Se esta verificação também estiver incluída na versão de conta real, como devemos planejar uma segunda tentativa de abrir pedidos se eles não foram abertos na primeira vez?

Se forem feitos cálculos sobre valores de barra de OPT, HIGH, LOW, CLOSE, não precisamos contar com cada carrapato. Mas é correto monitorar o preço em cada carrapato. Isto deve ser cálculos separados ou verificações de condições.

O novo bar também é rastreado pelo tempo de abertura da barra zero.

FlagNewBar=false;   // глобальная или статик булева переменная
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];
      FlagNewBar=true;
     }
 
Artyom Trishkin:

Nesta linha eu quero começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este blog será um bom lugar para discutir tarefas, algoritmos de sua solução e quaisquer outras questões relativas à programação MT de uma forma ou de outra.

Espero que outros membros experientes do nosso fórum se juntem à discussão e que a filial seja interessante para todos.

MQL4 Tarefas: Determinar o número de posição de uma letra maiúscula em uma cadeia. Obrigado.

 
Mikhail Nazarenko:

Tarefa MQL4: Determinar o número de posição de uma letra maiúscula em uma cadeia. Obrigado.

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   pos=StringFind(uppercase,StringSubstr(str,i,1));
   if(pos>=0) break;
   }
printf(pos);
 
Aleksei Stepanenko:

Obrigado.

 
Mikhail Nazarenko:

Obrigado.

Errado, não é o resultado StringFind que queremos, é o i.

Certo:

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   if(StringFind(uppercase,StringSubstr(str,i,1))>=0)
      {
      pos=i;
      break;
      }
   }
printf(pos);
 
Mikhail Nazarenko:

Tarefa MQL4: Determinar o número de posição de uma letra maiúscula em uma cadeia. Obrigado.

Você pode usar StringGetCharacter() O caractere "A" é 65 e "a" é 32 a mais - 97. E assim são todos os personagens. Portanto, se um código de caracteres é > 90 e <= 122, é um caractere latino minúsculo. Os caracteres cirílicos também diferem por 32

 
Alexey Viktorov:

Você pode

Exatamente, uma boa opção.

 
Olá. Como faço para fazer uma conta de liderança aqui?
Razão: