私たちのファンページに参加してください
- ビュー:
- 1366
- 評価:
- パブリッシュ済み:
- 2017.04.14 07:42
- アップデート済み:
- 2018.02.22 13:44
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
固定証拠金レベルでロット値を計算する例です。つまり、10%を指定すると、証拠金の10%に等しいポジションが開かれます。
入力パラメータ:
- StopLoss (in pips) — 決済逆指値レベル
- % risk — 余剰証拠金の%としてのポジションの証拠金
取引をシミュレートするために次のループが実装されています。
if(count%980==0) // 980ティックを通過する
{
//--- 買いポジションのロットサイズの取得 (CMoneyFixedMargin)
初期値のcount=-21はストラテジーテスタを「準備」するために設定されています。次に、countを980(この数はランダムに選択されたものです)で除算した後の余りを計算します。これは、980ティックごとにロットの計算サイクルが開始され、ロットが取引当たりのリスクを考慮して計算されることを意味します。
取引あたりのリスクに応じたロット計算サイクル(買いポジションの計算):
ステップ1
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変数に受け取ります。
決済逆指値、取引当りのリスクに応じて計算されたロット値、計算時の取引口座残高、計算時の証拠金のパラメータはエキスパートの操作ログに出力されます。
計算が"0.0"を返した場合は終了します。
return;
ステップ 2
その後、十分な資金を持っている買いポジションのロット価値を受け取ります。 この値はCTradeクラスのCheckVolumeメソッドを使用してchek_volime_lot 変数で受け取られます。ここでは、m_symbol.Name()-銘柄名、 check_open_long_lot - 開こうとするポジションの数量(このパラメータは先に計算されたものです)が受け渡しされます。
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>=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 (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

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

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