follow me

 


2025年12月8日月曜日

なぜドル高/円安なのか ― 背景要因 EA移動平均線GCDCポログラムを作るサンプル


 

📈 なぜドル高/円安なのか ― 背景要因

為替でドル円が動くときの代表的要因は以下の通りです。Fusion Markets | Low Cost Forex Broker+2Titan FX+2

  • 金利差:米国(Federal Reserve:Fed)と日本(Bank of Japan:BOJ)の政策金利や国債

  • 利回りの差。米国金利が高め/日本金利が低めだと、ドルのほうが“おいしい”ので、ドル買い→ドル高に。Titan FX+2OANDA+2

  • 債券利回り/国債市場の動き:特に日本の国債(JGB)と米国債の動き。日本の長期金利

  • 上昇や、米国債券の買われ方がドル円に影響。フォレックス.com+2EBC Financial Group+2

  • 政策見通し・中央銀行発言:たとえば BOJ の金融政策やインフレ/賃金見通し、あるいは

  • 米国の経済指標や Fed の対応など。最近の BOJ のスタンスや日本国内の経済不安が、為替

  • に影響を与えやすい状況。Investing.com+2日本オリンピック委員会+2

  • リスク/安全資産の需給、資金の流れ:世界経済の見通し、資金の流動性、投資のリスク

  • 選好なども為替に作用。特にドルは「安全通貨」としての側面もあり、世界経済の混乱など

  • でドル高・円安になりやすい。Fusion Markets | Low Cost Forex Broker+2OANDA+2

ただし、最近は「金利差だけ」がドル円を説明するには限界がある、という声もあります。

特に日本の「財政・国内リスク」「新政権の財政政策」などがドル円への影響を強めており、従来のモデル(単純な金利差 → 為替)だけでは説明しづらいとの分析も増えています。

VT Markets+1


🎯 今後の見通しと注目イベント

今後ドル円がどう動くかは、以下のようなイベント・テーマに注目すべきでしょう:

  • 米国の経済指標(雇用統計、インフレ指標など) → Fed の利下げ観測/利上げ観測に影響。

  • 日本国内の金融政策/中央銀行発言 → BOJ の利上げペース、国債発行、財政政策の行方。

  • 日本の賃金/物価(CPIなど)の動き → 円安による輸入物価上昇、インフレ圧力、購買力低下。

  • リスク資産 vs 安全資産の資金フロー → 世界的なリスクオフ/リスクオンでドル円は大きく

  • ブレやすい。

  • オプション・ヘッジの動き/投機筋のポジション → 相場変動が大きいとき、投資家心理と

  • ポジション調整が影響。EBC Financial Group+2VT Markets+2

実際、「ドル円 160円台→165円台を試す可能性」を指摘するシナリオもあれば、「円の反発・介入

・日米金利差縮小で150円台前半まで戻る可能性」も議論されています。EBC Financial Group+2VT Markets+2


✅ FXトレーダーとして注目すべきポイント(私の見立て)

もしあなたが今から FX でドル円を見ているなら:

  • 単純な「金利差狙い」だけでなく、日本の 財政/政策リスク に目を配るべき — 近年はこれ


  • かなり効いています。

  • 為替だけでなく、債券(金利)・株価・インフレ・国際リスク… 全体的なマクロを見てポジシ

  • ョンを検討。

  • もし「押し目買い」を狙うなら、ドル円が 155円台前半〜中盤あたりでの反発 を見越すのが現

  • 実的。

  • 一方で、円高に振れる材料(たとえば BOJの足踏み、米国の利下げ、リスクオフなど)が出た

  • ら、柔軟に撤退・ヘッジすること。


もしよければ、**今後 3–6か月のドル円「シナリオ予測」**も書けます(強ドル継続/円反発/レンジ

など 3パターンくらい)。やってみますか?

関連ニュース(ドル円・FX)


外為どっとコム

FX/為替「ドル/円今日の予想」 外為どっとコム トゥデイ 2025年 ...

今日


zai.diamond.jp

ドル円155円→今週は植田総裁発言、FOMCに注目! 先週は連日の円安牽制、日銀12月利上げ観測報道。

今日

12月8日版 為替 Weekly Report

フォレックス.com

12月8日版 為替 Weekly Report

今日

ドル/円見通し(為替/FX ニュース ):先週末のドル円は円安で155円台前半|米PCEデフレーターは市場予想と一致(2025年12月8日)

OANDA証券

ドル/円見通し(為替/FX ニュース ):先週末のドル円は円安で155円台前半|米PCEデフレーターは市場予想と一致(2025年12月8日)

今日

Weak Japanese yen is ticking time bomb

reuters.com

Weak Japanese yen is ticking time bomb

3 日前

Dollar stable, yen weakens as JGB auction brings relief

reuters.com

Dollar stable, yen weakens as JGB auction brings relief

6 日前


MT5でプログラムテスト用を作りたい テクニカル指標は移動平均線5本 5 25 75

3本としてゴールデンクロスGCで買い デッドクロスDCで売りとして 買いと売り 決済 

トーレーディングストップを使う。ファンダメンタルでは政策発表・介入では当日は見送りとする


了解です。
MT5(MQL5)の**バックテスト用EA(エキスパートアドバイザ)**として、

  • 移動平均線:5 / 25 / 75 の3本

  • GC(ゴールデンクロス)で買い

  • DC(デッドクロス)で売り

  • トレーリングストップ

  • 政策発表・介入など「当日は見送り」(ここはテスト用として、手動指定の日付を避ける形で

  • 実装)

という内容のサンプルコードを用意しました。


EAの仕様(ざっくり)

  1. インジケーター

    • EMA(指数移動平均)3本:5 / 25 / 75

  2. エントリー条件

    • 買い(ロング)

      • 5EMA が 25EMA を下から上にクロス(GC)

      • かつ 5EMA が 75EMA より上(上昇トレンドフィルター)

    • 売り(ショート)

      • 5EMA が 25EMA を上から下にクロス(DC)

      • かつ 5EMA が 75EMA より下(下降トレンドフィルター)

  3. 決済

    • 初期の SL / TP

    • 価格が有利に進んだら トレーリングストップ で追いかけ

  4. 政策発表・介入日は見送り

    • MQL5のニュースAPIをガチで組むと複雑なので、

    • テスト用として「この日はエントリーしない」という日付を文字列入力で指定できるよ

    • うにしています。

      • 例:2025.12.08,2025.12.09 のようにコンマ区切り


サンプルEAコード(MQL5)

MT5の「ファイル → 新規作成 → エキスパートアドバイザ(テンプレート)」で作ったファイルを開

き、

//+------------------------------------------------------------------+

//|  MA_Cross_5_25_75_Test.mq5                                      |

//|  ゴールデンクロス/デッドクロス + トレーリング + 休止日設定   |

//+------------------------------------------------------------------+

#property strict


#include <Trade\Trade.mqh>

CTrade trade;


//--- 入力パラメータ

input double   Lots          = 0.1;            // ロット

input int      FastMAPeriod  = 5;              // 短期MA

input int      MidMAPeriod   = 25;             // 中期MA

input int      SlowMAPeriod  = 75;             // 長期MA

input ENUM_TIMEFRAMES MaTF   = PERIOD_CURRENT;// MAの時間足


input int      StopLoss      = 300;            // 初期SL(ポイント)

input int      TakeProfit    = 600;            // 初期TP(ポイント)

input int      TrailingStop  = 200;            // トレーリングストップ(ポイント)


// 政策発表・介入等で「当日は見送り」にしたい日を指定(例: "2025.12.08,2025.12.09")

input bool     UseNoTradeDay = true;          

