marginAllot、PercentRisk、pipsToSLの値を出力して、マイナスの数値がどこから来ているのか絞り込んでみてください。私の推測では、特定の状況下でpipsToSLが負の数として渡されていると思われます。
NormalizeDouble(posSize,2);
この行は何も しません。- NormalizeDoubleは 絶対に使用しないでください。どんな理由であれ。 これは、ごまかしであり、使用しないでください。その使用は常に間違って います。
- SL/TP(ストップ)はティックサイズに正規化する必要があります。(5Digit Brokerでは、ストップはフルピップ値にのみ置く ことができます。mqlで調べるには?-MQL4フォーラム)、制限を守ることトレードを行う上での要件と制限 - 付録 - MQL4チュートリアルと それは浮動小数点数の等式を理解する必要がありますCan price != price ?- MQL4フォーラム
- 保留中の注文のオープンプライスのみ調整する必要があります。通貨では、ポイント==TickSizeなので、同じ答えが得られますが、金属ではうまくいきません。だから、正しくやってください。Trailing Bar Entry EA - MQL4 forum orBid/Ask:(OrderSendでNormalizeDoubleを使用する(必要ない) - MQL4フォーラム
- ロットサイズもLotStepの 倍数に調整する必要があります。もしそれが1/10のべき乗でないなら、NormalizeDoubleは間違って います。正しく行ってください。
honest_knave:
marginAllot、PercentRisk、pipsToSLの値を出力して、マイナスの数値がどこから来ているのか絞り込んでみてください。私の推測では、特定の状況下でpipsToSLが負の数として渡されていると思われます。
実際に残りのコードで、pipsToSLが誤ってマイナスとして計算されている箇所をいくつか見つけることができました。ありがとうございます。
WHRoeder です。
- この行は何も しません。
- NormalizeDoubleは 絶対に使わないでください。どんな理由であれ。これは、ごまかしであり、使用しないでください。その使用は常に間違って いる
- SL/TP(ストップ)はティックサイズに正規化する必要があります。(5Digit Brokerでは、ストップはフルピップ値にしか置く ことができません。mqlで調べるには?-MQL4フォーラム)、制限を守ることトレードを行う上での要件と制限 - 付録 - MQL4チュートリアルと それは浮動小数点数の等式を理解する必要がありますCan price != price ?- MQL4フォーラム
- 保留中の注文のオープンプライスのみ調整する必要があります。通貨では、Point == TickSizeなので、同じ答えになりますが、金属ではうまくいきません。だから、正しくやってください。Trailing Bar Entry EA - MQL4 forum orBid/Ask:(OrderSendでNormalizeDoubleを使用する(必要ない) - MQL4フォーラム
- ロットサイズもLotStepの 倍数に調整する必要があります。もしそれが1/10のべき乗でないなら、NormalizeDoubleは間違って います。正しく行ってください。
以前にも投稿されているのを読んだことがあるのですが、最後のリンクまで言いたいことがわかりませんでした。ありがとうございます。
MathRound()を使っているのに、なぜ小数点以下が複数回答されるのでしょうか?DoubleToStringを使用して みましたが、全く役に立ちませんでした。これは完全にPrint()の制限によるものなのでしょうか、それとも他に何か問題があるのでしょうか?
posSize = posSize * 10; MathRound(posSize); posSize = posSize / 10;
NoLimitations: MathRound()を使っているのに、なぜまだ小数点以下何桁の答えが出るのでしょう? | MathRoundはdoubleを返します。小数点以下は無限大です。 |
WHRoeder:
NoLimitations MathRound()を使用しているのに、なぜまだ小数点以下が表示されるのでしょうか? | MathRoundはdoubleを返します。小数点以下は無限大です。 |
この関数のドキュメントページには書かれていません。https://docs.mql4.com/math/mathround。
「戻り値
最も近い整数に丸められた値"
もし、そうなっているはずなのに、そうなっていないのであれば、MQに通知するか、関数に警告ラベルを貼る必要があります。
JD4の言う通り、ドキュメントページには直近の整数に丸めることが書いてあります。四捨五入や小数点以下の切り捨てをせずに、上記でやろうとしていたことを実現する他の方法がわからないのです。MathRound()やround()が整数を返さないのであれば、何の意味があるのでしょうか?
NoLimitations:
JD4の言う通り、ドキュメントページには直近の整数に丸めることが書いてあります。四捨五入や小数点以下の切り捨てをせずに、上記でやろうとしていたことを実現する他の方法がわからないのですが、どうしたらいいでしょうか?MathRound()やround()が整数を返さないのであれば、何の意味があるのでしょうか?
MathRoundに悩まされているとのことですが、提案された round() という代替手段を試されましたか?
JD4の言う通り、ドキュメントページには直近の整数に丸めることが書いてあります。四捨五入や小数点以下の切り捨てをせずに、上記でやろうとしていたことを実現する他の方法がわからないのですが、どうしたらいいでしょうか?MathRound()やround()が整数を返さないのであれば、何の意味があるのでしょうか?
はい、round()を使いましたが、全く同じ値になりました。MathFloor() やMathCeil()を使って、より正確に値を計算し、とりあえず問題を回避しようとしましたが、これらも同様に何もしていないようです。ただ、doubleをintにしたいだけなんですけどね、ハハハ。
私も先ほどこれを使ってみましたが、効果はありませんでした。DTSは単に見た目の値の精度を変えるだけで、実際の値ではない可能性があります。他のオプションは見当たりません。
posSize = posSize * 100; DoubleToString(posSize,0); StringToDouble(posSize); posSize = posSize / 100;
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
私のストラテジーでは、ポジションサイズを計算するためにGetPosSize()という関数を 使用しています。今のところEURUSDでしか使っていないのですが、なぜposSizeが負の値を返してOrderSend error 4051になるのかがどうしても分かりません。何か手助けがあれば、とてもありがたいです。ここに関連するすべてのコードを掲載します。コード全体を通してposSizeに対する他の計算は行われず、関数が呼び出されるだけです。3つの別々のコードはすべて関数の中にあります。