売り圧力レシオのトレーディングビュー表示について

  • このトピックは空です。
0件の返信スレッドを表示中
  • 投稿者
    投稿
    • #9531 返信
      匿名さん

        オンクラスに売り圧力レシオの講義があります。
        とても有益なチャートで、将来、買いの時期がきたら必須のチャートかと思います。
        システムには、売り圧力レシオのエクセルの書式しかありません。
        データを自分で入力しなければならず、チャートに自動表示もできません。
        実用的でありません。
        そこで、売り圧力レシオのチャートをトレーディングビューで表示させるためAIにプログラムを作ってもらいました。
        下にそのプログラムとプロンプト添付しておきます。
        実際トレーディングビューにチャートが表示されるのですが、結果が正しく表示されません。
        なぜかというと株価の低くなったところでシグナルが点灯しているからです。
        会員の皆様の中にはプログラムに精通した方がいらっしゃるかと思います。
        もし可能でしたら、下のプロンプトやプログラムの不備をご指摘いただけますと幸いです。
        最初から作っていただいても構いません。
        投資部スタッフの方に本件を質問したのですが、プログラムに精通した方がいらっしゃらないのとのことで、対応が難しいとの回答でした。
        そこで皆様に皆様のお力をお借りしたく思った次第です。
        どうぞよろしくお願いします

        利用したプロンプト
        ・売り圧力レシオの講義PP資料
        ・システムの売り圧力レシオの書式をエクセルコピーした資料
        ・オンクラス売り圧力レシオの文字おこし
        を添付して、AIに作成を依頼。

        1. AIへの指示用プロンプト(コピーしてお使いください)
        以下のテキストを、資料をアップロードする際の指示として入力してください。

        Role & Goal:
        あなたは、金融工学に精通した「シニア・クオンツ・プログラマー」であり、TradingViewのPine Script開発における世界的エキスパートです。 私がアップロードする「売り圧力レシオ」に関するPowerPoint(ロジック解説)、Excel(計算式)、解説動画文字おこし(詳細補足)を完全に解析し、TradingViewで動作するインジケーター・プログラムを作成することが目的です。

        Task Steps:
        1. 資料の解析: アップロードした資料から「売り圧力レシオ」の定義、使用する変数(高値、安値、終値、出来高など)、および具体的な計算アルゴリズムを厳密に抽出してください。
        2. 論理整合性の確認: Excelの計算式とPowerPointの説明に矛盾がないか確認し、プログラム化に最適な数式を確定させてください。
        3. Pine Script (v6) の作成: 確定したロジックに基づき、TradingViewでそのまま使えるコードを出力してください。
        4. 導入ガイドの作成: 作成したコードをTradingViewに設定する手順を、初心者でもわかるようにステップバイステップで説明してください。

        Output Style:
        • コード内には、後から私が調整できるよう、各パラメータ(期間など)に「input」関数を使用してください。
        • 各計算行には、何を行っているのか日本語でコメントを添えてください。
        • 結論(コード)を最優先で提示し、その後に解説を加えてください。

        準備ができたら、まずは資料の解析結果の要約から始めてください。

        備考
        116%を超えたら、130%でも200%でもずっとラインは赤、背景も薄い赤のまま。
        116%を「下回った時」に初めて青に戻る。
        エラーのないように、インジケーター・プログラムの動作確認の後、出力。

        完成したプログラム
        完成したプログラム
        (トレーディングビューのPineエディタに貼り付け)

        Claudeで作成したもの
        //@version=6
        indicator(“売り圧力レシオ”, shorttitle=”SellPressure”, overlay=false)

        // ============================================================
        // ★ ユーザー設定パラメータ
        // ============================================================
        length = input.int(20, title=”計算期間(日数)”, minval=1)
        threshold = input.float(116, title=”売りシグナル閾値(%)”, minval=50, maxval=300, step=0.5)

        // ============================================================
        // 1. 基本データ取得
        // ============================================================
        prev_close = close[1] // 前日の終値
        o = open // 当日の始値
        h = high // 当日の高値
        l = low // 当日の安値
        c = close // 当日の終値
        vol = volume // 当日の出来高

        // ============================================================
        // 2. 陽線・陰線の判定
        // 陽線 = 終値 > 始値
        // ============================================================
        is_yosen = c > o // true=陽線, false=陰線

        // ============================================================
        // 3. 上ヒゲ・下ヒゲ・高値→安値の幅を計算
        // 上ヒゲ:始値と終値の大きい方から高値を引く
        // 下ヒゲ:始値と終値の小さい方から安値を引く
        // 高値→安値:高値 – 安値
        // ============================================================
        upper_shadow = h – math.max(o, c) // 上ヒゲ幅
        lower_shadow = math.min(o, c) – l // 下ヒゲ幅
        hl_range = h – l // 高値から安値までの幅

        // ============================================================
        // 4. 前日終値→当日始値の動き(ギャップ)
        // 上昇なら正、下落なら負
        // ============================================================
        gap = o – prev_close // 前日終値から当日始値の動き
        gap_abs = math.abs(gap) // 絶対値

        // ============================================================
        // 5. 下げ幅(売りの力)の計算
        // 陽線の場合:下げ幅 = 上ヒゲ + 下ヒゲ + ギャップ下落分
        // 陰線の場合:下げ幅 = 高値→安値 + ギャップ下落分
        // ※ギャップが下落(gap<0)の場合のみ下げ幅に加算
        // ============================================================
        gap_down = gap < 0 ? gap_abs : 0.0 // ギャップが下落の時だけ加算

        // 陽線の下げ幅 = 上ヒゲ + 下ヒゲ + ギャップ下落分
        sell_yosen = upper_shadow + lower_shadow + gap_down

        // 陰線の下げ幅 = 高値→安値 + ギャップ下落分
        sell_insen = hl_range + gap_down

        // 当日の下げ幅(R)
        sell_range = is_yosen ? sell_yosen : sell_insen

        // ============================================================
        // 6. 全体の値動き幅(P)= 上ヒゲ + 下ヒゲ + 高値→安値 + ギャップ絶対値
        // ============================================================
        total_range = upper_shadow + lower_shadow + hl_range + gap_abs

        // ============================================================
        // 7. 下げ幅の割合(S)= 下げ幅 / 全体の値動き幅
        // ============================================================
        sell_ratio = total_range > 0 ? sell_range / total_range : 0.0

        // ============================================================
        // 8. 出来高を売り・買いに按分
        // 下げ幅の出来高(U)= 出来高 × 下げ幅割合
        // 上げ幅の出来高(W)= 出来高 × (1 – 下げ幅割合)
        // ============================================================
        sell_vol = vol * sell_ratio // 下げ幅の出来高
        buy_vol = vol * (1.0 – sell_ratio) // 上げ幅の出来高

        // ============================================================
        // 9. 過去N日間の合計を計算
        // ============================================================
        sum_sell_vol = math.sum(sell_vol, length) // 過去N日間の売り出来高合計
        sum_buy_vol = math.sum(buy_vol, length) // 過去N日間の買い出来高合計

        // ============================================================
        // 10. 売り圧力レシオ(%)= 売り出来高合計 / 買い出来高合計 × 100
        // ============================================================
        sell_pressure = sum_buy_vol > 0 ? (sum_sell_vol / sum_buy_vol) * 100 : na

        // ============================================================
        // 11. シグナル状態の管理
        // 116%を超えたら「赤」状態 → 116%を下回るまで赤を維持
        // ============================================================
        var bool is_red = false // 赤状態フラグ(varで状態を保持)

        if not na(sell_pressure)
        if sell_pressure >= threshold
        is_red := true // 閾値以上 → 赤状態に
        else
        is_red := false // 閾値未満 → 青状態に戻す

        // ============================================================
        // 12. 描画色の決定
        // ============================================================
        line_color = is_red ? color.red : color.blue
        bg_color = is_red ? color.new(color.red, 85) : na

        // ============================================================
        // 13. 描画
        // ============================================================
        // 売り圧力レシオのライン
        plot(sell_pressure, title=”売り圧力レシオ(%)”, color=line_color, linewidth=2)

        // 閾値ライン(赤い点線)
        hline(threshold, title=”売りシグナルライン”, color=color.red,
        linestyle=hline.style_dashed, linewidth=1)

        // 背景色
        bgcolor(bg_color, title=”売りシグナル背景”)

        // 参考:50%ライン(中立)
        hline(50, title=”50%ライン”, color=color.gray,
        linestyle=hline.style_dotted, linewidth=1)

        Geminiで作成したもの

        //@version=6
        indicator(“売り圧力レシオ (Selling Pressure Ratio)”, shorttitle=”SPR”, overlay=false)

        // — 入力パラメータの設定 —
        // ユーザーが後から期間や閾値を調整できるようにinput関数を使用します
        len = input.int(20, title=”計算期間”, minval=1)
        threshold = input.float(116.0, title=”警戒閾値(%)”, step=1.0)

        // — 1. ギャップ(窓)の値幅計算 —
        // 前日の終値を取得します
        prev_close = close[1]
        // 上昇ギャップ幅(買いの力)。マイナスの場合は0にします
        gap_buy = math.max(0, open – prev_close)
        // 下降ギャップ幅(売りの力)。マイナスの場合は0にします
        gap_sell = math.max(0, prev_close – open)

        // — 2. 日中の値幅計算(陽線・陰線の分岐) —
        // 当日が陽線(または同値)かどうかを判定します
        is_yang = close >= open

        // 日中の「買い」の値幅を計算します
        // 陽線の場合は (高値 – 安値)
        // 陰線の場合は (高値 – 始値) + (終値 – 安値)
        intra_buy = is_yang ? (high – low) : (high – open) + (close – low)

        // 日中の「売り」の値幅を計算します
        // 陽線の場合は (始値 – 安値) + (高値 – 終値)
        // 陰線の場合は (高値 – 安値)
        intra_sell = is_yang ? (open – low) + (high – close) : (high – low)

        // — 3. 1日の総値幅の算出 —
        // ギャップと日中の動きを合計して、その日の「買い」と「売り」の総値幅を算出します
        total_buy_range = gap_buy + intra_buy
        total_sell_range = gap_sell + intra_sell
        total_range = total_buy_range + total_sell_range

        // — 4. 出来高の配分 —
        // 総値幅が0より大きい場合、値幅の比率に応じて出来高を買いと売りに分配します
        buy_vol = total_range > 0 ? volume * (total_buy_range / total_range) : 0
        sell_vol = total_range > 0 ? volume * (total_sell_range / total_range) : 0

        // — 5. 期間合計とレシオの計算 —
        // 指定期間(デフォルト20日)の買い出来高と売り出来高の合計を算出します
        sum_buy_vol = math.sum(buy_vol, len)
        sum_sell_vol = math.sum(sell_vol, len)

        // 売り圧力レシオ(%)を計算します。ゼロ除算を回避します
        spr_ratio = sum_buy_vol > 0 ? (sum_sell_vol / sum_buy_vol) * 100 : 0

        // — 6. 状態管理(116%超えの判定と維持) —
        // 色の状態を保持する変数を宣言します(初期値はfalse=青)
        var bool is_red = false

        // レシオが閾値(116)を超えたら赤(true)にします
        if spr_ratio > threshold
        is_red := true
        // レシオが閾値(116)を下回ったら青(false)に戻します
        else if spr_ratio < threshold
        is_red := false

        // — 7. 表示色の決定(構文エラー対策済) —
        // デフォルトの色を青(背景は無色)に設定します
        color line_color = color.blue
        color bg_color = na

        // 状態が赤(true)の時のみ、ラインを赤、背景を薄い赤(透明度80%)で上書きします
        if is_red
        line_color := color.red
        bg_color := color.new(color.red, 80)

        // — 8. チャートへの描画 —
        // 閾値の基準線を引きます
        hline(threshold, title=”警戒ライン”, color=color.gray, linestyle=hline.style_dashed)
        // 売り圧力レシオのラインを描画します
        plot(spr_ratio, title=”売り圧力レシオ”, color=line_color, linewidth=2)
        // 背景色を塗ります
        bgcolor(bg_color, title=”警戒背景色”)

        添付ファイル:
    0件の返信スレッドを表示中
    返信先: 売り圧力レシオのトレーディングビュー表示について

    掲示板へのコメントにつきましては、会員様の特定ができず、内容に応じた正確なご案内が難しい場合がございます。
    そのため、林先生へのご質問や、サポートチームへの個別のご相談につきましては、メールまたはLINEにてお送りいただけますようお願いいたします。

    あなたの情報:




    添付ファイルをアップロード

    Maximum file size allowed is 7 MB.



    別のファイルを追加