①
EAつくーるにてOsMAの補正値を設定したところ、小数点第一位以下の数値を入力すると0になってしまいます。他のオシレーター系のインジケーターでは小数点第一位以下の数値を設定できるのですが、OsMAのみできないようです。これには何か意図があるのでしょうか?
②
同じくOsMAの補正値を設定したところ、コード内の補正値の直前に「+ PipsToPrice」が入っています。
例: if(iOsMA(Symbol(), PERIOD_M15, 50, 190, 5, PRICE_CLOSE, 0) + PipsToPrice(0.5) >= iOsMA(Symbol(), PERIOD_M15, 50, 190, 5, PRICE_CLOSE, 0) + PipsToPrice(0.5)) signal = 1;
他のオシレーター系のインジケーターでは入っていませんし、価格ベースではないオシレーター系に「+ PipsToPrice」が入っていることによって逆に補正値が効いていないようです。
上記①②について修正・変更はできますか?
| 検索結果がありません。 |
| 検索結果がありません。 |
ご質問ありがとうございます。OsMA の補正値について、①②それぞれ回答いたします。
① 小数点第一位以下を入れると 0 になる件現在のEAつくーるでは OsMAの補正値を「pips」として扱い、内部で価格へ変換(
PipsToPrice()) しています。このため、通貨ペアの最小刻み(Point)より小さい値は丸め込みで 0 になってしまう場合があります(例:USDJPY で 0.05 pips は 0.0005 円相当で、ブローカー設定によっては有効桁に達せず 0 になります)。
②
+ PipsToPrice()が入っていて補正が効かない件ご指摘のとおり、OsMA は価格差ベースのインジケーターですが、EAつくーるでは"どの銘柄でも同じ感覚(pips)"で使えるように、補正値に
PipsToPrice()を付与する実装になっています。そのため、ご希望が「価格単位の生値をそのまま足し引きしたい」であれば、
PipsToPrice()を外すコード修正が必要です。なお、質問文の例:
は、左右が同一式のため常に trueになります。意図はおそらく
「
iOsMA(...) >= PipsToPrice(0.5)」や「
iOsMA(現在) >= iOsMA(過去) + PipsToPrice(0.5)」のような “値と閾値(または過去値)を比較する” 条件かと思われます。比較ロジックも併せてご確認ください。
変更・修正は可能ですか?
A. pipsではなく「価格単位の生値」を補正として使う
iOsMA(...) + PipsToPrice(param)をiOsMA(...) + paramに置換します。(MT4/MT5 共通の考え方)
例(MT4)
例(MT5)
B. pips運用を維持しつつ、丸め込みを避ける
NormalizeDouble/Point丸め)※EAつくーる既定の
PipsToPrice()はこの趣旨で実装されています。修正手順(実務)
PipsToPrice(を検索+ PipsToPrice(x)→+ xに置換NormalizeDouble(price, Digits)/ MT5:Pointで丸め)まとめ
PipsToPrice()を付けています。PipsToPriceを外す) が向いています。必要であれば、該当箇所のスクリーンショットや該当行のコピペをいただければ、置換すべき行をピンポイントで指定してお返しします。