English Deutsch
preview
ビル・ウィリアムズ戦略:他の指標と予測の有無による比較

ビル・ウィリアムズ戦略:他の指標と予測の有無による比較

MetaTrader 5 | 29 7月 2024, 10:35
13 0
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

はじめに

ビル・ウィリアムズは米国出身の著名なトレーダー、作家、心理学者であり、取引と金融分析への貢献で高い評価を得ています。彼は、その取引人生において、多くのトレーダーが使用する指標や様々な取引戦略を開発してきました。

ビル・ウィリアムズは心理学の博士号を持っています。トレーダーの中にはマーケットのセンチメントを利用する者もいるので、これは重要なことです。これは非常によく使われます。例えばソーシャルWebでWebマーケットをスクラップし、トレーダーの感情をスコア化するIAを備えたセンチメントスクリプトでおこなうことができます。記事の最後に、マーケットニュースのセンチメント分析の例があります。

ビル・ウィリアムズの心理形成は、心理学の概念を取引に適応させるのに役立ちました。彼は人間的な観点からマーケットを研究し、感情がトレーダーやその取引にどのように作用するかを研究しました。彼は、マーケットを総合的にとらえ、マーケットはカオスであり、マーケットは私たちの利益のためにこれを考慮して研究され、取引されなければならないと考えていました。これについては指標とともに話し合います。

以下は、使用する指標とオシレーターを使ったEAのイメージです。

ビル・ウィリアムズのオシレーターと指標

画像では、アリゲーター指標、オーサムオシレーター(AO)、フラクタルズという3つの指標が表示されています。これらの指標はすべて、人間の行動と混沌としたマーケットを反映しています。


アリゲーター指標

アリゲーター指標は、顎(青線)、歯(赤線)、唇(緑線)の3つのMAで作られています。この指標は、眠りや目覚めの時間帯を識別するために設計されており、マーケットが眠る(低活動)期間があり、その後、起きている(激しい活動)期間があるように、人間の行動を反映しています。マーケットには保合の局面とトレンドの局面があります。アリゲーターは、トレーダーがマーケットのボラティリティの高さから利益を得るため、マーケットが取引をしない方がよい「眠り」のときを特定するのに役立ちます。

低活動期には、アリゲーター指標の線は非常に近く、絡み合っています。

アリゲーター指標は、高活動期ではラインが分離し、トレンドが発生することを示しています。

睡眠と覚醒

注意:画像でわかるように、このストラテジーは強気トレンドでショートポジションを建て、それに追随しようとします。さらに、アリゲーター指標がクロスした時や、AOが<から>0になった時に注文を出し、より長いレンジを得ることもできます。

眠っている段階では、トレーダーは取引をしたくなく、新しいデータが現れたり、マーケットのトレンドとなる何かが現れるのを待っています。トレーダーは、相場の方向性がはっきりわかるまで、決断を下すべきでない睡眠段階であり、相場の動き(目覚めたとき)を次のトレンドまで意識しておく必要があります。

つまり、寝ている段階では、ラインは分離せず、横に動く傾向があります。そして、指標はトレンドがないので取引をやめた方が良いと伝えます。

線が一方向に離れ始めたら(緑が赤を青を上回る)上昇トレンドを意味し、(緑が赤を青を下回る)下降トレンドを意味します。つまり、マーケットに参入するのに最適な時期だということです。

緑=唇

赤=歯

青=顎


アリゲーター指標と心理学との共通点は?

MAは平均価格の平均です(例:2+3 / 2 = 2.5)が、価格の変動を平滑化し、直近の価格をより考慮することで、変動の重みを減らし、より良い傾向の範囲を持つことができます。これは非常に人間的であり、マーケットのノイズの間にある最も重要なものを明瞭に見ようとするものです。


オーサムオシレーター(AO)

AOは((高値+安値)/2)の中位ポイントを使用した5期間のSMAと34期間のSMAの差です。  

