1ピップあたりの価格 - ページ 3

 

Hehehe another happy customer :)- While we're at it, LEHayes mind giving me help on calculating money management in percentage without rounding the pips up.これは私が現在使っているもので、私の口座資本の 1%を賭けたいときに使います。

double Profit_F=0.00001,Lots=0.1;
Lots=NormalizeDouble((AccountEquity()*Profit_F),1)とします。
if (Lots < 0.1) Lots=0.1;
if (Lots > 1.0) Lots=1.0。

これは、例えば$10,000を持っているときに、私のストップロスの100のためにうまく機能します。10,000 X 0.00001 = 0.1ロットだからです。しかし、$15,000を持っている場合、ロットサイズは0.15に等しくなりますが、私のブローカーがマクロロットを許可していないためか、2.0に丸め込まれてしまいます。どうすれば、株式が$20,000に達するまで、0.1のままであることを強制することができるでしょうか?あなたのスレッドを読んでから、検索や勉強をするのに疲れすぎて、ずっと起きています。もし、他にmmを計算する式があれば代わりに教えてください。

 
LEHayes:

ペアに関係なくPrice Per Pipを計算するだけの既存のアルゴリズムがないか、もう何ヶ月も探しています。私は、取引サイズとリスク管理を事前に計算する方法として、この値に依存する本当に良い資金管理戦略を2つ見つけました。しかし、Price Per Pipを処理する計算の例を1つも見つけることができません。

私は、これを関数にする代わりに、私の資金管理システムをあなたに提供することを望んでいます。私がお世話になっているメンターが提案する手法の両方を提供させていただきます。


まず、5つの基本的なシンボルタイプがあることを認識する必要があります。これは、tick_valueやレバレッジなどの計算をする際に重要です。

シンボルタイプの正式な定義はありませんが、米ドル建ての口座の場合、私がシンボルタイプを列挙する方法は以下の通りです。(これらは具体例であり、すべてを網羅するものではありません)
            SymbolType 1:  Symbol() = USDJPY
                           
                           Base = USD
                           Counter = JPY
            
            SymbolType 2:  Symbol() = EURUSD
                           
                           Base = EUR
                           Counter = USD

            SymbolType 3:  Symbol() = CHFJPY
                           
                           Base = CHF
                           Counter = JPY
                           
                           USD is base to the base currency pair - USDCHF
                           
                           USD is base to the counter currency pair - USDJPY
            
            SymbolType 4:  Symbol() = AUDCAD
                           
                           Base = AUD
                           Counter = CAD
                           
                           USD is counter to the base currency pair - AUDUSD
                           
                           USD is base to the counter currency pair - USDCAD
            
            SymbolType 5:  Symbol() = EURGBP
                           
                           Base = EUR
                           Counter = GBP
                           
                           USD is counter to the base currency pair - EURUSD
                           
                           USD is counter to the counter currency pair - GBPUSD

関連性とは、口座の建て玉が、対象となる金融商品の基準通貨とカウンター通貨にどのように関連しているかということです。これは、通貨ペアだけ でなくCFDでも同じです。

シンボルタイプが決まれば、金融商品ごとのレバレッジを計算することができます。例えば、ここにAUDCADのレバレッジを計算するために必要なコードがあります。

CalculatedLeverage=NormalizeDouble(MarketInfo(Symbol(),MODE_LOTSIZE)*(MarketInfo(CalculatedBasePairForCross,MODE_BID)+MarketInfo(CalculatedBasePairForCross,MODE_ASK))/(2*MarketInfo(Symbol(),MODE_MARGINREQUIRED)),2)
この例では、私がコード化した呼び出し関数は、AUDCAD に対して CalculatedBasePairForCross が AUDUSD であることを既に決定しています。
CalculatedBasePairForCross=StringConcatenate(SymbolBase,AccountCurrency(),postfix);
そしてSymbolBase(金融商品のSymbol()の基本通貨です)は。
SymbolBase=StringSubstr(Symbol(),0,3);
といった具合です。

