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回も来なかった日は、その日の注文を置きません。
予約注文を2本置くところ
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ソースコードです。