Ajuda para actualizar para MetaTrader 5 sem perdas - página 15

 
Valmars:

...

Valery, diz-me o que significa esta secção de código em calc.mq5:

...

if(StringSubstr(Symbol(), 3, 3)=="CAD") { xxx=1.2175;   }
if(StringSubstr(Symbol(), 3, 3)=="JPY") { xxx=91.425;   }
if(StringSubstr(Symbol(), 3, 3)=="CHF") { xxx=1.1631;   }
if(StringSubstr(Symbol(), 3, 3)=="AUD") { xxx=1/0.6800; }
if(StringSubstr(Symbol(), 3, 3)=="NZD") { xxx=1/0.54;   }
if(StringSubstr(Symbol(), 3, 3)=="GPB") { xxx=1/1.49;   }
if(StringSubstr(Symbol(), 3, 3)=="EUR") { xxx=1/1.3015; }

...

Ou seja, porque é que à variável xxx são atribuídos valores fixos?

---

E outra questão. A ajuda contém informação incompleta sobre o cálculo do lucro para Forex, não é? Isto significa que apenas a fórmula das aspas invertidas(XXXUSD) é dada para calcular o lucro.

Identificador

Descrição

Fórmula

SÍMBOLO_CALC_MODE_FOREX

Modo Forex - cálculo de lucro e margem para Forex

Margem: Lotes*Tamanho_de_contrato/Alavancagem

Lucro: (fechar_preço_aberto_preço)*Tamanho_de_contrato*Lotes

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

E outra questão. Acontece que a ajuda está incompleta com a informação sobre o cálculo do lucro para Forex? Isto significa que a fórmula de cálculo do lucro é apresentada apenas para citações inversas(XXXUSD).

Sim, parece que tem razão. Por agora, pode ler sobre o cálculo do lucro no artigo "The ABCs of Currency Trading".
Азбука торговли валютами - Статьи по MQL4
  • www.mql5.com
Азбука торговли валютами - Статьи по MQL4: особенности автоматических торговых стратегий
 
Rosh:
Sim, parece estar certo. Por agora, pode ler sobre o cálculo do lucro no artigo "The ABCs of Currency Trading".

Obrigado. Este artigo deve definitivamente ser marcado como uma folha de batota, porque não consigo manter tudo na minha cabeça. Melhor ainda, se a tabela for acrescentada à ajuda, para que tudo seja centralizado. :)

---

E valores fixos (numa cabeça fresca é necessário procurar :) ) por isso compreendi para um caso se não houvesse dados. Mas estes valores devem ser corrigidos a todo o momento, dependendo das taxas de câmbio. É por isso que é melhor emitir a mensagem, que não há dados, em vez de valores errados.

 
tol64: E compreendi os valores fixos (quando frescos na cabeça :) ) para o caso de não haver dados. Mas estes valores devem ser corrigidos sempre, dependendo da taxa de uma ou outra moeda. É por isso que é melhor mostrar uma mensagem de que não há dados, em vez de valores incorrectos.

Sim, tem toda a razão. Fiz como o autor fez, era demasiado preguiçoso, não tinha tempo... Para taxas cruzadas em MT4 tem de seleccionar explicitamente na janela 'Market Watch' os símbolos de ambas as moedas expressos em USD, ou seja Por exemplo, para NZDJPY tem de seleccionar USDJPY e NZDUSD. O autor tem uma declaração de exoneração de responsabilidade sobre este ponto no preâmbulo:

"Para XXXYYY atravessa o correspondente

USDYYY ou XXXUSD pares principais (por exemplo para GPBJPY na janela de revisão do mercado deve ser aberto

USDJPY deve estar aberto)".

Em MT5 é melhor deixar isto para o próprio indicador.

 

Piligrim:

Valery (Valmars), acha que faz sentido, em termos de complexidade de reembalagem, oferecer-lhe a possibilidade de refazer este indicador também na MQL5? O anterior, traduzido por si, funciona muito bem!

