• 締切済み

MQL4の変数について質問です。

タイトルの通りです。 まだ学習を初めて1週間程度の素人です。 今のところ理解したところは、仕組みとしてはC言語に近いようで、 オブジェクトを生成しない、関数を呼び出すタイプのプログラミング言語というところ。 インジケータは標準ライブラリや外部ファイルを読み込んで作成する。 ティックに変化が出たら都度OnCalculate()が呼び出される。 というくらいです。 私自身、C言語やPHP、JAVAなどは大学や自学、仕事で勉強をしたので プログラムの基本的なことはある程度理解できていると思います。 とりあえず最終的にEAの構築までできたらと考えていますが、 まずはMQL4言語というプログラムの挙動について質問させてください。 まず配列について配列変数を定義したときの初期値は何でしょうか? また、初期値を判別する、もしくは初期値か代入値かを判別するような関数があれば教えてください。 特に参考書を買ったりはしていないのでド素人の質問とは思いますがよろしくお願いします。

みんなの回答

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

> 不定値はNULL?でしたっけ。 > 不定値って型はないから、格納された値がdouble値かどうかを見てやれば判定可能じゃないでしょうか? 不定値はNULLではありません。何が入っているかわからないということです。 従って、格納された値というものは存在せず、それが何かを判定するということも不可能です。 > というのも、ある配列の番目に対してランダムに値を代入した場合、 > 代入した要素数だけカウントしたいのです。 これは wiz_nature さんの最初の質問と違う内容だと思うのですが、すみませんが何をやりたいのかよくわかりません。もう少し詳しくわかりやすく説明していただけないでしょうか。

wiz_nature
質問者

補足

お返事有難うございます。 不定値は判定不能でしたね、すっかり忘れてしまってます。。 有難うございました。 >これは wiz_nature さんの最初の質問と違う内容だと思うのですが、 >すみませんが何をやりたいのかよくわかりません。 >もう少し詳しくわかりやすく説明していただけないでしょうか。 すみません、上記について詳細に書きます。 ARROWバッファ用に配列変数 double arrowBuf[100]を定義して、 シグナルを出したいバッファ配列に対して終値を代入するとします。 例えば、arrowBuf[5], arrowBuf[24], arrowBuf[87]に終値が格納されているとき、 この終値が代入された配列の要素数を求めたいです。 このときは3を取得したいです。 こちらについて何か方法はないでしょうか?

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

wiz_nature さん > まず配列について配列変数を定義したときの初期値は何でしょうか? ふつうの変数と同じく、初期値を指定していなければ不定値のようです。 > また、初期値を判別する、もしくは初期値か代入値かを判別するような関数があれば教えてください。 初期値というのが、上記の不定値のことを聞いていらっしゃるのなら、無いと思われます。

wiz_nature
質問者

お礼

