Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 133

 
Aliaksandr Kryvanos:

Hi!

Alguém pode sugerir um análogo de substituição do MaxLotCheck() do MT5 pelo MT4, obrigado

Não há nenhuma função em si. Você tem que escrever o seu próprio. Com todas as verificações, deve caber em linhas de 10-20.

 
Ihor Herasko:

Não há nenhuma função em si. Você tem que escrever o seu próprio. Com todas as verificações, deve caber em linhas de 10 a 20.

OK, mas a própria fórmula?

 
Aliaksandr Kryvanos:

OK, mas aqui está a fórmula em si?

Vamos olhar para a fonte:

//+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         price           - price of the opening position,         |
//|         percent         - percent of available margin [1-100%].   |
//+------------------------------------------------------------------+
double CAccountInfo::MaxLotCheck(const string symbol,const ENUM_ORDER_TYPE trade_operation,
                                 const double price,const double percent) const
  {
   double margin=0.0;
//--- checks
   if(symbol=="" || price<=0.0 || percent<1 || percent>100)
     {
      Print("CAccountInfo::MaxLotCheck invalid parameters");
      return(0.0);
     }
//--- calculate margin requirements for 1 lot
   if(!OrderCalcMargin(trade_operation,symbol,1.0,price,margin) || margin<0.0)
     {
      Print("CAccountInfo::MaxLotCheck margin calculation failed");
      return(0.0);
     }
//---
   if(margin==0.0) // for pending orders
      return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
//--- calculate maximum volume
   double volume=NormalizeDouble(FreeMargin()*percent/100.0/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(volume>maxvol)
      volume=maxvol;
//--- return volume
   return(volume);
  }
ENUM_ORDER_TYPE e OrderCalcMargin precisam ser substituídos aqui.
 
Yum) a fonte... obrigado
 

Ainda não está claro....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


devolver diferentes números de margem para abrir 1 lote

 
Aliaksandr Kryvanos:

Ainda não está claro....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


devolver diferentes números de margem para abertura de 1 lote

Você está obviamente comparando em diferentes terminais )) Acima está o MT4, abaixo o MT5. Portanto, os servidores são diferentes, as condições comerciais são diferentes. A coisa mais simples é uma alavancagem diferente.

O que você realmente conseguiu, quais eram os valores?

 

Sim, isso mesmo, a alavanca é diferente, em um 1/300, no outro 1/2000

obrigado

 

Olá a todos!

Minha EA usa uma busca em várias etapas para um ponto de entrada, para isso verifica primeiro o histórico em busca de sinais desde o início, depois trabalha em tempo real. Então, no testador de estratégia, tudo funciona bem com a história, mas quando eu a executo em tempo real, ela não escaneia corretamente a história e perde sinais, qual poderia ser o problema?

Talvez haja uma resposta óbvia, porque o fragmento de código é bastante grande para postar aqui, por isso ainda não estou dando o código.

 
ArturR:

Olá a todos!

Minha EA usa uma busca em várias etapas para um ponto de entrada, para isso verifica primeiro o histórico em busca de sinais desde o início, depois trabalha em tempo real. Então, no testador de estratégia, tudo funciona bem com a história, mas quando eu a executo em tempo real, ela não escaneia corretamente a história e perde sinais, qual poderia ser o problema?

Talvez haja uma resposta óbvia, porque o fragmento de código é bastante grande para postar aqui, por isso ainda não estou dando o código.

Faça a depuração peça por peça. Separe o escaneamento da história no roteiro. Saída de informações detalhadas com Alerta(): primeiro o número de barras na história, a data de início e fim, ... e depois o processo de escaneamento. Pode ser mais conveniente escrever tudo isso em um arquivo
 
STARIJ:
Faça a depuração passo a passo. Separe o escaneamento da história em um roteiro. Saída utilizando Alert() as informações detalhadas: em primeiro lugar, o número de barras na história, a data de início e fim, ... e depois o processo de escaneamento. Pode ser mais conveniente escrever tudo isso em um arquivo

Obrigado pelo conselho, vou ler como fazer isso.

Tenho mais uma pergunta, quando eu faço a depuração em tempo real, Metatrader4 sempre a executa em CHF, alguém sabe o que ajustar para fazê-la funcionar no par que eu preciso?

Foram os valores indicadores para outros períodos de tempo que aparentemente não são considerados no testador. Também encontrei o caminho para fazer o par certo. Obrigado por sua participação )