ティックバリューを計算するためには、シンボルタイプを考慮する必要があります。これは、対象となる金融商品 - Symbol() - と、口座の通貨ペアにつながる接続通貨ペアの両方で評価が変わるときに問題となります。上記の例では、口座が米ドル建ての場合、シンボルタイプは 4 - AUDCAD - で、ティックバリューは次のように定義されています。

CalculatedTickValue=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID)
AUDCAD の変数 CalculatedCounterPairForCross は、以前 USDCAD と決定された場所です。
CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);
そしてSymbolCounterは以下のように決定されました。
SymbolCounter=StringSubstr(Symbol(),3,3);

このように、これらの値の計算を明示的にプログラムすることで、ブローカーに依存しない市場情報を決定することができます。

このコードは、Symbol()の基本通貨とペアになったときに口座の通貨建てがカウンター通貨となり、同様にSymbol()のペアを形成するカウンター通貨とペアになったときに口座の通貨建てが基本通貨となるSymboltype = 4にのみ役立つことに留意してください。

(audcad→audusdとusdcad)

5つの普遍的なシンボルタイプがある一方で、レバレッジ、マージン、ティックバリューを計算するためには、4つのシンボルタイプに分類すればよいことがわかります。そして、この計算は、口座の額面に対するクロスカレンシーのペアを扱うときにのみ、特定の難点となります。

私の資金管理のアプローチは、すべての取引について損失リスクの価値を明確に定義することであり、そのためには損失が事前に定義した損失の予算に準拠するように、取引を終了する必要がある価格価値を正確に知る必要があるためです。クロス・ペアの場合、当然ながら、(どちらか一方をヘッジしない限り)リスク価値は、任意の瞬間の2つの通貨ペアの価格に基づいていることがわかります。

この情報は役に立つのでしょうか?

 
cloudbreaker:

TICKVALUEを単独で使用すると、信頼性に欠ける可能性があります。

どのブローカーに適用されるのか、あるいは市場のオープン/クローズ前後であるなど、他の考慮事項があるかどうかを知ることは興味深いことです。私は、あなたのこれらの発見を再現することができませんでした。

 
ははは。jjcは実感しています。でも、比率を使うのは悪いことではありません。たいていの場合、私たちは1で割ることになるでしょう。CB
 
1005phillip:

この情報は全く役に立ちませんか?

私は、uがシンボルタイプ3-5を区別していることに気がつきませんでした(あるいは、私がこの文脈で考えていなかっただけかもしれませんが)。とにかく、考えるための良い材料になりました...。素晴らしい要約をありがとうございました。
 

私のEAでは、買いの場合、最初のオープンオーダーを使って計算させ、現在の買値-注文オープン価格/注文利益=現在のベース通貨での pip値、売りの場合、現在のアスク+オープン価格/注文利益=pip値としていましたが、これは正しく動作しないのでしょうか。

Edit: 逆から書いたことに気づきました。orderprofit/(currentbid-openprice)=pip値という意味です。

 
SDC:

私のEAでは、買いの場合、最初のオープンオーダーを使って計算させ、現在の買値-注文オープン価格/注文利益=現在のベース通貨でのピップ値、または売りの場合、現在のアスク+オープン価格/注文利益=ピップ値としました、これは正しく動作しないのでしょうか。


この計算は、現在の買値、売値に関係なく、すべてのピップが同じ評価額であるという制限の中で有効です。

これは、私が上で定義したようにシンボルタイプ=2の通貨ペア、すなわちEURUSDなど(口座の額面がペアのカウンターカレンシーであるすべての通貨ペア)に対して厳密に当てはまります。

ほとんどの人にとって、この違いは重要ではなく、結果として生じる誤差は小さいものです。私の場合、正しい分析式でしっかりと値を計算したかったのです。

例えば、今度の取引での最大損失額が200ドルで、ストップが200ポイントに設定されている場合、私の損失額が200ドルを超えないような注文のロットサイズを知りたいのです...これを確実にするために、ストップロス価格の時点で正しくピップ評価を計算しなければなりません。私や私のクライアントにとって、手探りは 許される選択肢ではありませんでした;)
 

LEHayesがすべてを解決してくれてよかったです。そして、フィリップさんは、TickValueとレイアウトペアの合成を完全に分解し、すべての人が恩恵を受けられるようにしました。素晴らしいです。

ただ、合成時の注意点として...。

CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);

SymbolCounter=StringSubstr(Symbol(),3,3);

... いくつかのミニロットブローカーでは、USDJPYmのような余分な付加年齢に注意する必要があります。ブローカーが、ベースとカウンターの間に文字を入れたり追加したりして、シンボルの最初の6文字を変更することがあるかどうかは分かりませんが、堅牢性を求めるなら、.setファイルや.selファイルから読み取る方が安全だと思います。

 
cameofx:

LEHayesがすべてを解決してくれてよかったです。そして、フィリップさんは、TickValueとレイアウトペアの合成を完全に分解し、すべての人が恩恵を受けられるようにしました。素晴らしいです。

ただ、合成時の注意点として...。

CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);

SymbolCounter=StringSubstr(Symbol(),3,3);

... いくつかのミニロットブローカーでは、USDJPYmのような余分な付加年齢に注意する必要があります。ブローカーが、ベースとカウンターの間に文字を入れたり追加したりして、シンボルの最初の6文字を変更することがあるかどうかは分かりませんが、堅牢性を求めるなら、.setファイルや.selファイルから読み取る方が安全だと思います。


しかし、私が堅牢な計算について話すとき、その ような堅牢性を求めてはいません。

ブローカーは通貨ペアを 好きなように名付けることができます。通貨記号 lovelyUSDmoonCADcheese を使って新しいブローカーとのライブトレードを試みる前に、それに気づいて自分のコードを修正する心のゆとりがあることを期待します! :P

このコードは、私がこれまでに遭遇したケース(Alpari, CitiFX, CMS forex, forex.com, FXCM, FXDD, IBFX, MIG, ODL)の100%に対処するものです。 もし、あなたが未来志向で何か考えているのなら、今がその考えを話す良い機会です。)

 

lovelyUSDmoonCADcheese! ...

笑)。ブローカーがシンボルの プロパティでシンボルの説明を ミスタイプしているのを見たことがあります(Symbol()パラメータではありませんが、これもいつかタイプしなければなりません!)。誰が知っている!?:))

100%確実かどうかは分かりませんが(何がそうなのか?)しかし、私はこのようなものを考えています。

  • 3文字の大文字のベース/カウンタ名の可能性のリスト/インベントリを作成します。
  • .setまたは.selからペア文字列を読み取る。
  • 一度に1文字ずつシフトして一致する可能性があるものをスキャンします。大文字/小文字の組み合わせは無視し、(ASCII 値は x 整数だけ異なるので確認が必要) 例えば、すべての文字を大文字にするループを使用することができます。
  • 一致するものがあれば、それを「ブローカー」/「エイリアス」名として保存し、今ある「インベントリー」名とは別にします。続けて、ペアの 2 番目の部分を探し、同じことをします。
  • ベース/カウンターの名前が、Symbol()の中で一貫しているかどうかもチェックする必要があります。そして、その「エイリアス」も保存します。
  • ペアを合成するためにエイリアスを使用します。
  • 新しいベース/カウンタ名が変更または追加された場合。それをエイリアスに追加する。

以前、Gordonが私に、自動的なフールプルーフ・チェックはEAにどんなメリットがあるのか、という見解を示してくれたことがある。このことを念頭に置いて(そしてそれを尊重しつつ)、私はまだ、これは地獄のためだけであっても、価値のある何かかもしれないと考えています!):)