-
作成者スレッド
-
2023年1月7日 18:09 #5591
neilParticipantお世話になります。
使える技リストにある、チャートにラインを描写するの中で
水平線を描写する関数CreateHLineがありますが、それをコピペしてコンパイルすると
エラーになってしまいます。
プログラムの仕組みをまだ全然理解していないため、どういうふうに考えればいいかが、わかりません
例えば、1時間足で5本前のローソク足の始値に水平線を引きたい時はどういうふうに記述すればいいか教えてもらえますでしょうか?
プログラム初心者なので、初歩的な質問ですいません。
-
作成者スレッド
-
コンパイルエラーの内容を教えていただけますでしょうか?
また、CreateHLineを使用すると以下のように記述することで描画することができます。
CreateHLine(“line”, Open[5], clrRed, 1, STYLE_SOLID, false, “”);
-
コンパイルエラーの内容は、’CreateHline’ function declarations are allowed on global, namespace or class scope only です。
お恥ずかしい話なんですがまったくわからなくて、何も替えずにそのままコピペしてコンパイルしていました。
教えて頂いた
CreateHLine(“line”, Open[5], clrRed, 1, STYLE_SOLID, false, “”);CreateHLine(“line”, Open[5], clrRed, 1, STYLE_SOLID, false, “”);
のコードを入力した場合ObjectCreateやObjectSetIntegerの中をどう変えればいいのかも教えていただきたいです。
また、そのコードはint OnInit()の後に入力すればいいのですか?
また、voidがよくわかっておらず、int OnInit()以外でも宣言?などするのでしょうか?
-
コンパイルエラーの内容から、コピペを行う場所がまちがっていると考えられます。
また、CreateHLine関数の中のObjectCreate関数やObjectSetInteger関数は一切変更する必要はなく、CreateHLineの引数を変更するだけで水平線を引くことができます。
CreateHLineを呼び出すタイミングは、決まった場所はなく呼び出したいタイミングで記述を行います。もしもインジケーターをチャートに適用したタイミングでラインを描画したい場合はOnInit関数の中に記述します。
詳しい使い方については簡単なサンプルプログラムを用意しましたのでそちらを参照してください↓
また、voidについては具体的にはどのような部分が分からないでしょうか?
-
ご返信ありがとうございます。
水平線出せました。
voidに関しては何が間違っているのかがわからず、関数の中を引きたい任意の場所等に変更するものなのかと思い、
いろいろ変更して試してみてもできなかったので、他に何か定義などをしなければならないのかと疑問に思い質問させていただきました。
-
voidは基本的に関数を定義するときのみ使用します。
また、その関数が最後にreturn文で何らかの値を呼び出し元に返すとき、その戻り値の型がint型の時はint、string型の時はstringを記述します。関数が何も返さないときはvoidを記述します。
-
voidはint OnCalculateの{}の後で定義するという考えで合ってますか?
当初int OnInit内にコピペしていてエラーが出ていたので定義する場所も重要なのかと疑問に思いました
-
そのエラーの原因は正しくは「関数の中に関数は記述できない」というものです。
voidは関数の戻り値の型を表していますが、voidに限らず戻り値がintやstringの場合でもOnInit関数内に書くとエラーが発生します。そのため、「voidはOnInit内に書くとエラーが出る」は正しいのですが、「関数内に関数は書いてはいけない」と覚えていただければと思います!
-
-
引いた水平線の色と線種を後から変更したくて
フィールドにinput int Color = clrRed //線の色
と入力し、OnInit内のCreateHlineの第3引数をColorに
void CreateHlineの第3引数をColorに
ObjectSetIntegerの第4引数をColorになど試してみたのですが、後から色を変えることができませんでした。
何か違うのか、そもそも後からは変更できないのでしょうか?
-
後から変更したい場合は、変更したいタイミングでObjectSetInteger関数を呼び出すことで変更できます!(nameはラインの名前を指定してください。)
ObjectSetInteger(NULL, name, OBJPROP_COLOR, clrRed);
CreateHLineの関数自体を書き換える必要はありません。
-
-
すいません、変更したいタイミングというのがよくわかっていません。
チャートに挿入した時、もしくは後から色の設定で変えられるようにinputで定義するということでしょうか?
-
「ラインを描画した後に条件に従ってそのラインの色を随時変更したい」というわけではなく、「ラインを描画する際にそのラインの色を変更する」ということでしょうか?
「引いた水平線の色と線種を後から変更したくて」について、後から変更するとはいつ変更したいのでしょうか?
-
返信にはログインが必要です。