input string   NoTradeDates  = "";             // "YYYY.MM.DD,YYYY.MM.DD,..."


// 内部用

datetime last_bar_time = 0;


//+------------------------------------------------------------------+

//| ユーティリティ:今日がノートレード日かどうか                   |

//+------------------------------------------------------------------+

bool IsNoTradeDay()

{

   if(!UseNoTradeDay || StringLen(NoTradeDates) == 0)

      return false;


   // 今日の日付を "YYYY.MM.DD" 形式で取得

   MqlDateTime dt;

   TimeToStruct(TimeCurrent(), dt);

   string today = StringFormat("%04d.%02d.%02d", dt.year, dt.mon, dt.day);


   // 文字列を分解してチェック

   int count = StringSplit(NoTradeDates, ',', NULL);

   string arr[];

   int n = StringSplit(NoTradeDates, ',', arr);

   for(int i=0; i<n; i++)

   {

      string d = StringTrim(arr[i]);

      if(d == today)

         return true;

   }

   return false;

}


//+------------------------------------------------------------------+

//| OnTick                                                           |

//+------------------------------------------------------------------+

void OnTick()

{

   // 毎ティック処理ではなく、新しいバーができたときだけシグナル判定

   datetime current_bar_time = iTime(_Symbol, MaTF, 0);

   if(current_bar_time == last_bar_time)

      return;

   last_bar_time = current_bar_time;


   // ノートレード日ならシグナル自体を出さない

   if(IsNoTradeDay())

      return;


   // 現在のポジションを確認 & トレーリングストップ更新

   ManagePositions();


   // すでにこのシンボルでポジションがあるなら新規エントリーしない(シンプル版)

   if(PositionsTotalBySymbol(_Symbol) > 0)

      return;


   // 移動平均の取得

   double maFastCurr  = iMA(_Symbol, MaTF, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);

   double maFastPrev  = iMA(_Symbol, MaTF, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);


   double maMidCurr   = iMA(_Symbol, MaTF, MidMAPeriod,  0, MODE_EMA, PRICE_CLOSE, 0);

   double maMidPrev   = iMA(_Symbol, MaTF, MidMAPeriod,  0, MODE_EMA, PRICE_CLOSE, 1);


   double maSlowCurr  = iMA(_Symbol, MaTF, SlowMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);

   double maSlowPrev  = iMA(_Symbol, MaTF, SlowMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);


   // ゴールデンクロス判定(5EMA が 25EMA を下から上にクロス)

   bool isGC = (maFastPrev <= maMidPrev && maFastCurr > maMidCurr);

   // デッドクロス判定(5EMA が 25EMA を上から下にクロス)

   bool isDC = (maFastPrev >= maMidPrev && maFastCurr < maMidCurr);


   // トレンドフィルターとして 75EMA も利用

   bool upTrend   = (maFastCurr > maSlowCurr);

   bool downTrend = (maFastCurr < maSlowCurr);


   // シグナルロジック

   if(isGC && upTrend)

   {

      OpenBuy();

   }

   else if(isDC && downTrend)

   {

      OpenSell();

   }

}


//+------------------------------------------------------------------+

//| シンボル別ポジション数                                           |

//+------------------------------------------------------------------+

int PositionsTotalBySymbol(string symbol)

{

   int total = PositionsTotal();

   int cnt   = 0;

   for(int i = 0; i < total; i++)

   {

      ulong ticket = PositionGetTicket(i);

      if(PositionSelectByTicket(ticket))

      {

         if(PositionGetString(POSITION_SYMBOL) == symbol)

            cnt++;

      }

   }

   return cnt;

}


//+------------------------------------------------------------------+

//| 買いエントリー                                                   |

//+------------------------------------------------------------------+

void OpenBuy()

{

   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

   double sl  = 0;

   double tp  = 0;


   double point      = _Point;

   int    digits     = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);


   if(StopLoss > 0)

      sl = NormalizeDouble(ask - StopLoss * point, digits);

   if(TakeProfit > 0)

      tp = NormalizeDouble(ask + TakeProfit * point, digits);


   trade.SetStopLossPrice(sl);

   trade.SetTakeProfitPrice(tp);

   trade.Buy(Lots, _Symbol, ask, sl, tp, "GC Buy");

}


//+------------------------------------------------------------------+

//| 売りエントリー                                                   |

//+------------------------------------------------------------------+

void OpenSell()

{

   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

   double sl  = 0;

   double tp  = 0;


   double point      = _Point;

   int    digits     = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);


   if(StopLoss > 0)

      sl = NormalizeDouble(bid + StopLoss * point, digits);

   if(TakeProfit > 0)

      tp = NormalizeDouble(bid - TakeProfit * point, digits);


   trade.SetStopLossPrice(sl);

   trade.SetTakeProfitPrice(tp);

   trade.Sell(Lots, _Symbol, bid, sl, tp, "DC Sell");

}


//+------------------------------------------------------------------+

//| トレーリングストップ・ポジション管理                            |

//+------------------------------------------------------------------+

void ManagePositions()

{

   if(TrailingStop <= 0)

      return;


   double point  = _Point;

   int    digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);


   int total = PositionsTotal();

   for(int i = 0; i < total; i++)

   {

      ulong ticket = PositionGetTicket(i);

      if(!PositionSelectByTicket(ticket))

         continue;


      string symbol = PositionGetString(POSITION_SYMBOL);

      if(symbol != _Symbol)

         continue;


      long   type       = PositionGetInteger(POSITION_TYPE);

      double price_open = PositionGetDouble(POSITION_PRICE_OPEN);

      double sl         = PositionGetDouble(POSITION_SL);

      double bid        = SymbolInfoDouble(_Symbol, SYMBOL_BID);

      double ask        = SymbolInfoDouble(_Symbol, SYMBOL_ASK);


      if(type == POSITION_TYPE_BUY)

      {

         double new_sl = bid - TrailingStop * point;

         // すでにより有利なSLが設定されていれば更新しない

         if(new_sl > sl && new_sl < bid)

         {

            new_sl = NormalizeDouble(new_sl, digits);

            trade.PositionModify(ticket, new_sl, PositionGetDouble(POSITION_TP));

         }

      }

      else if(type == POSITION_TYPE_SELL)

      {

         double new_sl = ask + TrailingStop * point;

         if((sl == 0.0 || new_sl < sl) && new_sl > ask)

         {

            new_sl = NormalizeDouble(new_sl, digits);

            trade.PositionModify(ticket, new_sl, PositionGetDouble(POSITION_TP));

         }

      }

   }

}

//+------------------------------------------------------------------+



使い方(ざっくり)

  1. MT5のエディタ(MetaEditor)を開く

  2. 新規 → エキスパートアドバイザ(テンプレート) → 名前を MA_Cross_5_25_75_Test などに

  3. 自動生成されたコードを全部削除して、上のコードを貼り付け

  4. コンパイル(F7)

  5. MT5のストラテジーテスターで

    • EA:このEAを選択

    • 通貨ペア:ドル円(USDJPY)

    • モード・期間などを設定して実行

※「政策発表・介入の日」は、テスターのパラメータ
NoTradeDates2025.12.08,2025.12.15 のように入れておけば、その日はエントリーを行いません。


0 件のコメント:

コメントを投稿

📉円高が急進!ドル円一時152円台へ|米景気減速懸念でドル売り加速【2週間ぶり水準】💱

  。 🇺🇸米経済統計がきっかけに…ドル売り強まる💵⬇️ 10日に発表された米国の経済指標が市場心理に影響しました。 昨年12月の米小売売上高(季節調整値) 前月比 0%(横ばい) 市場予想を下回る結果に📉 この結果を受けて「米国景気が減速するのでは?」との懸念が高まり、...