예스스탁
예스스탁 답변
2025-05-20 13:03:52
안녕하세요
예스스탁입니다.
1
Input:
rsiLen(14), rsiCut(50),
macdFastLen(12), macdSlowLen(26), macdSignalLen(9),
tp1Ratio(0.995), tp2Ratio(0.990), tp3Ratio(0.985), slRatio(1.01),
volumeMultiplier(2.0), 평균거래량기간(20),
시작시간(93000), 종료시간(150000);
Var:
rsiVal(0), macdFastEMA(0), macdSlowEMA(0),
macdMain(0), macdSignal(0), macdHist(0),
진입가(0), TP1(0), TP2(0), TP3(0), SL(0),
거래량기준(0), 텍스트ID(0),
TL1(0), TL2(0), TL3(0), TL4(0),
박스상(0), 박스하(0),
매도조건(false);
// ▶? 1. RSI 계산
rsiVal = RSI(rsiLen);
// ▶? 2. MACD 수동 계산 (Index 기준 초기화 제거)
If CurrentBar == 1 Then
Begin
macdFastEMA = Close;
macdSlowEMA = Close;
macdMain = 0;
macdSignal = 0;
macdHist = 0;
End
Else
Begin
macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1)));
macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1)));
macdMain = macdFastEMA - macdSlowEMA;
macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1)));
macdHist = macdMain - macdSignal;
End;
// ▶? 3. 평균 거래량 계산
거래량기준 = ma(Volume, 평균거래량기간);
// ▶? 4. 진입 조건 + 시간 필터
If sTime >= 시작시간 and sTime <= 종료시간 Then
Begin
If rsiVal < rsiCut and macdHist < 0 and macdHist[1] > 0 and Volume > 거래량기준 * volumeMultiplier Then
Begin
매도조건 = true;
진입가 = Close;
// 목표가 / 손절가 계산
TP1 = 진입가 * tp1Ratio;
TP2 = 진입가 * tp2Ratio;
TP3 = 진입가 * tp3Ratio;
SL = 진입가 * slRatio;
박스상 = SL;
박스하 = TP3;
// ?? 손익비 박스 (TL 선 4개)
TL1 = TL_New(sDate, sTime, 박스상, sDate, sTime, 박스하);
TL2 = TL_New(sDate[1], sTime[1], 박스상, sDate[1], sTime[1], 박스하);
TL3 = TL_New(sDate[1], sTime[1], 박스상, sDate, sTime, 박스상);
TL4 = TL_New(sDate[1], sTime[1], 박스하, sDate, sTime, 박스하);
TL_SetColor(TL1, RGB(255, 200, 200)); TL_SetSize(TL1, 1);
TL_SetColor(TL2, RGB(255, 200, 200)); TL_SetSize(TL2, 1);
TL_SetColor(TL3, RGB(255, 200, 200)); TL_SetSize(TL3, 1);
TL_SetColor(TL4, RGB(255, 200, 200)); TL_SetSize(TL4, 1);
// ?? 텍스트 알림
텍스트ID = Text_New(Date, Time, High, "*진입조건만족");
Text_SetColor(텍스트ID, RGB(255, 0, 0));
End;
End;
// ▶? 5. 목표가 / 손절가 Plot 시각화
If 매도조건 Then
Begin
Plot1(TP1, "TP1", RGB(0, 150, 255));
Plot2(TP2, "TP2", RGB(0, 100, 200));
Plot3(TP3, "TP3", RGB(0, 50, 150));
Plot4(SL, "손절", RGB(255, 0, 0));
End;
2
Input : per(100), mult(3.0), 익절비율(1.01), 손절비율(0.995);
Var : upColor(Red), midColor(Green), downColor(Blue);
Var : src(0), filt(0), T(0), tx(0);
Var : wper(0), avrng(0), smrng(0);
Var : upward(0), downward(0), hband(0), lband(0), filtColor(0);
Var : 진입가(0), 박스ID(0), 텍스트ID(0), 거래량기준(0);
// 원본 데이터
src = Close;
// 필터 길이 및 스무딩
wper = per * 2 - 1;
avrng = EMA(AbsValue(src - src[1]), per);
smrng = EMA(avrng, wper) * mult;
// 필터 계산
filt = IFF(IsNaN(filt[1]) == true, src, filt[1]);
filt = IFF(src > filt,
IFF(src - smrng < filt, filt, src - smrng),
IFF(src + smrng > filt, filt, src + smrng));
// 방향 계산
upward = IFF(filt > filt[1],
IFF(IsNaN(upward[1]) == true, 0, upward[1]) + 1,
IFF(filt < filt[1], 0, IFF(IsNaN(upward[1]) == true, 0, upward[1])));
downward = IFF(filt < filt[1],
IFF(IsNaN(downward[1]) == true, 0, downward[1]) + 1,
IFF(filt > filt[1], 0, IFF(IsNaN(downward[1]) == true, 0, downward[1])));
// 상단/하단 밴드
hband = filt + smrng;
lband = filt - smrng;
// 색상
filtColor = IFF(upward > 0, upColor, IFF(downward > 0, downColor, midColor));
// 거래량 필터
거래량기준 = ma(Volume, 20);
// 차트 출력
plot1(filt, "Range Filter", filtColor);
plot2(hband, "High Band", upColor);
plot3(lband, "Low Band", downColor);
// 시그널 조건 + 거래량 필터
If v > 거래량기준 Then
Begin
If (src > filt and upward > 0) Then
T = 1;
Else If (src < filt and downward > 0) Then
T = -1;
Else
T = 0;
End
Else
T = 0;
// 시그널 발생 시 텍스트 및 박스 출력
If T == 1 and T[1] != 1 Then
Begin
tx = Text_New(Date, Time, Low, "▲");
Text_SetColor(tx, upColor);
Text_SetStyle(tx, 2, 0);
진입가 = Close;
박스ID = Box_New(Date, Time, 진입가 * 익절비율, Date, Time + 10, 진입가 * 손절비율);
Box_SetColor(박스ID, upColor);
Box_SetFill(박스ID, true);
var1 = Index;
End
Else If T == -1 and T[1] != -1 Then
Begin
tx = Text_New(Date, Time, High, "▼");
Text_SetColor(tx, downColor);
Text_SetStyle(tx, 2, 0);
진입가 = Close;
박스ID = Box_New(Date, Time, 진입가 * 손절비율, Date, Time + 10, 진입가 * 익절비율);
Box_SetColor(박스ID, downColor);
Box_SetFill(박스ID, true);
var1 = Index;
End
Else
Begin
if T == 1 and Index < var1+10 Then
Box_SetEnd(박스ID,sDate,sTime,진입가 * 손절비율);
if T == -1 and Index < var1+10 Then
Box_SetEnd(박스ID,sDate,sTime,진입가 * 익절비율);
End;
3-1 사용자함수
함수명 : cross
반환값형 : 논리형
input : A(Numeric),B(Numeric);
Cross = (A > B and A[1] <= B[1]) or (A < B and A[1] >= B[1]);
3-2
// ============ 변수 선언 ============
VAR: VALUE1(0), VALUE2(0), VALUE3(0),
VALUE4(0), VALUE5(0), VALUE6(0), VALUE7(0),
VAR13(0), VAR14(0), VAR15(0), VAR16(0);
// ============ 체결강도 계산 ============
VALUE1 = 0;
VALUE2 = 0;
If C > C[1] Then
VALUE1 = V;
Else If C < C[1] Then
VALUE2 = V;
VALUE3 = ACCUM(VALUE1 - VALUE2); // 체결강도 누적
// 이동평균선 기준선
VAR13 = EMA(VALUE3, 10);
VAR14 = EMA(VALUE3, 20);
VAR15 = EMA(VALUE3, 64);
VAR16 = EMA(VALUE3, 128);
// 교차 발생 시 시가 저장
If Cross(VALUE3, VAR13) Then VALUE4 = C;
If Cross(VALUE3, VAR14) Then VALUE5 = C;
If Cross(VALUE3, VAR15) Then VALUE6 = C;
If Cross(VALUE3, VAR16) Then VALUE7 = C;
// ============ 시각화 ============
Plot12(VALUE4, "OI_10", Yellow);
Plot13(VALUE5, "OI_20", Cyan);
Plot14(VALUE6, "OI_64", Green);
Plot15(VALUE7, "OI_128", Red);
4
VALUE1 = 0;
VALUE2 = 0;
If C > C[1] Then
VALUE1 = V; // 매수 체결로 간주
Else If C < C[1] Then
VALUE2 = V; // 매도 체결로 간주
VALUE3 = ACCUM(VALUE1 - VALUE2); // 체결강도 누적 (순매수량)
// 기준선(평균선)
VAR13 = EMA(VALUE3, 10);
VAR14 = EMA(VALUE3, 20);
VAR15 = EMA(VALUE3, 64);
VAR16 = EMA(VALUE3, 128);
// 교차 시가 출력
If Cross(VALUE3, VAR13) Then VALUE4 = C;
If Cross(VALUE3, VAR14) Then VALUE5 = C;
If Cross(VALUE3, VAR15) Then VALUE6 = C;
If Cross(VALUE3, VAR16) Then VALUE7 = C;
즐거운 하루되세요
> 윤호석 님이 쓴 글입니다.
> 제목 : 부탁드립니다 항상 감사합니다
> // ? RSI + MACD 숏 + 다중 목표가 TP3 + 손익비 박스 + 거래량 급증 + 텍스트 + 시간 제한
Input:
rsiLen(14), rsiCut(50),
macdFastLen(12), macdSlowLen(26), macdSignalLen(9),
tp1Ratio(0.995), tp2Ratio(0.990), tp3Ratio(0.985), slRatio(1.01),
volumeMultiplier(2.0), 평균거래량기간(20),
시작시간(93000), 종료시간(150000);
Var:
rsiVal(0), macdFastEMA(0), macdSlowEMA(0),
macdMain(0), macdSignal(0), macdHist(0),
진입가(0), TP1(0), TP2(0), TP3(0), SL(0),
거래량기준(0), 텍스트ID(0),
TL1(0), TL2(0), TL3(0), TL4(0),
박스상(0), 박스하(0),
매도조건(false);
// ▶? 1. RSI 계산
rsiVal = RSI(rsiLen);
// ▶? 2. MACD 수동 계산 (Index 기준 초기화 제거)
If CurrentBar = 1 Then
Begin
macdFastEMA = Close;
macdSlowEMA = Close;
macdMain = 0;
macdSignal = 0;
macdHist = 0;
End
Else
Begin
macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1)));
macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1)));
macdMain = macdFastEMA - macdSlowEMA;
macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1)));
macdHist = macdMain - macdSignal;
End;
// ▶? 3. 평균 거래량 계산
거래량기준 = Average(Volume, 평균거래량기간);
// ▶? 4. 진입 조건 + 시간 필터
If Time >= 시작시간 and Time <= 종료시간 Then
Begin
If rsiVal < rsiCut and macdHist < 0 and macdHist[1] > 0 and Volume > 거래량기준 * volumeMultiplier Then
Begin
매도조건 = true;
진입가 = Close;
// 목표가 / 손절가 계산
TP1 = 진입가 * tp1Ratio;
TP2 = 진입가 * tp2Ratio;
TP3 = 진입가 * tp3Ratio;
SL = 진입가 * slRatio;
박스상 = SL;
박스하 = TP3;
// ?? 손익비 박스 (TL 선 4개)
TL1 = TL_New(Date, Time, 박스상, Date, Time, 박스하);
TL2 = TL_New(Date[1], Time[1], 박스상, Date[1], Time[1], 박스하);
TL3 = TL_New(Date[1], Time[1], 박스상, Date, Time, 박스상);
TL4 = TL_New(Date[1], Time[1], 박스하, Date, Time, 박스하);
TL_SetColor(TL1, RGB(255, 200, 200)); TL_SetSize(TL1, 1);
TL_SetColor(TL2, RGB(255, 200, 200)); TL_SetSize(TL2, 1);
TL_SetColor(TL3, RGB(255, 200, 200)); TL_SetSize(TL3, 1);
TL_SetColor(TL4, RGB(255, 200, 200)); TL_SetSize(TL4, 1);
// ?? 텍스트 알림
텍스트ID = Text_New(Date, Time, High, "*진입조건만족");
Text_SetColor(텍스트ID, RGB(255, 0, 0));
End;
End;
// ▶? 5. 목표가 / 손절가 Plot 시각화
If 매도조건 Then
Begin
Plot1(TP1, "TP1"); SetPlotColor(1, RGB(0, 150, 255));
Plot2(TP2, "TP2"); SetPlotColor(2, RGB(0, 100, 200));
Plot3(TP3, "TP3"); SetPlotColor(3, RGB(0, 50, 150));
Plot4(SL, "손절"); SetPlotColor(4, RGB(255, 0, 0));
End;
2.
Input : per(100), mult(3.0), 익절비율(1.01), 손절비율(0.995);
Var : upColor(Red), midColor(Green), downColor(Blue);
Var : src(0), filt(0), T(0), tx(0);
Var : wper(0), avrng(0), smrng(0);
Var : upward(0), downward(0), hband(0), lband(0), filtColor(0);
Var : 진입가(0), 박스ID(0), 텍스트ID(0), 거래량기준(0);
// 원본 데이터
src = Close;
// 필터 길이 및 스무딩
wper = per * 2 - 1;
avrng = EMA(AbsValue(src - src[1]), per);
smrng = EMA(avrng, wper) * mult;
// 필터 계산
filt = IFF(IsNaN(filt[1]) == true, src, filt[1]);
filt = IFF(src > filt,
IFF(src - smrng < filt, filt, src - smrng),
IFF(src + smrng > filt, filt, src + smrng));
// 방향 계산
upward = IFF(filt > filt[1],
IFF(IsNaN(upward[1]) == true, 0, upward[1]) + 1,
IFF(filt < filt[1], 0, IFF(IsNaN(upward[1]) == true, 0, upward[1])));
downward = IFF(filt < filt[1],
IFF(IsNaN(downward[1]) == true, 0, downward[1]) + 1,
IFF(filt > filt[1], 0, IFF(IsNaN(downward[1]) == true, 0, downward[1])));
// 상단/하단 밴드
hband = filt + smrng;
lband = filt - smrng;
// 색상
filtColor = IFF(upward > 0, upColor, IFF(downward > 0, downColor, midColor));
// 거래량 필터
거래량기준 = Average(Volume, 20);
// 차트 출력
Plot1(filt, "Range Filter", filtColor);
Plot2(hband, "High Band", upColor);
Plot3(lband, "Low Band", downColor);
// 시그널 조건 + 거래량 필터
If 거래량 > 거래량기준 Then
Begin
If (src > filt and upward > 0) Then
T = 1;
Else If (src < filt and downward > 0) Then
T = -1;
Else
T = 0;
End
Else
T = 0;
// 시그널 발생 시 텍스트 및 박스 출력
If T == 1 and T[1] != 1 Then
Begin
tx = Text_New(Date, Time, Low, "▲");
Text_SetColor(tx, upColor);
Text_SetStyle(tx, 2, 0);
진입가 = Close;
박스ID = Box_New(Date, Time, 진입가 * 익절비율, Date, Time + 10, 진입가 * 손절비율);
Box_SetColor(박스ID, upColor);
Box_SetBGColor(박스ID, RGB(255, 0, 0, 50)); // 투명도 50
End;
If T == -1 and T[1] != -1 Then
Begin
tx = Text_New(Date, Time, High, "▼");
Text_SetColor(tx, downColor);
Text_SetStyle(tx, 2, 0);
진입가 = Close;
박스ID = Box_New(Date, Time, 진입가 * 손절비율, Date, Time + 10, 진입가 * 익절비율);
Box_SetColor(박스ID, downColor);
Box_SetBGColor(박스ID, RGB(0, 0, 255, 50));
End;
3.// ============ 교차 함수 정의 ============
Function Cross(A, B)
Begin
Cross = (A > B and A[1] <= B[1]) or (A < B and A[1] >= B[1]);
End;
// ============ 변수 선언 ============
VAR: VALUE1(0), VALUE2(0), VALUE3(0),
VALUE4(0), VALUE5(0), VALUE6(0), VALUE7(0),
VAR13(0), VAR14(0), VAR15(0), VAR16(0);
// ============ 체결강도 계산 ============
VALUE1 = 0;
VALUE2 = 0;
If C > C[1] Then
VALUE1 = V;
Else If C < C[1] Then
VALUE2 = V;
VALUE3 = ACCUM(VALUE1 - VALUE2); // 체결강도 누적
// 이동평균선 기준선
VAR13 = EMA(VALUE3, 10);
VAR14 = EMA(VALUE3, 20);
VAR15 = EMA(VALUE3, 64);
VAR16 = EMA(VALUE3, 128);
// 교차 발생 시 시가 저장
If Cross(VALUE3, VAR13) Then VALUE4 = C;
If Cross(VALUE3, VAR14) Then VALUE5 = C;
If Cross(VALUE3, VAR15) Then VALUE6 = C;
If Cross(VALUE3, VAR16) Then VALUE7 = C;
// ============ 시각화 ============
Plot12(VALUE4, "OI_10", Yellow);
Plot13(VALUE5, "OI_20", Cyan);
Plot14(VALUE6, "OI_64", Green);
Plot15(VALUE7, "OI_128", Red);
4. // 체결강도 구분 초기화
VALUE1 = 0;
VALUE2 = 0;
If C > C[1] Then
VALUE1 = V; // 매수 체결로 간주
Else If C < C[1] Then
VALUE2 = V; // 매도 체결로 간주
VALUE3 = ACCUM(VALUE1 - VALUE2); // 체결강도 누적 (순매수량)
// 기준선(평균선)
VAR13 = EMA(VALUE3, 10);
VAR14 = EMA(VALUE3, 20);
VAR15 = EMA(VALUE3, 64);
VAR16 = EMA(VALUE3, 128);
// 교차 시가 출력
If Cross(VALUE3, VAR13) Then VALUE4 = C;
If Cross(VALUE3, VAR14) Then VALUE5 = C;
If Cross(VALUE3, VAR15) Then VALUE6 = C;
If Cross(VALUE3, VAR16) Then VALUE7 = C;
오류가계속나서요 예스트레이더에 구현될수있게 수정부탁드립니다 항상 수고많으십니다