私のオートロットの秘密 ダイナミック・ロットまたはオートロット

インジケーターにアラート インジケーターにアラートと矢印を挿入するには?
マーケット MQL5。エキスパートアドバイザーのインストールに関する問題とエラーとその解決策
インジケーターにアラート インジケーターにアラートと矢印を挿入するには?
マーケット MQL5。エキスパートアドバイザーのインストールに関する問題とエラーとその解決策

説明

この記事では、異なる通貨ペアやさまざまな種類の預金にわたるフリーマージンリスク%に基づいてロットサイズを計算する方法を説明します。Autolotまたはバランスからのダイナミックロット。RiskManager。私のAutolotコードをお見せします。

始めましょう:

基本概念:

まず、この計算で使用されるいくつかの概念を強調します:

フリーマージン( AccountFreeMargin() )– オープンポジションの担保として使用されていない資金。フリーマージンは以下の式で計算されます:フリーマージン = 現在の預金残高 – オープンポジションに必要なマージン。この指標は、現在開くことができる取引の数を決定します。

アスク(Ask)は、ブローカーから特定の金融商品を購入する価格です。ブローカーはこの価格であなたに販売します。Forex市場で取引するとき、この種類の価格は取引ターミナルから株式レポート、金融市場に関する分析記事まで至るまでどこでも見られます。

ビッド(Bid)は、ブローカーに特定の金融商品を売却する価格です。ブローカーはこの価格であなたから購入します。Forex市場で取引するとき、この種類の価格は国際Forex市場に関する議論が行われる場所ならどこでも見られます:取引ターミナルやブローカーのウェブサイトの為替レートから、国際金融市場に関する株式レポートや分析記事まで。

レバレッジ(Leverage)は、担保額と借入額の比率です。最初にレバレッジを選択するとき、クライアントの預金がどの倍率で増加しForex市場での取引操作を行うかを示すレバレッジサイズを選択します。クライアントは1:1から1:500までのレバレッジを選択でき、これはクライアントが自身の資金のみで取引するか、預金を最大500倍まで増加させてこの金額で市場に参入できることを意味します。レバレッジは、トレーダーが預金額に対してどれだけの額で市場に参入するかの比率として、取引プロセスにおいて重要な役割を果たします。これにより、トレーダーは資本を大幅に増加させることができます。

通貨ペア(Currency Pair)は、2つの通貨の指定で、共に為替レートを形成します。通貨ペアは金融取引の対象として機能します。通貨ペアはペアを構成する2つの通貨の連続した指定によって示され、次の形式で一緒にまたはスラッシュで区切って書かれます:基軸通貨 / 見積もり通貨。基軸通貨は最初に売買される通貨で、見積もり通貨は基軸通貨の価格を表すために使用されます。通貨ペアは外国為替市場の基本概念であり、この市場に関するすべての場所に存在します:市場レポートから取引ターミナルまで。

ロットサイズ(Lot Size) – 基軸通貨、商品、または契約仕様で指定された株式数の量。ロットサイズは契約で指定された通貨量に依存し、取引契約のサイズを決定するための測定単位です。ロットには特定のサイズがあり、これを使用してForex市場での金融取引に使用される通貨の量を決定します。取引を実行するために、クライアントは取引のサイズをロット数で決定します。取引取引の量は、取引を構成する通貨の量を示します。ロットは契約のサイズであり、Forex取引で使用される固定額の通貨です。

2つの通貨間の為替レートは、特定の瞬間における需給の相互作用によって決定されます。
このプロセスは通貨見積もり(currency quoting)として知られ、見積もりは直接見積もり(direct)または逆見積もり(reversed)のいずれかになります。

直接見積もり(direct quotation)は、外国通貨の価格を国民通貨の単位で反映します。
ほとんどの為替レートは、さまざまな国の通貨に対する米ドル(US dollar)の直接見積もりとして表現されます。

例えば、USD/UAH—30.70は1米ドルが30.70ウクライナ・フリヴニア(Ukrainian hryvnias)に相当し、
USD/CHF—1.0850は1米ドルが1.0850スイスフラン(Swiss francs)に相当することを示します。

逆見積もり(reverse quotation)は、国民通貨の価値を外国通貨の観点から表現します。
歴史的に、英国ポンド(British pound)ユーロ(euro)オーストラリアドル(Australian dollar)、およびニュージーランドドル(New Zealand dollar)のような通貨がこの方法で見積もられてきました。

例えば、EUR/USD—1.3374は1ユーロが1.3374米ドルに相当し、
GBP/USD—1.5970は1英国ポンドが1.5970米ドルに相当することを意味します。

また、米ドルが基軸通貨でも見積もり通貨でもないクロス為替レート(cross exchange rate)の概念もあります。
例としてはEUR/JPYGBP/CHF、およびEUR/GBPがあります。

技術的側面

  1. NormalizeDouble – 浮動小数点数を指定された精度に丸めます。
  2. MODE_LOTSIZE – 金融商品の基軸通貨での契約サイズ。
  3. MODE_LOTSTEP – ロットサイズを変更するステップ。
  4. AccountCurrency – 現在のアカウントの通貨名を返します。
  5. MathFloor – 関数はx以下の最大の整数を返します。


必須:すべての計算が正確であることを確認するために、「マーケットウォッチ」パネルですべてのシンボルを有効にしてください :

アカウント通貨の私の計算式

私の計算式は次のようになります:

USD預金

Deposit USD Direct Quote ()

ロット = フリーマージン * リスク * レバレッジ / 100 / 契約サイズ

Deposit USD Back Quote()

ロット = フリーマージン * リスク * レバレッジ / アスク / 100 / 契約サイズ

Deposit USD Cross Rate:

オプション1: 基軸通貨 + USD の現在の価格がある場合(例えば、決済ペアがAUDCADの場合、基軸通貨の現在の価格 = AUDUSD)

ロット = フリーマージン * リスク * レバレッジ / (基軸通貨の現在の価格 + USD) / 100 / 契約サイズ

オプション2: 基軸通貨 + USD の現在の価格がない場合(例えば、CADJPY)

ロット = フリーマージン * リスク * レバレッジ / 100 / 契約サイズ

EUR預金

Deposit EUR Direct Quote

ロット = フリーマージン * リスク * レバレッジ / 100 / 契約サイズ

Deposit EUR Cross Rate:

現在の価格 = EUR + 見積もり通貨(例えば、決済ペアがAUDCADの場合、見積もり通貨の現在の価格 = EURAUD)

ロット = フリーマージン * リスク * レバレッジ / (現在の価格 EUR + 見積もり通貨) / 100 / 契約サイズ

UAH預金およびその他

Deposit UAH Back Quote (例えば、USDUAH)

ロット = MathFloor(フリーマージン * リスク * レバレッジ / 100 / 現在の価格 / 契約サイズ / ロットステップ / 20) * ロットステップ

Deposit UAH Cross (例:EURGBP)

現在の価格 = MarketInfo(StringSubstr(Symbol(), 0, 3) + UAH + StringSubstr(Symbol(), 6), MODE_BID);

if(pr != 0) ロット2 = MathFloor(フリーマージン * リスク * レバレッジ / 現在の価格 / 100 / 契約サイズ / ロットステップ) * ロットステップ;
それ以外の場合、ロット = MathFloor(フリーマージン * リスク * レバレッジ / 100 / 契約サイズ / ロットステップ) * ロットステップ;

これらの関数の順序は、異なる預金でパラメータを計算することによって決定されました。

これらの計算に関する提案がある場合は、プログラミングの注文時にあなたのAutolot関数を共有してください。

または フリーランス:MetaTraderおよびMQLのカスタムプログラミング! 終了?

外部変数 Autolot計算関数:

ロットポジションを開くための固定ロット。
RiskLotType
TypeAutolot
Autolot計算タイプ:
BALANCE(バランスからのリスク) – Autolotは現在のバランスから計算されます。ロット計算はアカウントのバランスに基づいています。アカウントにオープンポジションがある場合、次のロットは現在のオープンポジションの数からバランスが減少しないため、ほぼ同じになります!
FREEMARGIN(フリーマージンからのリスク) – フリーマージンからの標準的なロット計算は、アカウントにオープンポジションが多いほど、次のポジションのために計算されるロットが小さくなります。これは、ポジションを開くとフリーマージンが減少するため、Autolotを計算する際に各新しいオープンポジションのロットが小さくなるからです。

RiskLotオプションのリスク計算タイプ:

利用可能なモード:
RiskLotType = 0, // フリーマージンからのリスク
RiskLotType = 1, // バランスからのリスク
DynamicLotオープンポジションのためのダイナミックロット、Autolot
フリーマージンの割合や他の要因としてダイナミックロット計算をONにすることができます。
私たちのAutolotの計算:
式とコード:https://expforex.com/ja/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4
DynamicLotStopLossSLからのリスク – ストップロスを考慮した自動ロットを計算します。
ストップロスで取引をクローズするときのバランスの割合としての最大損失。
ロットを計算するとき、私たちのExpert Advisorは取引を開く時点でのストップロスを考慮します。
取引がストップロスでクローズすると、その取引からの損失は取引を開いた時点でのバランスの割合に等しくなります。
重要! 取引を開いた後にストップロスが変更された場合、取引のロットサイズは変更できません。取引をクローズするときに損失が増減する可能性があります。
重要! トレーリングストップを使用すると、取引のストップロスが各ティックで変更されますが、ロットサイズは変更できません。
式とコード:https://expforex.com/ja/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5
LotBalancePcnt
RiskLot
LotBalancePercent
Autolotの割合
ダイナミックロット(Autolot)関数の割合。

RiskLot = 0 の場合、取引のロット(ボリューム)はパラメータ Lot に従って計算されます。

RiskLot が0でない場合、クライアントのフリーマージンの割合としてロットが計算されてAutolotでクライアントターミナルで取引が開かれます。
RiskRateドル(またはアカウント通貨)に対するあなたの通貨のレート。

デフォルトでは、RiskRate = 0 であり、これはExpert Advisorがマーケットレビューで正しいレートを見つけようとすることを意味します。
すべての通貨ペアでAutolotが正常に機能するためには、「すべての通貨ペアを表示(Show All Currency Pairs)」をマーケットウォッチ(Market Watch)でONにする必要があります。
MaxLotExpert AdvisorAutolotおよび最初のメインポジションのマーチンゲールを計算するときに開くことができる最大ロット。
Martinマーチンゲール。 損失で最後にクローズされたポジションのロットの標準乗算。

Martin = 1 の場合、マーチンゲールはアクティブになりません(固定ロット)。
Martin = 0 の場合、Expert Advisorは次のポジションを開くことができません。
Martin = 2 の場合、最初のロット = 0.1、2番目のロット = 0.2、以降は0.4 – 0.8 – 1.6 – 3.2 – 6.4…..
Martin = 0.5 の場合、最初のロット = 1、2番目のロット = 0.5、以降は0.25 – 0.125。

コードが必要ですか?

Autolot計算 コード関数:

input  double                    Lots=0.01;                                //Lots --> オープンポジションとオーダーの固定ロット
input bool DynamicLot=false; //DynamicLot --> フリーマージンからロットを計算
input bool DynamicLotStopLoss=false; //DynamicLotStopLoss --> ストップロスとフリーマージンからロットを計算
input double LotBalancePercent=1; //LotBalancePercent --> ロット計算のための割合
extern double RiskRate=0; //RiskRate --> ロット計算のための通貨へのシンボルレート
input double MaxLot=999; //MaxLot --> ポジションを開く際の最大ロット

