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

 
Sergey Gritsay:
Infelizmente, não há nenhum análogo da propriedadeMarketInfo(symbf,MODE_MARGINREQUIRED) na MQL5, mas já foi discutido algures no fórum
OrderCalcMargin
OrderCalcMargin Calcula o montante da margem necessária para o tipo de ordem especificado na conta corrente e no ambiente de mercado actual, excluindo as ordens pendentes e as posições abertas. Permite-lhe estimar o montante da margem para o comércio planeado. O valor é devolvido na moeda da conta. bool OrderCalcMargin ( acção ENUM_ORDER_TYPE, // tipo de encomenda símbolo de cadeia, // nome do símbolo volume duplo, // preço duplo de volume, // preço aberto duplo& margem // variável para valor de margem); acção dos parâmetros [em] Tipo de encomenda, pode aceitar valores de ENUM_ORDER_TYPE. símbolo [em] Nome do instrumento financeiro. volume [em] Volume da operação comercial. preço [em] Preço de abertura. margem [out] Variável, onde a quantidade necessária de margem será escrita em caso de execução bem sucedida desta função. O cálculo é feito como se não houvesse ordens pendentes ou posições em aberto na conta corrente. O valor da margem depende de muitos factores e pode mudar durante...
Documentação | 2015.12.03 14:00
 
forexman77:

É necessário obter programmaticamente,o tamanho dos fundos gratuitos necessários para abrir 1 lote para comprar em MQL5, análogo de MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED)";"

Experimente a função OrderCheck().
 
Alexey Kozitsyn:
Experimente a função OrderCheck().
Obrigado! Imaginei-o.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
 
forexman77:
Obrigado! Imaginei-o.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
Sim, pode, mas no caso de OrderCheck() é alimentado com a estrutura de pedido de comércio já pronta para ser enviada imediatamente antes do pedido em si.
 

Quero transferir parte do código para uma função, mas o resultado da função não é devolver um valor, mas alterar efectivamente os valores das variáveis, como é que o faço?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

 
-Aleks-:

Quero transferir uma parte do código para uma função, mas o resultado da função não seria devolver um valor, mas alterar efectivamente os valores das variáveis, como é que o faço?

não vai ajudar?

int OpenOrdersInfo()

{

...

return(0);

}

 
-Aleks-:

Esta pergunta, quero transferir parte do código para uma função, mas o resultado da função não é o retorno de um valor, mas na realidade alterar os valores das variáveis, como é que o faço?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

Aqui está tudo bem, o VOID não devolve um resultado.

 
-Aleks-:

Quero transferir parte do código para uma função, mas o resultado da função não seria devolver um valor, mas alterar efectivamente os valores das variáveis, como é que o faço?

Eu poderia tentar isso, mas não é uma boa solução:

int CountExpOrder_OS=0,CountExpOrder_OB=0,CountMarketOrder_OS=0,CountMarketOrder_OB=0;

OpenOrdersInfo(CountExpOrder_OS,CountExpOrder_OB,CountMarketOrder_OS,CountMarketOrder_OB);
  Print("Ордеров на покупку(Magic: ",Magic,")=",CountExpOrder_OB);
  Print("Ордеров на продажу(Magic: ",Magic,")=",CountExpOrder_OS);
  Print("Позиций на покупку(Magic: ",Magic,")=",CountMarketOrder_OB);
  Print("Позиций на продажу(Magic: ",Magic,")=",CountMarketOrder_OS);


void OpenOrdersInfo(int &CountExpOrder_OS,int &CountExpOrder_OB,int &CountMarketOrder_OS,int &CountMarketOrder_OB)
 {
  CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));
  CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));
  CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));
  CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));
 }
 
Vladislav Andruschenko:

Não faz mal, a VOID não devolve um resultado.

Sim, está a funcionar correctamente - é que houve um insecto da minha parte e eu caí num estupor.

Obrigado a todos pela vossa ajuda.

Agora vou fazer perguntas sobre cinco :)

 
-Aleks-:

Sim, é verdade - foi apenas um deslize da minha parte e eu caí num estupor.

Obrigado a todos pela vossa ajuda.

Faço agora perguntas por uma nota de cinco:)

5 libras por uma resposta?

)

À espera...

Razão: