トップページ コミュニティ 質問 オブジェクトの水平線について

  • 作成者
    スレッド
  • #5591

    neil
    Participant

    お世話になります。

    使える技リストにある、チャートにラインを描写するの中で

    水平線を描写する関数CreateHLineがありますが、それをコピペしてコンパイルすると

    エラーになってしまいます。

    プログラムの仕組みをまだ全然理解していないため、どういうふうに考えればいいかが、わかりません

    例えば、1時間足で5本前のローソク足の始値に水平線を引きたい時はどういうふうに記述すればいいか教えてもらえますでしょうか?

    プログラム初心者なので、初歩的な質問ですいません。

  • オブジェクトの水平線について

    FinTechSchool_Teacher 更新済み 2 月 前 2 メンバー · 12 返信
  • FinTechSchool_Teacher

    管理者
    2023年1月8日 18:46

    コンパイルエラーの内容を教えていただけますでしょうか?

    また、CreateHLineを使用すると以下のように記述することで描画することができます。

    CreateHLine(“line”, Open[5], clrRed, 1, STYLE_SOLID, false, “”);

  • neil

    メンバー
    2023年1月8日 23:58

    コンパイルエラーの内容は、’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()以外でも宣言?などするのでしょうか?

  • FinTechSchool_Teacher

    管理者
    2023年1月10日 18:06

    コンパイルエラーの内容から、コピペを行う場所がまちがっていると考えられます。

    また、CreateHLine関数の中のObjectCreate関数やObjectSetInteger関数は一切変更する必要はなく、CreateHLineの引数を変更するだけで水平線を引くことができます。

    CreateHLineを呼び出すタイミングは、決まった場所はなく呼び出したいタイミングで記述を行います。もしもインジケーターをチャートに適用したタイミングでラインを描画したい場合はOnInit関数の中に記述します。

    詳しい使い方については簡単なサンプルプログラムを用意しましたのでそちらを参照してください↓

    また、voidについては具体的にはどのような部分が分からないでしょうか?

  • neil

    メンバー
    2023年1月10日 18:38

    ご返信ありがとうございます。

    水平線出せました。

    voidに関しては何が間違っているのかがわからず、関数の中を引きたい任意の場所等に変更するものなのかと思い、

    いろいろ変更して試してみてもできなかったので、他に何か定義などをしなければならないのかと疑問に思い質問させていただきました。

  • FinTechSchool_Teacher

    管理者
    2023年1月11日 11:55

    voidは基本的に関数を定義するときのみ使用します。

    また、その関数が最後にreturn文で何らかの値を呼び出し元に返すとき、その戻り値の型がint型の時はint、string型の時はstringを記述します。関数が何も返さないときはvoidを記述します。

  • neil

    メンバー
    2023年1月12日 21:55

    voidはint OnCalculateの{}の後で定義するという考えで合ってますか?

    当初int OnInit内にコピペしていてエラーが出ていたので定義する場所も重要なのかと疑問に思いました

    • FinTechSchool_Teacher

      管理者
      2023年1月13日 12:25

      そのエラーの原因は正しくは「関数の中に関数は記述できない」というものです。

      voidは関数の戻り値の型を表していますが、voidに限らず戻り値がintやstringの場合でもOnInit関数内に書くとエラーが発生します。そのため、「voidはOnInit内に書くとエラーが出る」は正しいのですが、「関数内に関数は書いてはいけない」と覚えていただければと思います!

  • neil

    メンバー
    2023年1月14日 17:35

    関数内に関数は書いてはいけないという言葉で理解することができました。

    ありがとうございました。

  • neil

    メンバー
    2023年1月23日 01:21

    引いた水平線の色と線種を後から変更したくて

    フィールドにinput int Color = clrRed //線の色

    と入力し、OnInit内のCreateHlineの第3引数をColorに

    void CreateHlineの第3引数をColorに

    ObjectSetIntegerの第4引数をColorになど試してみたのですが、後から色を変えることができませんでした。

    何か違うのか、そもそも後からは変更できないのでしょうか?

    • FinTechSchool_Teacher

      管理者
      2023年1月24日 11:47

      後から変更したい場合は、変更したいタイミングでObjectSetInteger関数を呼び出すことで変更できます!(nameはラインの名前を指定してください。)

      ObjectSetInteger(NULL, name, OBJPROP_COLOR, clrRed);

      CreateHLineの関数自体を書き換える必要はありません。

  • neil

    メンバー
    2023年1月24日 12:15

    すいません、変更したいタイミングというのがよくわかっていません。

    チャートに挿入した時、もしくは後から色の設定で変えられるようにinputで定義するということでしょうか?

    • FinTechSchool_Teacher

      管理者
      2023年1月24日 17:47

      「ラインを描画した後に条件に従ってそのラインの色を随時変更したい」というわけではなく、「ラインを描画する際にそのラインの色を変更する」ということでしょうか?

      「引いた水平線の色と線種を後から変更したくて」について、後から変更するとはいつ変更したいのでしょうか?

返信にはログインが必要です。

最初の投稿
00 投稿 2018年6月
現在
無料カウンセリングはこちら
無料カウンセリングはこちら