Erros, bugs, perguntas - página 2936

 
x572intraday:

Resultado:

O que é o número ímpar de pessoas por resolver? Não encontrado ou pesquisado no Google em Ajuda. Não se parece comEMPTY_VALUE.

Algum tipo de lixo.

Valor definido

int Arr[1]={0};
 
Vitaly Muzichenko:

Algumas porcarias

Definir o valor.

Não para a prática, mas puramente por curiosidade teórica. Outro número (9xxx - não me lembro exactamente) parecia mais lixo e apareceu apenas uma vez e já não o conseguia reproduzir, enquanto o número acima era constante e repetido de tempos a tempos. (Pergunto-me se será o mesmo para si e para os outros?) Não me interessa, o principal é que outros programadores não tropecem dolorosamente nele.

 
x572intraday:

Não era para a prática, mas puramente por curiosidade teórica. Outro número (9xxx - não me lembro exactamente) era mais como lixo e apareceu apenas uma vez e já não podia ser reproduzido, enquanto que o número acima era constante e repetido de tempos a tempos. (Pergunto-me se será o mesmo para si e para outros programadores?) Não me interessa, o principal é que outros programadores não tropecem dolorosamente nele.

Tenho "0", verifiquei-o várias vezes

 
Vitaly Muzichenko:

Recebi um 0, verificado várias vezes.

Hmm... Não sei como uma circunstância se relaciona com a outra, mas corri-a como um indicador em diferentes pares de moedas - os números estão a subir de forma diferente (em cada instrumento o mesmo número é repetido com cada tick ), houve mesmo um zero. É estranho. Mas parece que sem rubricar com o seu próprio número é realmente um disparate.

 
x572intraday:

Hmm... Não sei como uma circunstância se relaciona com a outra, mas corri-a como um indicador em diferentes pares de moedas - os números estão a subir de forma diferente (em cada instrumento o mesmo número é repetido com cada tick ), houve mesmo um zero. É estranho. Mas parece que sem rubricar com o seu próprio número é realmente um disparate.

Voltou a verificá-lo inserindo o código por carraças

em mt4 é sempre 0.

em mt5 sim, 0 é extremamente raro, o número é 511026368

 
x572intraday:

Hmm... Não sei como uma circunstância se relaciona com a outra, mas corri-a como um indicador em diferentes pares de moedas - os números estão a subir de forma diferente (em cada instrumento o mesmo número é repetido com cada tick), houve mesmo um zero. É estranho. Mas parece que sem inicialização com o seu próprio número é realmente um disparate.

A matriz (e todas as outras variáveis) é atribuída memória aquando da sua criação. Se a matriz não for inicializada, o que quer que lá reste de usos anteriores=trash.

Se não alterar os valores do programa, nada acontece a esta memória, o lixo mantém o seu valor.

Em MT4, todas as variáveis e matrizes são forçadas a ser inicializadas com zero.

 

CExpert.TradeEventOrderTriggered() não chamado

Ao trabalhar com o mercado FORTS, servidor BCS-Demo, alguma instabilidade do CExpert.TradeEventOrderTriggered() chamada apareceu quando ordens pendentes são accionadas.
O código do CExpert::CheckTradeState método da biblioteca padrão MQL5 não tem em conta a possível recepção assíncrona de informação sobre posições, encomendas, negócios e história.

1446://--- check triggering of a pending order
1447:   if(hist_ord_tot==m_hist_ord_tot+1 && ord_tot==m_ord_tot-1)
1448:     {
1449:      //--- triggering of a pending order
1450:      if(deal_tot==m_deal_tot+1)

Quando o código é executado sobre dados históricos, as condições funcionam correctamente. Ao trabalhar com dados reais, pode haver situações em que a informação sobre mudanças de posições, negócios, ordens e histórico não é obtida ao mesmo tempo, e a ordem em que a informação é obtida é aleatória.

Registo de chamadas do bool CExpert::CheckTradeState(void) method. Uma chamada daCheckTradeState() corresponde a 2 linhas " CheckTradeState: .....".

//Сработал отложенный ордер открытия позиции
CheckTradeState: hist_ord_tot = 613 ord_tot = 0 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 613 m_ord_tot = 1 m_deal_tot = 543 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 614 ord_tot = 1 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 614 m_ord_tot = 1 m_deal_tot = 544 m_pos_tot = 1

//Сработал отложенный ордер открытия позиции 
CheckTradeState: hist_ord_tot = 615 ord_tot = 1 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 545 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 615 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 546 m_pos_tot = 1
CheckTradeState: hist_ord_tot = 616 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 616 m_ord_tot = 0 m_deal_tot = 546 m_pos_tot = 1

Pode ver no diário de bordo:
1. Quando uma ordem pendente é accionada, o comprimento do histórico é actualizado mais tarde do que a informação sobre acordos, ordens e posições, o que leva ao não cumprimento da 1ª condição do código.
2. Possível dessincronização da recepção de informação sobre alterações no número de encomendas, negócios e posições, o que leva à impossibilidade de cumprir a 2ª condição do código (se de alguma forma for possível contornar o primeiro problema e executar o primeiro se). Talvez esta dessincronização tenha ocorrido quando uma ordem foi executada em 2 passos (em partes: 1 lote+1 lote), mas nesse caso o número de negócios +1, e não +2.

Fiquei preso com este código:

//--- establishment of the checkpoint history of the trade
   bool isSyncMode = MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_VISUAL_MODE);
   if(!isSyncMode)
      HistorySelect(m_beg_date,TimeCurrent());
   else
      HistoryPoint(true);
//---
   return(res);

O ponto do bloco: se no modo assíncrono chegarmos ao fim do procedimento, isso é possível quando o histórico não é carregado, vamos buscar o histórico, mas não memorizamos os valores das quantidades das encomendas, etc.

P.S. Parece que esta parte da biblioteca padrão está subdesenvolvida. Especialmente desconcertante é um fragmento de código escrito 3 vezes seguidas.

1458: res=TradeEventOrderTriggered();
1459: //--- establishment of the checkpoint history of the trade
1460: HistoryPoint(true);
1461: return(res);

Escrevo aqui na esperança de que o problema seja notado e que algo seja corrigido em algum lugar.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Veja-se o tamanho dos ficheiros EX5 EA no Mercado. Todos os que vi estão a menos de 200 Kb. O que o faz alcançar tamanhos tão pequenos? Um código simples?
 
fxsaber:
Dei uma vista de olhos aos tamanhos dos ficheiros do EX5 Expert Advisor no Mercado. Todos eles são mais pequenos do que 200 KB. O que lhe permite alcançar um tamanho tão pequeno? Um código simples?

Penso que os autores são génios, 90% dos top sellers não têm qualquer dúvida sobre a plataforma - por isso escrevem os códigos com um instinto natural ))))


eis a questão:

Estou a ligar os dados:

#resource "Common\\Files\\EURUSD_tick.bin" as const MqlTick HistoryData[]

Recebo um erro:

ficheiro de recurso 'Common\Files\EURUSD_tick.bin' não encontrado

não pode abrir o ficheiro de recursos .....\\\\MQL5\Experts\Virtual\Files\EURUSD_tick.bin' (3)

Se eu colocar o ficheiro na pasta EA ou na pasta Files, tudo está OK.


É possível que o recurso não possa ser montado a partir da pasta comum? -Or preciso de especificar outro caminho?

 
Igor Makanu:

Penso que os autores são génios, 90% dos mais vendidos não têm qualquer dúvida sobre a plataforma - por isso escrevem os códigos com conhecimento inato ))))

Para questões outras contas.

Não pode ligar o recurso a partir da pasta Common? -ou precisa de outra forma de prescrever?

Não sei.