Erros, bugs, perguntas - página 148

 
EQU:

E novamente - o código... código... O código é bom... mas também é - tácticas, ciclos... ;)

O gráfico não recebe uma mensagem sobre a criação de um novo bar? Eu não acredito...)))

É um problema fazer dele um evento? É pelo menos uma variável pré-definida?

Em geral, é mais fácil processar eventos do que preencher uma montanha de códigos. E para além disso - com erros (PROGRAMAS SEM ERROS NÃO FAZEM TUDO!! )))))

Concordo plenamente consigo que o novo bar é um evento e pode (e deve) ser programado. Há um ramo em https://www.mql5.com/ru/forum/1031 leia-o à sua vontade, mas há anos que me esforço...

Z.I. Penso que depois de ler isto verá que o novo bar poderá NUNCA aparecer... um buraco...

Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
  • www.mql5.com
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5".
 
EQU:

Mais uma vez, código... código... O código é bom... mas também o são as tácticas, os loops... ;)

O gráfico não recebe uma mensagem sobre a criação de um novo bar? Eu não acredito...)))

É um problema fazer dele um evento ou pelo menos uma variável pré-definida?

Em geral, é mais fácil processar eventos do que preencher uma montanha de códigos. E para além disso - com erros (PROGRAMAS SEM ERROS NÃO FAZEM TUDO!! )))))

Em geral, como é que o vê? 20 prazos x número de símbolos na 'Market Watch' e o evento OnNewBar é gerado para cada um deles? E tem de processar cada um deles, para determinar a que símbolo e a que prazo se refere? Agora tem a escolha: escrever a sua própria função NewBar e nela definir o que quer receber novas barras: todos os períodos para um símbolo, todos os símbolos para o período actual ou algum caso especial. Isto faz uma função simples. Isto é melhor do que a função genérica OnNewBar com muitas verificações.
 

Ao testar, é gerado um erro

CTrade::PositionClose::OrderCheck: Pedido de paragem inválida(s)
No meu Conselheiro Especialista, há as seguintes linhas

descrição das variáveis (no procedimento)

CTrade m_trade;

..................

posição próxima

m_trade.PositionClose(_Symbol, eSlippage);

porque é que mostra erro? CTrade::PositionClose::OrderCheck: Pedido de paragem inválida(s)

SL e/ou TP errados
TRADE_RETCODE_INVALID_STOPS

O que é que as paragens têm a ver com o fecho de posição? Ou será que me falta alguma coisa?

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Prival:

Concordo plenamente consigo que o novo bar é um evento e pode (e deve) ser programado. Há um tópicoem https://www.mql5.com/ru/forum/1031 que pode ler à vontade, mas há anos que ando a lutar...

Z.U. Penso que depois de ler isto ficará claro para si que a nova barra NUNCA poderá aparecer... um buraco...

Corri o risco de olhar para a ligação... Acho que vale realmente a pena ler... à sua vontade... ;)

Essa é a razão de querer tal evento... Sem barra, sem evento.

 
Valmars:
Na verdade, como o imagina? 20 prazos x número de símbolos em "Market Watch" e para cada um deles é gerado o evento OnNewBar? E tem de processar cada um deles, para determinar a que símbolo e a que prazo se refere? Agora tem a escolha: escrever a sua própria função NewBar e nela definir o que quer receber novas barras: todos os períodos para um símbolo, todos os símbolos para o período actual ou algum caso especial. Isto faz uma função simples. É melhor do que a função universal OnNewBar com muitos controlos.

20 prazos... não é o limite para um parâmetro ulong... preencher uma variável inteira uma vez num minuto é correcto, não é difícil...

Porquê, OnTick olha para "x número de caracteres no 'Market Watch' e gera um evento para cada..." ?????

E a pequena verificação é, acredite, uma coisa bastante rápida...

E mesmo com um evento

- ninguém me vai obrigar a processá-lo - não é preciso...

- E mesmo que tenha um evento, nada o impede de acrescentar ou substituir "escreva a sua própria função NewBar e defina se quer obter novas barras" - se necessário...

 
Interesting:

Mesmo agora é fácil de fazer, se souber como o fazer. Os criadores prometeram reescrever OnTrade() e acrescentar os parâmetros necessários.

Ninguém impede que tais situações sejam tratadas localmente, em OnTick() ou OnTime() - no local da operação comercial; ou em OnTrade(), se precisar de apanhar acções dos utilizadores ou operações comerciais não controladas directamente por código.

A leveza é um conceito relativo e para um é medida em gramas, para outro em toneladas. No meu Expert Advisor tive de o fazer SEMPRE (se o meu código pode ser chamado assim), porque não existem agora variantes PROSTO na minha língua, enquanto poderiam muito bem existir, imho. E não fiquei particularmente satisfeito por o código se ter tornado cem linhas mais longo e fazer com que parecesse mais complicado.

Aqui está o problema em geral:

Um tique vem, o indicador mostra a necessidade de fechar, eu fecho

Quando chega o próximo tick, o indicador mostra que tem de fechar, e eu não sei o que fazer - a posição já está posicionada e é impossível descobrir o que está a acontecer neste momento, claro, mas não sei.

Não compreendo porque é que esta complexidade ainda está aqui presente? Não compreendo porque é que temos de escrever uma tonelada de código no evento onTrade() para compreender o que aconteceu?