2つの異なる期間の2つのSMAの差はマーケットの勢いを示します。短いSMAはマーケットの勢いまたは急激な変化を測定し、長いSMAはトレンドを測定します。これは、人間が短期的に勢いを持ち、長期的には傾向があるのと似ています。

勢い:AOはマーケットの勢いの強さを測定し、AOがプラスであればプラスの勢い、マイナスであれば逆の勢いを意味します。



フラクタル

ビル・ウィリアムズによって定義されたフラクタルは、5本のローソク足の連なりであり、強気フラクタルと弱気フラクタルに分類されるための特定の条件を備えています。

強気フラクタルとは、直前の2つのバーの安値と直後の2つのバーの安値より低い安値を持つものです。

弱気フラクタルはその逆で、高値が直前の2つのバーの高値と直後の2つのバーの高値より高くなります。

フラクタルは、マーケットが方向転換する可能性のあるポイントを特定します。フラクタルの背後にある心理は、支持と抵抗の重要なポイントを反映しているということです。トレーダーは、マーケット参加者の集団行動に基づいて方向性の変化を予測するために、これらのポイントを特定します。

ウィリアムズは、金融マーケットは人間の行動に左右されるカオスシステムだと考えていました。彼は、マーケットの参加者は感情や心理的な行動から行動し、それが一見ランダムに見えるパターンを作り出すが、隣接する構造的な基盤があり、それは識別可能であると考えました。

彼の指標に心理学を応用することで、トレーダーは希望、恐怖、貪欲さ......といった人間の感情を理解することができるようになりました。傾向と統合は、活動期とリラックス期という人間の心理を反映しています。

その戦略で行きましょう。最初のコードでは、フラクタル、AO、アリゲーター指標を使用します。

買いを入れる条件は、このようなものです(コードでは非常に明確です)([0]はその瞬間の実際の位置で、[1]はマイナス1の位置または場所であることを覚えておいてください)。

alligatorLips[1] > alligatorTeeth[1] && alligatorTeeth[1] > alligatorJaw[1] && ao[1] > 0 && ao[1] > ao[2] && fractalsUp[1] != 0 && PositionsTotal()==0

次は売りです。

alligatorLips[1] < alligatorTeeth[1] && alligatorTeeth[1] < alligatorJaw[1] && ao[1] < 0 && ao[1] < ao[2] && fractalsDown[1] != 0 && PositionsTotal()==0

ビル・ウィリアムズの戦略の中には、AO の正から負へのクロス、およびその逆を使用するものもあります。より多くの可能性を試し、必要に応じてコードを変更することができます。MT5のストラテジーテスターで使用したのと同じ期間で、はるかに優れた結果が得られた場合は、記事のフォーラムにコメントを残してください。


注文を成立させる条件は次です。

買い

ao[0] < 0 || (alligatorLips[1] < alligatorTeeth[1] && alligatorTeeth[1] < alligatorJaw[1])

売り

ao[0] > 0 || (alligatorLips[1] > alligatorTeeth[1] && alligatorTeeth[1] > alligatorJaw[1])

残りのコードはBill Williams Strategy.mq5として添付されています。

結果はこんな感じです。

この入力と設定について

設定v1

入力v1

グラフv1

バックテストv1


この結果はあまり良くなさそうですが、この戦略は他の期間では機能するようです。そのため、この戦略を維持し、他の指標を追加したり予測を追加したりして、より良い結果を得るように努めます。

ADXを併用したら、この戦略はどのように進化するでしょうか。ADXを使えば、より良いトレンドパターンを「見る」ことができるはずです。

 ADXHandle = iADX(Symbol(), Period(), 14);
   if(ADXHandle == INVALID_HANDLE)
     {
      Print("Error initializing ADX indicator: ", GetLastError());
      return INIT_FAILED;
     }
   CopyBuffer(ADXHandle, 0, 0, 3, adx);
