Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 662

 
Sergey Gritsay:
Desafortunadamente, no hay un análogo de la propiedadMarketInfo(symbf,MODE_MARGINREQUIRED) en MQL5, pero ya se discutió en algún lugar del foro
OrderCalcMargin
OrderCalcMargin Calcula el importe del margen requerido para el tipo de orden especificado en la cuenta actual y en el entorno de mercado actual, excluyendo las órdenes pendientes actuales y las posiciones abiertas. Permite estimar el importe del margen para la operación prevista. El valor se devuelve en la moneda de la cuenta. bool OrderCalcMargin ( ENUM_ORDER_TYPE action, // tipo de orden string symbol, // nombre del símbolo double volume, // volumen double price, // precio de apertura double& margin // variable para el valor del margen); Parámetros action [in] Tipo de orden, puede aceptar valores de ENUM_ORDER_TYPE. símbolo [en] Nombre del instrumento financiero. volumen [en] Volumen de la operación comercial. precio [en] Precio de apertura. margin [out] Variable en la que se escribirá la cantidad necesaria de margen en caso de que se ejecute con éxito esta función. El cálculo se realiza como si no hubiera órdenes pendientes o posiciones abiertas en la cuenta corriente. El valor del margen depende de muchos factores y puede cambiar durante...
Documentación | 2015.12.03 14:00
 
forexman77:

Es necesario obtener programáticamente,el tamaño de los fondos libres necesarios para abrir 1 lote para comprar en MQL5, análogo a MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED);"

Pruebe la función OrderCheck().
 
Alexey Kozitsyn:
Pruebe la función OrderCheck().
Gracias. Lo he descubierto.
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:
Gracias. Lo he descubierto.
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);
Sí, se puede, pero en el caso de OrderCheck() se alimenta con la estructura de la solicitud de operación ya lista para ser enviada justo antes de la propia solicitud.
 

Quiero transferir parte del código a una función, pero el resultado de la función no es devolver un valor, sino cambiar realmente los valores de las variables, ¿cómo lo hago?

 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-:

Quiero transferir parte del código a una función, pero el resultado de la función no es la devolución de un valor, sino el cambio real de los valores de las variables, ¿cómo lo hago?

¿no ayudará?

int OpenOrdersInfo()

{

...

return(0);

}

 
-Aleks-:

Esta pregunta, quiero transferir parte del código en una función, pero el resultado de la función no es el retorno de un valor, pero en realidad cambiar los valores de las variables, ¿cómo lo hago?

 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);

  } 

Aquí está bien, VOID no devuelve el resultado.

 
-Aleks-:

Quiero transferir parte del código a una función, pero el resultado de la función no sería devolver un valor, sino cambiar realmente los valores de las variables, ¿cómo lo hago?

Podría intentar eso, pero no es una buena solución:

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:

Está bien, el VOID no devuelve ningún resultado.

Sí, funciona correctamente, es que ha habido un fallo por mi parte y he caído en el estupor.

Gracias a todos por su ayuda.

Ahora voy a hacer preguntas en cinco :)

 
-Aleks-:

Sí, es cierto, ha habido un despiste por mi parte y he caído en el estupor.

Gracias a todos por su ayuda.

Ahora haré preguntas por cinco dólares:)

¿5 libras por una respuesta?

)

Esperando...