今回は、ロウソク足に矢印(アロー)を表示させる方法について説明します!
MQLを使用してプログラミングしていきます!
インディケータの作成方法に関してはこちらの記事を参照ください!
早速作っていきましょう!
矢印を出す初期設定
- #property indicator_chart_window
- #property indicator_buffers 2
- #property indicator_color1 clrMediumVioletRed
- #property indicator_width1 2
- #property indicator_color2 clrMediumVioletRed
- #property indicator_width2 2
- double BuySignal[]; //Lowシグナルを宣言
- double SellSignal[]; //Highシグナルを宣言
今回はロウソク足のあるメインチャートに表示させる必要があるのでindicator_chart_windowと宣言します。
表示させる矢印(アロー)はHIGHとLOWがあるため、indicator_buffersは2と記載します。
後はそれぞれの色と太さを指定、バッファを宣言します。
矢印の種類の設定
- int OnInit()
- {
- SetIndexStyle(0, DRAW_ARROW); //バッファをアロータイプに指定
- SetIndexArrow(0, 233); //アローの種類を選択
- SetIndexBuffer(0, BuySignal);
- SetIndexLabel(0, “BuySignal”);
- SetIndexStyle(1, DRAW_ARROW); //バッファをアロータイプに指定
- SetIndexArrow(1, 234); //アローの種類を選択
- SetIndexBuffer(1, SellSignal);
- SetIndexLabel(1, “SellSignal”);
- return(0);
- }
OnInit関数内は他のインディケータと同じでインディケータのスタイルと種類を宣言します。
矢印を表示させる条件式
- int start()
- {
- //「counted_bar」という変数を定義して、インジケータとして計算された本数の値を代入
- int counted_bar = IndicatorCounted();
- if(counted_bar == 0)
- {
- counted_bar = counted_bar + 14;
- }
- //「limit」という変数を定義して、現在のローソク足の総数からインジケータ起動時の本数を引いた値を代入
- int limit = Bars- counted_bar;
- //売買シグナルの作成
- for(int i = 0; i < limit; i++)
- {
- // バッファの初期化
- BuySignal[i] = EMPTY_VALUE;
- SellSignal[i] = EMPTY_VALUE;
- double rsi = iRSI(NULL,PERIOD_M5,14,PRICE_CLOSE,i);
- //LOWシグナルの条件
- if(
- rsi >= 75 //RSIが75以上
- )
- {
- SellSignal[i] = iHigh(NULL,0,i) + Point * 10;
- }
- //HIGHシグナルの条件
- if(
- rsi <= 25 //RSIが25以下
- )
- {
- BuySignal[i] = iLow(NULL,0,i) – Point * 10;
- }
- }
- return(0);
- }
最後にstart関数内に具体的な条件を記載していきます!
今回はRSIを使用し、閾値にタッチしたときにアローを表示させるようにしたいと思います。
- // バッファの初期化
- BuySignal[i] = EMPTY_VALUE;
- SellSignal[i] = EMPTY_VALUE;
最初にアローを表示させるのに必要なバッファの初期化処理を記載します。
- //LOWシグナルの条件
- if(
- rsi >= 75 //RSIが75以上
- )
- {
- SellSignal[i] = iHigh(NULL,0,i) + Point * 10;
- }
- //HIGHシグナルの条件
- if(
- rsi <= 25 //RSIが25以下
- )
- {
- BuySignal[i] = iLow(NULL,0,i) – Point * 10;
- }
ここではRSIが75以上と25以下になる時でif文で表示させています。
- SellSignal[i] = iHigh(NULL,0,i) + Point * 10;
イコールの後の意味はアローをどの位置に表示させたいのかを記載しています。
上記の場合、ロウソク足の高値から10ポイント上の位置に表示させています。
これでコードが完成しました!
チャートで確認していきます!
条件を満たしたロウソク足全部に表示されていることが分かると思います!
条件の中身を変えることで色々な位置でアローを表示させることができるようになります。
色々検証して勝てるポイントを探していきましょう!
最後に今回作成したコードを記載しておきます!
サンプルコード全文
- #property indicator_chart_window
- #property indicator_buffers 2
- #property indicator_color1 clrMediumVioletRed
- #property indicator_width1 2
- #property indicator_color2 clrMediumVioletRed
- #property indicator_width2 2
- double BuySignal[];
- double SellSignal[];
- //+——————————————————————+
- //| Custom indicator initialization function |
- //+——————————————————————+
- int OnInit()
- {
- SetIndexStyle(0, DRAW_ARROW); //バッファをアロータイプに指定
- SetIndexArrow(0, 233); //アローの種類を選択
- SetIndexBuffer(0, BuySignal);
- SetIndexLabel(0, “BuySignal”);
- SetIndexStyle(1, DRAW_ARROW); //バッファをアロータイプに指定
- SetIndexArrow(1, 234); //アローの種類を選択
- SetIndexBuffer(1, SellSignal);
- SetIndexLabel(1, “SellSignal”);
- return(0);
- }
- int start()
- {
- //「counted_bar」という変数を定義して、インジケータとして計算された本数の値を代入
- int counted_bar = IndicatorCounted();
- if(counted_bar == 0)
- {
- counted_bar = counted_bar + 14;
- }
- //「limit」という変数を定義して、現在のローソク足の総数からインジケータ起動時の本数を引いた値を代入
- int limit = Bars- counted_bar;
- //売買シグナルの作成
- for(int i = 0; i < limit; i++)
- {
- // バッファの初期化
- BuySignal[i] = EMPTY_VALUE;
- SellSignal[i] = EMPTY_VALUE;
- double rsi = iRSI(NULL,PERIOD_M5,14,PRICE_CLOSE,i);
- //LOWシグナルの条件
- if(
- rsi >= 75 //RSIが75以上
- )
- {
- SellSignal[i] = iHigh(NULL,0,i) + Point * 10;
- }
- //HIGHシグナルの条件
- if(
- rsi <= 25 //RSIが25以下
- )
- {
- BuySignal[i] = iLow(NULL,0,i) – Point * 10;
- }
- }
- return(0);
- }