見出し画像

チュートリアルやってみる(3)

前回までやってたチュートリアルのコードは読んでて、読みにくいし無駄なコードが多かった。別のチュートリアルを探して良いのがあったので今回からはそのチュートリアルをやってみようともう。

今回もいままでと同じようにやりつつ気になったところをメモしていく。

インディケーターとその処理方法

トレンドフォロー型はトレンドの判断、オシレーターはエントリーポイントの判断。

すべてのインディケータは2つのタイプに分類できます:トレンドフォロー型のインディケーターとオシレーターです。
トレンドフォロー型のインディケーターは、ルールとして、プライスチャート内に描画され、トレンドの方向を特定するのに使われ
オシレーターはプライスチャートの下にあり、エントリーポイントを判断するのに役立ちます。

これ多分、重要やと思う。

EAと同じように、インディケーターも計算するためのシンボルとタイムフレームを持っています。

ChartIndicatorAdd()

インディケータをチャート上に表示するための関数。

チャートとウィンドウと指標ハンドルを指定すると実行できる。

bool  ChartIndicatorAdd(
    long  chart_id,               // チャート識別子
    int  sub_window               // サブウィンドウ番号
    int  indicator_handle         // 指標ハンドル
);

画像1

MQL5からチャートにインディケータを表示した。

ChartIndicatorDelete()

こっちは削除するための関数。

bool  ChartIndicatorDelete(
    long          chart_id,             // チャート識別子
    int           sub_window            // サブウィンドウ番号
    const string  indicator_shortname   // 指標短縮名
);

チャート識別子とサブウィンドウ番号はわかるけど、指標短縮名が何かわからない。ChartIndicatorName() から取得できそうやけど、この中身もちょっとややこしかった。深追いすると沼にハマるきがするので、いったん放置。

動的配列オブジェクト

全然何言ってるかわからへん。コード書いて試してみたけど挙動がわからへん。(何よりもデバッグの仕方もよくわからへん)

最大 4 次元の配列の宣言が可能です。動的配列(最初の角括弧ペアで値が指定されていない配列)が宣言されると、コンパイラは自動的にこのような構造の変数(動的配列オブジェクト)を作成し、適切な初期化のためのコードを提供します。
動的配列は、宣言されたブロックの視認性の領域を越えた時に、自動的に解放されます。

ArraySetAsSeries()

配列の索引付けを時系列のようにするがどういうことをしてるのかわからへん。目的は、時系列を扱いやすくするためなんやろう。

この関数は選択された 動的配列オブジェクトに AS_SERIES フラグを設定し 時系列のように索引付けをします。

CTrade

注文したり、決済したりするためのクラス。

CTrade は取引関数に簡単にアクセスするためのクラスです。
CTrade クラスは取引関数への簡易化されたアクセスを提供します。

CPositionInfo

未決済のポジションについての情報を取得するためのクラス。

CPositionInfo はオープンポジションのプロパティに簡単にアクセスするためのクラスです。
CPositionInfo クラスはオープンポジションプロパティへの容易化したアクセスを提供します。

買い注文できた

 #property  copyright "guchimon99" #property  link      "https://twitter.com/guchimon99" #property  version   "1.00"
 #include  <Trade\Trade.mqh>;

CTrade m_Trade;

int OnInit() {
  m_Trade.Buy(1.0);
  return(INIT_SUCCEEDED);
}

こうやったら買える。

注文の閉じ方

反対に同じサイズの注文を出すってのはなんかしっくりこやん。

1.の方法の方が綺麗やと思う。

画像2

適当なEAを作る

チュートリアルの中に割とちゃんとしたEAが書いてあったけど、とりあえず自分で適当に動くEAを作ってみる。

void OnTick() {
  if (count == 10 || count == 20) {
     m_Position.Select(_Symbol);
     m_Trade.PositionClose(_Symbol);
     
     if (count == 10) {
        m_Trade.Buy(volume);
     } else {
        m_Trade.Sell(volume);
     }      
  }
  if (count++ > 30) count = 0;
}

売りと買いを繰り返していくEAができた。

次回は

次回はちゃんとチュートリアルのEAを写経しつつ。理解を深めていこうと思う。

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