お金の管理:ロットサイジング-mqlチュートリアル

はじめに

すでに聞いたことがあるかもしれませんが、取引システムに適切なロットサイズを選択することは、優れたシステムを開発するための重要な要素です。ロットサイズは、内部変数ですべての注文の固定ロットサイズとして宣言するのと同じくらい簡単に指定できますが、空き証拠金のパーセンテージに基づいてロットサイズを計算する簡単な方法を検討します。

舞台裏には少し数学がありますが、基本的に、1のカスタムリスク設定を選択した場合、エクイティサイズの1Kごとに0.01マイクロロットを取引します。したがって、2のカスタムリスク設定と10Kのアカウントサイズを使用すると、0.2ロットから開始し、利益/損失100ドルごとに0.01ロットを自動的に加算/減算します。この自動ロットサイジング手法は非常にシンプルですが、利益を自動的に複利計算したり、損失を複利計算したり、口座の預金と引き出しを自動的に調整したりするのに非常に効果的です。

パラメータ

MM

Bool:お金の管理を使用するかどうか。

リスク

ダブル:事前定義されたリスク設定。

たくさん

ダブル:MMがオフの場合、これは使用する手動ロットサイズです。

LotDigits

ダブル:これは、ブローカーが提供するロットの小数点以下の桁数です。ほとんどの場合、小数点以下2桁ですが、小数点以下1桁の場合もあります。

MT4コードスニペット

extern bool MM =TRUE;
extern double Risk =2;
extern double Lots =0.1;
extern double LotDigits =2;
double GetLots()

{
double minlot =MarketInfo(Symbol()、MODE_MINLOT);
double maxlot =MarketInfo(Symbol()、MODE_MAXLOT);
double Lebrage =AccountLeverage();
double lotsize =MarketInfo(Symbol()、MODE_LOTSIZE);
double stoplevel =MarketInfo(Symbol()、MODE_STOPLEVEL);

ダブルMinLots =0.01; double MaximalLots =50.0;

if(MM)
{
double lots =Lots;

double lots =NormalizeDouble(AccountFreeMargin()* Risk / 100 / 1000.0、LotDigits);
if(lots if(lots> MaximalLots)lots =MaximalLots;
if(AccountFreeMargin() Print(“私たちはお金がありません。Lots=“、lots、”、Free Margin =“、AccountFreeMargin());
コメント(「お金がありません。Lots=“、lots、”、Free Margin =“、AccountFreeMargin());
}}
else lots =NormalizeDouble(Lots、Digits);
return (ロット);
}

管理を(true)にする必要があるかどうかを判断するために、最初にいくつかの外部変数を宣言する必要があったことがわかります。 またはオフ(false) 、オンの場合はカスタムリスク設定になり、オンでない場合はデフォルトのロットサイズになります。

LotDigits ブローカーが許可する小数点以下の桁数です(たとえば、0.01などのマイクロロットを許可する場合、2桁または小数点以下の桁数になります)。

GetLots() はカスタム関数に付けた名前です。したがって、すべてのo(任意の名前である可能性があります)、およびその括弧の間に含まれるすべては、この関数の計算です。 GetLots()を配置するだけです OrderSend()関数の3番目のパラメーターでそれを呼び出すために、以前にあった固定ロット変数を置き換えます。

MarketInfo()を参照するための変数minlotを作成します 関数。 MarketInfo() 関数は、ビッドまたはアスク価格、スワップ値、桁数など、特定の通貨のさまざまな市場データを取得するために必要な関数です。また、目的のために、その通貨の最小ロットサイズも教えてくれます。 。ロット計算がどのように実行される場合でも、ブローカーの最小ロットサイズよりも大きいことを確認する必要があります。そうでない場合は、ミンロットよりも小さく、ミンロットになります。

自動MMロットの主な計算は1行で行われます:

ダブルロット=NormalizeDouble(AccountEquity()* Risk / 100 / 1000.0、LotDigits);

AccountEquity() は、経常収支の株式価値を返す多くの勘定情報関数の1つです。 AccountBalance()ではなく、アカウントの株式価値を返したい 、エクイティはアカウントの状態(別名、ネットアカウント値)のより有効な図を表すためです。エクイティバリューが適切なロットサイジングで計算を行うことを望んでいます。適切なロットサイズを決定するために、この株式価値にリスク値を掛け、次に100で割り、さらに1000で割ります。

効果は、選択したリスク設定に基づいて、比例したロットサイズになります。1Kのエクイティあたり1トレードのリスク設定0.01ロット、1Kのエクイティあたり2トレードのリスク設定0.02ロットなどになります。多くの可能性があります。 、選択したリスク設定に応じて。アカウントのサイズが大きくなったり小さくなったりすると、アカウントにロットが追加または削除されます。たとえば、リスク設定が2の場合、10Kアカウントで0.2ロットを取引し、エクイティの100ドルの利益または損失ごとに0.01ロットを加算/減算します。ユーザーは、自分のリスク許容度、EA取引スタイル、およびアカウントサイズに適したリスク設定を簡単に調整できます。

MM の場合 がtrueに設定されている場合、エクイティに基づいてロットサイズを計算し、その値をロット変数に割り当てます。 MM の場合 がfalseの場合、ロットの値をロットの固定ロットサイズに割り当てるだけです。

上記のコードは比較的単純であることがわかりますが、エクイティサイズの変化に基づいて自動ロットサイジングに大きな違いをもたらす可能性があります。ロットサイズを決定する方法はもっと複雑ですが、最も簡単な方法が最適な場合もあります。


事業戦略
  1. 会計
  2. 事業戦略
  3. 仕事
  4. 顧客関係管理
  5. ファイナンス
  6. 在庫管理
  7. 個人融資
  8. 投資
  9. コーポレートファイナンス
  10. バジェット
  11. 貯蓄
  12. 保険
  13. 借金
  14. 引退