Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1055

 
Igor Makanu:

tudo isto é claro, mas como calcular correctamente a diferença entre 2 preços em pontos inteiros?

É aqui que o arredondamento pode ser aplicado. Cabe-lhe a si decidir para que lado, ou apenas para um número inteiro.

int pips_profit = (int)MathFloor(OrderOpenPrice()-OrderClosePrice())/_Point);
 
Igor Makanu:

E isto é correcto? No laço de encomenda, SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT); seria recalculado de cada vez, porqueOrderSymbol() será diferente de cada vez?

O problema aí é ligeiramente diferente - o lucro total em pips para todos os símbolos.

 
Konstantin Nikitin:

É aqui que o arredondamento pode ser aplicado. Cabe-lhe a si decidir para que lado, ou apenas para um número inteiro.


bem sim, esqueci-me dessas construções, nas funções de cálculo de lote de Kim havia arredondamento correcto
fxsaber:

Assim, a tarefa aí é ligeiramente diferente - o lucro total em pips para todos os símbolos.

OK, mas porquê const - como é que o compilador se comporta se o laço vai mudar const ?

PS: o código é legível, mas precisa de ser verificado, nunca o utilizou

 
Igor Makanu:

OK, mas porquê const - como é que o compilador se comporta se const é alterado no laço?

PS: o código é legível, mas precisa de ser verificado, nunca o utilizou

Em cada passo será criada uma variável. const - neste passo não está previsto mudar em lado nenhum.

 
fxsaber:

Cada passo irá criar uma variável const. const - não há planos para mudar em nenhum lugar neste passo.

a etapa é uma iteração do laço?

Ainda não está claro como é que uma tal construção se irá comportar, precisamos de um guião para verificar

 
fxsaber:

Assim, o objectivo é ligeiramente diferente - lucro total em pips através de todos os símbolos.

Bem, então é assim

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Calculo os lucros em pips de uma posição, mas penso que não será um problema aplicá-lo a mim

 
Igor Makanu:

um passo é uma iteração de um ciclo?

Sim.

ainda não está claro como tal construção se irá comportar, precisamos de um guião para verificar

Aqui está um exemplo de uma utilização conveniente da vida de uma variável

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Discussão sobre "LifeHack for trader: misturar ForEach on define (#define)"

fxsaber, 2018.02.14 10:54

Medição de desempenho

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

double GetAsk()
{
  static MqlTick tick = {0};
  
  return(SymbolInfoTick(Symbol(),tick) ? tick.ask : 0);
}

#define  AMOUNT 1 e6

void OnStart()
{
  double Sum = 0;
  
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += GetAsk())
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += SymbolInfoDouble(_Symbol, SYMBOL_ASK))
  
  Print(Sum);
}


Resultado

Time[for(inti=0;i<AMOUNT;i++)Sum+=GetAsk()] = 78952
Time[for(inti=0;i<AMOUNT;i++)Sum+=SymbolInfoDouble(_Symbol,SYMBOL_ASK)] = 162606
 

Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Konstantin Nikitin, 2019.06.04 19:58

Bem, então

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Calculo os lucros em pips de uma posição, mas penso que não tenho qualquer problema com isso.

A isto chama-se conversão dos lucros com custos em VERDADEIROS (não no fecho) pips.

 
fxsaber:

A isto chama-se uma transferência de lucro de custos para pontos CORRENTES (não no momento do encerramento).

É assim que ele precisa de traduzir o lucro em pontos. Ao calcular os fechados, ainda é necessário tomar como base o valor do ponto. O lucro em pips não tem de ser igual à diferença em pips entre os preços aberto e fechado. e preços de fecho.

 
Konstantin Nikitin:

Por isso, ele precisa de traduzir o lucro em pontos.

Por vezes pensam que lucro = OrderProfit().

Ao calcular um símbolo fechado, deve ainda utilizar o valor do pip. O valor do pip do lucro não tem de ser igual à diferença em pips entre o preço aberto e fechado.

O valor do ponto no fecho não é igual ao valor do ponto no momento do cálculo. Além disso, no momento do cálculo, o símbolo pode simplesmente não estar no Market Watch.

É por isso que tanto os valores dos pontos como o seu valor no momento do fecho são calculados.

Razão: