예스스탁
예스스탁 답변
2020-10-05 14:58:04
안녕하세요
예스스탁입니다.
1-1 지표
input : Periods(10),Multiplier(3.0),length(10);
var : src(0),ATRv(0),valpha(0),VARr(0),vud1(0),vDD1(0),vUD(0),vDD(0),vCMO(0);
var : wwalpha(0),WWMA(0),zxLag(0),zxEMAData(0),ZLEMA(0);
var : lrc(0),lrc1(0),lrs(0),TSF(0);
var : MAvg(0),longStop(0),longStopPrev(0);
var : shortStop(0),shortStopPrev(0);
var : dir(0),PMax(0);
src = (h+l)/2;
atrv = atr(Periods);
valpha=2/(length+1);
vud1 = iff(src>src[1],src-src[1],0);
vdd1 = iff(src<src[1],src[1]-src,0);
vUD=AccumN(vud1,9);
vDD=AccumN(vdd1,9);
vCMO=(vUD-vDD)/(vUD+vDD);
VARr = 0;
VARr = (valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*VARr[1];
wwalpha = 1/ length;
WWMA = 0;
WWMA = wwalpha*src + (1-wwalpha)*WWMA[1];
zxLag = IFf(length/2==round(length/2,0) , length/2 , (length - 1) / 2);
zxEMAData = (src + (src - src[zxLag]));
ZLEMA = ema(zxEMAData, length);
lrc = LRL(src, length);
lrc1 = lrc[1];
lrs = (lrc-lrc1);
TSF = Lrc+lrs;
MAvg = ma(src, length);
longStop = MAvg - Multiplier*atrv;
longStopPrev = IFf(isnan(longStop[1]) == true,longStop,longStop[1]);
longStop = iff(MAvg > longStopPrev , max(longStop, longStopPrev) , longStop);
shortStop = MAvg + Multiplier*atrv;
shortStopPrev = IFf(isnan(shortStop[1]) == true,shortStop,shortStop[1]);
shortStop = iff(MAvg < shortStopPrev , min(shortStop, shortStopPrev) , shortStop);
dir = 1;
dir = IFf(isnan(dir[1]) == true,dir,dir[1]);
dir = iff(dir == -1 and MAvg > shortStopPrev , 1 ,IFf(dir == 1 and MAvg < longStopPrev , -1 , dir));
PMax = IFf(dir == 1 , longStop , shortStop);
plot1(MAvg,"Moving Avg Line");
plot2(PMax,"PMax",RED);
1-2 시스템
input : Periods(10),Multiplier(3.0),length(10);
var : src(0),ATRv(0),valpha(0),VARr(0),vud1(0),vDD1(0),vUD(0),vDD(0),vCMO(0);
var : wwalpha(0),WWMA(0),zxLag(0),zxEMAData(0),ZLEMA(0);
var : lrc(0),lrc1(0),lrs(0),TSF(0);
var : MAvg(0),longStop(0),longStopPrev(0);
var : shortStop(0),shortStopPrev(0);
var : dir(0),PMax(0);
src = (h+l)/2;
atrv = atr(Periods);
valpha=2/(length+1);
vud1 = iff(src>src[1],src-src[1],0);
vdd1 = iff(src<src[1],src[1]-src,0);
vUD=AccumN(vud1,9);
vDD=AccumN(vdd1,9);
vCMO=(vUD-vDD)/(vUD+vDD);
VARr = 0;
VARr = (valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*VARr[1];
wwalpha = 1/ length;
WWMA = 0;
WWMA = wwalpha*src + (1-wwalpha)*WWMA[1];
zxLag = IFf(length/2==round(length/2,0) , length/2 , (length - 1) / 2);
zxEMAData = (src + (src - src[zxLag]));
ZLEMA = ema(zxEMAData, length);
lrc = LRL(src, length);
lrc1 = lrc[1];
lrs = (lrc-lrc1);
TSF = Lrc+lrs;
MAvg = ma(src, length);
longStop = MAvg - Multiplier*atrv;
longStopPrev = IFf(isnan(longStop[1]) == true,longStop,longStop[1]);
longStop = iff(MAvg > longStopPrev , max(longStop, longStopPrev) , longStop);
shortStop = MAvg + Multiplier*atrv;
shortStopPrev = IFf(isnan(shortStop[1]) == true,shortStop,shortStop[1]);
shortStop = iff(MAvg < shortStopPrev , min(shortStop, shortStopPrev) , shortStop);
dir = 1;
dir = IFf(isnan(dir[1]) == true,dir,dir[1]);
dir = iff(dir == -1 and MAvg > shortStopPrev , 1 ,IFf(dir == 1 and MAvg < longStopPrev , -1 , dir));
PMax = IFf(dir == 1 , longStop , shortStop);
if CrossUp(MAvg,PMax) Then
Buy();
if CrossDown(MAvg,PMax) Then
Sell();
2
그래프 모양은 속성에서 직접 지정하셔야 합니다.
input : length(100),mult(1);
var : src(0),a(0),b(0),size(0),r(0),s(0);
src = close;
size = iff((a[1]-a[2]) > 0 or (b[1]-b[2]) < 0 , atr(length) ,TrueRange);
if a[1] > a[2] Then
{
Condition1 = true;
var1 = 0;
}
Else
{
if Condition1 == true Then
var1 = var1+1;
}
if b[1] < b[2] Then
{
Condition2 = true;
var2 = 0;
}
Else
{
if Condition2 == true Then
var2 = var2+1;
}
a = max(src,a[1]) - size/pow(length,2)*(var1*mult);
b = min(src,b[1]) + size/pow(length,2)*(Var2*mult);
r = (a+b)/2;
if r > r[1] then
s = 1;
if r < r[1] then
s = -1;
plot1(a,"상단");
plot2(b,"하단");
plot3(r,"중심",IFF(s == 1,RED,BLUE));
3
마자막 수평선에만 표시를 원하시면
#Text_Delete(TX1);
#Text_Delete(TX2);
수식 내 위 부분에 주석을 해제하시면 됩니다.
Input:Period(14),n(0),multi(0.5),Left(3),Right(3);
Var:기울기(0),절편(0),회귀선(0),회귀선tmp(0),채널폭(0),j(0),T(0);
var : 상단1(0),상단2(0),하단1(0),하단2(0),TL1(0),TL2(0),TX1(0),TX2(0);
기울기 = LRS(C, Period)[n];
절편 = _intercept(C,Period)[n];
회귀선 = 기울기 * Index + 절편;
채널폭 = 0;
for j = n to Period + n - 1
{
회귀선tmp = 기울기 * Index[j] + 절편;
채널폭 = max(채널폭,max(abs(H[j] - 회귀선tmp),abs(회귀선tmp - L[j])));
}
if 회귀선 > 회귀선[1] Then
T = 1;
if 회귀선 < 회귀선[1] Then
T = -1;
상단2 = 회귀선 + 채널폭 * multi;
상단1 = 회귀선 + 채널폭;
하단1 = 회귀선 - 채널폭;
하단2 = 회귀선 - 채널폭 * multi;
plot1(회귀선,"회귀선",iff(T==1,RED,BLUE));
plot2(상단1);
plot3(하단1);
plot4(상단2);
plot5(하단2);
if SwingHigh(1,상단2,left,right,left+right+1) != -1 Then
{
var1 = 상단1[right];
TL1 = TL_New(sDate[right],sTime[right],var1,sDate,sTime,var1);
TL_SetColor(TL1,BLUE);
#Text_Delete(TX1);
TX1 = Text_New(sDate[right],sTime[right],var1,"수");
Text_SetStyle(TX1,2,1);
Text_SetColor(Tx1,BLUE);
}
Else
{
TL_SetEnd(TL1,sDate,sTime,var1);
Text_SetLocation(TX1,sDate,sTime,Var1);
}
if Swinglow(1,하단2,left,right,left+right+1) != -1 Then
{
var2 = 하단1[right];
TL2 = TL_New(sDate[right],sTime[right],var2,sDate,sTime,var2);
TL_SetColor(TL2,RED);
#Text_Delete(TX2);
TX2 = Text_New(sDate[right],sTime[right],var1,"도");
Text_SetStyle(TX2,2,0);
Text_SetColor(Tx2,RED);
}
Else
{
TL_SetEnd(TL2,sDate,sTime,var2);
Text_SetLocation(TX2,sDate,sTime,Var2);
}
4
문의하신 내용은 가능하지 않습니다.
I_로 되어 있는 포지션 함수들은 기본차트에 적용된 시스템의 정보만 알수 있습니다.
다른 주기의 신호내역은 알수가 없습니다.
즐거운 하루되세요
> 양정희 님이 쓴 글입니다.
> 제목 : 트레이딩뷰 PMax 지표를 예스수식으로 변환요청드립니다.
> //@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//developer: @KivancOzbilgic
//author: @KivancOzbilgic
study("Profit Maximizer","PMax", overlay=true)
src = input(hl2, title="Source")
Periods = input(title="ATR Length", type=input.integer, defval=10)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
mav = input(title="Moving Average Type", defval="EMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
getMA(src, length) =>
ma = 0.0
if mav == "SMA"
ma := sma(src, length)
ma
if mav == "EMA"
ma := ema(src, length)
ma
if mav == "WMA"
ma := wma(src, length)
ma
if mav == "TMA"
ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
ma
if mav == "VAR"
ma := VAR
ma
if mav == "WWMA"
ma := WWMA
ma
if mav == "ZLEMA"
ma := ZLEMA
ma
if mav == "TSF"
ma := TSF
ma
ma
MAvg=getMA(src, length)
longStop = MAvg - Multiplier*atr
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + Multiplier*atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)
alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")
buySignalk = crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallk = crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
buySignalc = crossover(src, PMax)
plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, PMax)
plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)
-----------------------------------------------------------------------------------
1. buy와 sell이 들어가는거 보면 지표수식은 아닌거 같고 시스템수식인지 잘모르겠는데
저는 지표수식으로 요청했는데 지표수식이 아니면 시스템으로 변경요청해주셔요.
그냥 시스템식과 지표식 둘다 가능하면 둘다 만들어주시면 감사하겠습니다.
-----------------------------------------------------------------------------------
input : length(100),mult(1);
var : src(0),a(0),b(0),size(0);
src = close;
size = iff((a[1]-a[2]) > 0 or (b[1]-b[2]) < 0 , atr(length) ,TrueRange);
if a[1] > a[2] Then
{
Condition1 = true;
var1 = 0;
}
Else
{
if Condition1 == true Then
var1 = var1+1;
}
if b[1] < b[2] Then
{
Condition2 = true;
var2 = 0;
}
Else
{
if Condition2 == true Then
var2 = var2+1;
}
a = max(src,a[1]) - size/pow(length,2)*(var1*mult);
b = min(src,b[1]) + size/pow(length,2)*(Var2*mult);
plot1(a);
plot2(b);
------------------------------------------------------------------------
2.채널의 상단과 하단의 중심선을 만들어 표시하고 싶은데요.
중심에 점선으로 표시하고 싶습니다.
상승하락 구분되게끔 상승시 빨강 하락시 파랑으로 표시해주시면 좋겠습니다.
수식을 첨가해서 만들어주시면 감사하겠습니다.
------------------------------------------------------------------------
Input:Period(14),n(0),multi(0.5),Left(3),Right(3);
Var:기울기(0),절편(0),회귀선(0),회귀선tmp(0),채널폭(0),j(0),T(0);
var : 상단1(0),상단2(0),하단1(0),하단2(0),TL1(0),TL2(0);
기울기 = LRS(C, Period)[n];
절편 = _intercept(C,Period)[n];
회귀선 = 기울기 * Index + 절편;
채널폭 = 0;
for j = n to Period + n - 1
{
회귀선tmp = 기울기 * Index[j] + 절편;
채널폭 = max(채널폭,max(abs(H[j] - 회귀선tmp),abs(회귀선tmp - L[j])));
}
if 회귀선 > 회귀선[1] Then
T = 1;
if 회귀선 < 회귀선[1] Then
T = -1;
상단2 = 회귀선 + 채널폭 * multi;
상단1 = 회귀선 + 채널폭;
하단1 = 회귀선 - 채널폭;
하단2 = 회귀선 - 채널폭 * multi;
plot1(회귀선,"회귀선",iff(T==1,RED,BLUE));
plot2(상단1);
plot3(하단1);
plot4(상단2);
plot5(하단2);
if SwingHigh(1,상단2,left,right,left+right+1) != -1 Then
{
var1 = 상단1[right];
TL1 = TL_New(sDate[right],sTime[right],var1,sDate,sTime,var1);
TL_SetColor(TL1,BLUE);
}
Else
TL_SetEnd(TL1,sDate,sTime,var1);
if Swinglow(1,하단2,left,right,left+right+1) != -1 Then
{
var2 = 하단1[right];
TL2 = TL_New(sDate[right],sTime[right],var2,sDate,sTime,var2);
TL_SetColor(TL2,RED);
}
Else
TL_SetEnd(TL2,sDate,sTime,var2);
----------------------------------------------------------------------------------
3. 위 그래프선형채널 수식에 상단하단 빨간선 파란선 나오는 부분에 글자표시 해주시면 감사하겠습니다. 파란선 왼쪽 옆에 "수" 표시가 나오게끔 해주시고 빨간선 오른쪽 옆에 "도" 표시가 나오게끔 해주시면 좋겠습니다.
-----------------------------------------------------------------------------------
var:text1(0);
plot1(I_CurrentContracts);
PlotBaseLine1(0);
If I_CurrentContracts <> 0 and I_CurrentContracts[1] <> I_CurrentContracts Then {
text1 = Text_New_Self(sDate,sTime,I_CurrentContracts,numtostr(I_CurrentContracts,0));
Text_SetBold(text1,1);
Text_SetSize(text1,18);
Text_SetStyle(text1,0,IFF(I_MarketPosition==1,0,1));
}
--------------------------------------------------------------------------------------
4. 포지션현재수량 수식인데요.
제가 원하는게 1분봉에서 추세를 파악하려하는데
1분봉상에서 타주기 5분봉, 10분봉, 30분봉, 60분봉의 포지션현재수량이 보조지표로 표현되게끔 할수 있을까요?
가능하면 부탁드리겠습니다.