if(alligatorLips[1] > alligatorTeeth[1] && alligatorTeeth[1] > alligatorJaw[1] && ao[1] > 0 && ao[1] > ao[2] && fractalsUp[1] != 0 && adx[1] > ADXThreshold && PositionsTotal() == 0)

その結果がこれです。

グラフV6

まだ悪いですが、ストップを使い、このATRを使用するか見てみましょう。

グラフV6とATR

バックテストV6


これで良くなったように思えますが、深層学習と予測を使用したらどうなるでしょうか。結果を見てみましょう。

グラフV7ストップとDL

ストップとDLを使ったv7のバックテスト

モデルには120の値がステップとして使われていることを考慮して、少なくとも120日ごとにモデルをやり直します。そのため、結果はより良いものとなり、モデルは直近の日数で実際のものとなります。

戦略は8時間の時間枠を使用し、ONNXモデルは1日の値に設定されているので、スクリプトを変更するときは、必要なものに1D期間を適用することを忘れないでください。 


深層学習の予測を適用する際の最適化によって、総合的な結果を実感しているが、ほぼすべての結果はかなり良いようです。

最適化

このグラフを見ればわかるように、ほとんどすべての最適化がプラスのシャープレシオを与えています。

  最適化

最適化グラフ

ここでの予測では、すべてのテストとシミュレーションに8時間の期間を使用していますが、予測には1日の期間を使用しています。その目的は、トレンドを把握できるように、遠すぎず、近すぎない予測をおこなうことです。(予測が遠すぎると、トレンドには乗れますが、短いトレンドには乗れないので、テストでの注文が少なくなり、戦略全体が良いかどうかを知るには役に立たない)。ストップロスにはATRを使い、ADXを戦略に加えました。

この最適化されたEAから何が見えるでしょうか。

  • この戦略は、純利益合計が847.70ドル、利益率が3.85と高く、利益率が高いことから、負けトレードで失う金額よりも勝ちトレードで稼ぐ金額の方が大幅に多いことがわかります。
  • 4.59というリカバリーファクターは、この戦略が損失から比較的早く回復できることを示唆しています。
  • AHPRとGHPRはともに1.0000であり、平均リターンと幾何学的リターンに有意な乖離がないことを示しています。
  • シャープレシオは3.52と非常に高く、リスク調整後のリターンが良好であることを示唆しています。
  • 残高とエクイティのドローダウンのパーセンテージは非常に低く、大きな損失のリスクは最小限に抑えられています。
全体として、この戦略はうまく機能しているようで、リスクを抑えながら収益性を維持しています。



何を使用してONNXのモデルを作るのか?

この記事でいつも使用しているPythonの再帰スクリプトを使用します。このスクリプトは記事の最後に添付されています。銘柄を修正すればいいだけですし、自分たちが何をしているのかわかっていれば、期間やその他の何かを修正することもできます。

私の結果を再現できるように、使用したモデルも添付しておきます。

また、相関とメトリックスでONNXモデルを作成する別の.pyスクリプトも添付します。このスクリプトの結果は次のように表示されます。

train_mse=0.000
test_mse=0.000
train_r2=0.994
test_r2=0.970
train_corr=0.997
test_corr=0.989

R2が97%、テスト相関が98.9%で、このモデルをEAに使用できることがわかりました。

この統計は、例えば98.9%の相関で、モデルは99の良い予測に対して1エラーのテスト上の予測精度を持っていることを意味し、97%のR2は決定係数として知られ、独立変数(モデル)によって説明される従属変数(この場合は終値)上の分散の割合を測定する統計です。言い換えれば、R2は、モデルの予測値が実際の価格値と比較してどの程度調整されているかを表しています。

R2の良い結果は85%、相関の良い結果は95%で、これ以上の方が良い結果ですが、過剰適合にならないように注意してください。


ビル・ウィリアムズについてもっと知りたければ、彼の代表作を読むことをお勧めします。

  • 「Trading Chaos」(1995年):金融マーケットにおけるカオスの理論を紹介し、本記事で使用した指標と、それらが取引において投資すべきポイントを知る機会としてどのように使用できるかを説明しています。
  • 「New Trading Dimensions:How to Profit from Chaos in Stocks, Bonds, and Commodities」(1998年):ウィリアムズのメソッドをより深く掘り下げ、より複雑で高度な新しい戦略を解説しています。彼は自分の指標を紹介し、それらをどのように使い、どのように組み合わせれば売買シグナルへのより良いアプローチができるかを示しています。
  • 「Trading Chaos:Maximize Profits with Proven Technical Techniques」(第2版、2004年) :ウィリアムズの原著を現実化したものであり、彼の経験と彼のテクニックを使用したトレーダーからの追加的なフィードバックに基づいて、新たな戦略と新たな焦点が含まれています。

また、セミナーやコースも開催しています。


マーケットニュースのセンチメント分析例

以下はpythonでの例です。

まずこのライブラリをpythonにインストールする必要があります:

pip install requests beautifulsoup4 textblob

新しいpythonスクリプトを作成し、以下のコードをコピーペーストします。

import requests
from bs4 import BeautifulSoup
from textblob import TextBlob

def get_eurusd_news():
    url = 'https://www.investing.com/currencies/eur-usd-news'
    headers = {'User-Agent': 'Mozilla/5.0'}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Encontrar todos los elementos <li> que contienen artículos de noticias
    articles = soup.find_all('li', class_='border-b')
    
    news = []
    for article in articles:
        title_tag = article.find('a', class_='mb-2 inline-block text-sm font-bold leading-5 hover:underline sm:text-base sm:leading-6 md:text-lg md:leading-7')
        
        if title_tag:
            title = title_tag.get_text(strip=True)
            news.append(title)
    
    return news

def analyze_sentiment(news):
    sentiment_results = []
    for article in news:
        analysis = TextBlob(article)
        sentiment = analysis.sentiment.polarity
        sentiment_results.append((article, sentiment))
    
    return sentiment_results

def summarize_sentiment(sentiments):
    positive = sum(1 for _, sentiment in sentiments if sentiment > 0)
    negative = sum(1 for _, sentiment in sentiments if sentiment < 0)
    neutral = len(sentiments) - positive - negative
    
    total = len(sentiments)
    summary = {
        'total': total,
        'positive': positive,
        'negative': negative,
        'neutral': neutral
    }
    
    return summary

news = get_eurusd_news()
if news:
    sentiments = analyze_sentiment(news)
    summary = summarize_sentiment(sentiments)

    for i, (article, sentiment) in enumerate(sentiments, 1):
        sentiment_type = 'Positive' if sentiment > 0 else 'Negative' if sentiment < 0 else 'Neutral'
        print(f"{i}. {article}\n   Sentiment: {sentiment_type} (Polarity: {sentiment})\n")

    print(f"Sentiment Summary: {summary}")
    print(f"Total articles: {summary['total']}, Positive: {summary['positive']}, Negative: {summary['negative']}, Neutral: {summary['neutral']}")
else:
    print("No news articles found for EUR/USD.")

これは、Investing.comからニュースをスクレイピングし、タイトルを読み、それを分析し、スコアを与えます。すべてのニュースが合計され、最終的に記事の総得点が表示されるので、これを使えば、マーケットが銘柄に対してどのように感じているかを見ることができ、その銘柄が眠っているのか、トレンドにあるのか、それとも目覚めたのかを知ることができます。

結果はこのようになりました。

1. Dollar edges lower, but on track for hefty weekly gains
   Sentiment: Neutral (Polarity: 0.0)

2. European stocks hit by weak global sentiment; UK retail sales slump
   Sentiment: Negative (Polarity: -0.125)

3. Dollar higher on US business activity boost
   Sentiment: Positive (Polarity: 0.25)

4. Dollar steadies after sharp gains post Fed minutes; sterling retains strength
   Sentiment: Negative (Polarity: -0.125)

5. European stocks largely higher; Nvidia earnings, PMI data in focus
   Sentiment: Positive (Polarity: 0.125)

6. Dollar higher against euro as Fed minutes support
   Sentiment: Positive (Polarity: 0.25)

7. Dollar steady ahead of Fed minutes, sterling gains on CPI release
   Sentiment: Positive (Polarity: 0.16666666666666666)

8. EUR/USD rally expected to persist, says BofA
   Sentiment: Negative (Polarity: -0.1)

9. Dollar firm as Fed officials urge patience on rate cuts
   Sentiment: Negative (Polarity: -0.2)

10. Dollar steady; Fed speakers could provide impetus
   Sentiment: Positive (Polarity: 0.16666666666666666)

Sentiment Summary: {'total': 10, 'positive': 5, 'negative': 4, 'neutral': 1}
Total articles: 10, Positive: 5, Negative: 4, Neutral: 1


結論

ビル・ウィリアムズ戦略は、今回のテストで見るよりも収益性が高いことで知られているが、いくつかの修正と、別の期間での深層学習予測を加えることで、より良い結果を得ることができました。予測値を追加することで、強気か弱気かを判断する際のミスを減らし、より安定した戦略にすることができました。また、ADXを追加することで、EAが長期的なトレンドを判断するのに役立ち、ATRを追加することで、ロットリスクを考慮したより良い判断を下すことができました。

これは完全なフル装備のEAではありません。もしこのEAを使用して取引したい、または取引する必要があるのであれば、ご自分で完成させるか、フリーランスに依頼しなければなりません。

当面は、戦略を研究し、可能であれば他の指標や深層学習も使用して、次のレベルに持っていこうと思います。この記事について、あるいは他の記事について、お聞きになりたいことがありましたら、ぜひご意見をお聞かせください。

ビル・ウィリアムズの2冊目の著書  「New Trading Dimensions:How to Profit from Chaos in Stocks, Bonds, and Commodities」(1998年)から得た戦略を使用して、ビル・ウィリアムズの指標を使った別の記事を作ることになるでしょう。 これに興味がある、またはより良く作られたEAや他の戦略など、他の「もの」をお望みでしたらお知らせください。

また、特定の戦略の記事が欲しい場合は、私にメッセージするか、記事フォーラムにコメントを残すことでお知らせください。そして遅かれ早かれ私はその記事を書くつもりです(出版社もそれを興味深いと思えば)。

この記事が気に入っていただければ幸いです。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/14975

どんな市場でも優位性を得る方法(第2回):テクニカル指標の予測 どんな市場でも優位性を得る方法(第2回):テクニカル指標の予測
取引されている銘柄の価格を予測するよりも、特定のテクニカル指標を予測する方が精度が高いことをご存知ですか。この洞察力をより良い取引戦略のために活用する方法を探るために、ぜひお読みください。
データサイエンスと機械学習(第23回):LightGBMとXGBoostが多くのAIモデルを凌駕する理由 データサイエンスと機械学習(第23回):LightGBMとXGBoostが多くのAIモデルを凌駕する理由
これらの高度な勾配ブースティング決定木(GBDT)技術は、優れた性能と柔軟性を提供し、金融モデリングやアルゴリズム取引に最適です。これらのツールを活用して取引戦略を最適化し、予測精度を高め、金融市場での競争力を高める方法を学びましょう。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
MQL5取引ツールキット(第1回):ポジション管理EX5ライブラリ MQL5取引ツールキット(第1回):ポジション管理EX5ライブラリ
MQL5で様々なポジション操作を管理するための開発者用ツールキットの作成方法をご紹介します。この記事では、MQL5でポジション管理タスクを処理する際に発生するさまざまなエラーの自動処理とレポートも含め、簡単なものから高度なものまでポジション管理操作を実行する関数ライブラリ(ex5)の作成方法を紹介します。