Não se pode modificar este indicador para MT5, porque MT5 não tem (e nunca terá) gráficos autónomos. Como é que o indicador funciona no MT4? Cria um gráfico autónomo com um período não-standard, com a chegada de uma nova citação que o guarda no ficheiro .hst deste período não-standard. E depois abre esta tabela. Em cada tic tac, o indicador actualiza-o (redraws) com a ajuda do indicador dll. Como resultado, vê um gráfico com um período não normalizado actualizado em tempo real.

No MT5 nem mesmo o formato dos ficheiros PERIOD.hc (em que são construídos gráficos para os períodos padrão) foi aberto pelos programadores, provavelmente, porque eles não podem construir gráficos "canhotos". Pode ver aqui a controvérsia sobre os gráficos com um período arbitrário.

 
Valmars:

Sim, tem toda a razão. Fiz como o autor fez, era demasiado preguiçoso, não tinha tempo... Para taxas cruzadas em MT4 tem de seleccionar explicitamente na janela 'Market Watch' os símbolos de ambas as moedas expressos em USD, ou seja Por exemplo, para NZDJPY tem de seleccionar USDJPY e NZDUSD. O autor tem uma declaração de exoneração de responsabilidade a este respeito no preâmbulo:

"Para XXXYYY cruzes, as correspondentes

pares principais USDYYY ou XXXUSD (por exemplo, para GPBJPY na janela Market Watch deve

estar aberto USDJPY)".

Em MT5 é melhor deixar isto para o próprio indicador.

Então, em vez dessa lista com valores fixos, este código faria? :

bool flgExit=false;
string arrSymbols[7]={ "CAD","JPY","CHF","AUD","NZD","GBP","EUR" };
//---
for(int i=ArraySize(arrSymbols)-1; i>=0; i--)
  {
   if(flgExit) { break; }
   //---
   if(StringSubstr(Symbol(),3,3)==arrSymbols[i])
     {
      for(int j=SymbolsTotal(false)-1; j>=0; j--)
        {
         if(SymbolName(j,false)=="USD"+arrSymbols[i]+"")
           {
            SymbolSelect("USD"+arrSymbols[i]+"",true);
            //---
            if((xxx=SymbolInfoDouble(SymbolName(j,true),SYMBOL_BID))<=0)
              {
               Comment("Ошибка ("+IntegerToString(GetLastError())+") при получении данных по символу "+SymbolName(j,true)+""); return(0);
              }
            else { flgExit=true; break; }
           }
       }
   }
}
 
Valmars:

Este indicador não pode ser convertido para MT5, pois MT5 não tem (e não terá) gráficos autónomos. Como é que o indicador funciona no MT4? Cria um gráfico autónomo com um período não-standard, com a chegada de uma nova citação que o guarda no ficheiro .hst deste período não-standard. E depois abre esta tabela. Em cada tic tac, o indicador actualiza-o (redraws) com a ajuda do indicador dll. Como resultado, verá um gráfico com um período não normalizado actualizado em tempo real.

Em MT5 até o formato dos ficheiros PERIOD.hc (os gráficos para períodos padrão são construídos usando) nem sequer foi divulgado pelos programadores, provavelmente porque não permitem fazer nenhum gráfico "canhoto". Pode ver aqui a controvérsia sobre os gráficos com um período arbitrário.

Em todo o caso, obrigado, Valery! Para mim, como não programador, uma consulta profissional compreensível é muito mais preferível em termos de encontrar possíveis soluções para algum problema para além da minha competência.

 
tol64:

Então, em vez dessa lista de valores fixos, este código funcionaria bem? :

Sim, basta executá-lo também para o segundo carácter da cruz e colocá-lo no inite.

 
Valmars:
Sim, basta fazer isto também para o segundo carácter cruzado e colocá-lo no inite.

Valery, se tiver um momento livre, dê uma vista de olhos à versão corrigida. É feito correctamente agora, tendo tudo o que foi discutido acima em mente? Obrigado.


Arquivos anexados:
 
tol64:

...

Actualizado o ficheiro acima(calcriskprofit.mq5). Corrigido o erro tipográfico. Em vez de GBP, foi GPB. :)