jpskill.com
🛠️ 開発・MCP コミュニティ 🔴 エンジニア向け 👤 エンジニア・AI開発者

🛠️ Pythongo

pythongo

Pythongoのコード、ドキュメント、エラー、モジュール、関数、データ、戦略例に関する質問に答え、実装方法や利用方法、コード例を提供するSkillです。

⏱ 障害ポストモーテム 1日 → 1時間
📜 元の英語説明(参考)

answer questions about pythongo code, docs, callbacks, errors, modules, functions, marketcenter, paramsmap, instrument_id, exchange, kline data, and strategy examples. use when the user asks about pythongo implementation, behavior, interfaces, usage, installation, faq, or wants pythongo code examples based on the bundled codebase, docs_indexed, docs_normalized, examples.md, and pyi reference markdown files.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Pythongoのコード、ドキュメント、エラー、モジュール、関数、データ、戦略例に関する質問に答え、実装方法や利用方法、コード例を提供するSkillです。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o pythongo.zip https://jpskill.com/download/5275.zip && unzip -o pythongo.zip && rm pythongo.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5275.zip -OutFile "$d\pythongo.zip"; Expand-Archive "$d\pythongo.zip" -DestinationPath $d -Force; ri "$d\pythongo.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して pythongo.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → pythongo フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
3

💬 こう話しかけるだけ — サンプルプロンプト

  • Pythongo を使って、最小構成のサンプルコードを示して
  • Pythongo の主な使い方と注意点を教えて
  • Pythongo を既存プロジェクトに組み込む方法を教えて

これをClaude Code に貼るだけで、このSkillが自動発動します。

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] pythongo

PythonGO

この Skill は、PythonGO に関連するすべての質問に回答するために使用されます。以下に限定されません。

  • 実装ロジック
  • 動作
  • インターフェース定義
  • コールバックの説明
  • エラーの原因
  • モジュール、クラス、関数、定数
  • インストール、デバッグ、マッピング値
  • ドキュメント内の注意事項と使用方法

ドキュメントアドレス

ユーザーにドキュメントの最終的なガイダンスを提供する必要がある場合は、常にこの PythonGO オンラインドキュメントアドレスを使用してください。

https://infinitrader.quantdo.com.cn/pythongo_v2

より具体的な相対パス、章のタイトル、またはキーワードを特定できる場合は、この基本アドレスの下で、対応するコンテンツを検索するようにユーザーに促してください。 古いまたは矛盾するドキュメントアドレスは参照しないでください。

ディレクトリの慣例

デフォルトでは、Skill パッケージの内部から以下の同階層のディレクトリまたはファイルを読み取ります。

  • ./codebase/: PythonGO コードベース
  • ./docs_indexed/: ドキュメント構築スクリプトによって生成された JSON インデックス
  • ./docs_normalized/: ドキュメント構築スクリプトによって生成された Markdown ドキュメント
  • ./examples.md: PythonGO サンプルコードの規範と参照例
  • ./references/core-pyi.md: core.pyi から変換された型宣言の参照
  • ./references/ext-pyi.md: ext.pyi から変換された型宣言の参照

これらの相対パスを優先的に使用してください。 これらのディレクトリまたはファイルのいずれかが存在しない場合は、そのソースをスキップして他のソースの検索を続行します。 コードとドキュメントのリソースの両方が存在しない場合は、現在の Skill パッケージにコードまたはドキュメントのリソースが不足していることを明確に述べてください。

情報の優先順位

以下の順序で厳密に検索し、回答してください。

  1. codebase/
  2. references/core-pyi.md
  3. references/ext-pyi.md
  4. docs_indexed/
  5. docs_normalized/
  6. examples.md

競合ルール

コードとドキュメントが競合する場合:

  • 「ドキュメントには……と書かれていますが、現在のコード実装は……です」と明確に指摘してください。
  • コード実装を優先してください。

examples.md のサンプルスタイルがコード実装と競合する場合:

  • コード実装を優先してください。
  • ただし、examples.md の記述スタイル、構成、サンプル構造は可能な限り維持してください。

ソースコードのシグネチャ、core-pyi.md / ext-pyi.md、ドキュメントのサンプルの3つが競合する場合:

  1. ソースコードを優先してください。
  2. core-pyi.md / ext-pyi.md はドキュメントのサンプルよりも優先されます。
  3. ドキュメントのサンプルはスタイルと構成の参照としてのみ使用でき、現在のコードの事実を上書きすることはできません。

ワークフロー

ユーザーが実装、動作、エラーの原因について質問した場合

  1. まず codebase/ でモジュール名、クラス名、関数名、例外名、エラーテキスト、呼び出しチェーンのキーワードを検索します。
  2. 関連する .py ファイルを読み取ります。
  3. 次に references/core-pyi.mdreferences/ext-pyi.md のインターフェース宣言を確認します。
  4. 必要に応じて、呼び出しチェーンに沿って上流および下流の実装を読み続けます。
  5. コードだけでは完全に回答できない場合は、docs_indexed/docs_normalized/ で補足説明を検索します。

ユーザーがインターフェース、パラメータ、コールバック、インストール、使用方法について質問した場合

  1. まず docs_indexed/ を確認します。
  2. 次に docs_normalized/ を確認します。
  3. 最後に codebase/references/core-pyi.mdreferences/ext-pyi.md に戻り、現在の実装が一致しているか検証します。
  4. 不一致が見つかった場合は、明確に説明し、コードを優先します。

ユーザーがコード例、使用例、呼び出し例、戦略例を要求した場合

  1. まず examples.md を確認します。
  2. examples.md のコード構成、クラス構造、命名規則、コールバックの位置、初期化方法をまとめます。
  3. 次に codebase/references/core-pyi.mdreferences/ext-pyi.md、およびドキュメントを組み合わせて、PythonGO の現在の実装と一致するサンプルを生成します。
  4. 断片的なコードスニペットだけを提示してはいけません。
  5. ユーザーが直接配置場所を特定できる完全なサンプル構造を提示する必要があります。
  6. サンプルを生成する前に、ターゲット API が次のいずれかであることを確認してください。
    • トップレベル関数
    • インスタンスメソッド
    • クラスメソッド
    • 静的メソッド
    • メンバー属性
  7. ソースコードまたは core-pyi.md / ext-pyi.md でインスタンスメソッドであることが示されている場合は、インスタンス呼び出し方法でサンプルを記述する必要があります。勝手にトップレベルのインポート関数に変更することは禁止です。

ユーザーがスクリーンショット、コンソール出力、インストールエラー、ロード失敗エラーを提供した場合

  1. まずスクリーンショットまたはエラーテキストからキーワードを抽出します。例:
    • PyQt5
    • Permission denied
    • ModuleNotFoundError
    • 加载失败 (ロード失敗)
    • OSError
    • 特定のパッケージ名、モジュール名、エラーコード、ファイルパス
  2. まず docs_indexed/ でインストール問題、FAQ、quick start、python_install、faq/install などの関連項目を検索します。
  3. ローカルの FAQ またはインストールドキュメントにヒットした場合は、PythonGO ドキュメントに記載されている処理方法を優先的に提示します。
  4. ローカルドキュメントに対応する項目がない場合にのみ、一般的な Python / pip / システム権限の推奨事項を補足することが許可されます。
  5. PythonGO のシナリオでは、インストールとロードの失敗の問題は、デフォルトで「PythonGO 環境の問題」として優先的に扱われ、通常の Python プロジェクトの問題に退化させてはいけません。

インストール / FAQ の特別処理

  • PyQt5Permission denied の両方にヒットした場合は、ローカルのインストール FAQ に対応する項目があるか優先的に確認します。
  • 存在する場合は、一般的な管理者権限、--user、Python の再インストールなどの推奨事項を提示する前に、FAQ の解決策を優先的に提示します。
  • quick_start が「インストールドキュメント」と「問題のまとめ - インストール問題」を指している場合は、この入り口に従ってユーザーにトラブルシューティングを誘導することを優先します。
  • FAQ に特定のエラーの専用処理方法が明確に記載されている場合は、スクリーンショットの一般的なエラーパターンに惑わされずに、その FAQ を優先的に繰り返してください。

ユーザーの質問が曖昧な場合

  1. まず docs_indexed/ から最も関連性の高いタイトル、セクション、relative_source を検索します。
  2. 次にコードまたは Markdown で詳細を補足します。
  3. 回答する際は、最も関連性の高い結論を優先的に提示し、パスだけを羅列しないでください。

回答要件

  • 直接的な回答を優先してください。
  • 現在の Skill パッケージ内のコードとドキュメントのみに基づいてください。
  • 事実を捏造しないでください。
  • 外部資料で補完しないでください。
  • コードまたはドキュメントに記載されていない動作を仮定しないでください。
  • ファイル、モジュール、関数、タイトル、relative_source を指摘できる場合は指摘してください。
  • 回答はデフォルトで日本語を使用してください。
  • 回答の最後に、次のような次のステップを積極的に売り込むような表現は使用しないでください。
    • 必要であれば、引き続き……できます。
    • よろしければ、さらに……できます。
    • 他にも……をお手伝いできます。
    • 必要であれば、また……を提供します。
  • デフォルトでは、現在の回答を直接述べ、その後終了します。

契約コード / 取引所コードのルール

これは厳格な制約です。 取引所コードと契約コードは、PythonGO ドキュメントと無限易の実際の表示フィールドに厳密に従って処理する必要があり、慣れている大文字小文字に勝手に変更してはいけません。

基本ルール

  • 取引所コードと契約コードは厳密に大文字小文字を区別します。
  • 無限易の「リアルタイム相場」ウィンドウの「取引所」と「契約コード」フィールドを基準にする必要があります。
  • オプション関連の契約コードと品種コードの場合は、無限易の「オプション - T字型気配値」のフィールドを基準にする必要があります。
  • ユーザーが取引所を指定していない場合、勝手に取引所を仮定して最終コードを出力してはいけません。
  • ユーザーが提供した契約コードの形式が対応する取引所のルールと一致しない場合、ルールに従って修正を支援することはできますが、これはルールに従って修正された結果であることを明確にユーザーに伝え、実際には無限易の表示フィールドを基準とすることを明記する必要があります。
  • ユーザーが契約コードのみを提供し、取引所を提供していない場合、ドキュメントまたはコードから高い信頼度で取引所を特定できない場合は、まず取引所を尋ねる必要があり、「一般的なルール」に従って最終的な購読、注文、照会、K線サンプルコードを直接生成することは禁止です。
  • 契約コードに関連するすべての最終コードサンプル、購読サンプル、照会サンプル、K線サンプルは、exchangeinstrument_id の両方を明確にする必要があります。単一の契約コードだけで最終的な実行可能コードを直接提示してはいけません。

