커뮤니티
질문 드립니다.
2024-09-19 21:10:39
679
글번호 183543
//매수 : 상승추세 전환(고가가 전고점 돌파) 후 2번의 되돌림 후 전고점(스윙고점) 상향돌파 시
//매수청산 : 전저점 하향이탈 시
//매도 : 하락추세 전환(저가가 전저점 돌파) 후 2번의 되돌림 후 전저점(스윙저점) 하향이탈 시
//매도청산 : 전고점 상향돌파 시
input:swingPeriod(5);
Var:신고가(False), 신저가(False), j(0),jj(0),최종꼭지점(""),추세구간(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
var : TL1(0);
var : HighStop(0), LowStop(0), TrendV(0);
# 추세 판정
신고가 = Highest(H,swingPeriod) == H ;
신저가 = Lowest (L,swingPeriod) == L ;
If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생
If 최종꼭지점 == "저점" Then {
If 저[1,1] > L Then
추세구간 = -1;
Else
추세구간 = 1;
}
Else If 최종꼭지점 == "고점" Then {
If 고[1,1] < H Then
추세구간 = 1;
Else
추세구간 = -1;
}
}
Else If 신고가 == True Then //신고가 발생
추세구간 = 1;
Else If 신저가 == True Then //신저가 발생
추세구간 = -1;
# 상승추세 구간
If 추세구간 == 1 Then {
If 최종꼭지점 == "저점" Then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 고[1,1] < H Then { // 1번 고점보다 높은 고가 출현
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
최종꼭지점 = "고점";
}
# 하락추세 구간
If 추세구간 == -1 Then {
If 최종꼭지점 == "고점" then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 저[1,1] > L then {
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
최종꼭지점 = "저점";
}
# 직전 스윙고가, 스윙저가
if 추세구간 == 1 Then
HighStop = 고[2,1];
Else
HighStop = 고[1,1];
if 추세구간 == -1 Then
LowStop = 저[2,1];
Else
LowStop = 저[1,1];
if H >= HighStop Then
TrendV = 1;
if L <= LowStop Then
TrendV = -1;
# 매매식
var : retraceScnt(0), retraceBcnt(0);
if TrendV == 1 Then {
retraceScnt = 0;
if 추세구간[1] == 1 and 추세구간 == -1 Then
retraceBcnt = retraceBcnt + 1;
}
if TrendV == -1 Then {
retraceBcnt = 0;
if 추세구간[1] == -1 and 추세구간 == 1 Then
retraceScnt = retraceScnt + 1;
}
if retraceBcnt == 2 and C>HighStop Then
Buy("B", AtMarket);
if MarketPosition == 1 and C<Lowstop Then
ExitLong("EL", AtMarket);
if retraceScnt == 2 and C<Lowstop Then
Sell("S", AtMarket);
if MarketPosition == -1 and C>HighStop Then
ExitShort("ES", AtMarket);
위의 식을 활용하되 data2에 적용시켜 마켓타이밍을 결정하여
메인 종목을 매수,매도하고 싶은데
식을 만들 수 있을까요?
항상 감사드립니다.
답변 1
예스스탁 예스스탁 답변
2024-09-20 15:11:49
안녕하세요
예스스탁입니다.
data2의 추세선은 별도 지표로 적용해 보셔야 합니다.
2번식은 지표식입니다.
1.
input:swingPeriod(5);
Var:신고가(False,Data2), 신저가(False,Data2), j(0,Data2),jj(0,Data2),최종꼭지점("",Data2),추세구간(0,Data2);
Array:고[10,4](0,Data2),저[10,4](0,Data2); // 1:가격,2:Index,3:sDate,4:sTime
var : TL1(0,Data2);
var : HighStop(0,Data2), LowStop(0,Data2), TrendV(0,Data2);
# 추세 판정
신고가 = data2(Highest(H,swingPeriod) == H);
신저가 = data2(Lowest (L,swingPeriod) == L);
If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생
If 최종꼭지점 == "저점" Then {
If 저[1,1] > data2(L) Then
추세구간 = -1;
Else
추세구간 = 1;
}
Else If 최종꼭지점 == "고점" Then {
If 고[1,1] < data2(H) Then
추세구간 = 1;
Else
추세구간 = -1;
}
}
Else If 신고가 == True Then //신고가 발생
추세구간 = 1;
Else If 신저가 == True Then //신저가 발생
추세구간 = -1;
# 상승추세 구간
If 추세구간 == 1 Then {
If 최종꼭지점 == "저점" Then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = data2(H);
고[1,2] = data2(Index);
고[1,3] = data2(sDate);
고[1,4] = data2(sTime);
}
Else If 고[1,1] < data2(H) Then { // 1번 고점보다 높은 고가 출현
고[1,1] = data2(H);
고[1,2] = data2(Index);
고[1,3] = data2(sDate);
고[1,4] = data2(sTime);
}
최종꼭지점 = "고점";
}
# 하락추세 구간
If 추세구간 == -1 Then {
If 최종꼭지점 == "고점" then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = data2(L);
저[1,2] = data2(Index);
저[1,3] = data2(sDate);
저[1,4] = data2(sTime);
}
Else If 저[1,1] > data2(L) then {
저[1,1] = data2(L);
저[1,2] = data2(Index);
저[1,3] = data2(sDate);
저[1,4] = data2(sTime);
}
최종꼭지점 = "저점";
}
# 직전 스윙고가, 스윙저가
if 추세구간 == 1 Then
HighStop = 고[2,1];
Else
HighStop = 고[1,1];
if 추세구간 == -1 Then
LowStop = 저[2,1];
Else
LowStop = 저[1,1];
if data2(H) >= HighStop Then
TrendV = 1;
if data2(L) <= LowStop Then
TrendV = -1;
# 매매식
var : retraceScnt(0), retraceBcnt(0);
if TrendV == 1 Then {
retraceScnt = 0;
if 추세구간[1] == 1 and 추세구간 == -1 Then
retraceBcnt = retraceBcnt + 1;
}
if TrendV == -1 Then {
retraceBcnt = 0;
if 추세구간[1] == -1 and 추세구간 == 1 Then
retraceScnt = retraceScnt + 1;
}
if retraceBcnt == 2 and data2(C)>HighStop Then
Buy("B", AtMarket);
if MarketPosition == 1 and data2(C)<Lowstop Then
ExitLong("EL", AtMarket);
if retraceScnt == 2 and data2(C)<Lowstop Then
Sell("S", AtMarket);
if MarketPosition == -1 and data2(C)>HighStop Then
ExitShort("ES", AtMarket);
2.
input:swingPeriod(5);
Var:신고가(False,Data2), 신저가(False,Data2), j(0,Data2),jj(0,Data2),최종꼭지점("",Data2),추세구간(0,Data2);
Array:고[10,4](0,Data2),저[10,4](0,Data2); // 1:가격,2:Index,3:sDate,4:sTime
var : TL1(0,Data2);
var : HighStop(0,Data2), LowStop(0,Data2), TrendV(0,Data2);
# 추세 판정
신고가 = data2(Highest(H,swingPeriod) == H);
신저가 = data2(Lowest (L,swingPeriod) == L);
If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생
If 최종꼭지점 == "저점" Then {
If 저[1,1] > data2(L) Then
추세구간 = -1;
Else
추세구간 = 1;
}
Else If 최종꼭지점 == "고점" Then {
If 고[1,1] < data2(H) Then
추세구간 = 1;
Else
추세구간 = -1;
}
}
Else If 신고가 == True Then //신고가 발생
추세구간 = 1;
Else If 신저가 == True Then //신저가 발생
추세구간 = -1;
# 상승추세 구간
If 추세구간 == 1 Then {
If 최종꼭지점 == "저점" Then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = data2(H);
고[1,2] = data2(Index);
고[1,3] = data2(sDate);
고[1,4] = data2(sTime);
TL1 = TL_New_Self(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 고[1,1] < data2(H) Then { // 1번 고점보다 높은 고가 출현
고[1,1] = data2(H);
고[1,2] = data2(Index);
고[1,3] = data2(sDate);
고[1,4] = data2(sTime);
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
최종꼭지점 = "고점";
}
# 하락추세 구간
If 추세구간 == -1 Then {
If 최종꼭지점 == "고점" then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = data2(L);
저[1,2] = data2(Index);
저[1,3] = data2(sDate);
저[1,4] = data2(sTime);
TL1 = TL_New_Self(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 저[1,1] > data2(L) then {
저[1,1] = data2(L);
저[1,2] = data2(Index);
저[1,3] = data2(sDate);
저[1,4] = data2(sTime);
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
최종꼭지점 = "저점";
}
# 직전 스윙고가, 스윙저가
if 추세구간 == 1 Then
HighStop = 고[2,1];
Else
HighStop = 고[1,1];
if 추세구간 == -1 Then
LowStop = 저[2,1];
Else
LowStop = 저[1,1];
if H >= HighStop Then
TrendV = 1;
if L <= LowStop Then
TrendV = -1;
# 매매식
var : retraceScnt(0), retraceBcnt(0);
if TrendV == 1 Then {
retraceScnt = 0;
if 추세구간[1] == 1 and 추세구간 == -1 Then
retraceBcnt = retraceBcnt + 1;
}
if TrendV == -1 Then {
retraceBcnt = 0;
if 추세구간[1] == -1 and 추세구간 == 1 Then
retraceScnt = retraceScnt + 1;
}
Plot1(Data2(c));
즐거운 하루되세요