簡體   English   中英

將脊椎腳本 (tradingview) 翻譯成 mql 指標 (meta trader 4)

[英]Translate spine script (tradingview) to mql indicator (meta trader 4)

我想將 Pine 腳本從交易視圖腳本轉換為元交易者 4 的 mq4 指標。

這是從交易視圖 Pine 腳本翻譯的腳本:


rsiLength = input(title="RSI Length", type=input.integer, defval=14)
lbLength = input(title="Look Back Length", type=input.integer, defval=5)
avgLength = input(title="Average Length", type=input.integer, defval=8)
drawSig = input(title="Signal On/Off?", type=input.bool, defval=false)
sigLength = input(title="Signal Length", type=input.integer, defval=6)
src = input(title="Source", type=input.source, defval=close)
ob = input(title="Over Bought", type=input.integer, defval=80)
os = input(title="Over Sold", type=input.integer, defval=20)

avgRSI(rsiLength, lookBack, avgLen) =>
    rsi = rsi(src, rsiLength)
    rsiLowest = lowest(rsi, lookBack)
    rsiHighest = highest(rsi, lookBack)
    avgRSILow = sma(rsi - rsiLowest , avgLen)
    avgHiLow = sma(rsiHighest - rsiLowest, avgLen)

    return = 100 / (.01 + avgHiLow / avgRSILow)
    return


rsi = avgRSI( rsiLength, lbLength, avgLength )

plot(series=rsi, title="StochRSI", color=color.red, transp=0)
signal = drawSig ? sma(rsi, sigLength) : na
plot(series=signal, title="StochRSI Signal", color=color.orange, transp=0)
h1 = hline(price=ob, title="OB")
h2 = hline(price=os, title="OS")
fill(h1, h2)

我不明白這兩行:

    avgRSILow = sma(rsi - rsiLowest , avgLen)
    avgHiLow = sma(rsiHighest - rsiLowest, avgLen)

這是我對 metatrader 4 的代碼:

double lineBuffer[];
int rsiLength = 5;
int lbLength = 5;
int avgLength = 8;
int sigLength = 6;


int OnInit()
  {
   SetIndexBuffer(0, lineBuffer);
   return(INIT_SUCCEEDED);
  }

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[])
{
   
   int uncalculatedBar = rates_total - prev_calculated;
   
   for(int i = 0; i < uncalculatedBar; i++){
      double rsi = iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, i);
      double rsiLowest = lowestRSI(lbLength, i);
      double rsiHighest = highestRSI(lbLength, i);
      double avgRSILow = lowAverageRsi(avgLength, i, rsiLowest);
      double avgHiLow = lowHighRsiAverage(avgLength, rsiLowest, rsiHighest);
      lineBuffer[i] =  100 / (.01 + avgHiLow / avgRSILow);
   }
   return(rates_total);
}

// Return lowest rsi value for the last x values (->loopback) from a specific index (->start)
double lowestRSI(int loopback, int start) {
   double lowest_rsi = iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, start);
   for(int i = start + 1; i <= start + loopback; i++){
      if(iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, i) < lowest_rsi){
         lowest_rsi = iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, i);
      }
   }
   return lowest_rsi;
}

// Return highest rsi value for the last x values (->loopback) from a specific index (->start)
double highestRSI(int loopback, int start) {
   double highest_rsi = iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, start);
   for(int i = start + 1; i <= start + loopback; i++){
      if(iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, i) > highest_rsi){
         highest_rsi = iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, i);
      }
   }
   return highest_rsi;
}

// Calculate rsi average for last x values (-> loopback) minus lowestRsi
double lowAverageRsi(int loopback, int start, double lowestRsi) {
   double low_average_rsi = 0;
   for(int i = start; i < start + loopback; i++){
      low_average_rsi = low_average_rsi + ((iRSI(NULL, NULL, rsiLength, PRICE_CLOSE, i) - lowestRsi) / loopback);
   }
   return low_average_rsi;
}

// Calculate avergage for last x values between two values
double lowHighRsiAverage(int loopback, double lowestRsi, double highestRSI) {
   double low_high_rsi_average = 0;
   for(int i = 0; i < loopback; i++){
      low_high_rsi_average = low_high_rsi_average + ((highestRSI - lowestRsi) / loopback);
   }
   return low_high_rsi_average;
}

我被卡住了,我不知道該怎么辦,如果你能幫助我,那就太好了

如果您想解釋代碼,或者由於 mt4 編碼性質而需要解決,idk。

avgRSILow = sma(rsi, avgLen) - sma(rsiLowest , avgLen)
avgHiLow = sma(rsiHighest, avgLen) - sma(rsiLowest, avgLen)

上面的代碼給出了相同的結果

avgRSILow = sma(rsi - rsiLowest , avgLen)
avgHiLow = sma(rsiHighest - rsiLowest, avgLen)

它只是 x 數量的值返回是使用 sma function 的平均值並相互減去該值。 idk 代碼的性質取決於創建者,但他只是過去 x 量長度或 rsi 值的平均結果,以及 x 回溯量的最低值的平均值。

如果您仍然有疑問,請嘗試更好地解釋您不了解的內容...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM