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

 

Prezados conhecedores!

Espero estar fazendo uma pergunta no ramo certo!

A questão é: é possível usar #define para definir uma construção que se desdobraria no seguinte código:

if(a) printf("%s(%04d)", __FUNÇÃO__, __LINHA__) +printf("%s", _Símbolo);

Isto é para entender... A construção correta poderia ser diferente. Idealmente, eu gostaria de encontrar uma solução para que qualquer impressão() no início da cadeia de saída imprima com a "Função(cadeia em função)" construída antes da cadeia quando a condição corresponder. Tudo isso para encurtar as instruções escritas

E eu gostaria que a construção destacada em vermelho fosse substituída pela seguinte (semelhante):

#define P(a) if(variable>==a) printf("%s(%04d)", __FUNÇÃO__, __LINHA__)

Encontrei algo no Inet, um pouco parecido, mas não trabalhei com aulas, portanto ainda não consigo trabalhar com os códigos de trabalho. Eu tentei aplicar a construção inferior na forma

P(3)+printf("%s(%s) Accuracy=%d", Símbolo, (Command==0? "Buy": "Sell": "Sell"), Accuracy);

Mas qualquer entrada desse tipo no código causa o erro 'Imprimir' - expressão do tipo 'vazio' é ilegal ...

 

Olá!

Por favor, explique a diferença entre

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}

и

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==falso){PrintFormat("OrderSelect error %d",GetLastError());return;}

obrigado!

 
ski1973:

Olá!

Por favor, explique a diferença entre

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}

и

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==falso){PrintFormat("OrderSelect error %d",GetLastError());return;}

obrigado!

Não há diferença lógica. A diferença está apenas na forma como esta comparação lógica é escrita.

O sinal "!" é "NÃO". Isto é, if(!Select()) é o mesmo que if(Select()==falso). Em russo, parece assim: if(NOT Select()).

Você pode rapidamente "inverter" o valor de uma variável booleana:

bool var = true;
Print("1. var=",(string)var);
var=!var;
Print("2. var=",(string)var);
 

Tenho outra pergunta. O seguinte é um exemplo de um programa.

Lotes duplos=0,01;

int slippage=30;

int Subr1()

{

int resultado=-1;

int_result=OrderSend(_símbolo,OP_BUY,Lots,slippage,0,0));

if(int_res<0){PrintFormat("OrderSend error = ",GetError());}

retornar int_resultado;

}

nulo OnTick()

{

int numer=-10;
if(OrdersTotal()==0)numer=Subr1();

if(OrdersTotal()>0)Subr2(numer);

retornar;

}

nulo Subr2(int order)

{

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket()));

}

Resposta: OrderSelect error 4051. Se eu o substituir por SELECT_BY_POS, erro OrderSelect 1. A reação é a mesma para o testador de estratégia e o "correr sobre dados reais". Eu tentei remover MODE_TRADES para o caso de SELECT_BY_TICKET: Não há diferença. Qual é o problema e como resolvê-lo. Obrigado!

 
ski1973:

Resposta: OrderSelect error 4051. Se eu o substituir por SELECT_BY_POS, erro OrderSelect 1. A reação é a mesma para o testador de estratégia e "correr com base em dados reais". Eu tentei remover MODE_TRADES para o caso de SELECT_BY_TICKET: Não há diferença. Qual é o problema e como resolvê-lo? Obrigado!

SELECT_BY_POS é a seleção de um pedido "por prioridade" na lista de pedidos e em seu projeto:

void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());
}

Você está tentando selecionar uma ordem que é por ordem de fila # ... e você está usando o bilhete # aqui e só tem 1 pedido e bilhete # 10023444 .... então o que ? aqui você precisa de um número de 1 a 2,3 ... bem, quantas ordens você tem no mercado,... corrigiu o número de 0,1,2 ... - A numeração começa com 0 e vai atéOrderTotal()-1...

