見出し画像

チュートリアルをやってみる

以下のチュートリアルを試してみる。

このチュートリアルについて

EAを作るためのチュートリアル。細かい単位でコードを書いてくれてるからこのチュートリアルを選んだ。

EAのロジック

チュートリアル冒頭にかかれているEAのロジックの概要をまとめる

・MA-8(期間8の移動平均線)を用いる
・すでにポジションがない前提で、MA-8よりも価格が低いとロング、MA-8よりも価格が高いとショート(本当はもっと細かいかも)
・平均方向性移動 (ADX) でトレンドの有無を判断し、トレンドがある場合のみMA-8に基づいてトレードを行う。トレンドがない場合はMA-8が上記の条件を満たしていても、トレードを実行しない。
・30pips のストップロスをかける。
・新しくローソク足が生成されたタイミングでポジションをとるかどうかを判断する。ショート・ロングいずれかのポジションをとる場合、すでに逆向きのポジションがある場合はクローズする。

自分の言葉で説明したらこんな感じ。原文は以下の通り

・期間8の移動平均と呼ばれるインディケータを使用します。 ( どんな期間も選ぶことができますが、このストラテジーの目的に合わせて8を使用します。)
・移動平均-8 (ここではMA-8と呼びます) が増加し価格がそれ以上でクローズの時にEAがLong (Buy) トレードをプレースし、MA-8が減少し価格がそれ以下でクローズな時EAがShort (Sell) をプレースするようにしたいです。
・また、マーケットがトレンドかどうか判定することを助ける平均方向性移動 (ADX) と呼ばれる別のインディケーターを期間8で使います。マーケットにトレンドがある時にトレードに参加し、そうでないときに緩和するためにこうしています。 これを行うには上記条件が満たされ、ADX値が22以上である時だけトレード (BuyまたはSell) をプレースします。もし、ADXが22以上だが減少している、もしくはADXが22以下の場合、条件Bが満たされていたとしてもトレードしません。
・また30 pipsのストップロスを設定して自己保護をはかりましょう。そして利益ターゲットついては100 pipsをターゲットにします。
・新しいバーが形成された時だけのBuy/Sellの機会をEAに見張っていてほしいです。またBuy条件が満たされた場合 Buy ポジションをオープンにし、すでにオープンなものがないこと、またSell 条件が満たされた場合 Sell ポジションをオープンにし、すでにオープンなものがないことを確実にします。

自分でEAを作ってみたいと思っている人はどのくらい条件を明確にしなければいけないかの参考にしてほしい。

新しくファイルを作成する

最初に取る引数を設定する。あとは全部次へにすると、EAのひな型ができた。

画像1

画像2

ある程度優しい印象。さすがIDEって感じはする。

生成されたコードは以下の3つ
・製作者の情報の定義
・EAを使う人が指定する変数を入れるグローバル変数
・OnInit() / OnDeinit() / OnTick() の3つのイベントハンドラ

iADX()

平均方向性移動をハンドリングするための関数。引数にどういう平均方向性移動をハンドリングするのかを渡す。戻り値は int で正常の場合は 0 より大きい。詳細の引数はドキュメントを参照。

int iADX(
  string symbol, // symbol name
  ENUM_TIMEFRAMES period, // period
  int adx_period // averaging period
);

iMA()

移動平均線をハンドリングするための関数。引数にどういう移動平均線をハンドリングするのかを渡す。戻り値は int で正常の場合は 0 より大きい。詳細の引数はドキュメントを参照。

int iMA(
  string symbol, // symbol name
  ENUM_TIMEFRAMES period, // period
  int ma_period, // averaging period
  int ma_shift, // horizontal shift
  ENUM_MA_METHOD ma_method, // smoothing type
  ENUM_APPLIED_PRICE applied_price // type of price or handle
);

Symbol

iADX() / iMA いずれもシンボルっていう引数を取る。初期値は現在開いているシンボルになる。しかし、他のシンボルも指定できるみたい。

i*()

インディケータをハンドリングするための関数は i*() という名前でまとめられるっぽい。また、戻り値として int を返すみたい。

この戻り値をどのように扱うのかは不明。ただ、0よりも大きい値がくるみたい。

IndicatorRelease(int indicator_handle)

インディケータはEAが何らかの理由で停止された場合にリリースする必要がある。そうしないと計算が継続してしまって、マシンに負荷を与える。

チュートリアルのタイプミス

❌ 間違い

MqlResult mresult;

⭕ 正しい

MqlTradeResult  mresult;

2.4. EA非初期化セクション までやった

2.5のコードは写したけど、中身はまだ理解していない。

ところどころコードのタイプミスがあったり、意図的によくわからない書き方してるところもあるみたいやから注意しながらコードを書いていく必要がある。

また、チュートリアルで書いてる途中で動かしてみるみたいなことはしないので、不安が残りつつやらないといけない感じはする。

丁寧すぎるほど説明はしてくれてるのでこのチュートリアルを最後までするので特に問題ないと思う。

次回は短めになると思うけど、2.5 の理解を50%くらいはしたいと思っている。

この記事が気に入ったらサポートをしてみませんか?