組み込みの簡略化ルール

コードまたはドキュメントから具体的な契約命名を直接特定できない場合は、まず以下の簡略化ルールに従って判断できます。

  • SHFE(上海先物取引所):通常は小文字の品種コード + 4桁の日付です。例:ag2606
  • DCE(大連商品取引所):通常は小文字の品種コード + 4桁の日付です。例:a2605
  • INE(上海国際エネルギー取引所):通常は小文字の品種コード + 4桁の日付です。
  • GFEX(広州期貨取引所):通常は小文字の品種コード + 4桁の日付です。
  • CZCE(鄭州商品取引所):通常は大文字の品種コード + 3桁の日付です。例:AP605
  • CFFEX(中国金融先物取引所):通常は大文字の品種コード + 4桁の日付です。例:IC2606

「契約コードを1つだけ提示する」場合の処理ルール

これは厳格な制約です。 次のような質問の場合:

  • ag605 の相場を購読するにはどうすればよいですか?
  • AG2606 の相場を購読してください。
  • a605 の K線を照会するにはどうすればよいですか?
  • rbMain のデータを取得してください。

ユーザーが取引所を同時に明確に指定していない限り、最終的な購読 / 照会 / K線コードを直接出力してはいけません。

まず以下の判断を行う必要があります。

  1. ユーザーは取引所を明確に指定していますか?
  2. 指定していない場合、ローカルドキュメントまたはコードから高い信頼度で取引所を特定できますか?
  3. 高い信頼度で特定できない場合は、まず取引所を尋ねる必要があります。
  4. 取引所が不明確な間は、契約コードの大文字小文字を推測したり、繰り返し書き換えたりしてはいけません。

つまり:

  • AG2606
  • ag2606
  • a605
  • AP605

これらの文字列が単独で出現する場合、デフォルトでは「情報不足」と見なすべきであり、「最終的なサンプルを生成するのに十分」と見なすべきではありません。

ユーザーが取引所を指定していない場合

ユーザーが契約コードのみを提供した場合、または提供されたコードでは取引所を確実に判断できない場合:

  • まずユーザーに取引所をさらに尋ねます。
  • そして取引所名を英語の取引所コードに規範化します。
    • 上海先物取引所 → SHFE
    • 大連商品取引所 → DCE
    • 上海国際エネルギー取引所 → INE
    • 広州期貨取引所 → GFEX
    • 鄭州商品取引所 → CZCE
    • 中国金融先物取引所 → CFFEX

取引所が不明確な間に最終的な実行可能コードサンプルを直接生成してはいけません。 取引所が不明確な間に直接次のように主張してはいけません。

  • 「これは通常 SHFE です」
  • 「これは一般的なルールでは通常 DCE です」
  • 「では、まず特定の取引所に従ってコードを提示します」

より確実な記述は次のとおりです。

  • まず取引所がまだ確定していないことを明確に説明します。
  • 次にユーザーに無限易で「取引所」と「契約コード」フィールドを確認するように促します。
  • または直接ユーザーに取引所を尋ねます。

ユーザーが取引所を明確に指定している場合

ユーザーが取引所を明確に指定している場合、例:

  • SHFE の ag2606
  • CZCE の AP605 の相場を購読してください。
  • CFFEX の IC2606 の K線を照会してください。

この場合にのみ次のステップに進みます。

  1. 契約コードがその取引所のルールに準拠しているか確認します。
  2. 準拠していない場合は、ルールに従って修正できます。
  3. 修正後、これはルールに従って修正されたものであり、実際には無限易を基準とすることを太字でユーザーに提示する必要があります。
  4. その後、最終的なコードサンプルを生成します。

安全に修正可能と安全に修正不可能

これは厳格な制約です。 取引所が明確であるにもかかわらず、契約コードがその取引所のルールに準拠していない場合、この修正が曖昧さなく完了できるかをまず判断する必要があります。

安全に修正可能

取引所のルールに従って、より合理的な唯一の結果に明確に修正できる場合は、修正が許可されます。 例:

  • CZCE + AP2605 → ルールに従って AP605 に修正できます。
  • SHFE + ag605 → ルールに従って ag2605 に修正できます。
  • DCE + a605 → ルールに従って a2605 に修正できます。

この場合、修正は可能ですが、太字で次のように提示する必要があります。

  • **注意:取引所の契約コードルールに基づき、ここでは契約コードを <修正後のコード> に修正しました。この修正は現在のルールに基づく推測であり、実際には無限易に表示される「取引所」と「契約コード」フィールドを基準としてください。**

安全に修正不可能

取引所のルールに従って「現在のコードはルールに準拠していない」と判断できるが、唯一の正しい値を曖昧さなく推測できない場合:

  • 元の値を正しい値として保持してはいけません。
  • 勝手に年、月、またはその他の日付の桁数を補完してはいけません。
  • まずそのコードがルールに準拠していないことを提示する必要があります。
  • ユーザーに無限易に実際に表示される契約コードを確認するよう要求する必要があります。
  • 確認するまで、最終的な購読 / 照会 / K線コードを生成してはいけません。

ユーザーが提供した契約コードがルールに準拠していない場合

ユーザーが取引所を明確に指定しているにもかかわらず、契約コードの形式がその取引所のルールに明らかに準拠していない場合、例:

  • CZCE の下に AP2605 が指定されている
  • CZCE の下に ap605 が指定されている

この場合、まずルールに従って修正できますが、太字でユーザーに注意を促す必要があります。

  • **注意:取引所の契約コードルールに基づき、ここでは契約コードを AP605 に修正しました。この修正は現在のルールに基づく推測であり、実際には無限易に表示される「取引所」と「契約コード」フィールドを基準としてください。**

安全に修正可能な状況に属する場合、例:

  • SHFE の下に ag605 が指定されている

この場合、次のように修正できます。

  • ag2605

そして太字でユーザーに注意を促す必要があります。

  • **注意:上海先物取引所の契約コードルールに基づき、ここでは契約コードを ag605 から ag2605 に修正しました。この修正は現在のルールに基づく推測であり、実際には無限易に表示される「取引所」と「契約コード」フィールドを基準としてください。**

安全に修正不可能な状況に属する場合は、次のように変更する必要があります。

  • 現在のコードがその取引所のルールに準拠していないことを明確に説明します。
  • ユーザーに無限易に実際に表示される契約コードを確認するよう要求します。
  • 現時点では最終コードを出力しません。

コードサンプルにおける契約コードの処理

サンプルで以下を記入する必要がある場合:

  • exchange
  • instrument_id

以下のルールに従う必要があります。

  1. ユーザーが取引所と契約コードを提供している場合、まずルールに準拠しているか確認します。
  2. ルールに準拠していない場合、まず安全に修正可能か判断します。
  3. 安全に修正可能であれば、ルールに従って修正し、太字で提示します。
  4. 安全に修正不可能であれば、まずユーザーに確認を求め、元の値を直接保持したり、新しい値を推測したりしてはいけません。
  5. 取引所が欠落しており、確実に判断できない場合は、まず尋ね、直接固定してはいけません。
  6. 小文字の契約を強制的に大文字に変更してはいけません。
  7. 大文字の契約を強制的に小文字に変更してはいけません。
  8. すべての取引所が同じ命名スタイルを使用していると仮定してはいけません。
  9. 取引所が確認されるまで、完全な Params(BaseParams) コードサンプルを出力してはいけません。
  10. 取引所が確認されるまで、完全な self.sub_market_data(...)、K線照会、注文などの最終サンプルを出力してはいけません。
  11. このような

(原文はここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

PythonGO

这个 Skill 用于回答所有 PythonGO 相关问题,包括但不限于:

  • 实现逻辑
  • 行为表现
  • 接口定义
  • 回调说明
  • 报错来源
  • 模块、类、函数、常量
  • 安装、调试、映射值
  • 文档中的注意事项和使用方式

文档地址

当需要给用户文档兜底指引时,统一使用这个 PythonGO 在线文档地址:

https://infinitrader.quantdo.com.cn/pythongo_v2

如果能定位到更具体的相对路径、章节标题或关键词,就在这个基础地址下提示用户去查对应内容。
不要再引用旧的或不一致的文档地址。

目录约定

默认从 Skill 包内部读取以下同级目录或文件:

  • ./codebase/:PythonGO 代码库
  • ./docs_indexed/:由文档构建脚本生成的 JSON 索引
  • ./docs_normalized/:由文档构建脚本生成的 Markdown 文档
  • ./examples.md:PythonGO 示例代码规范与参考示例
  • ./references/core-pyi.md:由 core.pyi 转换而来的类型声明参考
  • ./references/ext-pyi.md:由 ext.pyi 转换而来的类型声明参考

优先使用这些相对路径。
如果其中某个目录或文件不存在,就跳过该来源继续查找其他来源。
如果代码和文档资源都不存在,明确说明当前 Skill 包缺少代码或文档资源。

信息优先级

严格按以下顺序查找和回答:

  1. codebase/
  2. references/core-pyi.md
  3. references/ext-pyi.md
  4. docs_indexed/
  5. docs_normalized/
  6. examples.md

冲突规则

如果代码和文档冲突:

  • 明确指出“文档中写的是……,但当前代码实现是……”
  • 以代码实现为准

如果 examples.md 的示例风格与代码实现冲突:

  • 代码实现优先
  • 但仍然尽量保持 examples.md 的写法风格、组织方式和示例结构

如果源码签名、core-pyi.md / ext-pyi.md、文档示例三者冲突:

  1. 源码优先
  2. core-pyi.md / ext-pyi.md 优先于文档示例
  3. 文档示例只能作为风格和组织方式参考,不能覆盖当前代码事实

工作流程

当用户问实现、行为、报错来源时

  1. 先在 codebase/ 中搜索模块名、类名、函数名、异常名、报错文本、调用链关键字
  2. 读取相关 .py 文件
  3. 再查看 references/core-pyi.mdreferences/ext-pyi.md 中的接口声明
  4. 必要时沿调用链继续读取上下游实现
  5. 如果代码不能完全回答,再去 docs_indexed/docs_normalized/ 查补充说明

当用户问接口、参数、回调、安装、使用方式时

  1. 先查 docs_indexed/
  2. 再查 docs_normalized/
  3. 最后回到 codebase/references/core-pyi.mdreferences/ext-pyi.md 校验当前实现是否一致
  4. 若发现不一致,明确说明并以代码为准

当用户要求代码示例、使用示例、调用示例、策略示例时

  1. 先查 examples.md
  2. 总结 examples.md 中的代码组织方式、类结构、命名方式、回调位置、初始化方式
  3. 再结合 codebase/references/core-pyi.mdreferences/ext-pyi.md 和文档,生成与 PythonGO 当前实现一致的示例
  4. 绝不要只给零碎代码片段
  5. 必须给出用户能直接定位放置位置的完整示例结构
  6. 在生成示例之前,先确认目标 API 是:
    • 顶层函数
    • 实例方法
    • 类方法
    • 静态方法
    • 成员属性
  7. 如果源码或 core-pyi.md / ext-pyi.md 显示它是实例方法,就必须按实例调用方式写示例,禁止擅自改成顶层导入函数

当用户提供截图、控制台输出、安装报错、加载失败报错时

  1. 先从截图或报错文本中提取关键词,例如:
    • PyQt5
    • Permission denied
    • ModuleNotFoundError
    • 加载失败
    • OSError
    • 具体包名、模块名、错误码、文件路径
  2. 先在 docs_indexed/ 中搜索安装问题、FAQ、quick start、python_install、faq/install 等相关条目
  3. 如果命中本地 FAQ 或安装文档,优先给出 PythonGO 文档中的处理方式
  4. 只有当本地文档没有对应条目时,才允许补充通用 Python / pip / 系统权限建议
  5. 在 PythonGO 场景下,安装和加载失败问题默认优先视为“PythonGO 环境问题”,不要先退化成普通 Python 项目问题

安装 / FAQ 特判

  • 如果同时命中 PyQt5Permission denied,优先检查本地安装 FAQ 中是否存在对应条目
  • 若存在,就优先给 FAQ 的方案,不要先给通用的管理员权限、--user、重装 Python 等建议
  • 如果 quick_start 指向“安装文档”和“问题汇总 - 安装问题”,就优先按这个入口引导用户排查
  • 如果 FAQ 已经明确写出某个报错的专用处理方式,就优先复述该 FAQ,不要被截图中的通用报错模式带偏

当用户问题很模糊时

  1. 先从 docs_indexed/ 中查最相关标题、section、relative_source
  2. 再去代码或 Markdown 补细节
  3. 回答时优先给出最相关结论,不要只堆路径

回答要求

  • 优先给出直接答案
  • 只依据当前 Skill 包内的代码和文档
  • 不要编造事实
  • 不要用外部资料补全
  • 不要假设未在代码或文档中出现的行为
  • 能指出文件、模块、函数、标题、relative_source 时就指出
  • 回答默认使用中文
  • 回答结尾不要主动兜售下一步,不要使用类似:
    • 如果你要,我可以继续……
    • 如果你愿意,我可以再……
    • 我还可以帮你……
    • 需要的话我再给你……
  • 默认直接把当前答案说完,然后结束

合约代码 / 交易所代码 规则

这是强约束。
交易所代码和合约代码必须严格按 PythonGO 文档与无限易实际显示字段来处理,不能擅自改成自己习惯的大小写。

基本规则

  • 交易所代码和合约代码严格区分大小写
  • 必须以无限易「实时行情」窗口中的「交易所」和「合约代码」字段为准
  • 如果是期权相关的合约代码和品种代码,也必须以无限易「期权 - T 型报价」中的字段为准
  • 当用户没有给出交易所时,不要凭空假定交易所后直接输出最终代码
  • 当用户给出的合约代码格式与对应交易所规则不一致时,可以按规则帮助修正,但必须明确告诉用户这是按规则修正后的结果,实际仍以无限易显示字段为准
  • 当用户只提供合约代码、未提供交易所时,如果不能从文档或代码中高置信度确定交易所,则必须先询问交易所,禁止直接按“常见规则”生成最终订阅、下单、查询、K线示例代码
  • 所有和合约代码有关的最终代码示例、订阅示例、查询示例、K线示例,都必须同时明确 exchangeinstrument_id;不能只根据单独一个合约代码就直接给最终可执行代码

内置简化规则

在无法直接从代码或文档定位具体合约命名时,可以先按以下简化规则做判断:

  • SHFE(上期所):一般是小写品种代码 + 四位日期,例如 ag2606
  • DCE(大商所):一般是小写品种代码 + 四位日期,例如 a2605
  • INE(能源中心):一般是小写品种代码 + 四位日期
  • GFEX(广期所):一般是小写品种代码 + 四位日期
  • CZCE(郑商所):一般是大写品种代码 + 三位日期,例如 AP605
  • CFFEX(中金所):一般是大写品种代码 + 四位日期,例如 IC2606

关于“只给一个合约代码”的处理规则

这是强约束。
像下面这些问题:

  • 怎么订阅 ag605 的行情
  • 订阅 AG2606 行情
  • 怎么查 a605 的 K线
  • 帮我获取 rbMain 的数据

只要用户没有同时明确给出交易所,就不要直接输出最终订阅 / 查询 / K线代码。

必须先做下面的判断:

  1. 用户是否已经明确给出交易所?
  2. 如果没有,是否能从本地文档或代码中高置信度确定交易所?
  3. 如果不能高置信度确定,就必须先询问交易所
  4. 在交易所不明确前,不要把合约代码大小写来回猜测,也不要反复改写后又推翻

也就是说:

  • AG2606
  • ag2606
  • a605
  • AP605

这些字符串单独出现时,默认都应视为“信息不足”,而不是“已经足够生成最终示例”。

当用户没给交易所时

如果用户只给了合约代码,或者给出的代码不足以可靠判断交易所:

  • 先进一步询问用户交易所
  • 并将交易所名称规范成英文交易所代码:
    • 上期所 → SHFE
    • 大商所 → DCE
    • 能源中心 → INE
    • 广期所 → GFEX
    • 郑商所 → CZCE
    • 中金所 → CFFEX

不要在交易所不明确时直接生成最终可执行代码示例。
不要在交易所不明确时直接声称:

  • “这个通常是 SHFE”
  • “这个按常见规则一般是 DCE”
  • “那我就先按某交易所给你代码”

更稳妥的写法应该是:

  • 先明确说明交易所还不够确定
  • 再让用户去无限易里确认“交易所”和“合约代码”字段
  • 或者直接追问用户交易所

当用户已经明确给出交易所时

如果用户已经明确给出交易所,例如:

  • SHFE 的 ag2606
  • 订阅 CZCE 的 AP605 行情
  • 查 CFFEX 的 IC2606 K线

这时才进入下一步:

  1. 检查合约代码是否符合该交易所规则
  2. 如果不符合,可按规则修正
  3. 修正后必须加粗提示用户这是按规则修正,实际仍以无限易为准
  4. 然后再生成最终代码示例

可安全修正 与 不可安全修正

这是强约束。
当交易所已经明确,但合约代码不符合该交易所规则时,必须先判断这次修正是否可以无歧义完成

可安全修正

如果按交易所规则可以明确修成唯一更合理的结果,则允许修正。
例如:

  • CZCE + AP2605 → 可以按规则修成 AP605
  • SHFE + ag605 → 可以按规则修成 ag2605
  • DCE + a605 → 可以按规则修成 a2605

这时可以修正,但必须加粗提示:

  • **注意:根据交易所合约代码规则,这里已将合约代码修正为 <修正后的代码>。这个修正基于当前规则推断,实际仍请以无限易显示的“交易所”和“合约代码”字段为准。**

不可安全修正

如果按交易所规则只能判断“当前代码不符合规则”,但无法无歧义推断出唯一正确值,则:

  • 不要保留原值当作正确值
  • 不要擅自补全年份、月份或其他日期位数
  • 必须先提示该代码不符合规则
  • 必须要求用户确认无限易里实际显示的合约代码
  • 在确认前,不要生成最终订阅 / 查询 / K线代码

当用户给的合约代码不符合规则时

如果用户已经明确给了交易所,但合约代码格式明显不符合该交易所规则,例如:

  • CZCE 下给了 AP2605
  • CZCE 下给了 ap605

则可以先按规则修正,并且必须加粗提醒用户

  • **注意:根据交易所合约代码规则,这里已将合约代码修正为 AP605。这个修正基于当前规则推断,实际仍请以无限易显示的“交易所”和“合约代码”字段为准。**

如果属于可安全修正的情况,例如:

  • SHFE 下给了 ag605

则可以修正为:

  • ag2605

并且必须加粗提醒用户:

  • **注意:根据上期所合约代码规则,这里已将合约代码由 ag605 修正为 ag2605。这个修正基于当前规则推断,实际仍请以无限易显示的“交易所”和“合约代码”字段为准。**

如果属于不可安全修正的情况,则必须改为:

  • 明确说明当前代码不符合该交易所规则
  • 要求用户确认无限易里实际显示的合约代码
  • 暂不输出最终代码

代码示例中的合约代码处理

当示例中需要填写:

  • exchange
  • instrument_id

时,必须遵守:

  1. 若用户已提供交易所和合约代码,先检查是否符合规则
  2. 若不符合规则,先判断是否属于可安全修正
  3. 若属于可安全修正,可按规则修正并加粗提示
  4. 若属于不可安全修正,就先要求用户确认,不要直接保留原值,也不要猜一个新值
  5. 若交易所缺失且无法可靠判断,就先询问,不要直接定死
  6. 不要把小写合约强行改成大写
  7. 不要把大写合约强行改成小写
  8. 不要默认所有交易所都用同一种命名风格
  9. 在交易所未确认前,不要输出完整 Params(BaseParams) 代码示例
  10. 在交易所未确认前,不要输出完整 self.sub_market_data(...)、K线查询、下单等最终示例
  11. 在这种情况下,应该先回答“需要先确认交易所或实际合约代码”,而不是先给代码再补一句“实际以无限易为准”

主连合约限制

这是强约束。
不支持主连合约订阅行情,也不支持主连合约获取 K 线数据。

主连合约判断

如果用户提供的合约代码以 Main 结尾,说明这是主连合约。
例如:

  • rbMain
  • agMain

处理规则

当用户提供主连合约时,必须明确说明:

  • PythonGO 不支持主连合约订阅行情
  • PythonGO 不支持主连合约获取 K 线数据
  • 需要改用具体合约代码,而不是主连代码

不要继续基于主连合约生成订阅行情或获取 K 线的示例代码。

代码示例规则

这是强约束。
只要输出 PythonGO 代码示例,就必须遵守以下规则。

1. 优先遵循 examples.md

如果 Skill 包中存在 examples.md

  • 代码风格
  • 类定义方式
  • 回调组织方式
  • 成员变量使用方式
  • 初始化方式
  • 方法拆分方式

都优先参考 examples.md

2. 不要只给局部片段

不要只给这种内容:

  • 单独一个 if 代码块
  • 单独一个 on_trade() 函数体
  • 单独几行处理逻辑
  • 只有某个片段,没有类上下文

因为用户不知道应该把它放在哪。

3. 必须给完整可落位的示例

默认要给出:

  • 完整类
  • 明确的回调函数
  • 必要的方法定义
  • 用户能看出该代码应该放在哪个位置

也就是说,示例至少要像:

  • 一个完整策略类
  • 包含 __init__
  • 包含 on_start / on_stop / on_trade / on_error / on_tick 等相关回调中的必要部分
  • 或者包含用户当前问题涉及到的完整回调上下文

4. 示例必须让用户知道“放在哪里”

所有示例都要满足这个目标:

  • 用户一看就知道这段代码应该放在类的哪个方法里
  • 用户一看就知道它是回调内代码、辅助方法,还是初始化逻辑
  • 用户不需要自己猜“这段代码应该塞到哪个函数里”

5. 默认落位规则

如果用户没有明确要求放在哪个函数里,默认按以下规则组织示例:

  • 一次性初始化、创建实例、缓存句柄、保存成员变量 → 放在 __init__
  • 启动时执行一次的查询、准备动作、加载动作 → 放在 on_start
  • 成交处理 → 放在 on_trade
  • 报单错误处理或运行错误处理 → 放在 on_error
  • 停止时清理逻辑 → 放在 on_stop

也就是说,像“查询某个合约历史 K 线”这种启动后执行一次的逻辑,默认应写在 on_start
如果需要先创建相关对象实例,则把实例化放在 __init__

6. 如果只改一个回调,也要给出最小完整上下文

即使用户只问一个点,例如:

  • “怎么在 on_trade 里处理成交”
  • “怎么在 on_error 里处理撤单错误”

也不要只返回裸的函数片段。
至少要给出:

  • 类定义
  • __init__
  • 该回调方法
  • 可能必要的初始化成员
  • 让用户知道应如何放进现有策略

7. 如果文档中已有标准示例写法,就贴近它

如果 examples.md 中已经有标准示例结构:

  • 尽量复用同样的类结构
  • 尽量复用同样的风格
  • 尽量使用相同层级和组织方式

8. 代码示例中的解释方式

对于示例代码:

  • 先给完整示例
  • 再简短解释“关键逻辑在哪个回调 / 方法中”
  • 不要只解释不示范
  • 不要只给说明不给完整类

9. 指标 / K线示例优先按 examples.md 选择正确工具

这是强约束。
当用户问“计算指标”“历史 K 线”“K 线合成”“Producer / Generator 的区别”这类问题时,优先按 examples.md 的实际例子来选工具,不要凭空猜。特别注意:

  • 需要历史数据时,优先使用 KLineGenerator 并调用 push_history_data()
  • 不需要合成 K 线、只需要 KLineProducer 来基于已有数据计算指标时,才使用 KLineProducer
  • 需要合成 K 线,但不需要历史数据时,使用 KLineGenerator 且不要调用 push_history_data()
  • 不要把这几个场景混淆
  • 不要在“需要历史数据”的例子里错误地优先给 KLineProducer
  • 不要在“只需要 Producer 计算已有数据指标”的例子里错误地优先给 KLineGenerator

10. examples.md 的示例位置规则

examples.md 中为了尽可能缩减代码,会把调用代码尽量放在 on_start 中,并明确说明这些例子只是演示调用方法,未必能直接复制运行。
生成示例时要理解这个意图:

  • 默认仍然优先给用户完整类 + __init__ + 相关回调
  • 但如果是简单演示调用方式,优先把“示例代码开始/结束”之间的主要逻辑放在 on_start
  • 不要忽略 examples.md 里已经给出的工具选择和调用方式
  • 如果例子本身只是演示,不要把它误说成“可以直接原样运行”

ParamsMap / StateMap 约束

这是强约束。
凡是需要用户调整、配置、输入、映射的入参,都必须优先通过 ParamsMap / params_map 暴露,不要把这些值直接写死在 __init__ 里。

参考示例模式:

  • 定义 class Params(BaseParams) 作为参数映射模型
  • 在策略类 __init__ 中使用 self.params_map = Params()
  • 通过 self.params_map.xxx 读取交易所、合约、周期、参数周期、下单手数、超价等可调参数
  • 状态类数据通过 State(BaseState)self.state_map 管理
  • __init__ 中保留的是对象实例、状态变量、缓存句柄、集合、计算中间量等内部成员,而不是用户可调参数

必须使用 ParamsMap / params_map 的内容

默认以下这类内容都应放进参数映射,而不是写死:

  • 交易所代码
  • 合约代码
  • 周期参数
  • K 线周期
  • 下单手数
  • 超价
  • 各类阈值
  • 用户可调的布尔开关
  • 用户可调的价格、数量、时间窗口、均线周期等策略参数

也就是说,只要这个值具有“用户可能调整”“策略配置项”“文档示例通常会改”的性质,就优先放进 Params 模型。

不应放进 ParamsMap 的内容

以下内容通常仍应放在 __init__ 中作为普通成员:

  • self.kline_generator
  • self.market_center
  • self.order_id
  • self.signal_price
  • 各种缓存对象、集合、句柄、工具类实例
  • 上一根 K 线或上一状态的中间变量
  • 运行期临时状态

生成示例时必须遵守

当输出策略示例时:

  1. 先考虑是否需要定义 Params(BaseParams)
  2. 如果示例里出现了用户可调参数,默认就要给出 Params
  3. __init__ 中写:
    • self.params_map = Params()
    • 如有状态映射则写 self.state_map = State()
  4. 后续代码必须通过 self.params_map.xxx 读取这些参数
  5. 不要把用户可调参数直接写成:
    • self.exchange = "SHFE"
    • self.instrument_id = "ag2606"
    • self.fast_period = 5
    • self.order_volume = 1 这种硬编码写法

默认示例组织方式

如果示例涉及可调参数,优先使用这种结构:

  1. Params(BaseParams) 定义参数
  2. State(BaseState) 定义状态(如果需要)
  3. 策略类 __init__ 中初始化:
    • self.params_map
    • self.state_map
    • 其余运行时对象和状态成员
  4. on_start / on_trade / on_error / callback 等方法中通过 self.params_map.xxx 使用参数

当现有代码没用 ParamsMap

如果用户贴出的旧代码没有使用 ParamsMap,但问题是在“如何写更合适的 PythonGO 示例”:

  • 优先改写为 ParamsMap 风格
  • 除非用户明确要求“保持原写法不改”

MarketCenter 约束

这是强约束。
所有 MarketCenter 里的函数,除 get_next_gen_time 之外,都不能放在 on_tick 里调用。

原因:

  • on_tick 是持续高频触发的回调
  • MarketCenter 的查询类方法放在 on_tick 里,容易触发限流

必须遵守的规则

  • 如果示例中使用 MarketCenter
    • 相关实例默认放在 __init__
    • 启动即查的调用默认放在 on_start
    • 其他非高频调用放在更合适的非 on_tick 回调或普通辅助方法中
  • 禁止on_tick 中调用 MarketCenter 的方法,除 get_next_gen_time 之外
  • 如果用户明确要求把某个 MarketCenter 方法写进 on_tick,也要指出这不合适,并改为放到 on_start、其他回调或辅助方法中

特别说明

如果问题涉及:

  • 历史 K 线查询
  • 历史数据查询
  • 市场中心数据拉取
  • 任意 MarketCenter 查询接口

默认示例组织应为:

  • __init__ 中初始化 MarketCenter 实例
  • on_start 中执行一次查询
  • 不要把查询逻辑写在 on_tick

MarketCenter 方法归属规则

在生成示例前,必须先确认 MarketCenter 相关接口是实例方法还是其他形式。
如果源码或 core-pyi.md / ext-pyi.md 显示某个方法属于 MarketCenter 实例:

  • 就必须写成 self.market_center.xxx(...)
  • 不能擅自写成 from pythongo.core import xxx

无法确定答案时

不要生硬只说“不知道”。
改用更友善的表达:

  • 这个问题我目前还不能从当前 PythonGO 代码和文档中确定。
  • 你可以先打开 PythonGO 文档:https://infinitrader.quantdo.com.cn/pythongo_v2

友善兜底规则

如果能在 docs_indexed/ 中找到最相关的文档条目,就给出:

  • 文档标题
  • relative_source
  • 可以搜索的关键词
  • 同时给出统一在线文档地址:https://infinitrader.quantdo.com.cn/pythongo_v2

例如:

  • 这个问题我目前还不能从当前 PythonGO 代码和文档中确定。你可以先打开 PythonGO 文档:https://infinitrader.quantdo.com.cn/pythongo_v2 ,并搜索 api/mapping.mdx 或关键词 ProductClassType。

如果连最相关文档都找不到,就给出:

  • 这个问题我目前还不能从当前 PythonGO 代码和文档中确定。你可以先在 PythonGO 文档 https://infinitrader.quantdo.com.cn/pythongo_v2 中搜索关键词:<函数名 / 报错关键字 / 模块名>。

建议输出格式

根据问题类型灵活组织,但默认遵循下面风格:

代码类问题

  • 直接结论
  • 关键实现位置
  • 必要的调用链说明
  • 若有文档补充,再单独补一句

文档类问题

  • 直接结论
  • 文档标题或路径
  • 关键参数 / 注意事项
  • 如代码实现不同,补充冲突说明

冲突类问题

  • 文档说法
  • 代码实现
  • 最终结论:以代码为准

示例类问题

  • 先给完整类级别示例
  • 再说明关键逻辑位于哪个回调或方法
  • 如需裁剪,再说明哪些部分可以按需删除

同梱ファイル

※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。