SELECT_BY_TICKET deve funcionar, mas somente até o momento em que você tiver o número do bilhete, ou seja, a ordem que você tem no mercado, e acima você tem um cheque para envio da ordem, e se a ordem não for enviada, o bilhete = -1 !

E em resumo, seu projeto para trabalhar com pedidos não está correto. Se você decidiu estudar MQL, aqui estão exemplos prontos para trabalhar com pedidoshttps://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Vitaly Muzichenko:

Você fala de arrays e fala de forex. Que paradoxo!

E um tolo sabe que todas as matrizes básicas em MT4/MT4 são tamponadas.

Não é o mesmo nível de programadores no MT4/MT5, para permitir que os usuários trabalhem com arrays básicos.

Além disso, as matrizes básicas em MT4/MT5 têm sua própria extensão (.hts ou .hss - não me lembro exatamente, mas algo assim).

Portanto, eles não chegam ao terminal em formato de texto (com extensão .txt), mas em seu próprio formato.

E no MT4/MT5 as matrizes básicas são decodificadas e convertidas em matrizes de prazos selecionados (1 minuto, 5 minutos, 15 minutos, etc.), e somente depois disso são duplicadas e tamponadas.

Por que eles são tamponados?

Para comparação. Para que nenhum dado seja perdido. Uma dessas matrizes é constantemente recalculada (de tempos em tempos), e a segunda (copiada da primeira) é usada quando copiamos em nossos dados de usuário.

Em outras palavras, o procedimento para tornar os dados disponíveis aos usuários é bastante complexo.

Trata-se de arrays, caso você esteja interessado.

A propósito, ambas as matrizes MT4/MT5 básicas do Android e do Window têm a mesma extensão.

--------------------------------------------------------------------------------------------------------------------------------

Quanto à importação de dados DYNAMIC para o MT4/MT5 a partir de fontes de terceiros, tanto quanto eu entendo, tal importação não é fornecida.

Portanto, não há procedimento Cliente/Servidor em C++Builder no MT4/MT5.

--------------------------------------------------------------------------------------------------------------------------------

Será que este procedimento estará na biblioteca?

http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html

O mais provável, é claro, é que ele também não esteja lá.

Ou seja, você pode tentar importar matrizes dinâmicas no MT4/MT5 somente no formato básico, onde elas passarão automaticamente pelo processamento de dados padrão.

Библиотека "Easy And Fast GUI" для создания графических интерфейсов на MQL
  • tol64.blogspot.com
С этой статьи я начинаю еще одну серию, относящуюся к разработке графических интерфейсов. На текущий момент нет ни одной библиотеки кода, которая позволяла бы легко и быстро создавать качественные графические интерфейсы в MQL-приложениях. Я имею в виду графические интерфейсы, к которым мы все привыкли в известных операционных системах. Цель проекта — дать конечному пользователю такую возможность и научить это делать с помощью моей библиотеки. Я постарался сделать ее максимально понятной в изучении, с возможностями дальнейшего развития.
 
neverness:

E um tolo sabe que todas as matrizes básicas em MT4/MT4 são tamponadas.

Os programadores do MT4/MT5 não são do mesmo nível que os do MT4/MT5, que permitem que os usuários trabalhem com matrizes básicas.

Além disso, as matrizes básicas em MT4/MT5 têm sua própria extensão (.hts ou .hss - não me lembro exatamente, mas algo assim).

Portanto, eles não chegam ao terminal em formato de texto (com extensão .txt), mas em seu próprio formato.

E no MT4/MT5 as matrizes básicas são decodificadas e convertidas em matrizes de prazos selecionados (1 minuto, 5 minutos, 15 minutos, etc.), e somente depois disso são duplicadas e tamponadas.

Por que eles são tamponados?

Para comparação. Para que nenhum dado seja perdido. Uma dessas matrizes é constantemente recalculada (de tempos em tempos), e nós usamos a segunda (copiada da primeira) ao copiarmos para nossos dados de usuário.

Em outras palavras, o procedimento para tornar os dados disponíveis aos usuários é bastante complexo.

Trata-se de arrays, caso você esteja interessado.