すみません、こちらから失礼します。 double型というのは例えです。 急に使ってしまいました(*_*;

wiz_nature
質問者

補足

お返事ありがとうございます! 正直、もうプログラミングから離れて長いのですが、 不定値はNULL?でしたっけ。 不定値って型はないから、格納された値がdouble値かどうかを見てやれば判定可能じゃないでしょうか? というのも、ある配列の番目に対してランダムに値を代入した場合、 代入した要素数だけカウントしたいのです。 そういう方法は何かないでしょうか?

関連するQ&A

  • MT4(MQL)の初歩がわかりません

    こんにちは、どうかよろしくお願いします MT4(MQL)をはじめたばかりです。 基本的な質問で恐縮ですが、根本が理解できておりません。 幾つか教えて頂きたいのです。 <質問1> MQLで記述したコードはチャートに組み込んで実行していくのは理解できたのですが、2つの異なる時間枠(週足と日足)などの複合的な条件で売買をするシステムは2つのチャートが必要です。このような事はMQLで実装可能でしょうか? 例えば、週足のテクニカル指標のシグナルと日足のテクニカル指標のシグナルとを確認した上で売買を実行するなどです。 <質問2> 初心者向けMQL関連の書籍(非常に親切で解りやすくとてもありがたい書籍です) を拝読したところ、テクニカル指標(MA)を表示するサンプルプログラム(Custom Indicator)と実際にMAのシグナルで売買するサンプルプログラム(Expert Advisor)の2つの例がありました。 Expert Advisor側のサンプルプログラムの中でiMA()という組込み関数が使用されてました。組込みとはMT4に元々用意されていたMAを呼び出したと理解しておりますが、そうすうるとCustom Indicatorで作成されチャート上に表示されたMAとは、関連性が無くそれぞれ独立したシステムなのでしょうか? 仮に私オリジナルのテクニカル指標をExpert Advisor側で作成してチャートに表示させても、Expert Advisor側でそのシグナルは関連付けできないのでExpert Advisor側でもそれと同じテクニカル指標のコードを記述するとこで、トレードシグナルと判断させることがMT4の基本的な考え方なのでしょうか? それともCustom Indicatorのテクニカル指標のシグナルを受取ってExpert Advisor側で判断できる方法もあるのでしょうか?MT4的な考え方が漠然としていて、よく理解できないのです <質問3> 上記質問の関連ですが、MAのシグナルで売買するExpert Advisor側のプログラムを仮に作成してチャートに組込んで使用する場合、そのチャートにMAが表示されていないとiMA()という組込み関数はデータを取得できないのでしょいうか?

  • MT4(メタトレーダー)でEAを開発中なのですが、MQL4にはどう言う

    MT4(メタトレーダー)でEAを開発中なのですが、MQL4にはどう言う訳か関数が有りません。 それは、マウスでクリックした場所の値を返してくれる関数が無いのです。 どういうことかと言えば、メニューの様な文字列を表示し、その文字列をクリックすれば目的のEAや関数が起動するというプログラムを組みたいのです。 巷のメタトレーダーを見ていると、結構組み込んであるのですが、そのプログラミング方法が分かりません。 もし、ご存じの方、教えても良いぞと思われる方がいらっしゃいましたら、どうかご教授下さいませ。 助けて下さいませ。 宜しくお願い致します。

  • メタトトレーダー、DealBookなどのインジケーター

    チャートを始めようと思っていますが、チャートソフト探しで困っています。 EA(自動売買)はするつもりはないのですが、インジケーターの概念がいまいち理解できません。 MT4でEAやインジケーターを自由に操るためにはMQL4という言語が扱えなければなりませんよね? 私は、基本的にはテクニカル分析のRSI RCI MACD ストキャスティクス などを利用したいのですが、 例えば、MACD において シグナル:9 短期EMA:12 長期EMA:26 が初期値だとは思いますが、この 9、12、26の数値を 変えてMACDを利用したいという単純な変化をさせる場合にも MQL4を利用するのですか? このような単純に平均期間を変えただけでも、インジケーターというものになるんですか? インジケーターの私のイメージとしては、平均期間を変えつつ見やすいようにチャート上の色を変化させたり、 テクニカル分析を組み合わせて表示させたりするものという 認識です。 そこまで高度なアレンジを利用するとは思いませんので、マネーパートナーズのHyper Speedなどから始めてみようと思ったんですが、もし 単純なMACDの平均期間の変更程度の操作ならば変わらないならば 後々のために、MT4を初めから使おうと思いました。 このような、単純な期間変換は簡単に行え、尚且つ ある程度高度なレベルまで使いこなせるようになるチャートソフトが Hyper Speed以外にあればご教示下さい。お願いします。

  • 変数・関数 メモリの関係 本の紹介お願いします

    こんにちは。C言語を勉強しています。文法はある程度理解できました。 そこで疑念がわいてきたのですが、プログラムはメモリ上にロードされてCPUがそれを処理すると思いますが、メモリ上では変数や関数はどのように扱われているか? その辺がモヤモヤしていてはっきり勉強したいと思います。どこから勉強していいのかわからず、良い本がありましたらご紹介頂けませんでしょうか?宜しくお願いします。

  • 関数と変数と定数と式をまとめて [C言語]

    はじめまして。私はC言語初心者です。 C言語では、関数の引数や変数への代入や配列の添え字などに、変数や定数や、式や関数の値を利用できるじゃないですか。私は今C言語について勉強したことをファイルにまとめていっているのですが、上記のようなことを説明するたびに「関数と変数と定数と式」と書くと長ったらしくなってしまいます。そこで、これらをまとめていう言葉があったら教えて欲しいのです。 回答よろしくお願いします。

  • C言語のプログラミングの関数と配列を用いてそんなに

    C言語のプログラミングの関数と配列を用いてそんなに難しくないプログラムを考えているのですが、何かいいプログラムはないでしょうか?簡単なゲームや、簡単な貯金計算など種類は問いません。 そこまで難しくない何かいいプログラムを教えてください。

  • 関数へのポインタ渡しでの配列の初期化について

    はじめまして、C言語の基本的な質問をさせてください。 C言語で、外部関数へポインタで引数を渡す場合に、 関数に渡されるのはアドレスですよね? で、渡された関数側でそのポインタの配列の初期化を するときにはアドレスだけの情報だと、要素数がいくつ あるか分からず、領域の破壊をしてしまいそうな気が するのですが?いかがでしょうか? また、関数かなんかで、配列の要素数が分かる関数が あったような気がするのですが、それもアドレスだけ でわかるのでしょうか?

  • 配列を使わずに、変数名を動的にループで回したい

    配列を使わずに、変数名を動的にループで回したい 大学の課題をやっている途中に思ったことなのですが……。 プログラム中に同じ型の変数p1,p2,p3があり、それぞれの変数にループで同じ処理を施したいと思っています。 しかし、「p(i)」や「("p" + i)」などと、変数どうしを別のものとして認識させようとしても、コンパイラから警告が出て上手くいきません。 配列を使えば、このような処理が出来ることはわかるのですが、使う変数名を指定されてしまっているために、今回は配列を使えません。 出来るか出来ないか、出来る場合は方法を知りたいです。 後、今回はC言語のプログラムで利用出来るかが自分にとっての問題なのですが、C言語以外のこのプログラミング言語なら出来る、とかの情報もこの機会に知りたいです。 お答え出来る範囲でいいので、もしよければ回答お願いします。

  • 配列と他の変数のメモリ領域重複の問題について質問

    dsPICで配列を使用する際、他の変数もその配列の存在するメモリ領域に配置されてしまいます。 プログラムにはC言語を用いています。環境は「MPLAB C30 v3.31」、「MPLAB LINK30 v3.31」「MPLAB v8.85」です。 状況としてはunsigned char型で要素数320の配列をグローバル宣言します。そしてmain関数やその他の関数内でローカル変数を宣言するとその変数が配列の中に存在することになってしまうというものです。色々試したところ、そのローカル変数をstaticで宣言するとそのような症状は出なくなりました。 この現象には、初期化をする関数内でカウンタとしてローカル変数を宣言し、for文で配列を0でクリアさせようとしたところ、MPLABSIMでデバッグすると永久ループしたことから気づきました。Watchを用いて確認したところ配列の中にそのカウンタ変数が配置されていたため最終的に自分自身を0でクリアしてしまうことで永久ループしてしまうことがわかりました。 なぜこうなるのかよくわかりません。この配列以外にはおおきな領域を必要とする変数は宣言していませんのでData memoryの容量的な問題ではないと思っています。staticで宣言すれば何とかなりますが、これでは無駄なメモリを消費してしまいます。また、絶対アドレス指定をする方法もありますが、「ignoring address attribute applied to automatic 変数名」というwarningがでて結局出来ませんでした。 。 このような現象を起こさせない様にするため,、確実にメモリを確保するためにはどうすればよいのでしょうか。 この問題のために先に進めず、大変困っております。どうかご教授ください。 もう一つ、変数の生存期間について質問なのですが、ある関数内で宣言したローカル変数をカウンタとして使い、指定の回数だけ他の関数を繰り返し実行する場合、他の関数に飛んだ時もそのローカル変数は確実に生存しているのでしょうか。重ねてお願いします。 不足がございましたら補足しますのでお教え下さい。

  • MT4でインディケーター(ex4)の読む込む場所

    MT4でインディケーター(ex4)をダウンロードし、 はじめに、 C/program files/MetaTrader 4/MQL4/Indicators の下にファイルを置いて、MT4を起動させたのですが、 何も表示されませんでした。 C/Users/Owner/AppData/Roaming/MetaQuotes/Terminals/~/MQL4/Indicators に置くと、表示されました。 他のファイルもそこに配置されていました。 なぜこのような箇所が読み込まれているのでしょうか? ファイルの読む込む場所を変える事は出来ないのでしょうか? よろしくお願いします。

専門家に質問してみよう