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

 
  1. ほとんどのブローカーはもはやマージンコールを発行していません。口座が赤字に転落する前に、すべてのポジションが(自動的に?
  2. 証拠金は、オープンポジションの保証金とみなされる金額で、ACCOUNT_MARGIN_FREEは残額(未使用部分)です。
  3. 資本不足やポジションの損失によりポジションが決済されるのを防ぐため、口座残高(残高)または資本残高(口座残高+未決済ポジション、資本)の最大5%から10%を取引に使用する必要があります。
  4. ポジションのリスクは、SLとロットサイズに依存します。SLは通常、技術的な理由から固定されているため、ロットサイズはリスクを計算するために使用されます。
    "calculate lotsize "を検索: https://www.mql5.com/en/search#!keyword=calculate%20lotsize&module=mql5_module_forum
  5. ヒント ほとんどの記事はドイツ語でも読めます。URLの/en/を/de/に 置き換えるだけです https://www.mql5.com/de/articles/2555
 
情報ありがとうございます。取引ロボットが通過しなければならないチェックの 中で、「CheckMoneyForTrade」というメソッドが言及されており、これは取引に使用される証拠金が無料証拠金(ACCOUNT_FREE_MARGIN)より大きいかどうかをチェックします。私の理解が正しければ、使用される資金が口座残高の一定割合を超えるかどうかもチェックする必要があります:
 if (freeMargin - tradeMargin < balance * 0.9) return false;

もちろん、0.9を(1 - maxRisk)に変更し、ユーザーが設定できる "Maximum Risk in %"プロパティを実装することができます。

追伸:フォーラムでは姓と名のどちらを使用しますか?
 
Benjamin Fotteler #:
情報ありがとうございます。取引ロボットが通過しなければならないチェックの 中で、「CheckMoneyForTrade」というメソッドが言及されており、これは取引に使用される証拠金が無料証拠金(ACCOUNT_FREE_MARGIN)より大きいかどうかをチェックします。私の理解が正しければ、使用される資金が口座残高の一定割合を超えるかどうかもチェックする必要があります:

もちろん、0.9を(1 - maxRisk)に変更し、ユーザーが設定できる "Maximum Risk in %"プロパティを実装することができます。

追伸:このフォーラムでは、私たちはファーストネームで呼び合っているのでしょうか?

誰もがロットサイズでつまずき、ここにはたくさんのコードとコメントがあります!

私は今、ウィリアム・ローダーがMT5用に書いたものを一緒に考えました。それは、テストされていない(!!)関数でしょう:
(https://www.mql5.com/en/forum/133792/page3#comment_3405179&https://www.mql5.com/en/forum/390088#comment_28092477)

double lotsz (double risk, double sl, ENUM_ORDER_TYPE ordDir, string sym="", double CommissionPerLot=0) {
   MqlTick mqTick;
   if (sym == "") sym = _Symbol;
   double deltaValue = SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE);
   SymbolInfoTick(sym,mqTick); 
   double diff = (ordDir==ORDER_TYPE_BUY) ? mqTick.ask - sl : ( (ordDir==ORDER_TYPE_SELL) ? sl - mqTick.bid : -1.0 );
   if (diff<0.0) return(0.0);
   double lts = ( (AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk/100) / (diff * deltaValue + CommissionPerLot) );
   return( fmin(fmax(SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN),lts),SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX)));
}
// use: lotsz(5, sl)

間違いを見つけたら教えてください!

ここでは、ほとんどの人がニックネームやファーストネームで匿名であり、以前はもっとそうであったので、"Du "は自然なものになりました。

Why is there NO Complete EA within the Code-Base? - When does the market close or open?
Why is there NO Complete EA within the Code-Base? - When does the market close or open?
  • 2011.08.20
  • www.mql5.com
