#pine-script #mql4
#pine-скрипт #mql4
Вопрос:
Я хотел бы преобразовать скрипт Pine из скрипта trading view в индикатор mq4 для meta trader 4.
Вот скрипт для перевода скрипта Pine из trading view:
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 amp;time[],
const double amp;open[],
const double amp;high[],
const double amp;low[],
const double amp;close[],
const long amp;tick_volume[],
const long amp;volume[],
const int amp;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;
}
Я застрял, я не знаю, что делать, если вы можете мне помочь, это было бы здорово
Ответ №1:
idk, если вы хотите, чтобы код был объяснен, или если вам нужно обойти из-за характера кодирования mt4.
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 и вычитанием значения друг для друга. определите природу кода, который зависит от создателя, но он представляет собой всего лишь средние результаты прошлых значений x amount lengh или rsi со средним значением наименьшего значения x amount lookback.
если у вас все еще есть сомнения, просто попробуйте лучше объяснить то, что вы не понимаете…
Комментарии:
1. Спасибо, что ответили мне K4eMi, можете ли вы объяснить мне, что делает эта функция «Pine»? sma (rsi, avgLen) Для меня функция sma tradingview принимает массив и целое число (количество итераций) в качестве параметра, но «rsiLowest» — это целое число, а не массив, так что же делает функция «sma (rsiLowest , avgLen)»?