SLと口座リスクに基づいたマネーマネジメントのLOTサイズ計算式が必要! - ページ 2

 
maleas_k:

もし私が質問を正しく理解していれば、これはあなたのために仕事をすることになります。


double free = AccountFreeMargin();

double potencial_loss,

double sum_potencial_loss = 0 (ダブル・サムポテンシャル・ロス = 0)

double pips, lot_size;

double percent_depo = 5;

potencial_loss = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000;
sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss;

lot_size = (((free-long_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ;



ありがとうございます。しかし、私はすでに式を持っている、私はUSDではなく、EUR口座を持っているので、私はちょうどポイントの値を 修正する必要があります。

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );

そして、私はTICKVALUE* TICKSIZEでポイントを置き換える必要があるので、それは次のようになります。

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* MarketInfo(Symbol(), MODE_TICKVALUE)* 
MarketInfo(Symbol(), MODE_TICKSIZE)  *100000 );

このアイデアが正しいことを確認できる人がいれば、問題は解決するのだと思います。

 
RaptorUK:

あなたのコードを削除しました .. . .


ご協力ありがとうございました。
 
Proximus:

ありがとうございます、しかし私はすでに数式を持っています、私はUSDではなくEURアカウントを持っているので、私はポイントの値を修正する必要があります。

そして、私はポイントをTICKVALUE* TICKSIZEに置き換える必要があり、それは次のようになります。

このアイデアが正しいことを確認できる人がいれば、問題は解決されると思います。ですから、早く私を助けてください。

私はそれを確認することはできませんが、私はこのようにAlert();でそれをデバッグすることをお勧めします?

Alert("LOT : ",LOT);

または

Alert("AccountEquity : ",(AccountEquity()," RISK : " ,RISK," MODE_STOPLEVEL : ", MODE_STOPLEVEL," MYSTOPLOSS : ",MYSTOPLOSS," MODE_TICKVALUE : " ,MODE_TICKVALUE," MODE_TICKSIZE : ,MODE_TICKSIZE);

そして、自分で確認するのです。

 
maleas_k:

ご協力ありがとうございました。
編集していただきありがとうございます
 
maleas_k:

確認はできませんが、このようにAlert();でデバッグすることをお勧めします。

または

と、自分で確認することになります。


いいえ、私が意味するのは、それが正しいTICKVALUE * TICKSIZEまたはWHRoederが提案したようにTICKVALUE / TICKSIZEを使用することです、*はより論理的に見えるので、そこに。

 

Proximus: WTF guys, shouldnt that be TICKVALUE * TICKSIZE instead of TICKVALUE /TICKSIZE ? I think there is a big mistake there

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );
  1. 例えばUSD口座の通貨でEURUSDの場合。
    TickValueが$10でTicksize=0.0001の場合。ここで、マーケットが0.0020動くと、その値は$10/0.0001 * 0.0020=$200 / per lotとなります。1ピップあたり$10 * 20ピップ / 1ロットです。
    TickValueが$1、Ticksizeが0.00001の場合。そこで、もし市場が0.0020動いたら、値は$1/0.00001 * 0.0020=$200 / per lotになります。これは間違いではありません。
  2. 100 * stoploss、StopLevel、Point * 10000など、あなたの 計算式がインチキな のです。私の元の式を読み直し、ロットサイズについて解く
 

OK、これが(最大)VOLUME SIZE CALCULATIONの ステップに なるはずです。

(間違っていたら訂正してください ^_^)

AccountMoneyRisk = AccountMoney * Risk%

AccountCounterQuote = Quote(AccountCurrency/CounterCurrency)

カウンターカレンシーリスク = AccountMoneyRisk * AccountCounterQuote

PipValue = CounterCurrencyRisk / StopLoss

LotTickValue = LotSize * TickSize

数量 = PipValue * LotTickValue


AccountCurrency:EUR
通貨ペア: GBPUSD
ベースカレンシー: GBPUSDGBP
カウンターカレンシードル

アカウントマネー:5000 EUR
リスク:1

ストップロス:200 pips(カウンター・カレンシー)
ロットサイズ:100000(カウンター・カレンシー)
ティックサイズ: 0.00001

アカウントマネーリスク = アカウントマネー * リスク% = 5000 EUR * 1% = 50 EUR

AccountCounterQuote = Quote(AccountCurrency/CounterCurrency) = Quote(EUR/USD) = 1.5000

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote = 50 EUR * 1.5000 = 75 USD

PipValue = CounterCurrencyRisk / StopLoss = 75 / 200 = 0.375

LotTickValue = LotSize * TickSize = 100000 * 0.00001 = 1 USD

ボリューム = PipValue * LotTickValue = 0.375 * 1 USD = 0.375



 

これは、CounterCurrency が AccountCurrency と同じであると仮定し スプレッドを含まず 5 桁のブローカーで pip == a point ticksize == point と誤って仮定しているものです。

必ずしもそうとは限りません。Account Balance * percent = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots *DeltaPerlot(Note OOP-OSL includes the SPREAD)

 

OK これは最終バージョンです。これが正しいかどうか確認してください。

これは私のロットサイジング機能 です。

extern int STOPSLIP=20;
extern double RISK=0.5;

double LOT()
{
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)* MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

if(clot<MarketInfo(Symbol(),MODE_MINLOT)) clot=MarketInfo(Symbol(),MODE_MINLOT);
if(clot>MarketInfo(Symbol(),MODE_MAXLOT)) clot=MarketInfo(Symbol(),MODE_MAXLOT); 
  return (clot);
} 
  • STOPSLIPは、現在のstoplevel+SPREADにX量のpipsを追加します。
  • 私がTICKVALUE * TICKSIZEを使うのは、私がUSDではなくEUR口座を持っているからで、私の5桁のブローカーでは、EUR為替レートでカウントされるので、pipvalueは0.00001ではなく0.000007になるのは理にかなっています。
だから、誰かそれが正しいかどうか確認して ください、またはそれが正しくない場合は、私の式を 修正してください、私はそれらを理解していないので、他の記事へのリンクを与えることはありません、ちょうど私のLOT()関数を修正して、私はその後幸せになるでしょう、助けてください
 
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)
            * MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

これでは、括弧を計算するだけで頭が痛くなりますね。

正直なところ、あなたがここで達成しようとしていることが何なのか、私にはまったくわかりません。

MODE_STOPLEVELやSPREADがどのように関連しているのかがわかりません。

TICKVALUEは口座の通貨で表示されるので、口座の通貨は 関係なく、計算は同じになるはずです。

なお、コードの行を2行にすることで、投稿の幅が狭くなり、右や左にスクロールすることなく読みやすくなります :)