Sou pela simplicidade, e quando ela não está lá, entristece-me

 
Vladix:

A leveza é um conceito relativo, e para um é medida em gramas, para outro em toneladas. Tive de o fazer na EA (se o meu código puder ser chamado como tal), porque agora não existem variantes PROSTO na língua, enquanto poderiam muito bem existir, imho. E não fiquei particularmente satisfeito por o código se ter tornado cem linhas mais longo e fazer com que parecesse mais complicado.

Aqui está o problema em geral:

Um tique vem, o indicador mostra a necessidade de fechar, eu fecho

Quando chega o próximo tick, o indicador mostra que deve fechar, e eu não sei o que fazer - a posição já está pendurada, e claro que posso descobrir o que está a acontecer neste momento, mas não sei.

Não compreendo porque é que esta complexidade ainda está aqui presente? Não compreendo porque é que no evento onTrade() somos sugeridos a escrever uma tonelada de código para compreender o que aconteceu?

Sou pela simplicidade, e quando ela não está lá, entristece-me

Fi-lo, o código é inferior a cem linhas ... :) A solução é fiável e imediata para as múltiplas moedas

//+----------------------------------------------------------------------------+
// Функция контроля открытия ордера на текущем баре               MQL5         |
//-----------------------------------------------------------------------------+
bool ЕстьОрдернаТекущемБаре(ENUM_ORDER_TYPE тип)
  {
   ulong тикет;
   HistorySelect(SeriesInfoInteger(СИМВОЛ,Period(),SERIES_LASTBAR_DATE),TimeCurrent());
   for(int i=0;i<HistoryDealsTotal();i=i+1)
     {
      тикет=HistoryDealGetTicket(i);
      if(HistoryDealGetString(тикет,DEAL_SYMBOL)!=СИМВОЛ || HistoryDealGetInteger(тикет,DEAL_ENTRY)==DEAL_ENTRY_STATE)// || HistoryDealGetInteger(тикет,DEAL_MAGIC)!=MAGIC
         continue;
      if(HistoryDealGetInteger(тикет,DEAL_TYPE)==тип || HistoryDealGetInteger(тикет,DEAL_TYPE)==DEAL_ENTRY_INOUT)
         return(true);
     }
   return(false);
  }
Pode especificar qualquer período desejado em vez do período em que a EA está a pairar. Isto é, as encomendas não serão feitas mais do que uma vez por período

E após qualquer pedido comercial, devemos fazer um atraso que proíba o pedido comercial no prazo de 30 segundos (por exemplo). Caso contrário, a ordem pode não aparecer na história no próximo tick.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Valmars:
Em geral, como o imagina? Em geral, a ideia é ter 20 períodos de tempo x o número de símbolos na "Market Watch" e para cada um deles é gerado o evento OnNewBar? E tem de processar cada símbolo e período de tempo para determinar a que se refere? Agora tem a escolha: escrever a sua própria função NewBar e nela definir o que quer receber novas barras: todos os períodos para um símbolo, todos os símbolos para o período actual ou algum caso especial. Isto resulta numa função específica e descomplicada. É melhor do que uma função universal OnNewBar com muitos controlos.

Em termos de uma solução padrão, deve ser algo parecido com isto

1. O evento deve ser vinculado à carta aberta, ao seu período e símbolo. O evento deve ocorrer quando aparece uma nova barra (os buracos são ignorados).

Os eventos devem ser tratados num fio (ou fios) terminal separado.

PS

E assim por diante. É claro que esta é uma aproximação aproximada sem ter em conta muitas especificidades...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Vladix:

Na verdade, o problema em si é este:

um tick entra, o indicador mostra que precisa de fechar, eu faço o fecho

Quando chega o próximo tick, o indicador mostra que tem de fechar, e eu não sei o que fazer - a posição já está pendurada e pode-se saber o que está a acontecer neste momento, é claro, mas no meio do nada.

Não compreendo porque é que esta complexidade ainda está aqui presente? Não compreendo porque é que no evento onTrade() somos sugeridos a escrever uma tonelada de código para compreender o que aconteceu?

Sou pela simplicidade, e quando não se tem, torna-se triste

Talvez, os criadores acrescentem parâmetros à OnTrade(), pelo menos eles estavam a pensar nisso. Tanto quanto sei, houve até algumas declarações sobre o assunto.
 
Dmitriy2:

Fê-lo desta forma, menos de uma centena de linhas... :) a solução é fiável e imediata para múltiplas moedas

Em vez do período em que a EA está inactiva, podemos especificar qualquer período desejado. Isto significa que as encomendas não serão feitas com mais frequência do que uma vez por período.

E após qualquer pedido comercial, devemos fazer um atraso que proíba o pedido comercial no prazo de 30 segundos (por exemplo). Caso contrário, a ordem pode não aparecer na história no próximo tick.

Ponha um atraso - sim, eu aceito, quantas linhas de código serão necessárias? E se estamos a falar de multi-moeda, é necessário ter em conta o atraso de cada uma, não é?

Eu escrevi o código que resolve isto. Só que eu não gosto, tal como, desculpa, não gosto do teu. E não se trata de parcialidade, a questão é que não existem outras opções, simples e elegantes.