初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 662

 
Sergey Gritsay:
残念ながら、MQL5にはMarketInfo(symbf,MODE_MARGINREQUIRED) プロパティのアナログはありませんが、すでにフォーラムのどこかで議論 されていました。
オーダーカルクマージン
OrderCalcMargin 現在の口座および現在の市場環境において、指定された注文タイプに必要な証拠金額を計算します。ただし、現在の保留中の注文および未決済のポジションは除きます。予定している取引に必要な証拠金を見積もることができます。値は口座の通貨で返される。bool OrderCalcMargin ( ENUM_ORDER_TYPE action, // order type string symbol, // symbol name double volume, // volume double price, // open price double& margin // margin値の変数 ); Parameters action [in] order type, can accept values from ENUM_ORDER_TYPE.Order type, // value for margin value, // value from ENUM_ORDER_TYPE.記号 [in] 金融商品の名称。volume [in] トレード操作の音量。価格 [in] 始値。margin [out] この関数が正常に実行された場合に必要なマージンを書き込む変数。現在の口座に未決済注文や未決済ポジションがないものとして計算されます。マージン額は多くの要因に左右されるため、途中で変更される可能性があります...
ドキュメンテーション|2015.12.03 14:00
 
forexman77:

MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED);" のアナログ、MQL5で買うために1ロットを開くために必要な自由資金の 量をプログラムで取得する必要があります。

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は結果を返しません。

はい、正常に動作しています。ただ、私のほうにバグがあり、呆気なく落ちてしまっただけです。

皆さん、ありがとうございました。

今度は5で質問してみます :)

 
-Aleks-:

そうなんです、私の不手際で、呆気なく落ちてしまったんです。

皆さん、ありがとうございました。

これから5円玉で 質問してみます :)

回答は5ポンド?

)

待機中...

理由: