初学者的问题 MQL5 MT5 MetaTrader 5 - 页 662

 
Sergey Gritsay:
不幸的是,在MQL5中没有MarketInfo(symbf,MODE_MARGINREQUIRED) 属性的类似物,但在论坛的某个地方已经讨论过了
订单CalcMargin
OrderCalcMargin 计算指定订单类型在当前账户和当前市场环境下所需的保证金数额,不包括当前的挂单和未结头寸。允许你估计计划交易的保证金数额。该值以账户货币返回。bool OrderCalcMargin ( ENUM_ORDER_TYPE action, // Order type string symbol, // symbol name double volume, // volume double price, // open price double& margin // variable for margin value); Parameters action [in] Order type, can accept values from ENUM_ORDER_TYPE.符号[in] 金融工具的名称。volume [in] 贸易操作量。价格[in] 开盘价。margin [out] 变量,在成功执行该函数的情况下,必要的保证金将被写入其中。该计算是在当前账户中没有挂单或未结头寸的情况下进行的。保证金的价值取决于许多因素,并可能会在未来几年内发生变化。
文档 | 2015.12.03 14:00
 
forexman77:

你需要以编程方式获得在MQL5中开1手买入所需的自由资金量,模拟MQL4的 "MarketInfo(symbf,MODE_MARGINREQUIRED);"

试试OrderCheck()函数。
 
Alexey Kozitsyn:
试试OrderCheck()函数。
谢谢你!弄明白了。
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:
谢谢你!弄明白了。
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);
是的,你可以,但在OrderCheck()的情况下,它在请求本身之前就已经准备好发送的交易请求结构 了。
 

我想把部分代码转移到一个函数中,但函数的结果不是返回一个值,而是实际改变变量的值,我该怎么做?

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

我想把一部分代码转移到一个函数中,但这个函数的结果不是返回一个值,而是实际改变变量的值,我该怎么做?

它不会有帮助?

int OpenOrdersInfo()

{

...

return(0);

}

 
-Aleks-:

这个问题,我想把部分代码转移到一个函数中,但这个函数的结果不是返回一个值,而是实际改变变量的值,我该怎么做?

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

  } 

这里没问题,VOID并没有返回结果。

 
-Aleks-:

我想把部分代码转移到一个函数中,但这个函数的结果不是返回一个值,而是实际改变变量的值,我该怎么做?

我可以试试,但这不是一个好办法。

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:

没关系,VOID并不返回结果。

是的,它的工作是正确的--只是我有一个错误,我陷入了昏迷。

感谢大家的帮助。

现在我将在五个方面提出问题 :)

 
-Aleks-:

是的,没错--这只是我的一个疏忽,我陷入了昏迷。

感谢大家的帮助。

我现在要为五块 钱提问了 :)

5英镑买一个答案?

)

等待着...