• 締切済み

USB式の真の乱数発生器を使えるようにしたい

私はMT4のEAを作っている者です。 http://oriharu.net/JESARAS/ 「USB式の真の乱数発生器(TrueRNG3)」を使って言語MQL4内で真の乱数を取得する事が目的で質問しています。 私はEAを作る為の言語MQL4は分かりますが、他の言語が分かりません。作ったEAの中で「ポジション・オープンやクローズ等の動きのあったチャートを最前面に表示させる」時にuser32.dllという外部プログラムを呼び出して使うやり方は、faiさんのブログ http://d.hatena.ne.jp/fai_fx/20091109/1257695255 で丁寧に説明されていたので、使えるようになりました。プログラム冒頭でuser32.dllの使用宣言をして、中でサブルーチンをそのまま入れるだけで使えました。 しかし、購入した「USB式の真の乱数発生器(TrueRNG3)」にはソフトウエアは付いておらず、Windows10でどうやって使うのかと悩んでおります。C++とかそのコンパイルとか全く分からないながらもインターネット検索をして調べながらVisual Studio 2019をインストールしました。 MQL4内で「USB式の真の乱数発生器(TrueRNG3)」に対して乱数を発生するように命令したら乱数を取得できるようにしたいのです。そのようなソフトを探していくつか「それらしきもの」を見つけました。 https://www.nu42.com/2015/08/playing-with-true-rng-hardware-random-number-generator.html https://www.fourmilab.ch/random/ https://www.sans.org/blog/truerng-random-numbers-with-powershell-and-math-net-numerics/ https://www.sans.org/blog/downloads/ でも、USBとWindows10とC++等の他言語を使ってどのように命令し、取得するのかの概念が分からず、壁にブチ当たっております。もし上記4つのURLの中にそのまま使えそうなものがあるならば、「そのまま使えれば」と思っているのですが、あるいは上記4つのURLだけではダメなのか、何が不足していて、どんな作業(C++のコンパイル等)が必要になって来るのか教えて頂きたいと希望しています。どうか、よろしくお願いいたします。

みんなの回答

  • _kappe_
  • ベストアンサー率68% (1525/2219)
回答No.2

USBポートにつなぐと仮想シリアルポート(Windowsの場合COMポート)として乱数を読み出すことができるデバイスのようですね。 Windowsの場合、https://ubld.it/truerng_v3の下のほうにあるSigned Windows INF Driverをインストールするとデバイスを認識できるようになるはずです。 次に、Windows上でC++のプログラムからこのデバイスを使うには、同じウェブページの中のWindows C++ Class (User Contributed source code)からリンクされているrng.hというファイルを使うのが楽でしょう。このファイルの最後の部分にtypical useとして使い方が書かれています。しかし、Windows上のC++を分かっている人にはそれで足りるかもしれませんが、そうでない人には意味不明だろうと思います。 そのデバイスも持っていませんしVisual Studioのインストールもしていない状態で書いているので、回答内容に間違いがあるかもしれません。

oriharu359
質問者

お礼

コメントいただき、ありがとうございます。 WindowsでC言語をコンパイルする一番簡単な方法!(1)<gcc> <MinGW> https://poruka01.com/windows-cprograming-gcc-01/ を参考にしてgccをインストールし、コンパイルしましたら、エラーが1か所あり、コンパイルに失敗しました。ソースコード https://ubld.it/wp-content/uploads/2014/02/rng.h にエラーがあるのではお手上げという状況です。 今後はお金を稼いで外注に出して、プロの方に完全なものを作って頂くしかないのかも。

全文を見る
すると、全ての回答が全文表示されます。
  • cse_ri3
  • ベストアンサー率25% (165/640)
回答No.1

率直に言います。 「外注してプロに頼め」 求人の仕方は、クラウドソーシングで発注するといいでしょう。 VCで望みのプログラムを作ってもらい、MT4からコールしたい旨を伝えれば、受注者が作ってくれると思います。 一々URLは紹介しないので、不明な単語についてはググって調べてください。

oriharu359
質問者

お礼