I wanted to close all orders before end of the week (market close friday,) to prevent loss should the market gap over the week end, by passing the sl. ) so the question is when does the market close (or open. For example info on opened charts and history data, time info (like gmt, timezone, dst), market open, close info
 

コードをありがとう。唯一欠けていたのは、有効な中間ロットサイズへの適応でした:

double lotsz (double risk, double sl, ENUM_ORDER_TYPE ordDir, string sym="", double CommissionPerLot=0) {
   MqlTick mqTick;
   if (sym == "") sym = _Symbol;
   double deltaValue = SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE);
   SymbolInfoTick(sym,mqTick); 
   double diff = (ordDir==ORDER_TYPE_BUY) ? mqTick.ask - sl : ( (ordDir==ORDER_TYPE_SELL) ? sl - mqTick.bid : -1.0 );
   if (diff<0.0) return(0.0);
   double lts = ( (AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk/100) / (diff * deltaValue + CommissionPerLot) );
   lts = ( fmin(fmax(SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN),lts),SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return ((int)MathRound(lts/stepSize)*stepSize);
}
// use: lotsz(5, sl)

もう1つ質問があります。TICK_VALUEまたは上記のようにdeltaValueでストップアウトした取引の損失を計算すると、結果は常にMQL5の内部計算と若干異なります:

double price=(ordDir==ORDER_TYPE_BUY) ? mqTick.ask : ((ordDir==ORDER_TYPE_SELL) ? mqTick.bid : mqTick.last);
double loss;
OrderCalcProfit(ordDir, sym, 1, price, sl, loss)

これは、1ティックあたりの損失/利益がユーロ口座、市場価格1.0と市場価格1.2で異なるためですか?下のコードで、例えばpriceの代わりに "price + 0.1"、slの代わりに "sl + 0.1 "と入力すると、ティック距離(diff)は同じですが、OrderCalcProfitが 出力するそれぞれの結果は異なります。そして、手動取引で得た損益を見ると、後者が確認できるようです。

もし私の考えが正しければ、以下のコードの方がより正確でしょう:

double lotsz (double risk, double entry, double sl, ENUM_ORDER_TYPE ordDir, string sym="", double CommissionPerLot=0) {
   if (sym == "") sym = _Symbol;
   double loss;
   OrderCalcProfit(ordDir, sym, 1, entry, sl, loss);
   double lts = ((AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk * 0.01) / -loss);
   lts = (fmin(fmax(SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN), lts), SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return ((int)MathRound(lts / stepSize) * stepSize);
}
// use: lotsz(5, ask, sl)
追伸:基本的なアイデアをありがとうございました。リスク・ファクターを残高ではなくフリー・マージンに結びつけることは、明らかに理にかなっています。
 

以下のコードは、mql5独自のエキスパート・パラボリック・サーに従って作成したものです。ここで、買いシグナルと売りシグナルの動作を逆にすることはできますか? つまり、買いシグナルが来たら、買いの代わりに売りを建てたいのですが、どなたか教えてください。




#プロパティのコピーライト "Copyright 2022, MetaQuotes Ltd."

#プロパティリンク"https://www.mql5.com"

#property version "1.00"

//+------------------------------------------------------------------+

//| インクルード

//+------------------------------------------------------------------+

#インクルード <ExpertExpert.mqh

//--- 利用可能なシグナル

<include <ExpertSignalSAR.mqh> //--- 利用可能なシグナル

//--- 利用可能な末尾

#include <ExpertTrailing↩TrailingNone.mqh> //--- 利用可能な資金管理

//--- 利用可能な資金管理

#include <ExpertMoneyMoneyFixedLot.mqh> //--- 資金管理可能

//+------------------------------------------------------------------+

//| 入力

//+------------------------------------------------------------------+

//--- 専門家の入力

input string Expert_Title ="sar"; // 文書名

ulong Expert_MagicNumber =13831; // エキスパート番号

bool Expert_EveryTick =false; // エブリ・ティック(Expert_EveryTick)

//--- メイン信号の入力

input int Signal_ThresholdOpen =10; // オープンにする信号のしきい値 [0...100]

input int Signal_ThresholdClose=10; // クローズするシグナルのしきい値 [0...100]

input double Signal_PriceLevel =0.0; // 取引を実行する価格レベル

input int Signal_Expiration =4; // 保留注文の有効期限(バー単位)

input double Signal_SAR_Step =0.02; // パラボリックSAR(0.02,0.2)の速度増分

input double Signal_SAR_Maximum =0.2; // パラボリック SAR(0.02,0.2) 最大レート

input double Signal_SAR_Weight =1.0; // 放物線状SAR(0.02,0.2) 重量 [0...1.0] //-- 貨幣入力

//--- お金の入力

input double Money_FixLot_Percent =10.0; // パーセント。

input double Money_FixLot_Lots =0.1; // 固定数量

//+------------------------------------------------------------------+

//| グローバル・エキスパート・オブジェクト

//+------------------------------------------------------------------+

CExpert ExtExpert;

//+------------------------------------------------------------------+

//| エキスパートの初期化関数

//+------------------------------------------------------------------+

int OnInit()

{

//--- エキスパートの初期化

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))

{

//----- 失敗

printf(__FUNCTION__+": エラーのエキスパートの初期化");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- シグナルの作成

CExpertSignal *signal=new CExpertSignal;

if(signal==NULL)

{

//----- 失敗

printf(__FUNCTION__+": シグナル作成エラー");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//---

ExtExpert.InitSignal(signal);

signal.ThresholdOpen(Signal_ThresholdOpen);

signal.ThresholdClose(Signal_ThresholdClose);

signal.PriceLevel(Signal_PriceLevel);

signal.Expiration(Signal_Expiration);

//--- フィルタの作成 CSignalSAR

CSignalSAR *filter0=new CSignalSAR;

if(filter0==NULL)

{

//----- 失敗

printf(__FUNCTION__+": filter0作成エラー");

ExtExpert.Deinit();

return(INIT_FAILED);

}

signal.AddFilter(filter0);

//--- フィルタのパラメータを設定する

filter0.Step(Signal_SAR_Step);

filter0.Maximum(Signal_SAR_Maximum);

filter0.Weight(Signal_SAR_Weight);

//--- トレーリングオブジェクトの作成

CTrailingNone *trailing=new CTrailingNone;

if(trailing==NULL)

{

//----- 失敗

printf(__FUNCTION__+": error creating trailing");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- エキスパートに末尾を追加する(自動的に削除されます))

if(!ExtExpert.InitTrailing(trailing))

{

//----- 失敗

printf(__FUNCTION__+": trailingの初期化エラー");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- トレーリング・パラメータの設定

//--- マネーオブジェクトの作成

CMoneyFixedLot *money=new CMoneyFixedLot;

if(money==NULL)

{

//----- 失敗

printf(__FUNCTION__+": マネー作成エラー");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- エキスパートにお金を追加する (自動的に削除されます))

if(!ExtExpert.InitMoney(money))

{

//----- 失敗

printf(__FUNCTION__+": お金の初期化エラー");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- マネーパラメータを設定する

money.Percent(Money_FixLot_Percent);

money.Lots(Money_FixLot_Lots);

//--- すべての取引オブジェクトのパラメータをチェックする

if(!ExtExpert.ValidationSettings())

{

//----- 失敗

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- 必要なすべてのインジケータのチューニング

if(!ExtExpert.InitIndicators())

{

//----- 失敗

printf(__FUNCTION__+": インジケータの初期化エラー");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- OK

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| エキスパートの初期化関数

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

ExtExpert.Deinit();

}

//+------------------------------------------------------------------+

//| イベントハンドラ関数

//+------------------------------------------------------------------+

void OnTick()

{

ExtExpert.OnTick();

}

//+------------------------------------------------------------------+

//| トレード」イベントハンドラ関数

//+------------------------------------------------------------------+

void OnTrade()

{

ExtExpert.OnTrade();

}

//+------------------------------------------------------------------+

//| タイマー」イベントハンドラ関数

//+------------------------------------------------------------------+

void OnTimer()

{

ExtExpert.OnTimer();

}

//+------------------------------------------------------------------+


 
興味深い提案ですね。OrderCalcProfit()関数はMT5にしか存在しませんし、ロット計算のアイデアはMT4の時代までさかのぼります...。
 
アプリで自分のセッションを開いて、所持金を確認することができない。
 

私は今、あなたのソリューションを理解する時間がありました。MQのデモ口座の金と銀で見ることができるように、より正確で(もう一方は手数料が考慮されるため、より慎重なのでしょうか?

MetaQuotes demo account (b. 3369 Beta channel)
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   XAUUSD  in: 1717.65000 sl:1717.15000  diff:0.50000  delta:10.00000  delta:*diff:5.00000  tVal:0.10000  tSz:0.01000
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   XAGUSD  in: 18.45100 sl:18.40100  diff:0.05000  delta:500.00000  delta:*diff:25.00000  tVal:0.50000  tSz:0.00100
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   EURUSD  in: 1.02185 sl:1.02235  diff:0.00050  delta:97861.72139  delta:*diff:48.93086  tVal:0.97862  tSz:0.00001
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 9983.40 EUR:  XAUUSD  BU  in: 1717.65000  sl: 1717.15000  lotsC: 71.3100 (-3489.26)  lotsB: 10.2000 (-499.09)
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 9983.40 EUR:  XAGUSD  BU  in: 18.45100  sl: 18.40100  lotsC: 18.4900 (-4523.66)  lotsB: 2.0400 (-499.09)
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 9983.40 EUR:  EURUSD  SE  in: 1.02185  sl: 1.02235  lotsC: 9.8000 (-479.29)  lotsB: 10.2100 (-499.34)


RoboForex Demo account (b. 3320 release channel)
2022.07.25 17:46:22.772 test_MM-functions (EURUSD,D1)   XAUUSD  in: 1717.10000 sl:1717.15000  diff:0.05000  delta:100.00000  delta:*diff:5.00000  tVal:0.10000  tSz:0.00100
2022.07.25 17:46:22.772 test_MM-functions (EURUSD,D1)   XAGUSD  in: 18.43400 sl:18.43350  diff:0.00050  delta:5000.00000  delta:*diff:2.50000  tVal:0.05000  tSz:0.00001
2022.07.25 17:46:22.772 test_MM-functions (EURUSD,D1)   EURUSD  in: 1.02186 sl:1.02236  diff:0.00050  delta:100000.00000  delta:*diff:50.00000  tVal:1.00000  tSz:0.00001
2022.07.25 17:46:22.773 test_MM-functions (EURUSD,D1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 5348.69 USD:  XAUUSD  SE  in: 1717.10000  sl: 1717.15000  lotsC: 38.2000 (-191.00)  lotsB: 53.4900 (-267.45)
2022.07.25 17:46:22.773 test_MM-functions (EURUSD,D1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 5348.69 USD:  XAGUSD  BU  in: 18.43400  sl: 18.43350  lotsC: 59.4300 (-148.57)  lotsB: 106.9700 (-267.42)
2022.07.25 17:46:22.773 test_MM-functions (EURUSD,D1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 5348.69 USD:  EURUSD  SE  in: 1.02186  sl: 1.02236  lotsC: 5.1400 (-257.00)  lotsB: 5.3500 (-267.50)

MQ口座では、ロットサイズが高すぎます。

以下は2つの方法を比較するためのスクリプトです:

//+------------------------------------------------------------------+
//|                                            test_MM-functions.mq5 |
//|                                                            Calli |
//|                              https://www.mql5.com/de/users/gooly |
//+------------------------------------------------------------------+
#property copyright "Calli"
#property link      "https://www.mql5.com/de/users/gooly"
#property version   "1.00"
#property script_show_inputs
//--- input parameters
input double   risk_perCent   = 5.0;   // risk of capital in % on free_margin
input double   diff_sl        = 50;    // diff sl in points from entry
input double   CommPerLot     = 2.00;  

string Com = "",Syms[] = {"XAUUSD", "XAGUSD", "EURUSD" }; //,"AUDUSD","GBPCHF","GBPUSD", "EURCAD", "USDCAD", "USDRUB", "GBPJPY", "USDJPY"};

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#define  forEach(TYPE, VAR, ARRAY) \
                TYPE VAR=NULL; \
                for(int i##VAR=0;  i##VAR<ArraySize(ARRAY)&&((VAR=ARRAY[i##VAR])!=NULL||true);  i##VAR++)

void OnStart()
  {
//---
   MqlTick mqTick;
   forEach(string, sym, Syms){
      
      double pnt = SymbolInfoDouble(sym,SYMBOL_POINT);
      ENUM_ORDER_TYPE ord = GetMicrosecondCount()%2==0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL; // randomly buy or sell
      SymbolInfoTick(sym,mqTick); 
      double entry = (ord==ORDER_TYPE_BUY) ? mqTick.ask : mqTick.bid,
             sl    = (ord==ORDER_TYPE_BUY) ? entry - diff_sl*pnt : entry + diff_sl*pnt,
             lossC = 0.0, lossB = 0.0,
             lotsC = lotszC(risk_perCent, entry, sl, sym, CommPerLot), 
             lotsB = lotszB(risk_perCent, entry, sl, sym, CommPerLot);
      
      if (!OrderCalcProfit(ord, sym, lotsC, entry, sl, lossC) ) 
         Print("chk OrderCalcProfit(",EnumToString(ord),", ",sym,", lot: ",lotsC,", in: ",DoubleToString(entry,6),", out: ",DoubleToString(sl,6),", lossC) => err: ",_LastError," lossC: ",lossC);
             
      if (!OrderCalcProfit(ord, sym, lotsB, entry, sl, lossB) ) 
         Print("chk OrderCalcProfit(",EnumToString(ord),", ",sym,", lot: ",lotsC,", in: ",DoubleToString(entry,6),", out: ",DoubleToString(sl,6),", lossC) => err: ",_LastError," lossC: ",lossC);
             
      string res = StringFormat("Set: Risk: %.1f %%, dSL: %.0f  Com/Lot: %.2f  Free: %.2f %s:  %s  %s  in: %.5f  sl: %.5f  lotsC: %.4f (%+.2f)  lotsB: %.4f (%+.2f)",
                                 risk_perCent, diff_sl, CommPerLot,
                                 AccountInfoDouble(ACCOUNT_MARGIN_FREE),AccountInfoString(ACCOUNT_CURRENCY),
                                 sym, (ord==ORDER_TYPE_BUY ? "BU" : "SE"), entry, sl, lotsC, lossC, lotsB, lossB );
      Com = Com + res+"\n";
   }
   Comment(Com);
   //Print(Com);
  }
//+------------------------------------------------------------------+
double lotszC (double risk, double entry, double sl, string sym="", double CommissionPerLot=0) {
   if (sym == "") sym = _Symbol;
   double deltaValue = SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE);
   ENUM_ORDER_TYPE ordDir = entry > sl ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   double diff = fabs (entry - sl); 
   Print(sym,"  in: ",DoubleToString(entry,5)," sl:",DoubleToString(sl,5),"  diff:",DoubleToString(diff,5),
         "  delta:",DoubleToString(deltaValue,5),"  delta:*diff:",DoubleToString(deltaValue*diff,5),
         "  tVal:",DoubleToString(SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE),5),"  tSz:",
         DoubleToString(SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE),5));
   double lts = ( (AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk/100) / (diff * deltaValue + CommissionPerLot) );
   lts = ( fmin(fmax(SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN),lts),SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return (MathRound(lts/stepSize)*stepSize);
}

double lotszB (double risk, double entry, double sl, string sym="", double CommissionPerLot=0) {
   if (sym == "") sym = _Symbol;
   ENUM_ORDER_TYPE ordDir = entry > sl ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   double loss;
   if (!OrderCalcProfit(ordDir, sym, 1, entry, sl, loss)) return(-1.0);
   double lts = ((AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk * 0.01) / -loss);
   lts = (fmin(fmax(SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN), lts), SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return (MathRound(lts / stepSize) * stepSize);
}

私はin > sl(買い)またはin < sl(売り)から方向を導きました。そうすれば、保留中の注文に問題はないでしょう。

 

テストありがとうございます。はい、結果を互いに比較すると、OrderCalcProfit の一貫性と、少なくとも EURUSD と RoboForex については、結果がおよそ「Lot size * CommissionPerLot」だけ異なることがわかります。これは追加することができます:

if (!OrderCalcProfit(ordDir, sym, 1, entry, sl, loss)) return(-1.0);
double lts = ((AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk * 0.01) / (-loss + CommissionPerLot);
フォーラム検索を正しく使用した場合、MQL5を使用して直接 "CommissionPerLot "値を照会する方法はありませんよね?
 
Benjamin Fotteler #:


フォーラム検索を正しく使用した場合、MQL5を使用して "CommissionPerLot "の値を直接照会する方法はないのですね?

はい、ターミナルで直接ではなく、ブローカーまたは取引履歴のDEAL_COMMISSIONで 要求します。

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Eigenschaften der Deals
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Eigenschaften der Deals
  • www.mql5.com
Eigenschaften der Deals - Handelskonstanten - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
理由: