Desejos para MT5 - página 14

 
stringo:
Classificado e fixado. Obrigado.

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1,time2,rates);
      err++;
     }

Obrigado pela correcção, quase boa, porque quase...

No helpe diz

start_time [em] O tempo de bar correspondente ao primeiro elemento.

E o primeiro elemento é 0.

Mas o último elemento é bom.

Se foi assim que se pretendeu, por favor conserte o helpe.

 
vdv2001:

Obrigado pela correcção, quase boa, porque quase...

No helpe diz

start_time [em] O tempo de bar correspondente ao primeiro elemento.

E o primeiro elemento é 0.

Mas o último elemento é bom.

Se é assim que deve ser, por favor conserte o cabo de ajuda.

A situação é que a hora_de_início e a hora_de_paragem na variante date-to-date podem ser qualquer coisa - em qualquer caso, formam um intervalo. Vamos tentar tornar isto mais claro na documentação
 
stringo:
A situação é que a hora_de_início e a hora_de_paragem no caso date-to-date podem ser qualquer - em qualquer caso formam um intervalo. Vamos tentar mapear isto mais precisamente na documentação

Isto é, está a dizer que as funções de cópia* devolverão, em caso de data até à data, todos os elementos excepto o elemento de partida? Por isso, preciso de escrever a expressão desta forma:

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1-PeriodSeconds(PERIOD_M1),time2,rates);
      err++;
     }

esta questão é muito importante para mim.

 

Por favor note que quando se muda para um novo dia, este é o tipo de coisa que acontece:

Após a actualização, tudo se encaixa no lugar.

Observar a formação da transição para um novo dia, muitas vezes noto esta mudança, e o mais interessante no momento da formação da primeira barra do gráfico de actualização do dia seguinte não traz resultados. (Posso estar errado, mas penso que o meu posto anterior também tem algo a ver com isso).

 

Bild 252.

Menu principal: <Gráficos> -<Instrumentos gráficos> são mostrados os prazos.

 
uncleVic:

Infelizmente, a última versão da CAccountInfo não chegou a entrar na construção.

No ficheiro anexo, encontrará o método FreeMarginCheck (até agora apenas para SYMBOL_CALC_MODE_FOREX).

Se tiver quaisquer comentários e (ou) ideias, por favor escreva.

Descobri, que o método FreeMarginCheck precisa de ser melhorado.

1. Consideremos o caso SYMBOL_CALC_MODE_FOREX:

work=SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(trabalho,SYMBOL_BID);
margem=baixa*volume*contrato_tamanho/alavancagem;
margin= free_margin;
pausa;

Se os valores dos dois summands SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN) e Currency() se revelarem iguais, então a variável de oferta recebe o valor 0 e a variável de margem recebe o valor free_margin.

Para o corrigir, fiz o seguinte:

caso SYMBOL_CALC_MODE_FOREX:

bid=1.0;

se (SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)!=Currency())

{

work=SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(trabalho,SYMBOL_BID);
}

margem=baixa*volume*contrato_tamanho/alavancagem;
margin= free_margin;
pausa;

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Posso perguntar quando é que as funções de cópia*() funcionarão normalmente?

Em cada nova construção deixam de funcionar, será que ninguém os utiliza?

 
vdv2001:

Obrigado pela correcção, quase boa, porque quase...

No helpe diz

start_time [em] O tempo de bar correspondente ao primeiro elemento.

E o primeiro elemento é 0.

Mas o último elemento é bom.

Se era esta a sua intenção, por favor conserte a ajuda.

Não está claro do seu exemplo como é adquirido o valor do tempo1. A tentativa de reproduzir a situação foi infrutífera.

Arquivos anexados:
 
Yedelkin:

Descobriu-se que o método FreeMarginCheck precisa de ser refinado.

Obrigado pelo comentário. Corrigido.
 
Yedelkin:

Descobriu-se que o método FreeMarginCheck precisa de ser refinado.

2. Outro problema é o seguinte. Mais uma vez considerar o caso SYMBOL_CALC_MODE_FOREX:
work=SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(trabalho,SYMBOL_BID);

Se a variávelsímbolo tiver uma moeda que não esteja directamente cotada (por exemplo CADJPY) como moeda base, SymbolInfoDouble(work,SYMBOL_BID) sairá 0.

2.1 Além disso, não é claro porque é que o preço BID é utilizado ao calcular a segunda variável (licitação). Afinal, precisamos de assegurar que a moedaem que as ofertas são calculadas é adquiridaà custa da moeda de depósito, ou seja, "comprar a moeda de margem, vender a moeda de depósito". E se num determinado par de moedas, a moeda de depósito estiver em segundo lugar, então temos de utilizar o preço ASK para realizar a operação especificada.

Para rectificar a situação, fiz o seguinte:

curso duplo;
//---
switch(SymbolInfoInteger(símbolo,SYMBOL_TRADE_CALC_MODE))
{
caso SYMBOL_CALC_MODE_FOREX:
curso=1.0;

//---Cheque se a moeda de depósito é a moeda base do par de moedas corrente
//par. Se for, então o valor da variável do curso permanecerá 1.0
if(SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(símbolo,SYMBOL_CURRENCY_MARGIN)+Currency();

//---Cheque se existe um par de moedas cuja moeda base é a mesma que a
// a moeda base do par actual, e a moeda de cotação é a mesma que a moeda de depósito
//(i.e., se o depósito for em USD, verifique se há uma cotação directa)
if(SymbolInfoDouble(trabalho,SYMBOL_ASK)!=0)
course=SymbolInfoDouble(trabalho,SYMBOL_ASK);

//--- Se a condição acima não for cumprida, alterar a sequência dos símbolos
//currências na variável de trabalho não é cumprido e obtemos um par de moedas com moeda base
corresponde à moeda de depósito, // a moeda de cotação é a mesma que a moeda base
//corrente (se o depósito for em USD, obtemos o par de moedas com a cotação inversa).
senão
{
work=Currency()+SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN);
curso=1/SymbolInfoDouble(trabalho,SYMBOL_BID);
}
}
margin=course*volume*contract_size/leverage;
margin= free_margin;
pausa;

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5