close

 

其實在Mql5中,已經提供了很多現成的指標了,但是創建自行訂義的指標,仍是有其必要性。

在上一篇中,我們提到了OnCalculate函數,而在自訂義指標中所有必要的運算,都在預定義的OnCalculate函數中。

以下我們將試著,利用OnCalculate函數提供的資料,簡略的自行計算及定義指標值,並傳遞至另一函數中計算ATR指標。

 

ATR的公式如下:

TR公式.jpg

 

寫成程式碼如下

TR = MathMax(TXHigh[i],TXClose[i-1])-MathMin(TXLow[i],TXClose[i-1]);  

 

完成設計後,利用Alert()函數,設定ATR指標值達到條件後提出警式

ATR01.jpg

範例程式碼:

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

double TR,AvgTR;

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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
{
 //將陣列資料傳遞給CaleATR函數  
 CaleATR(rates_total,prev_calculated,Open,High,Low,Close);
 return(rates_total);                
}

void CaleATR(const int TXrates_total,
             const int TXprev_calculated,
             const double &TXOpen[],
             const double &TXHigh[],
             const double &TXLow[],
             const double &TXClose[])
{
 //rates_total的數量應等於所有的價格數組元素。
 //prev_calculated first value為0
 for(int i=TXrates_total-1; i>=TXrates_total-3; i--)
 {
  //先求出TR值(True Range),公式為TR=MAX(H,前日收)-MIN(L,前日收)
  TR+=TR; 
  TR = MathMax(TXHigh[i],TXClose[i-1])-MathMin(TXLow[i],TXClose[i-1]);  
 }
 AvgTR=TR/3;
 if (AvgTR>=0.000125){Alert("ATR波動幅度大於0.0003,現在波動",AvgTR);}
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 興小弟讀書筆記 的頭像
    興小弟讀書筆記

    興小弟讀書筆記

    興小弟讀書筆記 發表在 痞客邦 留言(0) 人氣()