예스스탁
예스스탁 답변
2021-12-28 15:06:47
안녕하세요
예스스탁입니다.
수정한 식입니다.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),Text1(0),처리구분(""),TL_Val1(0),TL_Val2(0),color(0);
var:T(0),B(0),Bx(0),S(0),Sx(0);
Array:고점[10,2](0),저점[10,2](0);
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
T = 1;
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 고점[3,1][1] < 고점[2,1][1] and 고점[2,1][1] > 고점[1,1][1] and 저점[2,1][1] < 저점[1,1][1] Then
TL_Delete(TL2);
}
if 고점[1,1] > 고점[2,1] or 고점[2,1] == 0 Then{
color = RED;
# buy("b");
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetColor(TL1,color);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
}
}
}
If 처리구분 == "저점처리" Then
{
T = -1;
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 저점[2,1][1] < 저점[1,1][1] and 저점[2,1][1] < 저점[3,1][1] and 고점[2,1][1] > 고점[1,1][1] Then
TL_Delete(TL3);
}
if 저점[1,1] < 저점[2,1] or 저점[2,1] == 0 Then{
color = blue;
# sell("s");
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetColor(TL1,color);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
}
}
}
TL_SetSize(TL1,3);
#상승구간의 마지막저점 저장
if Color == RED Then
{
var1 = 저점[2,1];
}
#하락구간의 마지막 고점 저장
if Color == BLUE Then
{
var2 = 고점[2,1];
}
if MarketPosition <= 0 Then
{
if color == BLUE and var1 > 0 Then
Buy("b",AtLimit,var1-PriceScale*50);
}
if MarketPosition == 1 Then
{
if T == -1 and 고점[1,1] > 0 Then
ExitLong("bx1",AtLimit,고점[1,1]+PriceScale*1);
if T == 1 and 고점[2,1] > 0 Then
ExitLong("bx2",AtLimit,고점[2,1]+PriceScale*1);
}
if MarketPosition >= 0 Then
{
if Color == RED and Var2 > 0 Then
Sell("s",AtLimit,Var2+PriceScale*50);
}
if MarketPosition == -1 Then
{
if T == 1 and 저점[1,1] > 0 Then
ExitShort("sx1",AtLimit,저점[1,1]-PriceScale*1);
if T == -1 and 저점[2,1] > 0 Then
ExitShort("sx2",AtLimit,저점[2,1]-PriceScale*1);
}
새해 복 많이 받으세요
> 번성 님이 쓴 글입니다.
> 제목 : Re : Re : 문의드립니다
> 답변 감사합니다.
제 생각이 조금 못 미쳤습니다.
상승추세에서 하락추세 전환 말씀드린 부분과, 하락추세에서 상승추세 전환 말씀드린 부분을 제가 잘못 설명드린 것같습니다.
저는 추세선 하나 하나를 말씀드리려는 것이 아니고,
상승추세 전체(빨강색)에서 하락추세(파랑색)로 전환과 하락추세 전체(파랑색)에서 상승추세(빨강색)로의 전환을 말씀드리려는 것이 었습니다.
이 때의 상승추세(빨강)의 마지막 저점을 깨고 내려갈 때의 저점을 전저점이라 하고, 하락추세(파랑)의 마지막 고점을 깨고 올라갈 때의 고점을 전고점이라 말씀드린 것입니다.
이 점을 수정해주면 좋겠습니다.
수고하세요.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다
> 안녕하세요
예스스탁입니다.
1
변경하고자 하시는 내용이 올리신 수식과 어떤 부분이 다른지 모르겠습니다.
해당 수식이 아래의 내용으로 작성된 식입니다.
최근 상승추세의 시작값(저점값) 대비 -50틱이상 하락하면 매수진입
최근 하락추세의 시작값(고점값) 대비 +1틱이상 상승하면 매수포지션 청산
최근 하락추세의 시작값(고점값) 대비 +50틱이상 상승하면 매도진입
최근 상승추세의 시작값(저점값) 대비 -1틱이상 하락하면 매도포지션 청산
2
랭귀지안에서 시장가나 지정가 지정이 되지 않습니다.
수식은 신호가 발생하는 조건을 지정하고 실제 주문가격은
시스템 트레이딩 설정창의 매매가격에서 지정한가격으로 주문이 집행됩니다.
3
좀더 자세한 내용을 올려주시기 바랍니다.
즐거운 하루되세요
> 번성 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 많은 도움을 주시니 감사 드립니다.
아래 시스템에서지금의 매수매도 방법은
매수는 상승추세선의 전저점을 하락추세 캔들이 깨고 내려갈 때 곧 전저점 지수 -1틱에 즉시 시장가 청산하고,
역방향 매수진입은 계속되는 하락추세 중에서 이전 전저점 지수 대비 -50틱 이상 하락추세가 나온 경우 지정가 매수진입하였습니다.
매도는 하락추세선의 전고점을 상승추세 캔들이 깨고 올라갈 때 곧 전고점 지수 +1틱에 즉시 시장가 청산하고,
역방향 매도진입은 계속되는 상승추세 중에서 이전 전고점 지수 대비 +50틱 이상 상승추세가 나온 경우 지정가 매도진입하였습니다.
이것을 아래와 같은 방식으로 수정 부탁드립니다.
먼저
역방향 매수진입은
상승추세선을 하락추세선이 깨고 내려갈 때 곧 상승추세선 또는 계속되는 상승추세선의 마지막 전저점을 기준하여 -50틱에 지정가 매수합니다.
역방향 매도진입은
하락추세선을 상승추세선이 깨고 올라갈 때 곧 하락추세선 또는 계속되는 하락추세선의 마지막 전고점을 기준하여 +50틱에 지정가 매도합니다.
다음
매수진입 물량의 청산은
하락추세선을 상승추세선이 깨고 올라갈 때 곧 하락추세선 또는 계속되는 하락추세선의 마지막 전고점을 캔들이 추세를 깨고 올라갈 때 곧 마지막 전고점 지수 +1틱에 시장가 청산한다.
매도진입 물량의 청산은
상승추세선을 하락추세선이 깨고 내려갈 때 곧 상승추세선 또는 계속되는 상승추세선의 마지막 전저점을 캔들이 추세를 깨고 내려갈 때 곧 마지막 전고점 지수 -1틱에 시장가 청산한다.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),Text1(0),처리구분(""),TL_Val1(0),TL_Val2(0),color(0);
var:T(0),B(0),Bx(0),S(0),Sx(0);
Array:고점[10,2](0),저점[10,2](0);
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
T = 1;
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 고점[3,1][1] < 고점[2,1][1] and 고점[2,1][1] > 고점[1,1][1] and 저점[2,1][1] < 저점[1,1][1] Then
TL_Delete(TL2);
}
if 고점[1,1] > 고점[2,1] or 고점[2,1] == 0 Then{
color = RED;
# buy("b");
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetColor(TL1,color);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
}
}
}
If 처리구분 == "저점처리" Then
{
T = -1;
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 저점[2,1][1] < 저점[1,1][1] and 저점[2,1][1] < 저점[3,1][1] and 고점[2,1][1] > 고점[1,1][1] Then
TL_Delete(TL3);
}
if 저점[1,1] < 저점[2,1] or 저점[2,1] == 0 Then{
color = blue;
# sell("s");
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetColor(TL1,color);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
}
}
}
TL_SetSize(TL1,3);
#상승추세선의 전저점
if T == 1 Then
var1 = 저점[1,1];
#하락추세선의 전고점
if T == -1 Then
var2 = 고점[1,1];
if MarketPosition <= 0 Then
{
#최근 상승추세선의 전저점에서 50틱 하락하면 매수진입
if var1 > 0 Then
Buy("b",AtLimit,var1-PriceScale*50);
}
if MarketPosition == 1 Then
{
#최근 하락추세선의 전고점에서 1틱 상승하면 매수포지션 청산
if Var2 > 0 Then
ExitLong("bx",AtLimit,Var2+PriceScale*1);
}
if MarketPosition >= 0 Then
{
#최근 하락추세선의 전고점에서 50틱 상승하면 매도진입
if Var2 > 0 Then
Sell("s",AtLimit,Var2+PriceScale*50);
}
if MarketPosition == -1 Then
{
#최근 상승추세선의 전저점에서 1틱 하락하면 매도포지션 청산
if var1 > 0 Then
ExitShort("sx",AtLimit,Sx-PriceScale*1);
}