確かに。それが一番ですね。その前にお金を作らなきゃ。 まことにありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 乱数を発生させるプログラムを教えてください。

    タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。 乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。 C言語で、rand関数を用いて、どうかお願いします。

  • 乱数発生ルーチンの使い方について

    数値計算において一様乱数を発生させるルーチンがいろいろあります。ソースが公開されているものやコンパイラが提供したりするものです。それらを利用する場合、乱数発生のシーズ(種)を与えてそれに応じて動作するというものが多いだろうと思います。そこで質問ですが、10000個の乱数を1回発生させる場合と100個の乱数を100回発生させる場合とで乱数の感じがかなり違います。いずれの場合も100×100の2次元データ(エクセルのシート状)として出力して作図したらその違いが簡単に分かります。この違いの原因はシーズの与え方が1回と100回という違いだろうと思います。100回のシーズの与え方にパターンが出来てしまうからだと思われます。例えば時間を使ってシーズを与えなおすことも考えられますが、今時のPCだとあっという間なのでシーズが同じだから、同じ乱数が100個できてしまいます。乱数を繰り返し発生させるときにその繰り返しの中でパターン化された乱数にならないように発生させる方法がないでしょうか。シーズが要らない乱数生成ルーチンとかですが。あるいはシーズをランダムに取得する方法が含まれたルーチン(シーズがないように見える)などです。あるいは本当にないものなど。メルセンヌツイスターはどうなのでしょうか。一応、フォートランでの利用を考えていますが、言語依存の問題ではないかもと思いますが。 よろしくお願いします。

  • 乱数の最大値

    C言語で0~Nまでの乱数を発生させる場合、 srand((unsigned) time(NULL)); rand()%N; とやりますよね。 このやり方だと、発生する乱数はRAND_MAX以下しかできません。 RAND_MAX以上の値を発生させるにはどうすればいいのでしょうか?

  • c言語乱数について

    トランプのシャッフルと同様な操作をコンピュータで行いたい。52枚のトランプを配列に置き換え、1~52の乱数を割り当てる。ただし発生した乱数はすでに割り当て済みの数である場合は、まだ割り当てていない乱数が出るまで繰り返すものとする。 というプログラムをC言語でつくりたいのですがまったくわからないので誰か教えてください。お願いします。

  • 特殊な論理式の作り方

    MetaTraderのMQL(C言語ベース)で次のような論理式を作ろうとしています。 for(条件){ 繰り返し処理 } この繰り返し処理ですが、最初の1度だけ繰り返し処理し、 60*60*1(1時間)経過しないと再び繰り返し処理できない という仕組みを作りたいのです。 MQLでなく日本語と括弧を使っての記述でもよいので どうかご教授ください。 参考 現在の時間を取得 TimeCurrent()

  • 乱数 メルセンヌツイスターについて

    メルセンヌツイスター法(MT法)について少し調べることになったのですが、メルセンヌツイスターのサイトにC言語のソースがあったので動かしてみました。 確かに乱数が発生するのですが、ソースをみてもどういう動きで乱数を生成してるのかがわかりません。 メルセンヌツイスターはどうやって乱数をつくりだしているのでしょうか? わかる方がいらっしゃいましたら、教えてください。

  • 正規分布に従う乱数

    C言語で平均,標準偏差を指定して正規分布に従う乱数を発生させるにはどうしたらよいのでしょうか?

  • パスカル言語を用いた乱数利用について

    パスカル言語を用いた乱数発生についての質問です。 パスカル言語を用いて0~100までの整数をランダムで10個出したいので、次のようにプログラムを組んだのですが、 欲しい乱数が出てきません。どこが間違えているか指摘していただけないでしょうか。よろしくお願いします。 var x : integer; p : real; {本当はintegerなのだろうが、使うよう指示されたrandom関数を使うとなるとrealしか受け付けなかった。} begin i := 0; x := seed(wallclock); while i <> 10 do begin i := i + 1; p := random(100); writeln('random(100)=',p) end end. ちなみに、これを出力した時の例はこのような感じです。 random(100)=6.8e-01 random(100)=6.4e-02 random(100)=9.3e-01 random(100)=1.3e-01 random(100)=7.2e-01 random(100)=8.8e-01 random(100)=9.1e-02 random(100)=9.5e-01 random(100)=3.6e-01 random(100)=7.9e-01 (※6.8e-01とは6.8*10^(-1)をのことです)

  • 乱数によって発生したデータの関係式の抽出

    [0 : 1]の範囲で乱数xを発生させ、その乱数xを使ってy=0.5 x^2 を計算しました。乱数による(x, y)のペアが数多くできています。この乱数のペアをデータとして与えて、これがy = 0.5 x^2という関係式になっていることを見破れるか、ということを考えます。データをプロットして雰囲気を調べる、というようなことはナシで、データ処理としてできるかということですが。y=a+bx+cx^2+dx^3などと仮定して最小二乗法でa,b,c,dを決めてみると、a=b=d=0, c=0.5となるのでしょうか。単純な最小二乗法でよいのでしょうか。すなわち、誤差の評価式をa,b,c,dで偏微分してゼロとなる代数方程式を解いてa,b,c,dを決めるということですが。 これに関連して疑問なのですが、手始めとして一旦、(x,y)の相関係数を調べてみたとします。これは両者が直線関係(すなわち1次)になっていることを想定してどの程度1次なのかを見るという性格があると思います。例えばy=a+bxとひとまず考えて、最小二乗法でa, bを計算することはできます。2次曲線だけども1次で近似したようなものですね。aはかなり小さいでしょうが、a,bとも非ゼロ値が出てきそうです。その後、近似を上げようと思って、y=a+bx+cx^2としてa,b,cを求めると先に直線と考えて求めたa,bとは違う値(正解のa,bゼロでc=0.5)になるのでしょうか。 この問題は、正解が多項式であり、近似式も1次、2次、...と高次になっていくのでたまたま答えであるx^2が出てきたということは言えそうですが、もし発生させる関数がもっと手の込んだもの(sin, cosなど)だったら関数形を見破れないのではないでしょうか。たまたま発見されるということはあるかも知れませんが。 y=0.5 sin(x)としてxの乱数を発生させ(x,y)のペアを作って、関数形を推測させるということですが、たまたま、sin(x)とyについて相関係数を調べたら1となるわけで、 y=a+b sin(x)で最小二乗法をすると、a=0, b=0.5となるわけですね。これはたまたま見つかったということですね。偶然に依らない方法はあるのだろうかということですが。

  • 乱数で交互に偶数、奇数が、、、。

    C言語で、確率2分の1で0と1を 出そうとして、rand,srand,timeを使って やってみたのですが、ちょうど、0と1が 交互に出てしまいます。何度やっても 変わりません。ただ、1と0が逆になる だけ。こんな感じで0101010101か1010101010 つまり、乱数で奇数と偶数が 交互に発生しているみたいうまくいきません。 なにか、別の方法ありますか? --------------------------------------- srand((unsigned int)time(NULL)); s=rand()%2 これで、やってます。