mt4にて
直近過去足の1本~4本の中で検証します。
ロウソク足の実体の幅が一番小さいのが1本前なのであれば「印・アラート・通知」を行うインジケーターを作りました。
エラーは出なかったのですが、目的の「印・アラート・通知」のすべて機能していないようでした。
if(AM==1)の部分を if(AM=1)と記述していたのを見つけたので訂正してみましたが、変化はありませんでした。
もうこれ以上は、どのように修正したらよいのかわかりません。完全にお手上げでした。
心優しいお暇な方、どうか回答をよろしくお願いいたします。
コード//+------------------------------------------------------------------+ //| NR7.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //パラメータ input int NR = 4; //NR input color CLR = Yellow; //色 input int WIDTH = 3; //太さ //--- indicator buffers double NRBuffer[]; double JittaiBuffer[]; string title = Symbol() + ", M" + IntegerToString(Period()) + ": NR4!!."; string text = "Open Buy¥nat " + TimeToString(TimeCurrent()); //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,NRBuffer); //styleを設定します。SetIndexStyle(バッファーの番号(何番目のバッファーなのか)、style、線種、太さ、色) SetIndexStyle(0,DRAW_ARROW,EMPTY,WIDTH,CLR); //名前の指定SetIndexLabel(バッファーの番号(何番目のバッファーなのか),"名前") SetIndexLabel(0,"NR"); SetIndexArrow(0,174); SetIndexBuffer(1,JittaiBuffer); // SetIndexStyle(1,EMPTY); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- /*表示されているすべてのロウソク足の数だけforの中を繰り返す。 for(int i=0; i<Bars; i++){ */ //limitは計算する最大数のこと。IndicatorCountedとは今まで既に計算されたインジケーターの数が入っている。初めは0が入ります。 int limit = Bars - IndicatorCounted()-1; if(limit<1)limit=1; for(int i = limit; i>=0; i--){ //始値と終値を整数値で保存する double Op = MathAbs(iOpen(Symbol(),0,i)); double Cl = MathAbs(iClose(Symbol(),0,i)); //始値と終値の小さいほうの値を返す double small = MathMin(Op,Cl); //始値と終値の大きいほうの値を返す double big = MathMax(Op,Cl); //ロウソク足の実体の数値をバッファー配列に入れる JittaiBuffer[i] = big-small; //4本前までの中で一番小さい実体の足のインデックス番号を見つける int AM = ArrayMinimum(JittaiBuffer,4,1); //もし一番小さい実体がひとつ前の足ならNRバッファーに実体の数値をいれる。 //さらにアラート等を送る if(AM==1){ NRBuffer[i+1] = JittaiBuffer[i+1]; Alert(Symbol()+" M"+Period()+" NR4"); SendMail(title, text); SendNotification(title); }; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
とりあえず、質問文を編集して <code>(コードの挿入)の中にコードを含めましょう。
(読みやすく表示されるようになります)
せっかく開示頂いたコードですが読みずらく、コピーもしずらく、検証もしずらい、
つまり回答がつきにくい状態です。
そうだったんですね。教えていただき、ありがとうございます!
あなたの回答
tips
プレビュー