研究・検証 / GOLD DAWN BREAK のしくみ

LEARN / GOLD DAWN BREAK / 1

前の日の高値と安値に、予約注文を置く

このEAの入口は、毎日1回、前の日の高値と安値に予約注文を1本ずつ置くことだけです。値段が前の日の範囲を抜けて動き出したときだけ、取引が始まります。

このしくみの面白いところ

上に行くか下に行くかを、当てる必要がありません。前の日の高値に「買い」、安値に「売り」の予約注文を両方置いておくので、どちらに動き出しても、その方向に乗れます。

予約注文は、値段がそこまで来たときだけ発動する注文です(逆指値といいます)。前の日の範囲の中で値段が行ったり来たりしている日は、注文は発動しません。そのまま期限で消えて、その日は取引をしません。

つまりこのEAは、「金が前の日の範囲を抜けて動き出した日」だけを選んで取引します。

「前の日」はどこからどこまでか

このEAの「前の日」は、業者のチャートの日足の、1本前の足です。日足は業者のパソコンの時計(サーバー時刻)の0時で区切られます。なので前の日は、サーバー時刻の0時〜24時です。日本時間ではありません。この時計は業者ごとに違います(3ページ目で説明します)。

前の日の高値と安値は、サーバー時刻の0時に決まります。注文を置くのは、そこから2時間後の午前2時です。5分足でいうと、0時〜1時55分の24本ができたあと、2時の足の最初の値動きで置きます。

このEAは、値段が更新されるたびに時刻を見ています。そのため、2時0分のあいだに値段の更新が1回も来なかった日は、その日の注文を置きません。

前の日の高値に買いの予約注文、安値に売りの予約注文を置く位置の模式図 前の日(業者の時計で0時〜24時) 前の日の高値 前の日の安値 0時に決まる 2時に注文 買いの予約注文 買いの損切り(4ドル下) 売りの損切り(4ドル上) 売りの予約注文
模式図です。実際には、損切りの4ドルは前の日の値幅よりかなり小さいことがほとんどです(2ページ目で比べています)。2本の注文は、発動しなければ20時間後に消えます。

予約注文を2本置くところ

プログラムの一部 1 前の日の高値と安値を読み、予約注文を2本置く(GoldDawnBreak.mq5 より)
bool GetPreviousDayRange(double &prevHigh, double &prevLow)
{
   double highs[], lows[];
   if(CopyHigh(_Symbol, PERIOD_D1, 1, 1, highs) != 1) return false;
   if(CopyLow(_Symbol, PERIOD_D1, 1, 1, lows) != 1) return false;
   prevHigh = highs[0];
   prevLow  = lows[0];
   return true;
}

void DailySetup()
{
   double prevHigh, prevLow;
   if(!GetPreviousDayRange(prevHigh, prevLow)) return;
   if(!SpreadOk()) return; // checked only at setup time
   double buySL  = prevHigh - InpFixedSLUSD;
   double sellSL = prevLow  + InpFixedSLUSD;
   datetime expiry = TimeCurrent() + (datetime)(InpExpireHours * 3600.0);
   trade.BuyStop(InpLot, prevHigh, _Symbol, buySL, 0.0, ORDER_TIME_SPECIFIED, expiry, InpComment);
   trade.SellStop(InpLot, prevLow, _Symbol, sellSL, 0.0, ORDER_TIME_SPECIFIED, expiry, InpComment);
}

前半で、前の日の高値と安値を取り出しています。CopyHigh(_Symbol, PERIOD_D1, 1, 1, …) の「1」は、「いま作っている途中の今日の日足は飛ばして、1本前(前の日)を読む」という意味です。「前の日」の決め方は、これだけです。

後半で、前の日の高値に買い(BuyStop)、安値に売り(SellStop)の予約注文を置いています。

損切りは、それぞれの注文の値段から4ドルです。買いは高値の4ドル下、売りは安値の4ドル上なので、どちらも前の日の範囲の内側に入ります。

利益の目標を入れる欄は 0.0、つまり置いていません。注文の期限は、置いてから20時間です。

スプレッド(売値と買値の差)は、置く瞬間に1回だけ確かめます。広すぎる日は、注文を置きません。

置き直しと取り消し

  • 毎日、新しく置く前に、残っている自分の予約注文をすべて消します。消すのは、このEAが出した注文だけです(3ページ目のプログラムの一部 3)。
  • 予約注文の期限は20時間です。午前2時に置いた注文は、発動しなければ同じ日の22時ごろ(業者の時計)に消えます。
  • 片方が発動しても、もう片方は消しません。もう片方は期限か翌日の置き直しまで残るので、買いと売りの取引を同時に持つことがあります。試した結果では、同時に持った取引は最大で、2025〜26年が1本、2022〜24年が1〜2本でした。
  • 金曜は置きません。金曜の午前2時にも、残っている予約注文を消すことだけはします。
ここに載せている数字はすべて、過去の値動きで試した結果(バックテスト)で、運用実績ではありません。将来の結果を示すものではありません。投資判断はご自身で行ってください。気をつけてほしい点は、目次ページの「知っておいてほしいこと」にまとめています。

動かすだけなら、マイページで GOLD DAWN BREAK を受け取ってください。

全部読みたい・直したい・別の通貨で試したい場合は、ソースコード単品か、EA開発システム+全EAソースコードです。