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

 

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta de novatos sobre MQL4 e MQL5, dicas e discussão sobre algoritmos e códigos

Dmitry Custurov, 2020.08.27 13:10

Saudações.

Tenho a seguinte coisa no MT4:

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

Este código envia um comando para a janela do terminal para iniciar uma EA específica.

Existe funcionalidade similar para o MT5?

Eu tentei desta forma:

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

Não funciona.

Tentei procurar por spy++, mas não há mensagens no MT5 ao contrário do MT4.

Preciso exatamente abrir a janela de configurações do Expert Advisor.


Preciso ser capaz de executar o roteiro através do WinAPI. Existe uma solução para 5?

 
Ei! Pessoal, me ajudem! Não consigo pensar em uma função. O Conselheiro Especialista abre uma posição por dia (entre 00:00 e 23:59), ou seja, um dia, um pedido. A tarefa é encontrar a série de perdas contínuas e exibi-la no registro (usando o comando Print(), para imprimir uma vez). O número de elementos da série é inserido a partir do teclado (por exemplo, se você inseriu 5 do teclado, e a série de 4 dias perdidos, nós a ignoramos --> aguardar a ocorrência de 5 ou mais dias). Uma série é considerada se os dias perdidos forem consecutivos ou as ordens forem fechadas no mesmo dia (elas são abertas uma vez por dia, e as ordens do mercado podem "pendurar" por mais de um dia). Por exemplo, no registro deve haver as seguintes séries de perdas: 01.05, 02.05, 03.05, 04.05, 05.05, 05.05. Condição importante: reconhecer as séries (e, conseqüentemente, enviá-las ao log), que é maior ou igual ao valor inserido a partir do teclado (externo).
//
Pessoalmente, tenho a seguinte idéia:
1. A Fiya preenche o conjunto de ordens perdidas com seus valores de fechamento ( Mass[i] = OrderCloseTime();). Ou seja, a matriz armazena apenas as datas e horários de fechamento dos pedidos perdidos
2. Começamos a comparar o elemento na posição i e na posição i-1 (2 adjacentes)
2.1 Comparamo-los convertendo os dados da célula para o dia do ano ( TimeDayOfYear(Mass[i]) e TimeDayOfYear(Mass[i-1])
2.(Suponha que o primeiro dia perdido = 178, e o anterior = 176 --> nenhuma série, porque não são consecutivos, respectivamente se o primeiro = 178, e o segundo 177 --> temos uma série)
2.3 Com o loop for olhamos todas as células da matriz e comparamos seus vizinhos. Se houver uma série de perdas emelementosvizinhos da matriz--> vamos começar a acelerar até atingirmos onúmeromínimo necessário de dias perdidos para considerá-la como uma série. 2. (se o ponto 1 for cumprido) ANTES da parada da série.
2.4 A SÉRIE PARA --> lembrar o índice do elemento da matriz onde ela terminou e lembrar o número de elementos da série (a série pode ser == OU maior do que o valor inserido pelo teclado)
3.
em nenhum lugar começa o problema da realização--- 3.1 Devemos "recuar" de alguma forma através de séries de dias perdidos, conhecendo a data de cada elemento, traduzir data a partir da data --> string,
3.11 preencher string ( Não sei, talvez através de StringAdd()?), e enviá-la para o arquivo LOG (não milhões de vezes, apenas uma)

Algoritmo de Expert Advisor não é importante, importante é a própria função do usuário

Por amor de Deus, socorro!))
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Arquivos anexados:
 

Olá.
É necessário obter aconselhamento sobre um algoritmo.
Estou tentando formar a seguinte exigência antes de processar um bloco de pedidos em aberto:

Se já existem ordens de compra/venda e o preço de abertura da última ordem é menor em X pontos do que o preço atual, então ignore as ordens em bloco/não abertas.

Por favor, informe - quais são as opções de implementação no código?

 

Alguém mediu para mt 5 a partir do momento em que uma ordem é enviada para abrir uma posição até que ela realmente apareça, quanto tempo pode levar?

Estou mais interessado se uma ordem é enviada e uma negociação é aconselhada, desde o momento em que a ordem é enviada até que as negociações apareçam, quanto tempo pode demorar ?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c]

Solução engraçada))))

 
Vladimir Baskakov:
A MQ está planejando adicionar indicadores personalizados à plataforma móvel?

A julgar pelas respostas sobre o novo terminal móvel, não num futuro próximo. Somente canetas.

 
Valeriy Yastremskiy:

Solução engraçada))))

Bem, se os coeficientes são conhecidos de antemão, por que calculá-los? )))

 
Сергей Таболин:

Bem, se os coeficientes são conhecidos de antemão, por que calculá-los? )))

É mais universal se você os calcular.

 

Colegas, bom dia para todos - intuitivamente compreendo a solução, gostaria de ouvir de vocês.

Qual é a melhor maneira de alocar partes do lote para seu posterior fechamento (fechamento parcial do lote Total - em partes - 5 unidades de peças).

No meu entendimento, por exemplo, o lote 2,58. Eu divido por 5, o resultado é 0,51 lote para fechar 4 partes e a quinta parte é 0,54 lote.

Qual é a melhor maneira de representar isso no código? Que função matemática leva o restante da divisão a levar 0,54 para fechar?

 
Roman Shiredchenko:

Colegas, bom dia para todos - intuitivamente compreendo a solução, gostaria de ouvir de vocês.

Qual é a melhor maneira de alocar partes do lote para seu posterior fechamento (fechamento parcial do lote Total - em partes - 5 unidades de peças).

No meu entendimento, por exemplo, o lote 2,58. Eu divido por 5, o resultado é 0,51 lote para fechar 4 partes e a quinta parte é 0,54 lote.

Qual é a melhor maneira de representar isso no código? Que função leva o restante da divisão a levar 0,54 para fechar?

Que tal ler a documentação?