無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
エキスパート

Money Fixed Margin - MetaTrader 5のためのエキスパート

ビュー:
1240
評価:
(27)
パブリッシュ済み:
2017.04.14 07:42
アップデート済み:
2018.02.22 13:44
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

固定証拠金レベルでロット値を計算する例です。つまり、10%を指定すると、証拠金の10%に等しいポジションが開かれます。

入力パラメータ:

  • StopLoss (in pips) — 決済逆指値レベル
  • % risk — 余剰証拠金の%としてのポジションの証拠金

取引をシミュレートするために次のループが実装されています。

   static long count=-21;
   if(count%980==0) // 980ティックを通過する
     {
      //--- 買いポジションのロットサイズの取得 (CMoneyFixedMargin)

初期値のcount=-21はストラテジーテスタを「準備」するために設定されています。次に、count980(この数はランダムに選択されたものです)で除算した後の余りを計算します。これは、980ティックごとにロットの計算サイクルが開始され、ロットが取引当たりのリスクを考慮して計算されることを意味します。

取引あたりのリスクに応じたロット計算サイクル(買いポジションの計算):

ステップ1

      //--- 買いポジションのロットサイズの取得 (CMoneyFixedMargin)
      double sl=0.0;
      double check_open_long_lot=0.0;
      //--- バリアント#1:StopLoss=0.0
      sl=0.0;
      check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      Print("sl=0.0",
            ", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
            ", Balance: ",    DoubleToString(m_account.Balance(),2),
            ", Equity: ",     DoubleToString(m_account.Equity(),2),
            ", FreeMargin: "DoubleToString(m_account.FreeMargin(),2));
      //--- バリアント#2:StopLoss!=0.0
      sl=m_symbol.Bid()-ExtStopLoss;
      check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      Print("sl=",DoubleToString(sl,m_symbol.Digits()),
            ", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
            ", Balance: ",    DoubleToString(m_account.Balance(),2),
            ", Equity: ",     DoubleToString(m_account.Equity(),2),
            ", FreeMargin: "DoubleToString(m_account.FreeMargin(),2));
      if(check_open_long_lot==0.0)
         return;

次に、CMoneyFixedMargin クラスのCheckOpenLongメソッドを使用して、決済逆指値を考慮したBuyポジションの計算されたロット値をcheck_open_long_lot変数に受け取ります。

      double check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),m_symbol.Bid()-ExtStopLoss);

決済逆指値、取引当りのリスクに応じて計算されたロット値、計算時の取引口座残高、計算時の証拠金のパラメータはエキスパートの操作ログに出力されます。 

計算が"0.0"を返した場合は終了します。

      if(check_open_long_lot==0.0)
         return;

ステップ 2

その後、十分な資金を持っている買いポジションのロット価値を受け取ります。 この値はCTradeクラスのCheckVolumeメソッドを使用してchek_volime_lot 変数で受け取られます。ここでは、m_symbol.Name()-銘柄名、 check_open_long_lot - 開こうとするポジションの数量(このパラメータは先に計算されたものです)が受け渡しされます。 

      //--- "not enough money(不十分な資金)"エラー(CTrade)を避けるためにOrderSendの前に数量を確認する
      double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);

ステップ3

CheckVolumeメソッドが "0.0"以外の値を返した場合、リスクに応じて計算されたロットのポジションを開くのに十分な金額を持っているかどうかを確認します。

      if(chek_volime_lot!=0.0)
         if(chek_volime_lot>=check_open_long_lot)
            m_trade.Buy(chek_volime_lot,NULL,m_symbol.Ask(),m_symbol.Bid()-ExtStopLoss,m_symbol.Bid()+ExtStopLoss);
      else
         Print("CMoneyFixedRisk lot = ",DoubleToString(check_open_long_lot,2),
               ", CTrade lot = ",DoubleToString(chek_volime_lot,2));

十分な資金がある場合はポジションを開きます。そうでない場合は、取引当りのリスクによって計算されたロット価値(DoubleToString(check_open_long_lot,2))と、資金がカバーできるロットの値(DoubleToString(chek_volime_lot,2))がエキスパート操作ログに印刷されます。<分節0297>.

余剰証拠金の10%で買いポジションを開く例:

Money Fixed Margin open.png

下記が操作ログにプリントされます。

Money Fixed Margin (EURUSD,M1)  2016.11.28 00:03:24   sl=0.0, CheckOpenLong: 0.28, Balance: 3000.00, Equity: 3000.00, FreeMargin: 3000.00
Money Fixed Margin (EURUSD,M1)  2016.11.28 00:03:24   sl=1.05792, CheckOpenLong: 0.28, Balance: 3000.00, Equity: 3000.00, FreeMargin: 3000.00
Trade   2016.11.28 00:03:31   instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 (1.06042 / 1.06076 / 1.06042)
Trades  2016.11.28 00:03:31   deal #2 buy 0.28 EURUSD at 1.06076 done (based on order #2)
Trade   2016.11.28 00:03:31   deal performed [#2 buy 0.28 EURUSD at 1.06076]
Trade   2016.11.28 00:03:31   order performed buy 0.28 at 1.06076 [#2 buy 0.28 EURUSD at 1.06076]
Money Fixed Margin (EURUSD,M1)  2016.11.28 00:03:31   CTrade::OrderSend: instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 [done at 1.06076]

余剰証拠金のリスクに応じてロットを計算する場合、決済逆指値は関係ありません。

MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/17282

ラッキー ラッキー

ティックエキスパートアドバイザー前のティックの価格と現在の価格を比較します。

SimpleTrade SimpleTrade

ゼロバーと3番目のバーの始値を比較します。

RSI EA RSI EA

RSI EA - iRSI(Relative Strength Index、RSI)指標によって決定された買われ過ぎ/売られ過ぎ領域に基づく取引です。

MA Reverse MA Reverse

移動平均による取引。資金が十分にあるかを確認。