ご訪問ありがとうございます。
元スーパー店員で不労所得生活を目論むひろしです。
前回
今回は、
1 |
#property strict |
を記載することにしました。
この指定をすることで、コンパイルの精度が
あがるとのこと。
しかも、こんな風に
パラメーターの変数名も日本語で表示されます。
しかーーーーーーーーーーーーーーし、その指定をすると
なぜか
なぜかこんな計算結果になります。
原因がわかりました。
小数点の計算をすると結果がおかしくなるのです。
1 |
Print( "104.7 - 104.6 :",104.7 - 104.6 ); |
こういう計算をすると。。
1 |
2020.09.18 10:48:17.939 TrimPips USDJPY.pro,M5: 104.7 - 104.6 :0.1000000000000085 |
こんな風になります。
ということで、計算する前に
掛け算し整数にしてからpips計算し
割り算して元に戻す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Print("104.7 - 104.6 :",104.7 - 104.6); //doubleの計算結果がおかしい DigitsValue = MathPow(10, MarketInfo(OrderSymbol(), MODE_DIGITS) - 1); //小数点以下の桁数 tempDigits = (int)DigitsValue * 10; //計算するために整数にする桁数 //選択した注文の注文価格 m_OOP = OrderOpenPrice() * tempDigits; //doubleで計算すると値がずれるので一旦整数にする if(OrderType() == OP_BUY) { d_pips0 = MarketInfo(OrderSymbol(), MODE_BID)*tempDigits - m_OOP; } else { d_pips0 = m_OOP - (double)MarketInfo(OrderSymbol(), MODE_ASK)*tempDigits; } d_pips0 /= 10; //tempDigitsで10倍しているので元に戻す |
なんとなく「イマイチ」感はありますが、
一応うまくいっているので、これで
よしとします。
これで、パラメーターの入力画面が日本語になりました。
最後までご覧いただきありがとうございます。
参考にしたサイト
https://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html
https://tech.pjin.jp/blog/2018/03/20/have_to_use_bigdecimal/
https://techacademy.jp/magazine/19051
—2020/10/27 追記—
上記変更でもときどき
の表示が発生しました。
基礎からやろうと思い、
さらに
を斜め読みしました。
入門の方は、ほとんど基礎な事で
あまり役に立たず。
実践プログラミングは、豊島先生独自の
ライブラリが添付されており
なかなか良さげでした。
しかもライブラリにはpips取得関数
らしきものがありました。
が。。。。
うまく流用することはできませんでした。
しかーーーし、
1 |
NormalizeDouble() |
という関数で、指定の小数点を四捨五入してくれるとのこと
これで解決だー。
と思いきや、動かしていると
時折再現します。
検証していくと
なぜか8.3だとNGなのです。
具体的には
1 2 |
double dpips = NormalizeDouble(8.3,2); Print("dpips = ",dpips ); |
とやるだけで
こんな具合になってしまいます。
おそらくNormalizeDoubleのバグです。
諦めかけていると、ヤフー知恵袋にありました
DoubleToString(変数, Digits)
という関数でstring変換すればいいとのこと
なるほど!!
結果解決しました。
続きはこちら→「TrimPipsプロト フォント設定をファイルに保存」
コメント