Roger:
普段はイニシャルセクションで1回だけチェックします。
あなたのコードは、1または2(金)または他の桁数のシンボルが存在するため、確実ではありません。
私はより良い方法を見つけました(まだいくつかのブローカーでテストする必要があります)。履歴フォルダのsymbols.rawを読み込んでeurusdの名前を見つけ、MarketInfo()を使用するのです。
/** * determine the pip multiplier (1 or 10) depending on how many * digits the EURUSD symbol has. This is done by first * finding the exact name of this symbol in the symbols.raw * file (it could be EURUSDm or EURUSDiam or any other stupid name * the broker comes up with only to break other people's code) * and then usig MarketInfo() for determining the digits. */ double pointsPerPip(){ int i; int digits; double ppp = 1; string symbol; int f = FileOpenHistory("symbols.raw", FILE_BIN | FILE_READ); int count = FileSize(f) / 1936; for (i=0; i<count; i++){ symbol = FileReadString(f, 12); if (StringFind(symbol, "EURUSD") != -1){ digits = MarketInfo(symbol, MODE_DIGITS); if (digits == 4){ ppp = 1; }else{ ppp = 10; } break; } FileSeek(f, 1924, SEEK_CUR); } FileClose(f); return (ppp); }
1通貨のみのコードでした。多通貨でEAを使用する場合は、それぞれのケースで個別に計算する必要があります。
7bit:
より良い方法を見つけました(まだ、いくつかのブローカーでテストする必要があります)。履歴フォルダのsymbols.rawを読み込んでeurusdの名前を見つけ、MarketInfo()を使用するのです。
より良い方法を見つけました(まだ、いくつかのブローカーでテストする必要があります)。履歴フォルダのsymbols.rawを読み込んでeurusdの名前を見つけ、MarketInfo()を使用するのです。
これだと、もしsymbols.rawファイルを変更したら壊れてしまいます(古いバージョンのMT4では動かないかもしれません...おそらく問題ないでしょうけど)。
私はRogerと同じ方法を使っていますが、まだ問題は起こっていません。
ほとんどの場合、これでうまくいくと思います。もし、将来的に合わないものを見つけたら、その時はその橋を渡ればいいだけです。
CB
ほとんどの場合、これでうまくいくと思います。もし、将来的に合わないものを見つけたら、その時はその橋を渡ればいいだけです。
CB
//++++ These are adjusted for 5 digit brokers. double pips2points, // slippage 3 pips 3=points 30=points pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) int init() { if (Digits == 5 || Digits == 3) { // Adjust for five (5) digit brokers. pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; }
WHRoeder:
if (Digits == 5 || Digits == 3) { // Adjust for five (5) digit brokers.あなたは、私がすでに不十分であると判断したのと同じことを繰り返しているだけです。Digits変数を使うだけでは、現在どのシンボルが実行されているか、そのシンボルが何桁であるべきかを考慮しないので、問題(最初の投稿で私が定義した問題)を解決できません。エキゾチックなペアには0から5までの任意の桁数があり、5や3、4や2だけではありません。そんなに簡単なことなら、私はこのスレッドを開かなかったでしょう。ですから、私は今、どのペアであろうと、eurusdの数字を使うだけです。eurusdの実際の名前を見つけることが最大の問題で、今のところsymbols.rawの方法が最もシンプルで信頼できるもののようです。
cloudbreaker:
将来的に合わないものが出てきたら、その時にその橋を渡ればいいだけです。
私は、壊れないようなフールプルーフのコードを書こうとしているんです。バグがあることを知りながら)バグだらけのコードを書いて、それが壊れるまで待ってから修正するというのは、私のソフトウェア開発のあるべき姿の哲学にそぐわないのです。
将来的に合わないものが出てきたら、その時にその橋を渡ればいいだけです。
単純に(数学的にはそうでもないかもしれませんが)、ある価格に対するあるポイントの相対値を計算し、それが価格の桁と比較してどの桁にあるかを決めるだけではありませんか?
これを実現する簡単な方法は、ある価格に1点を加え、それを自分の乗数+同じ価格と比較し、結果が同じでなければ、それらが一致するまでループで自分の乗数を増加させることです。
これを実現する簡単な方法は、ある価格に1点を加え、それを自分の乗数+同じ価格と比較し、結果が同じでなければ、それらが一致するまでループで自分の乗数を増加させることです。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
どなたか、正しい数字を見つけるためのさらに高度なアルゴリズムをお持ちの方はいらっしゃいますか?結局のところ、EURUSDのシンボル名がどのようなものかを最初に見つければ、あとは簡単だということだと思います。例えば、利用可能なすべてのシンボルを列挙して、"EURUSD "を含む、あるいは始まる名前を検索できるような簡単な方法はないでしょうか?