投資-ソフトウェア開発



AI価格予測

価格予測は通常、機械学習と深層学習アルゴリズムを組み合わせ、履歴データと市場テクニカル指標を使用します。一般的な方法をいくつか示します。

1. 時系列分析

2. 機械学習アルゴリズム

3. ディープラーニングモデル

4. 混合モデル

5. テクニカル指標

6. 強化学習

強化学習を使用したインテリジェント取引システムは、シミュレートされた市場環境で学習し、時間の経過とともに売買の意思決定を最適化し、取引戦略を徐々に改善することができます。

7. ビッグデータとセンチメント分析

AI モデルは、ニュースやソーシャルメディアのセンチメント分析を通じて市場センチメントを判断し、外部要因に基づいて株価の変化を予測できます。

8. 注意事項

複数のアルゴリズムと外部データ (経済指標、企業のファンダメンタルズ分析など) を組み合わせることで、最も効果的な AI 株価予測モデルが生成されることがよくあります。



指標と運用戦略

AI を株価予測に使用すると、モデルは投資家の意思決定を支援するさまざまな指標を生成します。これらの指標を使用して、市場の傾向を判断し、さまざまなシナリオに基づいて対応する取引操作を行うことができます。以下に、一般的な予測指標とその運用戦略をいくつか示します。

1. 価格を予測する

これは、モデルによって直接予測された将来の株価値です。

2. 上昇と下降の確率

モデルは、株価が上昇または下降する確率を予測する場合があります。

3. トレンドシグナル

モデルは、移動平均などのテクニカル指標に基づいて株式のトレンドの方向を予測する場合があります。

4.買われ過ぎ/売られ過ぎシグナル

RSI (相対力指数) などのテクニカル指標を使用して、株が買われすぎか売られすぎかを判断できます。

5. ボラティリティ

このモデルは、株式の将来の価格変動幅を予測することができます。

6. 取引の激しさ

市場の買い手と売り手の強さに基づいた予測。

7. ストップロスとテイクプロフィットポイント

モデルは、履歴データに基づいて、合理的なストップロスポイントとテイクプロフィットポイントを提案する場合があります。

要約する

さまざまな予測指標に従って、投資家は、購入、売却、静観など、それに応じた取引の決定を下すことができます。複数の指標を組み合わせることで、さまざまな市場シナリオの下でより合理的な投資決定を下すことができます。



回転インジケータープログラム

数あるローテーション判定インジケーターの中でも、すべてのインジケーターが同じ予測力を持っているわけではありません。近年(2020年から2025年)の市場経験に基づいて、以下は精度と実用性に基づいて等級付けされており、市場全体を比較し、プロセス自動化を通じて取得および計算する方法について説明します。

近年精度の高い先行指標

索引 精度評価 リードタイム 近年の検証事例
イールドカーブ(2年~10年のスプレッド) 非常に高い 6~18ヶ月 2022年7月の反転、2023年の地方銀行危機と経済減速の正確な警告
ISM製造業新規受注指数 非常に高い 3~6ヶ月 工業株と原材料株は2022年第4四半期に42を下回った後、2023年第1四半期に底を打った
ハイイールド債スプレッド(HYスプレッド) 非常に高い 2~4ヶ月 2022 年には金利スプレッドは 500bp 以上に拡大し、リスク資産の最低点に正確に対応する
銅と金の比率 高い 2~5ヶ月 銅と金の比率が2020年3月に底を打った後、世界の景気循環株は1年ぶりに上昇を始めた
世界の資金の流れ (EPFR 資金の流れ) 高い 1~3ヶ月 2023年末には新興国ETFに資金が流入し、新興国指数の反発を約2カ月先行させるだろう。
Fed ドットプロットと先物の暗示金利 高い 3~6ヶ月 2023年末の時点で市場は2024年の利下げを織り込んでおり、成長株は前倒しでスタートすることになる。
国ごとのPMIの違い 高い 1~3ヶ月 2024年、米国のPMIは拡大を続ける一方、欧州は縮小し、米国株は引き続き欧州株をアウトパフォームするとみられる。
VIXパニック指数 中くらい 即時~1ヶ月程度 逆指標としては効果的だが、2021 年に複数の誤った突破口があり実用性が低下する
資金調達残高と個人投資家心理調査 中くらい 即時〜2週間程度 極値は便利ですが、中間の間隔にはノイズが多すぎるため、他のインジケーターと一致させる必要があります。

近年、これらの指標がより正確になったのはなぜですか?

イールドカーブが高い精度を維持している理由は、イールドカーブが債券市場の将来経済に対する総合的な価格設定を反映しているためです。債券市場の参加者は機関法人が多数を占めており、情報効率は個人投資家が多数を占める市場よりもはるかに優れています。 ISMの新規受注は企業側の実需変化を直接反映しており、市場センチメントの影響を受けない。高利回り債のスプレッドはクレジット市場の「ストレスゲージ」です。企業のデフォルトリスクが高まると、ファンドは真っ先に高リスク資産から撤退することになる。通常、このシグナルは株式市場の反応に先行して現れます。

相対的に言えば、VIX と融資残高の精度は近年低下しています。主な理由は、ゼロデイ有効期限オプション (0DTE) がオプション市場構造を大きく変え、VIX を歪めてしまったためです。また、ソーシャルメディアを通じた個人投資家の集団行動も、従来のセンチメント指標のシグナルの質を低下させています。

市場間比較の方法論

異なる市場間でローテーション比較を行う場合、比較可能な標準化されたフレームワークを確立する必要があります。

相対強度

2 つの市場またはセクターの価格を比較し、その比率の傾向の方向を観察します。たとえば、「MSCI新興国市場指数/MSCI先進国市場指数」が曲線上に描かれている場合、比率の上昇は新興国市場がアウトパフォームしていることを意味します。この方法は、次の 2 つの比較可能な資産に適用できます。

Z スコア正規化方法

異なる市場の指標は一律に Z スコア (平均値からの標準偏差の倍数) に変換され、次元の違いを排除した後でのみ水平比較が可能になります。式は次のとおりです。 Z = (現在の値 - 過去 N 期間の平均値) / 過去 N 期間の標準偏差。たとえば、米国のPMIは52、ユーロ圏のPMIは47です。表面的には大きな違いはありません。ただし、米国の PMI の過去の平均が 53 の場合、標準偏差は 3、Z スコアは -0.33 になります。

エコノミック・サプライズ指数の比較方法

シティ エコノミック サプライズ インデックスは、実際の経済データと市場の予想との乖離を測定します。この指数を国全体で比較すると、どの地域のファンダメンタルズが予想を超えて改善しているか悪化しているかを判断できます。サプライズ指数が改善する市場に資金が流れる傾向がある。

プログラムされたデータの自動取得と指標の計算

以下は、Python を使用して自動監視システムを構築する完全なアーキテクチャとプログラムの例です。

データソースと対応するAPI

データ型 フリーソース Python スイート/API 更新頻度
株価、ETF価格 Yahoo Finance yfinance リアルタイム/デイリーライン
米国国債利回り FRED (連邦準備制度データベース) fredapi 毎日
PMI、GDP、CPI FRED / OECD fredapi / pandas-datareader 月/四半期
ハイイールド債のスプレッド FRED(BAMLH0A0HYM2) fredapi 毎日
銅と金の価格 Yahoo Finance yfinance(HG=F, GC=F) リアルタイム/デイリーライン
VIX指数 Yahoo Finance / CBOE yfinance(^VIX) すぐに
資金の流れ ETF保有額の推移予想 yfinance (取引量 + 純資産の変化) 毎日
先物暗示金利 CME FedWatch (クローラーが必要) requests + BeautifulSoup すぐに

コアプログラミングアーキテクチャ

# === 必要なパッケージをインストール ===
# pip install yfinance fredapi pandas numpy schedule

import yfinance as yf
import pandas as pd
import numpy as np
from fredapi import Fred
from datetime import datetime, timedelta

# FRED API キー (無料で申請するには https://fred.stlouisfed.org/docs/api/api_key.html にアクセスしてください)
fred = Fred(api_key='YOUR_FRED_API_KEY')

# ==========================================
# 1. イールドカーブ: 2 年と 10 年の金利差
# ==========================================
def get_yield_curve_spread():
    gs10 = fred.get_series('DGS10')  # 10年国債利回り
    gs2 = fred.get_series('DGS2')    # 2年国債利回り
    spread = gs10 - gs2
    spread = spread.dropna()
    latest = spread.iloc[-1]
    status = 「アップサイド・ダウン(不況警告)」 if latest < 0 else "普通"
    return {
        'spread': round(latest, 3),
        'status': status,
        'series': spread.tail(252)  # 過去1年間の情報
    }

# ==========================================
#2. ハイイールド債のスプレッド
# ==========================================
def get_hy_spread():
    hy = fred.get_series('BAMLH0A0HYM2')
    hy = hy.dropna()
    latest = hy.iloc[-1]
    avg_1y = hy.tail(252).mean()
    z_score = (latest - hy.tail(756).mean()) / hy.tail(756).std()
    return {
        'spread_bp': round(latest * 100, 0),
        'z_score': round(z_score, 2),
        'risk_level': 「ハイリスク」 if z_score > 1.5 else "中性" if z_score > -0.5 else 「リスクが低い」
    }

# ==========================================
#3. ブロンズとゴールドの比率
# ==========================================
def get_copper_gold_ratio():
    copper = yf.download('HG=F', period='2y')['Close']
    gold = yf.download('GC=F', period='2y')['Close']
    ratio = copper / gold
    ratio = ratio.dropna()
    current = ratio.iloc[-1]
    ma_200 = ratio.rolling(200).mean().iloc[-1]
    trend = 「景気拡大の兆し」 if current > ma_200 else 「経済縮小のシグナル」
    return {'ratio': round(current, 5), 'ma200': round(ma_200, 5), 'trend': trend}

# ==========================================
#4. 市場全体の相対的な強さの比較
# ==========================================
def relative_strength(ticker_a, ticker_b, period='1y'):
    """2 つの資産の相対的な強さの比率と傾向を計算します"""
    a = yf.download(ticker_a, period=period)['Close']
    b = yf.download(ticker_b, period=period)['Close']
    ratio = a / b
    ratio = ratio.dropna()
    ma_50 = ratio.rolling(50).mean()
    latest_ratio = ratio.iloc[-1]
    latest_ma = ma_50.iloc[-1]
    outperformer = ticker_a if latest_ratio > latest_ma else ticker_b
    return {
        'ratio': round(latest_ratio, 4),
        'ma50': round(latest_ma, 4),
        'outperformer': outperformer,
        'series': ratio
    }

#使用例:
#relative_strength('IWF', 'IWD') #成長率と価値
#relative_strength('EEM', 'SPY') #新興市場 vs 米国株
#relative_strength('^TWII', '000300.SS') #台湾株 vs CSI 300

# ==========================================
#5. Z スコアの正規化された市場間比較
# ==========================================
def zscore_compare(series_dict, lookback=756):
    「」
    複数の市場から時系列を受信し、Z スコアを計算して水平方向に比較します
    series_dict: {'米国': pd.Series, 'ヨーロッパ': pd.Series, ...}
    「」
    results = {}
    for name, series in series_dict.items():
        s = series.dropna().tail(lookback)
        current = s.iloc[-1]
        z = (current - s.mean()) / s.std()
        results[name] = {
            'current': round(current, 3),
            'z_score': round(z, 2),
            'percentile': round((s < current).mean() * 100, 1)
        }
    return pd.DataFrame(results).T.sort_values('z_score', ascending=False)

# ==========================================
#6. セクター勢いランキング
# ==========================================
def sector_momentum_ranking():
    """米国株式セクターの主要11銘柄ETFの複数期間のモメンタムとランキングを取得"""
    sectors = {
        「科学技術」: 'XLK', 'ファイナンス': 'XLF', '医学': 'XLV',
        「不要不急の消費」: 'XLY', 「エッセンシャル消費」: 'XLP', '業界': 'XLI',
        'エネルギー': 'XLE', '原材料': 'XLB', 「ユーティリティ」: 'XLU',
        '不動産': 'XLRE', 'コミュニケーション': 'XLC'
    }
    results = []
    for name, ticker in sectors.items():
        data = yf.download(ticker, period='1y')['Close']
        ret_1m = (data.iloc[-1] / data.iloc[-21] - 1) * 100
        ret_3m = (data.iloc[-1] / data.iloc[-63] - 1) * 100
        ret_6m = (data.iloc[-1] / data.iloc[-126] - 1) * 100
        # 総合的な運動量スコア: 近い将来の比重が高くなる
        score = ret_1m * 0.4 + ret_3m * 0.35 + ret_6m * 0.25
        results.append({
            '皿': name, 「1か月%」: round(ret_1m, 2),
            「3か月%」: round(ret_3m, 2), 「6か月%」: round(ret_6m, 2),
            「総合運動エネルギー」: round(score, 2)
        })
    df = pd.DataFrame(results).sort_values(「総合運動エネルギー」, ascending=False)
    return df.reset_index(drop=True)

自動スケジュールと通知

import schedule
import time
import requests

def send_line_notify(token, msg):
    """LINE Notifyでメッセージを送信"""
    headers = {'Authorization': f'Bearer {token}'}
    requests.post('https://notify-api.line.me/api/notify',
                  headers=headers, data={'message': msg})

def daily_rotation_report():
    """毎日のローテーション監視レポート"""
    yc = get_yield_curve_spread()
    hy = get_hy_spread()
    cg = get_copper_gold_ratio()
    sectors = sector_momentum_ranking()

    report = ふ「」
=== 毎日のローテーション監視 ===
日付: {datetime.now().strftime('%Y-%m-%d')}

利回り曲線 (2Y-10Y): {yc['spread']}% {yc['status']}
ハイイールド債スプレッド Z スコア: {hy['z_score']} ({hy['risk_level']})
銅と金の比率のトレンド: {cg['trend']}

上位 3 セクターの勢いランキング:
{sectors.head(3).to_string(index=False)}

セクターの勢いは下位 3 位にランクされます。
{sectors.tail(3).to_string(index=False)}
「」
    print(report)
    # send_line_notify('YOUR_LINE_TOKEN', report)
    return report

# 毎取引日午後 6 時に約定
schedule.every().monday.at("18:00").do(daily_rotation_report)
schedule.every().tuesday.at("18:00").do(daily_rotation_report)
schedule.every().wednesday.at("18:00").do(daily_rotation_report)
schedule.every().thursday.at("18:00").do(daily_rotation_report)
schedule.every().friday.at("18:00").do(daily_rotation_report)

while True:
    schedule.run_pending()
    time.sleep(60)

包括的なホイールダッシュボード計算ロジック

def rotation_dashboard():
    「」
    現在の景気循環段階の判断を出力する総合的な複数の指標
    リターン:回復・拡大・過熱・景気後退の確率推計
    「」
    scores = {'回復': 0, '拡大': 0, 'オーバーヒート': 0, '衰退': 0}

    #イールドカーブシグナル
    yc = get_yield_curve_spread()
    if yc['spread'] < -0.5:
        scores['衰退'] += 3
    elif yc['spread'] < 0:
        scores['オーバーヒート'] += 2; scores['衰退'] += 1
    elif yc['spread'] < 1.0:
        scores['拡大'] += 2
    else:
        scores['回復'] += 3

    # ハイイールド債スプレッドシグナル
    hy = get_hy_spread()
    if hy['z_score'] > 1.5:
        scores['衰退'] += 3
    elif hy['z_score'] > 0.5:
        scores['オーバーヒート'] += 2
    elif hy['z_score'] > -0.5:
        scores['拡大'] += 2
    else:
        scores['回復'] += 2

    # 銅と金の比率信号
    cg = get_copper_gold_ratio()
    if cg['ratio'] > cg['ma200']:
        scores['拡大'] += 2
    else:
        scores['衰退'] += 1; scores['回復'] += 1

    # 確率分布に変換する
    total = sum(scores.values())
    probs = {k: round(v/total*100, 1) for k, v in scores.items()}
    phase = max(probs, key=probs.get)

    return {
        「ジャッジメントサイクル」: phase,
        「各ステージの確率」: probs,
        「推奨構成」: {
            '回復': 「テクノロジーと金融を重視しすぎている。守備力不足」,
            '拡大': 「原材料とエネルギーの過剰摂取。株の水位を高く維持する,
            'オーバーヒート': 「成長株をアンダーウエート。コモディティとインフレ防止資産を増やす,
            '衰退': 「公的債務と現金を増やす。守備セクターの偏重
        }[phase]
    }

上級: 台湾株式セクターローテーションの監視

def tw_sector_rotation():
    """台湾株ETFのモメンタムトラッキング"""
    tw_sectors = {
        「台湾半導体」: '00891.TW',
        「台湾のESG持続可能性」: '00850.TW',
        「台湾金融」: '0055.TW',
        「台湾の高配当」: '0056.TW',
        「台湾50」: '0050.TW',
        「台湾ミディアム100」: '0051.TW',
    }
    results = []
    for name, ticker in tw_sectors.items():
        try:
            data = yf.download(ticker, period='6mo')['Close'].dropna()
            if len(data) < 63:
                continue
            ret_1m = (data.iloc[-1] / data.iloc[-21] - 1) * 100
            ret_3m = (data.iloc[-1] / data.iloc[-63] - 1) * 100
            results.append({
                'ストック': name,
                「1 月額報酬%」: round(ret_1m, 2),
                「月給3%」: round(ret_3m, 2),
                「運動エネルギー分率」: round(ret_1m * 0.5 + ret_3m * 0.5, 2)
            })
        except Exception as e:
            print(f"{name}取得に失敗しました:{e}")
    return pd.DataFrame(results).sort_values(「運動エネルギー分率」, ascending=False)

実践的な提案

プログラムされた監視の中心的な価値は、人間の判断に代わることではなく、感情的な干渉を排除し、規律を確保することです。システムを構築する際には、次の点に特別な注意が必要です。

  1. 単一のインジケーターの勝率は約 55% ~ 65% ですが、信頼性を 70% 以上に高めるには複数のインジケーターの相互検証が必要です。
  2. FRED API には 1 日あたりの呼び出し制限が 120 件あります (無料版)。リクエストの繰り返しを避けるために、取得したデータをローカルの SQLite または CSV に保存することをお勧めします。
  3. yfinance は公式 API ではないため、Yahoo の改訂により無効になる場合があります。 Try-Except および代替ソース (台湾株の FinMind など) を追加することをお勧めします。
  4. すべてのインジケーターには適用可能な時間枠があります。イールドカーブは中長期(6か月以上)の判断に適しており、セクターモメンタムは短期および中期(1~3か月)の判断に適しています。混合するときは、時間スケールの一貫性に注意を払う必要があります。
  5. 過剰な取引を避けるために、完全なレポートを週に 1 回作成し、異常な変化 (1 日でスプレッドが 20 bp 以上拡大するなど) のみを毎日監視することをお勧めします。


Python yfinance パッケージ

yfinance は、Yahoo Finance から金融市場データを取得するために Ran Aroussi によって開発されたオープンソースの Python スイートです。 Yahoo Finance が 2017 年に公式 API を閉鎖した後、yfinance は公開情報にアクセスするための最も人気のあるツールとなりました。最新バージョンは 1.2.0 (2026 年 2 月リリース) で、Apache によってライセンス供与されており、完全に無料であり、研究および教育目的に適しています。

インストールと基本設定

# インストール
pip install yfinance

#最新バージョンにアップグレードする
pip install yfinance --upgrade

# 基本的なインポート
import yfinance as yf

yfinance の依存関係パッケージには、pandas、numpy、requests、lxml が含まれており、Anaconda 環境を使用する場合、これらはすべてプリインストールされています。

主要なカテゴリと機能の概要

クラス/関数 使用 使用例
Ticker 単一ターゲットのすべてのデータ (価格、財務レポート、配当など) にアクセスします。 yf.Ticker("AAPL")
Tickers 複数のターゲットを同時に処理する yf.Tickers("AAPL MSFT GOOG")
download() 複数のターゲットの過去の価格をバッチでダウンロード (最もよく使用される機能) yf.download("SPY QQQ", period="1y")
Search 検索コード yf.Search("TSMC")
Market 市場概要データにアクセスする yf.Market("us_market")
Sector / Industry 業界およびセクターの情報にアクセスする yf.Sector("technology")
WebSocket ライブ ストリーミング マーケット データ (v1.0 以降の新機能) yf.WebSocket(on_message=callback)

アクセス可能なデータ範囲

yfinance が取得できる情報は単純な株価をはるかに超えており、次のカテゴリをカバーしています。

データカテゴリー 具体的な内容 対応するプロパティ/メソッド
歴史的な価格 OHLCV (始値高値安値終値)、調整終値 .history() または yf.download()
会社基本情報 時価総額、株価収益率、52週間の高値と安値、業種分類、従業員数など。 .info
財務諸表 損益計算書、貸借対照表、キャッシュフロー計算書(年次および四半期) .income_stmt / .balance_sheet / .cashflow / .quarterly_income_stmt
配当と分割 過去の配当金と株式分割の実績 .dividends / .splits / .actions
アナリスト情報 目標株価、レーティング、利益予想 .analyst_price_targets / .recommendations
オプション 有効期限、コール/プット チェーン .options / .option_chain()
法人の保有 主要な機関投資家の保有、インサイダー取引 .institutional_holders / .insider_transactions
カレンダー 決算日、配当落ち日など .calendar

サポートされているターゲット コード形式

市場タイプ コード形式
米国株 コードを直接入力してください AAPL, MSFT, TSLA, SPY
台湾株 コード .TW (リスト) / コード .TWO (リスト) 2330.TW (TSMC)、0050.TW、0056.TW
日本株 コード.T 7203.T(Toyota), 6758.T(Sony)
香港株 コード.HK 0700.HK (テンセント)、9988.HK (アリババ)
本土株 Code.SS(上海)/Code.SZ(深セン) 600519.SS (マオタイ)、000001.SZ
欧州株 Code.Exchange サフィックス SAP.DE (ドイツ)、MC.PA (フランス LVMH)、AZN.L (ロンドン)
索引 ^ で始まる ^GSPC (S&P 500)、^DJI (ダウ ジョーンズ)、^IXIC (ナスダック)、^TWII (加重指数)、^N225 (日経平均株価)
先物 コード=F GC=F(金)、SI=F(銀)、CL=F(原油)、HG=F(銅)、NG=F(天然ガス)
暗号通貨 コード-USD BTC-USD, ETH-USD, SOL-USD, ADA-USD
外国為替 コード 1 コード 2 = X EURUSD=X, JPYUSD=X, TWDUSD=X
ETF コードを直接入力してください SPY, QQQ, EEM, VGK, EWT, EWJ

過去の価格: 最も使用されている機能

import yfinance as yf

# ========================================
# 方法 1: Ticker オブジェクトを使用する (単一ターゲットの詳細な分析に適しています)
# ========================================
tsmc = yf.Ticker("2330.TW")

# 過去の価格を取得する
hist = tsmc.history(period="1y")        #ほぼ1年
hist = tsmc.history(period="6mo")       # 過去 6 か月
hist = tsmc.history(period="5d")        # 過去 5 日間
hist = tsmc.history(period="max")       # すべての歴史
hist = tsmc.history(start="2024-01-01",
                    end="2025-12-31")   #日付範囲を指定

# 期間パラメーターのオプション:
# 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max

# ========================================
#方法 2: download() を使用する (複数の規格の一括ダウンロードに適しています)
# ========================================
data = yf.download(
    tickers="SPY QQQ EEM GC=F BTC-USD",
    period="1y",
    interval="1d",      #日線
    group_by="ticker",  #ターゲットごとにグループ化
    auto_adjust=True,   # 権利落ち金利を自動調整
    threads=True        #複数のスレッドによりダウンロードが高速化される
)
# 特定のオブジェクトにアクセスします: data['SPY']['Close']

# ========================================
# 時間粒度 (間隔パラメータ)
# ========================================
# 分レベル: 1m、2m、5m、15m、30m、60m、90m
# 時間レベル: 1 時間
# 日レベル以上: 1日、5日、1週間、1ヶ月、3ヶ月
#
# 制限事項に注意してください:
# 100 万のデータは過去 7 日間のみ取得可能
# 日内データ (間隔 < 1d) は過去 60 日間のみ取得可能
# 日々のラインを超えると、数十年の歴史が得られます

# 5 分間の K ラインを取得 (過去 5 日間)
intraday = yf.download("AAPL", period="5d", interval="5m")

返された DataFrame 構造体

History() と download() は両方とも、次のフィールドを含む pandas DataFrame を返します。

分野 説明する
Open始値
High最高価格
Low最安値
Close終値(デフォルトは配当落ち分調整後)
Volume音量
Dividends配当 (.history() のみにあります)
Stock Splits株式分割 (.history() でのみ利用可能)

会社情報と財務諸表

msft = yf.Ticker("MSFT")

# === 会社の基本情報 (辞書を返す) ===
info = msft.info
print(info['marketCap'])         # 時価総額
print(info['trailingPE'])        # 価格収益率
print(info['dividendYield'])     #配当利回り
print(info['fiftyTwoWeekHigh'])  #52 週間最高値
print(info['sector'])             #業界
print(info['longBusinessSummary'])# 会社概要

# === 財務諸表 (データフレームを返す) ===
msft.income_stmt              # 年次損益計算書
msft.quarterly_income_stmt    # 四半期損益計算書
msft.balance_sheet            # 年次貸借対照表
msft.quarterly_balance_sheet  # 四半期貸借対照表
msft.cashflow                 #年次キャッシュフロー計算書
msft.quarterly_cashflow       # 四半期キャッシュフロー計算書

# === 配当と分割 ===
msft.dividends                #過去の配当金
msft.splits                   # 過去の株式分割
msft.actions                  # 配当+分割合併

# === アナリスト情報 ===
msft.analyst_price_targets    # 目標価格 (高値/低値/平均/中央値)
msft.recommendations          #アナリストの評価
msft.calendar                 # カレンダー(決算報告日など)

# === 法人株主 ===
msft.institutional_holders    # 機関投資家向け保有銘柄
msft.major_holders            # 大株主
msft.insider_transactions     #インサイダー取引

# === 選択肢 ===
msft.options                  # 利用可能な期日のリスト
chain = msft.option_chain(msft.options[0])
chain.calls                   # 通話情報
chain.puts                    # 情報を載せる

実践的なヒントと一般的なパターン

# ========================================
# 1. バッチダウンロード後に単一ターゲットの終値を取得する
# ========================================
data = yf.download(["SPY", "GC=F", "BTC-USD"], period="1y")
spy_close = data['Close']['SPY']     # マルチインデックスはMultiIndexです

# 単一のターゲットをダウンロードする場合の直接アクセス
spy = yf.download("SPY", period="1y")
spy_close = spy['Close']

# ========================================
# 2. MultiIndex を処理するための .squeeze() テクニック
# ========================================
# 単一のターゲットをダウンロードする場合、Close フィールドは Series ではなく DataFrame になる場合があります。
# .squeeze() を使用してシリーズに確実に変換します
close = yf.download("AAPL", period="1y")['Close'].squeeze()

# ========================================
# 3. エラー処理 (yfinance は時々失敗する場合があります)
# ========================================
def safe_download(ticker, **kwargs):
    """安全なダウンロード、失敗した場合は空のデータフレームを返します"""
    try:
        data = yf.download(ticker, progress=False, **kwargs)
        if data.empty:
            print(f"{ticker}:情報なし」)
        return data
    except Exception as e:
        print(f"{ticker}ダウンロードに失敗しました:{e}")
        return pd.DataFrame()

# ========================================
#4. 台湾株でよく使われるコードを簡単にチェック
# ========================================
tw_tickers = {
    「TSMC」: '2330.TW',
    「ホンハイ」:   '2317.TW',
    「メディアテック」: '2454.TW',
    「台湾50」: '0050.TW',
    「高配当」: '0056.TW',
    'ファイナンス':   '0055.TW',
    '半導体': '00891.TW',
    「加重インデックス」: '^TWII',
}

# ========================================
#5. テクニカル指標の計算の完全な例
# ========================================
import pandas as pd

ticker = yf.Ticker("2330.TW")
df = ticker.history(period="1y")

# 移動平均
df['MA20'] = df['Close'].rolling(20).mean()
df['MA60'] = df['Close'].rolling(60).mean()
df['EMA12'] = df['Close'].ewm(span=12).mean()

# RSI
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0).rolling(14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
df['RSI'] = 100 - (100 / (1 + gain / loss))

# ボリンジャーバンド
df['BB_mid'] = df['Close'].rolling(20).mean()
df['BB_std'] = df['Close'].rolling(20).std()
df['BB_upper'] = df['BB_mid'] + 2 * df['BB_std']
df['BB_lower'] = df['BB_mid'] - 2 * df['BB_std']

print(df[['Close','MA20','RSI','BB_upper','BB_lower']].tail())

# ========================================
#6. CSV へのエクスポート
# ========================================
df.to_csv("tsmc_data.csv", encoding="utf-8-sig")  #utf-8-sig により Excel で中国語を正しく表示できるようになります

使用制限と注意事項

限界 詳細な説明 対処戦略
非公式API yfinance は Yahoo と提携していません。 Yahooの公開APIを使用しているため、Yahooのバージョン改訂により一時的に無効になる場合があります。 最新バージョンに常に更新してください。バックアップ データ ソースを準備します (たとえば、FinMind は台湾株に使用できます)
周波数制限 短期間に大量のリクエストがあった場合、IP が Yahoo によって一時的にブロックされる場合があります。 time.sleep(1) をループに追加します。リクエストを減らすには、progress=False を使用します。データをローカルにキャッシュする
日中のデータ期限 1 分間のデータは 7 日間のみ保持されます。日中のデータは最大 60 日間保存されます 長期間の日中データが必要な場合は、定期的にダウンロードしてローカル データベースに保存する必要があります。
データ品質 場合によっては、欠損値や外れ値が存在することがあります。一部の不人気なターゲットにはデータが不完全です ダウンロード後にクリーンアップするには、必ず .dropna() を使用してください。重要な分析には複数ソースの相互検証を使用する
個人/研究用途のみ Yahoo Finance の利用規約では、素材は個人使用に限定されており、商用再販は禁止されています。 商用利用の場合は、有料 API (Bloomberg、Refinitiv、Polygon.io など) を使用する必要があります。
一部の方法では Web クローラーを使用します いくつかの機能 (一部の .info フィールドなど) は Yahoo Web ページをクロールすることによって取得されますが、これは比較的不安定です。 コアの .history() と download() は正式な API を使用しており、非常に安定しています。

代替品の比較

キット/サービス 料金 利点 短所
yfinance 無料 使いやすさ、豊富な情報、活発なコミュニティ 非公式、場合によっては無効、高頻度の取引には適さない
Alpha Vantage 無料(限定)/有料 テクニカル指標の計算と公式APIキーを内蔵 無料版には 1 分あたり 5 リクエストの制限があります
FRED API(fredapi) 無料 最も信頼できる一般経済データ (利回り、PMI、GDP など) 一般的な経済データのみで、個別の株価は含まれません
FinMind 無料(制限あり) 法人チップ、ファイナンス債券などを含む台湾株に関する最も完全な情報。 台湾市場のみをカバー
Polygon.io 無料(遅延)/有料(即時) 非常に低いレイテンシ (1ms) で、リアルタイム トランザクションに適しています。 無料版のデータは15分遅れます

個人的な調査や学習、戦略のプロトタイピング、中長期的な投資分析を始めるには、yfinance が最適です。シンプルな設計なので、初心者でも 2 ~ 3 行のコードで世界市場データを取得し、パンダで分析できます。ニーズがリアルタイム トランザクションや商用アプリケーションにアップグレードされると、有料 API に頼ることができます。



取引市場向けのデータベース設計

1. データベース構造

erDiagram User { int UserID string Username string Password string Email datetime CreatedAt } Product { int ProductID string ProductName decimal Price int StockQuantity int SellerID } Order { int OrderID int BuyerID datetime OrderDate decimal TotalAmount } OrderItem { int OrderItemID int OrderID int ProductID int Quantity decimal Subtotal } Payment { int PaymentID int OrderID datetime PaymentDate decimal Amount string PaymentMethod } User ||--o{ Product : sells User ||--o{ Order : places Product ||--o{ OrderItem : is_included_in Order ||--o{ OrderItem : contains Order ||--o| Payment : is_paid_by

2. 関係の説明



公開取引市場向けのデータベース設計

1. データベース構造

erDiagram Asset { int AssetID string AssetName string AssetType string BaseAsset string QuoteAsset decimal CurrentPrice datetime LastUpdated } MarketData { int MarketDataID int AssetID decimal OpeningPrice decimal ClosingPrice decimal HighPrice decimal LowPrice bigint Volume datetime DataDate } OrderBook { int OrderBookID int AssetID decimal PriceLevel int BuyVolume int SellVolume datetime SnapshotTime } HistoricalTrade { int TradeID int AssetID decimal TradePrice int TradeVolume datetime TradeTime } Asset ||--o{ MarketData : "has" Asset ||--o{ OrderBook : "has" Asset ||--o{ HistoricalTrade : "has"

2. 関係の説明

3. 主な機能



MetaQuotes Language (MQL)

言語の概要

MetaQuotes Language (略して MQL) は金融市場取引専用に開発されたプログラミング言語で、MetaTrader プラットフォーム (MT4 や MT5 など) で自動取引戦略 (エキスパートアドバイザー)、カスタム指標、スクリプト、関数ライブラリを作成するために使用されます。

MQL4 と MQL5

アプリケーションの種類

文法的特徴

簡単な例: MQL4 の EA

// 新しいKスティックが起動するたびに動作
int start() {
    if (OrdersTotal() == 0 && Volume[0] == 1) {
        OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "買い注文", 0, 0, clrGreen);
    }
    0を返します。
}

簡単な例: MQL5 のインジケーター

#property indicator_separate_window
#property indicator_buffers 1
double Buffer[];

int OnInit() {
    SetIndexBuffer(0, Buffer);
    return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total, const int prev_calculated,
                const datetime &time[], const double &open[],
                const double &high[], const double &low[],
                const double &close[], const long &tick_volume[],
                const long &volume[], const int &spread[]) {
    for (int i = 0; i < rates_total; i++) {
        Buffer[i] = close[i] - open[i];
    }
    return(rates_total);
}

開発ツール

MQL コードは、MetaTrader の組み込み MetaEditor を通じて編集およびコンパイルでき、ストラテジー テスターでバックテストおよび最適化できます。

学習とコミュニティ

結論

MetaQuotes Language は、取引自動化のために作成されたプロフェッショナル言語です。初心者もプロの定量トレーダーも、その強力な機能を使用して洗練された取引戦略を実装できます。



TradingViewガジェット

高度なリアルタイム チャート

これは、複数のインジケーター、描画ツール、完全な取引インターフェイス (ブローカーに接続されている場合) を含む、最も完全なバージョンです。

<!-- 高度なグラフ コンテナ -->
<div class="tradingview-widget-container">
  <div id="tradingview_adv"></div>
  <script type="text/javascript" src="https://s3.tradingview.com/tv.js"></script>
  <スクリプトタイプ="text/javascript">
  新しい TradingView.widget({
    "自動サイズ": true、
    "シンボル": "BINANCE:BTCUSDT",
    "間隔": "H"、
    "タイムゾーン": "等/UTC",
    "テーマ": "ダーク"、
    "スタイル": "1",
    "ロケール": "zh_TW",
    "container_id": "tradingview_adv"
  });
  </スクリプト>
</div>

テクニカル分析ガジェット(テクニカル分析)

このツールはダッシュボードとして表示され、さまざまなテクニカル指標 (移動平均、オシレーターなど) に基づいて買いまたは売りの推奨事項を自動的に計算して表示します。

<!-- テクニカル分析ガジェット -->
<div class="tradingview-widget-container">
  <div class="tradingview-widget-container__widget"></div>
  <script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-technical-analysis.js" async>
  {
    "間隔": "1m",
    「幅」: 425、
    "isTransparent": false、
    「高さ」:450、
    "シンボル": "ナスダック:TSLA",
    "showIntervalTabs": true、
    "ロケール": "zh_TW",
    "colorTheme": "ライト"
  }
  </スクリプト>
</div>

市場概要ウィジェット (市場概要)

複数の商品のリアルタイムの価格比較を表示するのに適しています。金融ウェブサイトのトップページのサイドバーでよく見られます。

<!-- 市場概要 -->
<div class="tradingview-widget-container">
  <script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-market-overview.js" async>
  {
    "colorTheme": "ダーク",
    "dateRange": "12M",
    "showChart": true、
    "ロケール": "zh_TW",
    "幅": "100%",
    "高さ": "400",
    「タブ」: [
      {
        "タイトル": "インデックス",
        「シンボル」: [
          {"s": "FOREXCOM:SPX500", "d": "S&P 500"},
          {"s": "FOREXCOM:NSXUSD"、"d": "ナスダック 100"}
        】
      }
    】
  }
  </スクリプト>
</div>

カスタムコードの入手方法

JavaScript を手動で記述することも可能ですが、TradingView には公式のグラフィカル ジェネレーターが用意されており、構文エラーを避けるために推奨されます。

よくある質問

質問 解決
チャートをロードできません 診るcontainer_idHTML ID と正確に一致するかどうか。
幅ランニングバージョン 意思widthに設定"100%"そして、外側の div が固定幅であることを確認してください。
データ遅延 無料版のウィジェット データは、取引所に応じて通常 15 ~ 20 分遅れます。


暗号通貨プログラム開発

Binance API - スポットとクライアントの紹介

Binance は、開発者に次のような豊富な API サポートを提供する世界的な仮想通貨取引所です。Spot APIそしてClient API、ユーザーが自動取引とデータ取得を容易に実行できるようにするため。

Binance Spot API

Binance Spot API は、Binance がスポット市場トレーダー向けに設計した API です。市場情報の照会、注文、注文のキャンセル、その他の操作に使用できます。この API は、取引ボット、自動取引戦略を設計し、市場変動を監視するために一般的に使用されます。

主な機能

Binance Client API

Binance クライアント API は、Binance のさまざまな API メソッドにアクセスする便利な方法を提供します。開発者が使用できるのは、binance.clientライブラリAPI 認証と管理、およびさまざまなスポットおよび契約市場の機能を便利に呼び出します。

クライアントAPIの主な機能

クライアントAPIでBinance Spotを使用する方法

  1. まず、Binance で API キーとシークレット キーを申請し、適切に保管する必要があります。
  2. Binance API Python SDK をインストールします。pip install binance
  3. 使用binance.clientAPI接続を確立して呼び出すbinance.spot方法。
binance.clientインポートクライアントから

    #クライアントを初期化する
    client = Client(api_key='your_api_key', api_secret='your_secret_key')

    # 現在の価格を取得する
    価格 = client.get_symbol_ticker(symbol="BTCUSDT")
    プリント(価格)


Bybit API

説明する

Bybit は、市況のクエリ、注文、資金調達レートの確認、アカウントの管理などに使用できる REST および WebSocket API を提供します。 以下に Python の使用方法を示します。requestsこのスイートは Bybit のパブリック API を呼び出します。

取り付けキット


pip install requests

取引ペアのリストをクエリする

インポートリクエスト

BASE_URL = "https://api.bybit.com"

def get_symbols():
    URL = f"{BASE_URL}/v5/market/instruments-info?category=linear"
    res = リクエスト.get(url)
    res.raise_for_status()
    データ = res.json()
    シンボル = [s["シンボル"] for s in data["結果"]["リスト"]]
    print(f"合計 {len(symbols)} 個の取引ペアが取得されました:")
    print(symbols[:10]) # 最初の 10 項目を表示します

__name__ == "__main__"の場合:
    get_symbols()

K ライン情報のクエリ


import requests

def get_klines(symbol="BTCUSDT", interval="60", limit=5):
    url = f"{BASE_URL}/v5/market/kline?category=linear&symbol={symbol}&interval={interval}&limit={limit}"
    res = requests.get(url)
    res.raise_for_status()
    data = res.json()
    for k in data["result"]["list"]:
        print(k)

if __name__ == "__main__":
    get_klines()

署名が必要なプライベート API

注文やアセットのクエリなどの Bybit のプライベート エンドポイントには API キーと署名が必要です。

インポートリクエスト、時間、hmac、ハッシュリブ

API_KEY = "あなたのapi_key"
API_SECRET = "あなたのapi_secret"

defsign_request(パラメータ、シークレット):
    """Bybit署名の生成"""
    query = "&".join([f"{k}={v}" for k, v insorted(params.items())])
    hmac.new(secret.encode()、query.encode()、hashlib.sha256).hexdigest() を返す

def get_wallet_balance():
    エンドポイント = "/v5/アカウント/ウォレット残高"
    URL = BASE_URL + エンドポイント
    タイムスタンプ = str(int(time.time() * 1000))

    パラメータ = {
        "アカウントタイプ": "統一",
        「タイムスタンプ」: タイムスタンプ、
        "api_key": API_KEY、
    }
    params["sign"] =sign_request(params, API_SECRET)

    res = request.get(url, params=params)
    print(res.json())

__name__ == "__main__"の場合:
    get_wallet_balance()

補充する



Bybit は特定のタイプの取引ペアを取得します

説明する

パイオネックスは使用しています/api/v1/common/symbols?type=PERP「永久契約」取引ペアを取得するには; Bybit では、次のことができます。/v5/market/instruments-infoそして指定しますcategory=linear(USDT 永久) またはinverse(逆契約)でも同じ効果が得られます。

Python の例

インポートリクエスト

クラスBybitAPI:
    BASE_URL = "https://api.bybit.com"

    @クラスメソッド
    def get_symbols(cls, category="linear"):
        「」
        特定のタイプの取引ペアを取得する
        カテゴリは次のとおりです。
          - リニア → USDT パーペチュアル (PERP)
          - インバース → インバース永久/納品契約
          - スポット→スポット
        「」
        エンドポイント = "/v5/market/instruments-info"
        URL = f"{cls.BASE_URL}{エンドポイント}"
        params = {"カテゴリ": カテゴリ}
        
        res = request.get(url, params=params)
        res.raise_for_status()
        データ = res.json()

        data.get("retCode") == 0の場合:
            シンボル = [s["シンボル"] for s in data["結果"]["リスト"]]
            print(f"合計 {len(symbols)} {category} 種類の取引ペアを取得しました")
            シンボル[:10]の の場合:
                印刷する
        それ以外の場合:
            print("取得に失敗しました:", data)

__name__ == "__main__"の場合:
    BybitAPI.get_symbols("リニア")

パラメータ比較表

PionexBybit説明する
type=PERPcategory=linearUSDT永久契約
type=SPOTcategory=spotスポットマーケット
category=inverse逆永久契約または納品契約

戻りデータ形式の例


{
  "retCode": 0,
  "result": {
    "list": [
      {
        "symbol": "BTCUSDT",
        "contractType": "LinearPerpetual",
        "status": "Trading",
        "lotSizeFilter": {
          "minOrderQty": "0.001",
          "maxOrderQty": "100",
          "qtyStep": "0.001"
        },
        "priceFilter": {
          "tickSize": "0.5"
        }
      }
    ]
  }
}

補充する



Bybit REST API クエリ K ライン データ

説明する

パイオネックスで入手可能/api/v1/market/klines市場の状況を確認してください。 Bybit の対応するエンドポイントは/v5/market/kline。を通してcategory市場の種類を指定します (例:linearUSDT の永久契約を表し、渡すことができますsymbolintervallimitendTimeおよびその他のパラメータ。

Python 関数の例

インポートリクエスト
インポート時間

クラスBybitAPI:
    BASE_URL = "https://api.bybit.com"

    @クラスメソッド
    def get_klines(cls、シンボル: str、間隔: str、end_time: int = なし、制限: int = 100):
        「」
        Bybit Kライン情報のクエリ
        :param シンボル: 取引ペア (「BTCUSDT」など)
        :param 間隔: 時間間隔 (1、3、5、15、30、60、120、240、360、720、D、W、M)
        :param end_time: 終了時刻 (Unix ミリ秒)、デフォルトは現在です
        :param limit: 返されるトランザクションの数、最大 1000
        「」
        エンドポイント = "/v5/マーケット/kline"
        URL = f"{cls.BASE_URL}{エンドポイント}"

        パラメータ = {
            "カテゴリ": "リニア"、# USDT 永久
            「シンボル」: シンボル、
            「間隔」: 間隔、
            「限界」:限界
        }

        終了時刻の場合:
            params["end"] = 終了時間
        それ以外の場合:
            params["end"] = int(time.time() * 1000)

        res = request.get(url, params=params)
        res.raise_for_status()
        データ = res.json()

        data.get("retCode") == 0の場合:
            klines = データ["結果"]["リスト"]
            print(f"{symbol} は合計 {len(klines)} K 行を取得しました")
            # 最初の 3 つのルート情報を表示します
            k の場合、kline[:3]:
                始値、始値、高値、安値、終値、出来高、出来高 = k
                print(f"始値:{open_price} 終値:{close} 高値:{high} 安値:{low} 出来高:{volume}")
        それ以外の場合:
            print("取得に失敗しました:", data)

__name__ == "__main__"の場合:
    BybitAPI.get_klines(symbol="BTCUSDT"、interval="60"、limit=5)

戻りデータの例

{
  "retCode": 0、
  「結果」: {
    "シンボル": "BTCUSDT",
    "カテゴリ": "線形",
    「リスト」: [
      [
        "1735119600000", // 開始時間 (ミリ秒)
        "98342.5", // 始値
        "98350.0", // 最高価格
        "98285.0", // 最低価格
        "98290.5", // 終値
        "12.304", // 取引高
        "1210000.5" // 取引量 (USDT)
      ]
    ]
  }
}

補充する



Kラインの一括取得を高速化

説明する

以下は、再試行、レート制限、キャッシュが組み込まれた ThreadPoolExecutor を使用した、直接再現可能な Python の例です。プロセス: まず、キャプチャされた K ライン (存在する場合) をキャッシュからロードし、欠落または不十分な取引ペアに対するリクエストのみを発行します。スレッド プールを使用して複数のリクエストを同時に実行し、セマフォを使用して同時実行数を制御し、制限を回避します。失敗した場合は、指数バックオフを使用して再試行されます。

プログラムコード (Bybit /v5/market/kline の例)

# 要件: pip インストールリクエスト
インポートリクエスト
インポート時間
jsonをインポートする
OSをインポートする
concurrent.futures からインポート ThreadPoolExecutor、as_completed
スレッドインポートセマフォから

BASE_URL = "https://api.bybit.com/v5/market/kline"
CACHE_FILE = "klines_cache.json"

# 調整可能なパラメータ
MAX_WORKERS = 20 # スレッド プール サイズ (API レート制限の調整の対象)
MAX_CONCURRENT = 10 # 実際の同時リクエストの数 (セマフォで制御)
RETRY = 3 # 各リクエストの再試行回数
INITIAL_BACKOFF = 0.5 # 最初の再試行を待機する秒数
CATEGORY = "linear" # 線形 -> USDT 持続可能;スポット/インバースを変更可能
LIMIT_PER_CALL = 200 # 各 kline API 制限 (API 上限設定による)
DATASET_ALLDAYS = 24 * 6 # 例: 少なくとも何 K 行必要かを決定します (変更可能)

# キャッシュのロード/アクセス
defload_cache():
    os.path.exists(CACHE_FILE)の場合:
        試してみてください:
            return json.load(open(CACHE_FILE, "r", encoding="utf-8"))
        例外例外:
            {}を返す
    {}を返す

def save_cache(キャッシュ):
    json.dump(cache, open(CACHE_FILE, "w", encoding="utf-8"), ensure_ascii=False, indent=2)

# 単一シンボルの API キャプチャ (再試行とレート制御を含む) (同時実行数はセマフォによって制御されます)
def fetch_klines_for_symbol(symbol、interval="60"、end_time=None、limit=LIMIT_PER_CALL、sem: セマフォ = None):
    パラメータ = {
        「カテゴリー」: カテゴリー、
        「シンボル」: シンボル、
        「間隔」: 間隔、
        「限界」:限界
    }
    終了時刻の場合:
        params["end"] = int(end_time)
    バックオフ = INITIAL_BACKOFF
    last_exc = なし

    # セマフォを取得します (指定されている場合)
    セムの場合:
        sem.acquire()
    試してみてください:
        範囲 (1, RETRY + 1) 内の試行の場合:
            試してみてください:
                resp = request.get(BASE_URL, params=params, timeout=10)
                resp.raise_for_status()
                データ = resp.json()
                # Bybit v5 は成功を示す retCode == 0 を返します。
                data.get("retCode", 0) == 0 で、データが "result" の場合:
                    klines = data["結果"].get("リスト", [])
                    クラインを返す
                それ以外の場合:
                    last_exc = Exception(f"API エラー: {data}")
            eとしてのrequests.Exceptions.RequestExceptionを除く:
                last_exc = e
            #バックオフ
            time.sleep(バックオフ)
            バックオフ *= 2
    最後に:
        セムの場合:
            sem.release()
    # 失敗した場合は、最後のエラーをスローするか、None を返します
    last_exc を発生させる

# バッチ処理: ペア (シンボルのリスト) で渡し、dict {symbol: klines} を返します。
def get_klines_batch(pairs、interval="60"、dataset_alldays=DATASET_ALLDAYS、limit=LIMIT_PER_CALL、max_workers=MAX_WORKERS、max_concurrent=MAX_CONCURRENT):
    キャッシュ = load_cache() # キャッシュ形式: { シンボル: [kline_list] }
    結果 = {}
    to_fetch = []

    # どのシンボルを取得する必要があるかを決定します (キャッシュに存在しないか、長さが不十分です)
    ペアの の場合:
        キャッシュ = キャッシュ.get(s)
        キャッシュされており、len(cached) >= dataset_alldays の場合:
            結果[s] = キャッシュ済み
        それ以外の場合:
            to_fetch.append(s)

    # 取得するものが何もない場合は、直接返します
    to_fetch しない場合:
        結果を返す

    sem = セマフォ(max_concurrent)
    ThreadPoolExecutor(max_workers=max_workers) を exe として使用:
        futures = {exe.submit(fetch_klines_for_symbol、sym、interval、None、limit、sem): to_fetch の sym の sym}
        as_completed(futures) の fut の場合:
            sym = 先物[fut]
            試してみてください:
                kl = fut.result()
                # API リターンがリスト形式で保存されている場合 (Bybit の例 [time,open,high,low,close,vol,turnover] による)
                キャッシュ[sym] = kl
                結果[sym] = kl
            e としての例外を除く:
                # 失敗を記録しますが、プログラム全体をブロックしません
                print(f"[エラー] {sym}の取得に失敗しました: {e}")
                結果[sym] = なし

    # キャッシュをアーカイブします (オプション: 成功したキャッシュのみを保存します)
    save_cache(キャッシュ)
    結果を返す

# 使用例
__name__ == "__main__"の場合:
    # 500 ペアあると仮定します (参考値)
    ペア = ["BTCUSDT", "ETHUSDT", "SOLUSDT"] # ... 500
    # 一括取得を実行する
    all_klines = get_klines_batch(ペア、間隔 = "60"、データセット_オールデイズ = 100、制限 = 200)
    # 長さの要件を満たすシンボルを除外します
    Good = [kl と len(kl) >= 100 の場合、all_klines.items() の s、kl]
    print(f"100 を超えて一致する取引ペアの数: {len(good)}")
    印刷(良好[:20])

考慮事項とベストプラクティス



Pionex API

導入

Pionex は、開発者がプロ​​グラムを通じて取引を自動化し、市場データをクエリし、アカウント資産を管理できるようにする公式 API を提供しています。 API は、REST メソッドと WebSocket メソッドの両方をサポートします。

APIキーの申請

  1. Pionex アカウントにログインします
  2. 入力API管理ページ
  3. 新しい API キーを作成し、権限 (読み取り、取引、コインの引き出しなど) を設定します。
  4. 書き留めるAPI KeyそしてSecret、一度だけ表示されます

REST API の例 (Node.js)

// Node.js axios を使用して Pionex API をリクエストします
const axios = require("axios");
const crypto = require("crypto");

const apiKey = "あなたの API_KEY";
const Secret = "あなたのAPI_SECRET";
const BaseUrl = "https://api.pionex.com";

// 署名の生成
関数記号(クエリ) {
  return crypto.createHmac("sha256", Secret).update(query).digest("hex");
}

// アカウント残高を問い合わせる
非同期関数 getBalances() {
  const タイムスタンプ = Date.now();
  const クエリ = `タイムスタンプ=${タイムスタンプ}`;
  const 署名 = 署名 (クエリ);

  const res = await axios.get(`${baseUrl}/api/v1/account?${query}&signature=${signature}`, {
    ヘッダー: { "X-MBX-APIKEY": apiKey }
  });
  console.log(res.data);
}

getBalances();

REST API の例 (Python)

インポート時間
hmacをインポートする
ハッシュライブラリをインポートする
インポートリクエスト

API_KEY = "あなたの API_KEY"
SECRET = "あなたのAPI_SECRET"
BASE_URL = "https://api.pionex.com"

def 記号(クエリ: str) -> str:
    hmac.new(SECRET.encode()、query.encode()、hashlib.sha256).hexdigest() を返す

def get_balances():
    タイムスタンプ = str(int(time.time() * 1000))
    クエリ = f"タイムスタンプ={タイムスタンプ}"
    署名 = 署名(クエリ)

    URL = f"{BASE_URL}/api/v1/account?{クエリ}&signature={signature}"
    ヘッダー = {"X-MBX-APIKEY": API_KEY}
    res = request.get(url, headers=ヘッダー)
    print(res.json())

get_balances()

WebSocket の例 (Node.js)

const WebSocket = require("ws");

const ws = new WebSocket("wss://ws.pionex.com/ws");

ws.on("開く", () => {
  console.log("Pionex WebSocket に接続しました");
  // BTC/USDT 相場を購読する
  ws.send(JSON.stringify({
    イベント: "購読"、
    チャネル: 「マーケット」、
    マーケット: "BTC_USDT"
  }));
});

ws.on("メッセージ", (msg) => {
  console.log("受信メッセージ:", msg.toString());
});

WebSocket の例 (Python)

Webソケットをインポートする
jsonをインポートする

def on_open(ws):
    print("Pionex WebSocket に接続されました")
    サブメッセージ = {
        "イベント": "購読",
        "チャネル": "市場"、
        "市場": "BTC_USDT"
    }
    ws.send(json.dumps(sub_msg))

def on_message(ws, メッセージ):
    print("受信メッセージ:", message)

ws = websocket.WebSocketApp(
    "wss://ws.pionex.com/ws",
    on_open=on_open、
    on_message=オンメッセージ
)

ws.run_forever()

よく使われる機能

注意事項



Pionex REST API 取引ペアリストの取得

APIの説明

利用可能GET /api/v1/common/symbolsサポートされているすべての取引ペアと、最小注文サイズ、価格精度、取引タイプ (スポットまたは契約) などの Pionex の詳細な属性を取得するため。

HTTPリクエスト


GET https://api.pionex.com/api/v1/common/symbols

ポストバックの例


{
  "code": 0,
  "data": [
    {
      "symbol": "BTC_USDT",
      "quoteCurrency": "USDT",
      "baseCurrency": "BTC",
      "minQty": "0.0001",
      "minNotional": "5",
      "pricePrecision": 2,
      "quantityPrecision": 6,
      "tradeEnable": true
    },
    {
      "symbol": "ETH_USDT",
      "quoteCurrency": "USDT",
      "baseCurrency": "ETH",
      "minQty": "0.001",
      "pricePrecision": 2,
      "quantityPrecision": 6,
      "tradeEnable": true
    }
  ]
}

Python の例

インポートリクエスト

BASE_URL = "https://api.pionex.com"

def get_symbols():
    URL = f"{BASE_URL}/api/v1/common/symbols"
    res = リクエスト.get(url)
    データ = res.json()
    
    data.get("コード") == 0の場合:
        シンボル = data.get("データ", [])
        print(f"合計 {len(symbols)} 個の取引ペアを取得しました")
        for s inSymbols[:10]: # 最初の 10 個のみを表示します
            print(f"{s['symbol']} ({s['baseCurrency']}/{s['quoteCurrency']})")
    それ以外の場合:
        print("取得に失敗しました:", data)

__name__ == "__main__"の場合:
    get_symbols()

特定のタイプをフィルタリングする

無期限契約をサポートする取引ペアのみを削除するには、次の単純なフィルタリング ロジックを使用できます。


perp_symbols = [s for s in data["data"] if ".PERP" in s["symbol"]]

使用



Pionex の戻り形式を解析する

説明する

次のプログラムは呼び出しますhttps://api.pionex.com/api/v1/common/symbols、返された JSON の構造 (キーとデータ型) が自動的に出力されるため、実際の形式を理解しやすくなります。

Python の例

インポートリクエスト
jsonをインポートする

def print_json_structor(データ、インデント=0):
    """JSON 構造を再帰的に出力します"""
    スペース = " " * インデント
    if isinstance(data, dict):
        data.items() の k、v の場合:
            if isinstance(v, (dict, list)):
                print(f"{space}{k}: {type(v).__name__}")
                print_json_struct(v, インデント + 1)
            それ以外の場合:
                print(f"{space}{k}: {type(v).__name__}")
    elif isinstance(data, list) とデータ:
        print(f"{space}[リスト]項目タイプ: {type(data[0]).__name__}")
        print_json_structor(data[0], インデント + 1)

def get_pionex_symbols_format():
    URL = "https://api.pionex.com/api/v1/common/symbols"
    res = リクエスト.get(url)
    res.raise_for_status()
    データ = res.json()
    print("ルートレベル構造:")
    print_json_struct(データ)

__name__ == "__main__"の場合:
    get_pionex_symbols_format()

出力例

ルートレベルの構造:
コード: int
データ: リスト
  [リスト]項目タイプ: dict
    記号: str
    基本通貨: str
    引用通貨: str
    価格精度: int
    数量精度: int
    最小数量:str
    最小概念: str
    tradeEnable: ブール値

補充する



Pionex REST API Get Klines

APIの説明

Pionex 公開市場データから取得した、指定された取引ペアの K ライン (ローソク足 / OHLCV) データを取得します。

GET /api/v1/market/klines

リクエストパラメータ

パラメータタイプ必要ですか説明する
symbolstringはい取引ペア (例: BTC_USDT または BTC_USDT.PERP)
intervalstringはい時間間隔(1M、5M、15M、30M、60M、4H、8H、12H、1Dなど)
endTime数値 (ミリ秒)いいえ終了時刻 (ミリ秒のタイムスタンプ)
limitnumberいいえ取得したデータの数、デフォルトは 100、範囲は 1 ~ 500

戻り値の形式


{
  "result": true,
  "data": {
    "klines": [
      {
        "time": 1691649240000,
        "open": "1851.27",
        "close": "1851.32",
        "high": "1851.32",
        "low": "1851.27",
        "volume": "0.542"
      }
    ]
  },
  "timestamp": 1691649271544
}

Python の例

インポートリクエスト

BASE_URL = "https://api.pionex.com"

def get_klines(シンボル: str、間隔: str、end_time: int = なし、制限: int = 100):
    パラメータ = {
        「シンボル」: シンボル、
        「間隔」: 間隔、
        「限界」:限界
    }
    end_time が None でない場合:
        params["endTime"] = 終了時間
    応答 = request.get(f"{BASE_URL}/api/v1/market/klines", params=params)
    結果 = 応答.json()
    result.get("result") と結果の "data" の場合:
        結果を返す["データ"]["クライン"]
    それ以外の場合:
        raise Exception(f"K 行の取得に失敗しました: {result}")

__name__ == "__main__"の場合:
    # 例: BTC_USDT 無期限契約の 15 分 K ラインの最新 50 本を取得する
    シンボル = "BTC_USDT.PERP"
    間隔 = "15M"
    klines = get_klines(シンボル、間隔、制限=50)
    クラインの k の場合:
        印刷(k)


Pionex REST API クエリはコントラクト グリッド取引ペアをサポートします

説明する

パイオネックスには1つもありません「グリッド取引ペアのサポートを受ける」専用の API ですが、経由でアクセスできますGET /api/v1/market/tickersすべての取引ペアを取得してフィルターで除外します.PERP「(USDT Perpetual Contract)」と入力して、Futures Grid でサポートされている取引ペアのリストを取得します。

Pythonのサンプルプログラム

インポートリクエスト

BASE_URL = "https://api.pionex.com"

def get_perp_pairs():
    URL = f"{BASE_URL}/api/v1/market/tickers"
    res = リクエスト.get(url)
    データ = res.json()
    
    perp_pairs = []
    データ内の「データ」の場合:
        data["data"] の項目の場合:
            マーケット = item.get("シンボル", "")
            # 無期限契約の取引ペアは通常 .PERP で終わります
            「.PERP」が市場にある場合:
                perp_pairs.append(マーケット)
    perp_pairs を返す

__name__ == "__main__"の場合:
    ペア = get_perp_pairs()
    print("サポートされている永久契約グリッド取引ペア:")
    p のペアの場合:
        印刷(p)

実行結果例

サポートされている永久契約グリッド取引ペア:
BTC_USDT.PERP
ETH_USDT.PERP
SOL_USDT.PERP
LINK_USDT.PERP
...

補充する



Max Coin API

Max Coin APIとは何ですか?

Max Coin API は、Max Exchange が提供するアプリケーション プログラミング インターフェイスのセットで、開発者がその暗号通貨取引機能にプログラムでアクセスできるようにします。開発者は、API を通じて取引を自動化し、市場データを取得し、資産を管理できます。

Max Coin APIの使い方は?

  1. Max アカウントに登録します。アクセスマックス公式サイトそしてアカウントを登録します。
  2. API キーを取得します。ログインしたら、アカウント設定に移動し、新しい API キーを生成し、必要な権限を設定します。
  3. リファレンス API ドキュメント:公式 API ドキュメントを読んで、各エンドポイントの機能と使用法を理解してください。

APIでサポートしている主な機能

APIサンプルリクエスト

以下は、API を介して市場データを取得する例です。

GET https://max-api.maicoin.com/api/v1/ticker?market=btctwd
    

このリクエストは、価格、出来高などを含む、BTC/TWD のリアルタイム市場データを返します。

サンプルコード

以下は、Python 言語を使用して Max API を呼び出す簡単な例です。

インポートリクエスト

BASE_URL = "https://max-api.maicoin.com"

def get_ticker(ペア):
    エンドポイント = "/api/v1/ticker"
    params = {"マーケット": ペア}
    応答 = request.get(BASE_URL + エンドポイント、params=params)
    応答.json() を返す

# BTC/TWD マーケットデータを取得する
ティッカーデータ = get_ticker("btctwd")
print(ティッカーデータ)

Max Coin API利用時の注意点

関連リソース



ビットコインPoWの会計プロセス

分散会計の核心

ビットコインの使用状況プルーフ・オブ・ワーク (PoW)分散型会計システムを実現するためのコンセンサスメカニズムとして。 PoW の中心的な目標は、ノードが数学的問題を競って解決して、誰が会計権限を持っているかを決定し、データが意のままに改ざんされないようにすることです。

取引需要の生成と普及

トランザクション選択の優先順位

マイナーは、ブロックを正常にパッケージ化して手数料を獲得できる可能性を高めるために、次の基準に基づいてトランザクションに優先順位を付けます。

パッケージングブロックと会計上の権利をめぐる競争

検証とチェーンの選択

ブロック制限と生成頻度

会計の混雑と解決策

取引量が多すぎると混雑や手数料の高騰が発生します。この問題を改善するために、さまざまな拡張ソリューションが提案されています。



BTCブロックのデータ構造

ブロックの主な構造

フィールド名 サイズ (バイト) 説明する
block size 4 ブロック全体 (ヘッダーとすべてのトランザクション データを含む) の合計サイズ (バイト単位)
block header 80 ブロックのヘッダ情報は、前後のブロックの検証とリンクに使用されます。
transaction counter 1 ~ 9 トランザクションの数。可変長整数 (VarInt) で表され、このブロック内にトランザクションがいくつあるかを示します。
transactions 変数 すべての実際のトランザクション データ (各トランザクションには入力と出力が含まれます)

ブロックヘッダー

長さは 80 バイト固定で、内容は次のとおりです。

フィールド名 データ型 長さ 説明する
version int32 4 ブロック バージョン。許容可能なブロック検証ルールを表します。
previous block hash char[32] 32 前のブロックのハッシュ値
merkle root char[32] 32 すべてのトランザクション ハッシュのマークル ツリー ルート
timestamp uint32 4 ブロック作成時刻 (UNIX タイムスタンプ)
bits uint32 4 ターゲットの難易度を圧縮して表現したもの
nonce uint32 4 有効なブロックハッシュの変化する値を見つけるには

トランザクション数(トランザクションカウンタ)

VarInt (可変長整数) 形式を使用して、ブロック内のトランザクションの数を示します。

取引

各トランザクション データには、次の主要部分が含まれます (長さはさまざまです)。

通常、最初のトランザクションはコインベース取引、これはマイナーがブロック報酬を受け取るための特別なトランザクションであり、入力は含まれません。



トランザクション需要の生成と普及プロセスの実装

プログラム紹介

次の例では、Python を使用して、ユーザーがトランザクションを送信し、ノードがブロードキャストし、マイナーがトランザクションを選択してブロックにパッケージ化するという簡略化されたプロセスをシミュレートします。このシミュレーションでは、暗号化署名や完全なブロックチェーン実装はカバーされず、「トランザクション → ブロードキャスト → パッケージ化」の論理操作のみがカバーされます。

主な工程

Pythonコード

インポート時間

クラストランザクション:
    def __init__(自分、送信者、受信者、金額、手数料):
        self.sender = 送信者
        self.receiver = 受信者
        self.amount = 金額
        self.fee = 料金
        self.timestamp = time.time()

    def __repr__(自分自身):
        return f"[Tx: {self.sender} → {self.receiver}, ${self.amount}, 料金: {self.fee}]"


クラスノード:
    def __init__(自分自身, 名前):
        self.name = 名前
        self.peers = []
        self.transaction_pool = []

    def connect(自分、ピア):
        ピアが self.peers にない場合:
            self.peers.append(ピア)
            peer.connect(self) # 双方向接続

    def accept_transaction(self, tx):
        tx が self.transaction_pool にない場合:
            self.transaction_pool.append(tx)
            print(f"{self.name} がトランザクションを受け取りました: {tx}")
            セルフブロードキャスト(tx)

    def ブロードキャスト(self, tx):
        self.peers のピアの場合:
            ピア.受信_トランザクション(tx)


クラスマイナー(ノード):
    def Mine_block(self):
        print(f"\n⛏️ {self.name} がブロックのパッキングを開始します")
        # 手数料の高い順に並べ替え、最大 5 件のトランザクションを受け付けます
        sorted_txs =sorted(self.transaction_pool, key=lambda tx: tx.fee, reverse=True)
        選択 =sorted_txs[:5]
        print(f"{self.name} パッケージ化されたトランザクション:")
        選択された tx の場合:
            print(f" - {tx}")
        #処理済みトランザクションをクリアする
        self.transaction_pool = [tx が選択されていない場合は self.transaction_pool の tx]


# ノードとマイナーを作成する
A = ノード("ノード A")
B = ノード("ノード B")
C = マイナー("マイナー C")

# ノードネットワークを接続する
A.connect(B)
B.接続(C)

# ユーザーがトランザクションを発行する
tx_list = [
    トランザクション("アリス", "ボブ", 2.0, 0.0005),
    トランザクション("イブ", "トム", 1.2, 0.0009),
    トランザクション("ジョー", "メアリー", 3.5, 0.0002),
    トランザクション("リック", "サム", 0.8, 0.0015),
    トランザクション("アン", "リリー", 1.7, 0.0001)
]

tx_list の tx の場合:
    print(f"\nユーザーがトランザクションを送信しました: {tx}")
    A.receive_transaction(tx)
    時間.睡眠(0.2)

# マイナーがパッケージングを開始
C.mine_block()

実行命令

拡張可能な方向



イーサリアムVM書き込みプログラム

1.イーサリアムVMとは

イーサリアム仮想マシン (略して EVM) はイーサリアムの中核コンポーネントであり、スマート コントラクトの実行を担当します。 EVM は、開発者がイーサリアム ネットワークの他の部分への影響を心配することなくコードを実行できるサンドボックス環境を提供します。

2. スマートコントラクトとEVM

スマート コントラクトは、EVM によって実行が処理される自己実行型の不変コントラクトです。開発者は通常、Solidity などの高レベルのプログラミング言語を使用してスマート コントラクトを作成し、EVM が理解できるバイトコードにコンパイルされます。

3. EVMプログラミング言語:Solidity

Solidity はイーサリアムで最も一般的に使用されているプログラミング言語であり、JavaScript に似た構文を備えています。以下は単純な Solidity スマート コントラクトの例です。


pragma solidity ^0.8.0;

contract SimpleStorage {
uint public storedData;

function set(uint x) public {
    storedData = x;
}

function get() public view returns (uint) {
    return storedData;
}
}
    

上記のコントラクトには、整数データを格納するために使用される変数が含まれていますstoredData、およびそのデータを設定および取得する関数。

4. EVM の仕組み

ユーザーがイーサリアム ネットワーク上でスマート コントラクトを実行すると、次の手順が発生します。

5. EVM コンピューティング リソースとガス

EVM のコンピューティング リソースには限りがあります。ネットワークの悪用を防ぐために、EVM は以下を使用します。Gas取引手数料を計算して請求するメカニズム。各操作には対応するガスコストがあり、ユーザーはトランザクションを送信するときに十分なガスを提供する必要があります。 スマートコントラクトの実行に必要なコンピューティングリソースの料金を支払うため。

6. まとめ

EVM はイーサリアム ネットワークの中核であり、スマート コントラクトを実行するための強力な環境を提供します。 Solidity などのプログラミング言語を使用することで、開発者はさまざまな分散型アプリケーション (dApp) を作成し、EVM の機能を活用して複雑な論理演算やトランザクション処理を実装できます。



EVM導入プロセス

準備

契約書を書く

存在するcontractsフォルダに追加されましたLendingProtocol.solSolidity コントラクトを貼り付けます。

デプロイメントスクリプトをセットアップする

scriptsフォルダーの作成deploy.js、内容は次のとおりです。

非同期関数 main() {
  const [デプロイヤー] = ethers.getSigners(); を待ちます。
  console.log("デプロイメントアカウント:",deployer.address);

  const TokenAddress = "0xYourTokenAddressHere";
  const LendingProtocol = await ethers.getContractFactory("LendingProtocol");
  const lending = await LendingProtocol.deploy(TokenAddress);

  融資を待つ.deployed();
  console.log("LendingProtocol が正常に展開されました:",ending.address);
}

main().catch((エラー) => {
  コンソール.エラー(エラー);
  プロセス終了コード = 1;
});

ローカルのテストチェーンにデプロイする

ヘルメット テスト チェーンを開始します。

npx hardhat node

別のターミナルを開いてデプロイします。

npx hardhat run scripts/deploy.js --network localhost

テストネットへのデプロイ (例: Goerli)

require("@nomiclabs/hardhat-ethers");

module.exports = {
  ネットワーク: {
    ゲルリ: {
      URL: "https://goerli.infura.io/v3/API キー",
      アカウント: ["0xyour private key"]
    }
  }、
  固さ:「0.8.20」
};

次に、以下をデプロイします。

npx hardhat run scripts/deploy.js --network goerli

導入が完了しました

デプロイ後、コントラクト アドレスが出力され、フロントエンドの統合と対話に使用できます。



ローン契約書

契約のご紹介

この融資契約は、イーサリアム仮想マシン (EVM) 上で実行されるスマート コントラクトです。ユーザーは、この契約を通じて、利息を得るために資産を預けたり、利息を支払うために資産を貸したりすることができます。このプロトコルは ERC-20 トークンをサポートしており、貸出、貯蓄、清算などのコア機能を備えています。

主な機能

スマートコントラクトの例 (堅牢性)

// SPDX ライセンス識別子: MIT
プラグマ ソリッドティ ^0.8.0;

インターフェイス IERC20 {
    関数 transferFrom(アドレス送信者、アドレス受信者、単位量) 外部戻り値 (bool);
    関数 transfer(アドレス受信者、単位量) 外部戻り値 (bool);
    関数 BalanceOf(アドレス アカウント) 外部ビューは (uint) を返します。
    関数approve(アドレス消費者, 単位量) 外部戻り値(ブール値);
}

契約融資プロトコル {
    IERC20パブリックトークン。
    公開所有者のアドレスを指定します。
    uint public InterestRate = 5; // 年利 5%

    マッピング(アドレス => uint) 公的預金;
    マッピング(アドレス => uint) パブリック借用;

    コンストラクター(アドレス_トークン) {
        トークン = IERC20(_token);
        所有者 = メッセージ送信者;
    }

    関数 デポジット(単位量) 外部 {
        require(金額 > 0, "金額は 0 より大きい必要があります");
        token.transferFrom(msg.sender, address(this), amount);
        デポジット[msg.sender] += 金額;
    }

    関数borrow(単位量) 外部{
        require(金額 > 0, "金額は 0 より大きい必要があります");
        uint 担保 = 預金[msg.sender];
        require(担保 >= 金額 * 2, "担保が不十分です");
        借入[msg.sender] += 金額;
        token.transfer(msg.sender, amount);
    }

    関数 repay(単位量) 外部 {
        require(金額 > 0, "金額は 0 より大きい必要があります");
        require(borrows[msg.sender] >= 金額, "借入が不十分です");
        借入[msg.sender] -= 金額;
        token.transferFrom(msg.sender, address(this), amount);
    }

    関数draw(単位量)外部{
        require(deposits[msg.sender] >= 金額, "残高が不足しています");
        require(borrows[msg.sender] == 0, "未払いのローンがあります");
        デポジット[msg.sender] -= 金額;
        token.transfer(msg.sender, amount);
    }
}

セキュリティに関する考慮事項

今後の展開



BSC Contract

導入

BSC(Binance Smart Chain)はEVM(Ethereum Virtual Machine)と互換性のあるパブリックチェーンであるため、Ethereum上に書かれたSolidityスマートコントラクトをほぼ直接BSCにデプロイできます。主な違いは、展開中のネットワーク接続とガス料金が BNB で価格設定されることです。

契約例(Solidity)


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint private value;

    function setValue(uint _value) public {
        value = _value;
    }

    function getValue() public view returns (uint) {
        return value;
    }
}

導入環境の設定

ハードハットを使用して展開します。hardhat.config.jsBSC ネットワークを次のように設定します。

require("@nomiclabs/hardhat-ethers");

module.exports = {
  固さ: "0.8.20",
  ネットワーク: {
    bscテストネット: {
      URL: "https://data-seed-prebsc-1-s1.binance.org:8545/",
      チェーンID: 97、
      ガス価格: 20000000000、
      アカウント: ["0xyour private key"]
    }、
    bscメインネット: {
      URL: "https://bsc-dataseed.binance.org/",
      チェーンID: 56、
      ガス価格: 20000000000、
      アカウント: ["0xyour private key"]
    }
  }
};

デプロイメントスクリプト

非同期関数 main() {
  const [デプロイヤー] = ethers.getSigners(); を待ちます。
  console.log("デプロイメントアカウント:",deployer.address);

  const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
  const storage = await SimpleStorage.deploy();

  storage.deployed(); を待ちます。
  console.log("展開された契約:", storage.address);
}

main().catch((エラー) => {
  コンソール.エラー(エラー);
  プロセス終了コード = 1;
});

導入方法

  1. 依存パッケージをインストールします。
    npm install --save-dev hardhat @nomiclabs/hardhat-ethers ethers
  2. 導入を開始します。
    npx hardhat run scripts/deploy.js --network bscTestnet
  3. 契約アドレスを確認したら、次のページに進みます。BscScan テスト ネットワークまたはBscScan メインネット契約書を確認してください。

注意事項



株式市場プログラムの開発

株価の騰落確率の実装

Python とランダム フォレスト モデルを使用して、株価の上昇または下落の確率を予測します。この例では、Yahoo Finance の株式データを使用し、テクニカル指標を使用してモデルをトレーニングし、最終的に株価の上昇と下落の確率を出力します。

ステップ 1: 必要なパッケージをインストールしてインポートする

まず、いくつかの Python パッケージをインストールしてインポートする必要があります。

pip install yfinance scikit-learn pandas numpy

次に、これらの必要なライブラリをインポートします。


import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import yfinance as yf
    

ステップ 2: 株価データをダウンロードし、テクニカル指標を生成する

次に、Yahoo Finance から株式の履歴データをダウンロードし、テクニカル指標として単純移動平均 (SMA) を計算します。

# Yahoo Finance から Apple の株価データをダウンロード
シンボル = 'AAPL'
データ = yf.download(シンボル、開始='2020-01-01'、終了='2023-01-01')

# 10 日および 50 日の単純移動平均 (SMA) を計算します。
data['SMA_10'] = data['Close'].rolling(window=10).mean()
data['SMA_50'] = data['Close'].rolling(window=50).mean()

#増加または減少の目標を設定します。翌日の終値がその日の終値より高ければ 1 (上昇を示す)、それ以外の場合は 0 (下落を示す)
data['Target'] = np.where(data['Close'].shift(-1) > data['Close'], 1, 0)

# 欠損値を削除する
data.dropna(inplace=True)

ステップ 3: トレーニング データ セットとテスト データ セットを準備する

移動平均 (SMA) と終値を特徴として使用し、データをトレーニング セットとテスト セットに分割します。

# 機能の選択 機能 = ['SMA_10', 'SMA_50', '閉じる'] X = データ[特徴] y = データ['ターゲット'] # トレーニング セットとテスト セットを分割します (80% トレーニング、20% テスト) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)

ステップ 4: トレーニングと予測にランダム フォレスト モデルを使用する

ランダム フォレスト モデルを使用してデータをトレーニングし、テスト セット内の株価の上昇確率と下落確率を予測します。

#ランダムフォレスト分類器を初期化する モデル = RandomForestClassifier(n_estimators=100、random_state=42) #鉄道模型 model.fit(X_train, y_train) # テストセットの上昇と下降を予測する y_pred = モデル.予測(X_test) y_prob = model.predict_proba(X_test) # 上昇と下降の確率を取得する

ステップ 5: モデルの精度を計算し、上昇と下降の確率を表示します。

モデルの精度を計算し、毎日の上昇と下降の確率を表示できます。

# モデルの精度を計算する 精度 = 精度スコア(y_test, y_pred) print(f"モデルの精度: {精度:.2f}") # テストセットの最初の 5 日間の上昇確率と下降確率を表示します range(5) の i の場合: print(f"日 {i+1}: 上昇確率={y_prob[i][1]:.2f}、下降確率={y_prob[i][0]:.2f}")

ステップ 6: 上昇と下落の確率に基づいて取引の決定を下す

上昇の確率に基づいて、購入操作を行うかどうかを決定するためのしきい値を設定できます。たとえば、上昇確率が 70% を超えたら買います。

# 上昇確率の閾値を設定する しきい値=0.7 # 確率に基づいて購入を決定する for i in range(len(y_prob)): y_prob[i][1] > 閾値の場合: print(f"{i+1} 日に購入することをお勧めします、予測上昇確率={y_prob[i][1]:.2f}") それ以外の場合: print(f"{i+1} 日に購入することは推奨されません、予測上昇確率={y_prob[i][1]:.2f}")

要約する

この例では、ランダム フォレスト モデルを使用して株の上昇または下降の確率を予測し、予測結果に基づいて取引の意思決定を行う方法を示します。これは、取引上の意思決定の精度を向上させるためのシンプルですが効果的な方法です。



台湾証券取引所の公募発表 - 株式の抽選と取得

ステップ 1: パブリック サブスクリプションのお知らせページに入る

台湾証券取引所の公募発表ページには、次の URL からアクセスできます。

パブリックサブスクリプションのお知らせ

ステップ 2: プログラムを通じて自動的にキャプチャする

Python を使用するrequestsそしてBeautifulSoup、ページ上で公開サブスクリプション情報を取得できます。

サンプルコード

インポートリクエスト
bs4 インポートから BeautifulSoup
パンダをPDとしてインポートする

# パブリックサブスクリプションのお知らせページをキャプチャします
URL = "https://www.twse.com.tw/zh/payment/public.html"
headers = {"ユーザーエージェント": "Mozilla/5.0"}
応答 = request.get(url, headers=headers)

response.status_code == 200の場合:
    スープ = BeautifulSoup(response.text, 'html.parser')
    テーブル = pd.read_html(response.text)
    テーブルの場合:
        df = tables[0] # 最初のテーブルを取得します
        印刷(df)
    それ以外の場合:
        print("テーブルデータが見つかりません")
それ以外の場合:
    print("パブリックサブスクリプションのお知らせページに接続できません")

注意事項



外国為替プログラムの開発

米ドルから台湾ドルへの為替レートを取得する

方法 1: CurrencyAPI を使用する

CurrencyAPI はリアルタイムの為替レート情報を提供します。サンプルコードは次のとおりです。

インポートリクエスト

URL = 'https://api.currencyapi.com/v3/latest'
パラメータ = {
    'apikey': 'API キー',
    '基本通貨': 'USD',
    '通貨': 'TWD'
}
応答 = request.get(url, params=params)
データ = 応答.json()
usd_to_twd = データ['データ']['TWD']['値']
print(f"1 米ドルは {usd_to_twd} 新台湾ドルに等しい")

知らせ:使用するには、CurrencyAPI に登録し、API キーを取得する必要があります。

方法 2: ExchangeRatesAPI を使用する

ExchangeRatesAPI は、リアルタイムの為替レート クエリ サービスも提供します。

インポートリクエスト

URL = 'https://api.exchangeratesapi.io/latest'
パラメータ = {
    'access_key': 'API キー',
    'ベース': '米ドル',
    「シンボル」: 「TWD」
}
応答 = request.get(url, params=params)
データ = 応答.json()
usd_to_twd = データ['レート']['TWD']
print(f"1 米ドルは {usd_to_twd} 新台湾ドルに等しい")

まず ExchangeRatesAPI に登録して API キーを取得し、コード内の「API キー」を置き換えてください。

方法 3: forex-python パッケージを使用する

API を直接呼び出したくない場合は、サードパーティの Python パッケージを使用できます。forex-python

forex_python.converter から通貨レートをインポート

cr = 通貨レート()
usd_to_twd = cr.get_rate('USD', 'TWD')
print(f"1 米ドルは {usd_to_twd} 新台湾ドルに等しい")

パッケージのインストールコマンド:

pip install forex-python

注意事項



クローラーを使用して、Currency.Wiki から米ドルから台湾ドルへの為替レートを取得します。

序文

API を使用しない場合は、Web クローラー テクノロジーを使用して、Currency.Wiki Web サイトから直接米ドルと台湾ドルのリアルタイム為替レートを取得できます。

必要なキット

次の Python パッケージをインストールする必要があります。

pip install requests
pip install beautifulsoup4

サンプルコード

インポートリクエスト
bs4 インポートから BeautifulSoup

# リンク先URLを設定する
URL = "https://currency.wiki/usd_twd"

#GET リクエストを送信して Web ページのコンテンツを取得します
応答 = リクエスト.get(url)
スープ = BeautifulSoup(response.text, 'html.parser')

# 特定のタグとカテゴリを検索する
span_tag =Soup.find('スパン', class_='unit_secondary_value')
レート = スパンタグ.テキスト
print(f"1 米ドルは {rate} 台湾ドルに等しい")

コードの説明

注意事項

結論は

Python クローラー テクノロジーを通じてリアルタイムの為替レート情報を直接取得できますが、Web ページの構造の変更やコンプライアンスの問題に注意する必要があります。小規模なアプリケーションや学習目的に適しています。



投資用ソフトウェアの販売

市場予測プログラムの販売

サブスクリプションシグナリングサービス

プログラムによって生成された取引シグナルを定期レポートまたはリアルタイムのプッシュ ブロードキャストにパッケージ化し、ユーザーに月額料金または年額料金を請求します。一般的なプラットフォームには、Substack、Patreon、または独自に構築されたメンバーシップ システムが含まれます。機能レベルに応じて無料版と有料版に分かれています。無料版はトラフィックを引き寄せ、有料版はリアルタイムのシグナル、履歴クエリ、詳細な分析を提供します。

SaaSツールプラットフォーム

予測ランキング ロジックを Web ページまたはアプリに開発し、ユーザーが独自にクエリを実行できるようにします。課金モデルは、月次サブスクリプション、従量課金制、または機能階層型の価格設定にすることができます。このモデルは拡張性が高く、特定の技術的能力を持つ開発者に適しています。直接的な投資アドバイスは含まれず、規制リスクは比較的低いです。

有料コミュニティとDiscordチャンネル

クローズドな投資コミュニティを確立します。会員は会費を支払うと、週次または日次のマーケットランキング、ディスカッション、Q&Aサービスを受けることができます。 Discord、Telegram、LINE コミュニティはすべて一般的な通信事業者であり、敷居が低く、起動が速いため、コールド スタート段階に適しています。

ニュースレター

電子メール リストを中核資産として、市場分析と予測ランキング レポートを定期的に送信します。初回は無料で視聴者を獲得し、一定規模に達したら有料版や広告協力を開始する。 Substack と Beehiiv は、現在主流のニュースレター収益化プラットフォームです。

サードパーティへの API ライセンス

予測モデルを API にカプセル化して、ブローカー、金融情報プラットフォーム、またはその他のアプリケーション開発者に統合および使用を許可します。このモデルは、通常、月額ライセンス料または通話量に基づいた請求に基づいており、顧客の粘着力が高く、安定した収入を伴う、ユニークで安定したモデルに適しています。

組織へのホワイトラベルライセンス

ホワイトラベルの形でシステム全体を投資顧問会社や資産運用会社、証券会社に認可し、相手は自社ブランドでサービスを提供する。通常、契約金額は高くなりますが、交渉をサポートするには検証可能な実績記録と専門的な文書が必要です。

自主運用ファンドまたは代理店管理

番組シグナルをベースに運営を行い、集まった資金は自ら、または運営を委託され、管理費や成功報酬などをベースに報酬が徴収されます。この方法は最も可能性が高いですが、ほとんどの国で金融ライセンス (台湾の投資顧問ライセンスなど) が必要であり、規制の基準が最も高く、コンプライアンスの枠組みの中で実行する必要があります。

教育コースとワークショップ

プログラムの背後にある市場選択ロジック、指標設計、バックテスト方法をオンラインコースまたは物理的なワークショップにパッケージ化し、ナレッジプロダクトの形で収益化します。このモデルは金融規制によって直接制限されず、同時に個人ブランドを確立し、他の収益化経路にトラフィックを引き付けることができます。 Teachable、Hahow、または Udemy はすべて、リストに適したプラットフォームです。

パフォーマンス利益分配協力

資金を持っている投資家やトレーダーと協力し、シグナルを出す側は資金を拠出せず、実際の利益に比例して利益を分配する。このモデルは資金調達資格を必要とせずに間接的に取引利益に参加することができますが、契約設計と利益分配の明確さには注意を払う必要があります。

プロモーションの核となる要素

どの収益化パスを採用する場合でも、次の点がプロモーションの成功または失敗を決定します。




email: [email protected]
T:0000
資訊與搜尋 | 回dev首頁
email: Yan Sa [email protected] Line: 阿央
電話: 02-27566655 ,03-5924828
阿央
泱泱科技
捷昱科技泱泱企業