예스스탁
예스스탁 답변
2025-04-01 13:36:35
안녕하세요
예스스탁입니다.
예스랭귀지에서는 하나의 편집창에서 지표출력과 신호출력이 가능하지 않아
지표식과 시스템식 2개 작성해 드립니다.
1. 지표
input : shortMaPeriod(10);
input : longMaPeriod(20);
input : shortMaColor(blue);
input : longMaColor(yellow);
input : shortLineWidth(1);
input : longLineWidth(2);
input : pivotLeft(5);
input : pivotRight(5);
var : macdline(0),signalline(0),histLine(0);
var : pivotLowMACD(0),divLowPrice(0);
var : prevPivotLowMACD(0),prevLowPricePoint(0);
var : isDivergence(False);
var : D1(0),T1(0),D2(0),T2(0),TL1(0),TL2(0);
macdLine = macd(12,26);
signalLine = Ema(macdLine,9);
histLine = macdLine-signalLine;
plot1(macdLine);
if SwingLowBar(1,macdLine,pivotLeft,pivotRight,pivotLeft+pivotRight+1) != -1 Then
{
pivotLowMACD = macdLine[pivotRight];
divLowPrice = low[pivotRight];
prevLowPricePoint = divLowPrice;
prevPivotLowMACD = pivotLowMACD;
d1 = sDate[pivotRight];
t1 = sTime[pivotRight];
d2 = d1[1];
t2 = t1[1];
}
// MACD 다이버전스 조건
isDivergence = prevLowPricePoint[1] > prevLowPricePoint[0] and prevPivotLowMACD[1] < prevPivotLowMACD[0];
var : maShort(0),maLong(0),goldenCross(False);
var : hasLastDivergence(False),divAfterLowPrice(Nan);
var : enterLong(False),exLong(False),TX(0),deadCross(False);
maShort = ma(close, shortMaPeriod);
maLong = ma(close, longMaPeriod);
goldenCross = crossup(maShort, maLong);
deadCross = CrossDown(maShort, maLong);
if isDivergence == true Then
{
TL1 = TL_New_Self(D2,T2,prevPivotLowMACD[1],D1,T2,prevPivotLowMACD);
TL_SetColor(TL1,Green);
TL2 = TL_New(D2,T2,prevLowPricePoint[1],D1,T2,prevLowPricePoint);
TL_SetColor(TL2,Green);
hasLastDivergence = true;
divAfterLowPrice = low[pivotRight];
}
enterLong = hasLastDivergence and goldenCross;
exLong = CrossDown(close, maLong);
if enterLong == true Then
{
TX = text_new(sDate,sTime,L,"▲");
Text_SetStyle(TX,2,0);
Text_SetColor(TX,Green);
}
if enterLong or divAfterLowPrice > low or deadCross Then
{
hasLastDivergence = false;
divAfterLowPrice = Nan;
}
2 시스템
input : shortMaPeriod(10);
input : longMaPeriod(20);
input : shortMaColor(blue);
input : longMaColor(yellow);
input : shortLineWidth(1);
input : longLineWidth(2);
input : pivotLeft(5);
input : pivotRight(5);
var : macdline(0),signalline(0),histLine(0);
var : pivotLowMACD(0),divLowPrice(0);
var : prevPivotLowMACD(0),prevLowPricePoint(0);
var : isDivergence(False);
var : D1(0),T1(0),D2(0),T2(0),TL1(0),TL2(0);
macdLine = macd(12,26);
signalLine = Ema(macdLine,9);
histLine = macdLine-signalLine;
if SwingLowBar(1,macdLine,pivotLeft,pivotRight,pivotLeft+pivotRight+1) != -1 Then
{
pivotLowMACD = macdLine[pivotRight];
divLowPrice = low[pivotRight];
prevLowPricePoint = divLowPrice;
prevPivotLowMACD = pivotLowMACD;
d1 = sDate[pivotRight];
t1 = sTime[pivotRight];
d2 = d1[1];
t2 = t1[1];
}
// MACD 다이버전스 조건
isDivergence = prevLowPricePoint[1] > prevLowPricePoint[0] and prevPivotLowMACD[1] < prevPivotLowMACD[0];
var : maShort(0),maLong(0),goldenCross(False);
var : hasLastDivergence(False),divAfterLowPrice(Nan);
var : enterLong(False),exLong(False),TX(0),deadCross(False);
maShort = ma(close, shortMaPeriod);
maLong = ma(close, longMaPeriod);
goldenCross = crossup(maShort, maLong);
deadCross = CrossDown(maShort, maLong);
if isDivergence == true Then
{
hasLastDivergence = true;
divAfterLowPrice = low[pivotRight];
}
enterLong = hasLastDivergence and goldenCross;
exLong = CrossDown(close, maLong);
if enterLong or divAfterLowPrice > low or deadCross Then
{
hasLastDivergence = false;
divAfterLowPrice = Nan;
}
if enterLong == true Then
Buy("매수진입",AtMarket);
if MarketPosition == 1 and exLong == true Then
ExitLong("매수청산",AtMarket);
즐거운 하루되세요
> 레전드 님이 쓴 글입니다.
> 제목 : 문의
> strategy(title="MACD 다이버전스 + 골든 크로스 지표", overlay=false, initial_capital = 100000, default_qty_type=strategy.percent_of_equity, default_qty_value=90)
// 사용자 입력
shortMaPeriod = input.int(defval=10, title="단기 이동평균선")
longMaPeriod = input.int(defval=20, title="장기 이동평균선")
shortMaColor = input.color(defval=color.blue, title="단기 이평선 컬러")
longMaColor = input.color(defval=color.yellow, title="장기 이평선 컬러")
shortLineWidth = input.int(defval=1, minval=1, maxval=5, title="단기 라인 굵기")
longLineWidth = input.int(defval=2, minval=1, maxval=5, title="장기 라인 굵기")
pivotLeft = input.int(defval=5, minval=1, maxval=10, title="피봇 왼쪽")
pivotRight = input.int(defval=5, minval=1, maxval=10, title="피봇 오른쪽")
// MACD 다이버전스를 찾아 내기 위한 코드
// MACD 변수 선언
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(macdLine, color=color.red)
pivotLowMACD = ta.pivotlow(macdLine, pivotLeft, pivotRight)
divLowPrice = not na(pivotLowMACD) ? low[pivotRight] : na
// 저점으로 이동하기 위한 변수를 따로 선언
prevLowPricePoint = ta.valuewhen(not na(divLowPrice), divLowPrice, 0)
prevPivotLowMACD = ta.valuewhen(not na(pivotLowMACD), pivotLowMACD, 0)
// MACD 다이버전스 조건
isDivergence = prevLowPricePoint[1] > prevLowPricePoint[0] and prevPivotLowMACD[1] < prevPivotLowMACD[0]
plot(divLowPrice, color=isDivergence ? color.new(color.green, 30) : na, style=plot.style_line, linewidth=5, offset=-pivotRight, force_overlay=true)
plot(pivotLowMACD, color=isDivergence ? color.new(color.green, 30) : na, style=plot.style_line, linewidth=5, offset=-pivotRight)
// 이동평균선 관련하여 장기와 단기 이동평균선을 선언해 놓았습니다.
maShort = ta.sma(close, shortMaPeriod)
maLong = ta.sma(close, longMaPeriod)
// 이동평균선을 차트에 직접 그리는 코드
plot(maShort, color=shortMaColor, force_overlay=true)
plot(maLong, color=longMaColor, force_overlay=true)
// 조건 1: 골든 크로스 검출 -> 위 변수를 활용하여 골든 크로스 시점을 저장합니다.
goldenCross = ta.crossover(maShort, maLong)
// 최종 거래 조건 변수
var bool hasLastDivergence = false
var float divAfterLowPrice = na
if isDivergence
hasLastDivergence := true
divAfterLowPrice := low[pivotRight]
// bgcolor(color = hasLastDivergence? color.aqua: na)
enterLong = hasLastDivergence and goldenCross
exitLong = ta.crossunder(close, maLong)
plotshape(maShort, color=enterLong ? color.new(color.green, 0) : na, location=location.absolute, style=shape.triangleup, size=size.small, force_overlay=true)
// 거래 실행
if enterLong
strategy.entry("매수진입", strategy.long)
if exitLong
strategy.close("매수진입")
deadCross = ta.crossunder(maShort, maLong)
if enterLong or divAfterLowPrice > low or deadCross
hasLastDivergence := false
divAfterLowPrice := na
예스로 부탁드립니다