double GetSizeLot(double ll=1) // The function returns the lot size
{
string Author = "Author of function template: www.expforex.com";
string lotcalc;
double pr;
string Valdepo = AccountCurrency();
// If MM is enabled, then determine the lot size
double Lot2, MinLots, MaxLots;
int lotdig;
if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1;

if (Valdepo == "USD")
{
if (StringSubstr(Symbol(), 0, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else if (StringSubstr(Symbol(), 3, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}

if (Valdepo == "EUR")
{
if (StringSubstr(Symbol(), 0, 3) == "EUR")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo("EUR" + StringSubstr(Symbol(), 0, 3), MODE_BID);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() * pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}

if (Valdepo == "UAH")
{
if (StringSubstr(Symbol(), 0, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else if (StringSubstr(Symbol(), 3, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}

MinLots = MarketInfo(Symbol(), MODE_MINLOT);
MaxLots = MaxLot;
lotcalc = "Autolot=" + Lot2;
if (!DynamicLot) Lot2 = Lots;

if (Lot2 < MinLots) Lot2 = MinLots;
if (Lot2 > MaxLots) Lot2 = MaxLots;
lotcalc = lotcalc + " MinLots=" + MinLots + " LOT=" + NormalizeDouble(Lot2, lotdig);
Print(lotcalc);
return (NormalizeDouble(Lot2, lotdig));
}

ストップロス Autolot 計算関数:

EAにストップロス Autolot 機能を追加したい場合は、私たちのコードをダウンロードできます:

StopLosssd = ポイント単位のストップロス

外部変数:

ロット = 0.1; // 固定ロット

DynamicLotStopLoss = // true/false

LotBalancePcnt (RiskLot) = 20; // フリーマージンの %
 

関数:

double GetSizeLotStopLoss(double StopLosssd=1) // 関数はロットサイズを返します
{
  string Author = "Author of function template: www.expforex.com";
  string Valdepo = AccountCurrency();
  // MMが有効な場合、ロットサイズを決定します
  double MinLots;
  int lotdig;
  if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1;
  double Free = AccountFreeMargin();
  double LotVal = MarketInfo(Symbol(), MODE_TICKVALUE); // 1ロットあたりの1ピップのコスト
  double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
  double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT);
  double Step = MarketInfo(Symbol(), MODE_LOTSTEP);
  double Lot = MathFloor((Free * LotBalancePcnt / 100) / (StopLosssd * LotVal) / Step) * Step;
  MinLots = MarketInfo(Symbol(), MODE_MINLOT);

  if (Lot < MinLots) Lot = MinLots;

  return (NormalizeDouble(Lot, lotdig));
}

質問がありますか?

ご質問がある場合は、お気軽にお問い合わせください。私たちは不明瞭な取引は行いません。

私たちの製品は各製品ごとに購入前にテストできます。

私たちの製品に対するご関心とサポートに感謝しており、高品質の基準を維持するよう努めています。

ご利用いただきありがとうございます!

質問がありますか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

“私のオートロットの秘密 ダイナミック・ロットまたはオートロット” への2件のフィードバック

  1. erikのアバター
    erik

    I want to be able to double whatever lot size that is being copied from the master onto the client.. How do I do that with settings… so no matter what every new position the client with be 2x that.. master opens a trade of .03, then it will be copied to client as .06.

この記事は次の言語でもご覧いただけます: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어


     

    リスクの警告


    過去の取引実績は将来の結果を保証するものではない。

    外国為替証拠金取引には高いリスクが伴うため、すべての投資家に適しているとは限りません。

    取引ロボットを使用することはかなりのリスクを伴い、初期投資額以上の損失を被る可能性があることに注意してください。

    慎重に行動し、ご自身の財務状況を慎重に判断し、資格を有する専門家の助言を求めることをご検討ください。

    免責事項

    このウェブサイトは、あなたの体験を向上させるためにクッキーを使用しています。このウェブサイトを利用することで、当社のデータ保護方針および免責事項に同意したことになります。
    続きを読む