トップページ コミュニティ 質問 EAにラインを引く方法について

  • 作成者
    スレッド
  • #5404

    bovovossi
    Participant

    お世話になります。

    現在、限界運動量を算出しその日の高値から限界運動量を引いた値を下限、限界運動量にその日の安値を引いた値を上限とし、それを元に取引するEAを作成しておりますが、その際に限界運動量のラインを表示させて検証の目安にしたいと考えています。

    その方法をご教授いただければ幸いです。

  • EAにラインを引く方法について

    FinTechSchool_Teacher 更新済み 2 月, 1 週 前 2 メンバー · 11 返信
  • FinTechSchool_Teacher

    管理者
    2022年12月25日 14:22

    ラインの引き方が不明というご質問でしょうか?それとも限界運動量の計算部分のご質問でしょうか?

  • bovovossi

    メンバー
    2022年12月25日 16:57

    失礼いたしました。

    リペアされるラインの引き方を教えていただければ幸いです。

  • FinTechSchool_Teacher

    管理者
    2022年12月26日 13:30

    ラインについてですが、EAではバッファを使用することができないため、オブジェクトを作成する必要があります。

    また、通常の水平線では一日ごとに限界運動量のラインを変更するといった処理ができないため、トレンドラインを生成しprice1とprice2の値を同じにすることで水平線を実装するのが良いと思います。あとは日にちごとトレンドラインを生成します。

    以下トレンドラインを生成するテンプレートの関数ですので、参考にしていただければと思います。

    よろしくお願いいたします。

    void CreateTrendLine(string name, datetime time1, double price1, datetime time2, double price2, bool ray, color c, int width = 1, ENUM_LINE_STYLE style = STYLE_SOLID, bool back = false, bool chart_window = true, bool selectable = true)

    {

    ObjectCreate(NULL, name, OBJ_TREND, chart_window ? NULL : WindowOnDropped(), NULL, NULL);

    ObjectSetInteger(NULL, name, OBJPROP_BACK, back);

    ObjectSetInteger(NULL, name, OBJPROP_COLOR, c);

    ObjectSetInteger(NULL, name, OBJPROP_HIDDEN, true);

    ObjectSetInteger(NULL, name, OBJPROP_RAY, ray);

    ObjectSetInteger(NULL, name, OBJPROP_SELECTABLE, selectable);

    ObjectSetInteger(NULL, name, OBJPROP_STYLE, style);

    ObjectSetInteger(NULL, name, OBJPROP_TIME, 0, time1);

    ObjectSetInteger(NULL, name, OBJPROP_TIME, 1, time2);

    ObjectSetInteger(NULL, name, OBJPROP_WIDTH, width);

    ObjectSetDouble(NULL, name, OBJPROP_PRICE, 0, price1);

    ObjectSetDouble(NULL, name, OBJPROP_PRICE, 1, price2);

    }

  • bovovossi

    メンバー
    2022年12月29日 08:49

    いつもありがとうございます。

    試してみたいと思います。

  • bovovossi

    メンバー
    2023年1月13日 17:40

    初歩的な質問で恐縮です。

    時間の扱いが不慣れでわからないのですが、datetime time1、datetime time2はどのように記述すればよろしいのでしょうか?

    • FinTechSchool_Teacher

      管理者
      2023年1月14日 12:33

      datatime型の値を指定すればよいです。

      もっとも簡単な方法はTime[0]、Time[1]のように指定することです。(Time[0]は最新足の時間、Time[1]は1つ前のローソク足の時間です)

      • bovovossi

        メンバー
        2023年1月14日 20:52

        ありがとうございます。

        そのように行っていたのですが、最新足分しかラインが表示されず、さらに右側にラインが続いてしまいます・・・

        • FinTechSchool_Teacher

          管理者
          2023年1月15日 11:08

          それは奇妙ですね。。

          関数をどのように呼び出したか教えていただけますでしょうか?

          ラインを引く際は、始点と終点が土日を挟むがゆえに意図せず短いラインが引かれてしまうことはよくあるのですが、この現象とは違うようですね。

          第六引数(ray)では、trueに設定するとラインが線分ではなく半直線(延長される)で描画されるのですが、この引数がtrueになっているということはないでしょうか?

          • bovovossi

            メンバー
            2023年1月16日 09:48

            第六引数をtrueにしていました😅失礼いたしました。


            このような形で関数を呼び出しています。

            限界運動量をパラメータで変更できるようにしています。

            CreateTrendLine(“買い損切ライン”,iTime(NULL, kikan2, 1), sl_buy, iTime(NULL, kikan2, 0), sl_buy,false, clrRed, 1, STYLE_DASHDOT, false, true, true);

  • bovovossi

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

    datetime1を最新足にして、datetime2をひとつ前のローソク足の時間に設定するのでしょうか?

    • FinTechSchool_Teacher

      管理者
      2023年1月17日 16:48

      datetime1とdatetime2はどちらかが最新である必要はなく、datetime1のほうが時系列的に新しくても古くてもどちらでも大丈夫です。

      ただ、price1とdatetime1、price2とdatetime2はそれぞれ対応しているため、datetime1の時系列のほうが新しい場合はprice1も新しい方、datetime1の時系列のほうが古い場合はprice2も古いほうの値を指定する必要があります。

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

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