A propósito, ambas as matrizes MT4/MT5 básicas do Android e do Window têm a mesma extensão.

Você tem uma confusão tão grande em sua cabeça que eu não consegui nem passar

Você fez uma bagunça em MQL - matrizes, arquivos, séries cronológicas e buffers indicadores.

Se você conseguir digerir as informações que eu dei em uma linha, eu lhe darei algum alimento para pensar: MT4 e MT5 armazenam dados históricos de maneiras diferentes, em MT4 um usuário tem acesso aos arquivos.hst https://docs.mql4.com/ru/files/fileopenhistory

No MT5 não há acesso direto aos arquivos de histórico, mas há trabalho com símbolos personalizadoshttps://www.mql5.com/ru/docs/customsymbols

FileOpenHistory - Файловые операции - Справочник MQL4
FileOpenHistory - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE. Клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории...
 
Igor Makanu:

Você tem uma confusão tão grande em sua cabeça que eu não consegui nem passar por ela.

O que você fez na MQL são arrays, arquivos e buffers indicadores

Se você conseguir digerir as informações que eu dei em uma linha, eu lhe darei algum alimento para pensar: MT4 e MT5 armazenam dados históricos de diferentes maneiras, em MT4 um usuário tem acesso aos arquivos.hst https://docs.mql4.com/ru/files/fileopenhistory

No MT5 não há acesso direto aos arquivos de histórico, mas há trabalho com símbolos personalizadoshttps://www.mql5.com/ru/docs/customsymbols

Eu não disse uma única palavra sobre arquivos de história em meu posto.

Você tem algo misturado novamente, e novamente, fora do tópico.

Eu estava falando dos conjuntos de dados DYNAMIC. Esse é um tema completamente diferente. Sinta a diferença.

 
neverness:

Eu não disse uma palavra sobre os arquivos de história no meu posto.

Você está novamente confuso, e novamente fora do tópico.

Eu estava falando de matrizes de dados dinâmicos. Esse é um tema completamente diferente.

Além disso, as matrizes básicas em MT4/MT5 têm até sua própria extensão (.hts ou .hss - não me lembro exatamente, mas algo parecido).

OK, vá em frente, eu não entendo o propósito de sua presença neste tópico do fórum.

Neverness:

Eu estava falando dos conjuntos de dados DYNAMIC. Este é um tema totalmente diferente. Sinta a diferença.

felt, você também deve entender que em todas as linguagens de programação as arrays dinâmicas são apenas arrays dinâmicos e astimeseries sãotimeseries e parte do trabalho (acesso) com astimeseries é organizado como trabalho com arrays...
 
Igor Makanu:

OK, vá em frente, eu não entendo o propósito de sua presença neste tópico do fórum

Sinto que você também deve entender que em todas as linguagens de programação as arrays dinâmicas são apenas arrays dinâmicos e astimeseries sãotimeseries e parte do trabalho (acesso) com astimeseries é organizado como trabalho com arrays...

É aqui que a questão da formação de dados no terminal é discutida em grande detalhe:

http://profitraders.com/Python/hstRead.html

Quero chamar a atenção dos leitores para o fato de que este artigo NÃO é sobre dados históricos, que está localizado em: MT4->Service->Arquivo de Figuras,

e diretamente sobre os dados DINÂMICOS do terminal em formato .hst, que estão diretamente envolvidos no processo de obtenção e processamento de cotações de mercado.

------------------------------------------------------------------------------------------

Talvez eu não tenha deixado isso suficientemente claro. Leia outros autores. Espero que isso se torne mais claro.

Чтение файла HST истории котировок Metatrader 4 — ProfiTraders.com
  • profitraders.com
Файлы истории котировок Metatrader 4 имеют расширение и находятся в папке данных торгового терминала, в каталоге . Они сгруппированы в подкаталогах, имена которых совпадают с названиями серверов, например: или . Имена файлов начинаются с наименования торгового инструмента, далее указывается таймфрейм (количество минут), например, для часового...