커뮤니티
2차파동
2017-12-10 20:30:05
294
글번호 114867
아래는 bestkim님의 문의에서 따온 코드입니다. 프로그램이 일목요연해서 사용하고 있습니다.
다만 한 가지 덧 붙이고 싶은 것이 있습니다.
이 코드에서 나오는 파동의 고저를 이용하여 2차로 다시 고저를 찾아서 추세선을 긋는 2차파동선을 그리는 코드를 부탁드립니다. 그림을 첨부합니다. 그림에서 붉은 추세선이 2차 파동이고 제가 수작업으로 그려넣은 것인데 이것을 자동으로 그리는 코드를 부탁합니다. (참고로 검은 파동선은 아래 코드로 만들어진 것입니다.) 2차 파동을 자세히 보시면 붉은 선이 안보이는 부분, 즉 검은선과 일치하는 부분이 있습니다. 이 경우는 1차 파동이 바로 2차 파동이 되는 경우로 정의해야 할 것 같습니다.
그리고 한 가지 표현 방식의 문제인데... 1차 파동과 2차 파동을 각각 표시하거나 표시하지 않는 옵션을 넣어 주시면 감사하겠습니다. 1차와 2차를 같이 보거나 1차만 보거나 2차만 보거나 할 수 있는 기능 말입니다.
#bestkim
Input:length(5),종가사용여부(0),파동선두께(1),수치표시(0);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
PlaySound("F:₩예스트레이더소리₩띠웅.wav");
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,black);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,black);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
PlaySound("F:₩예스트레이더소리₩띠웅.wav");
Text_SetStyle(Text1, 2, 0);
Text_SetColor(Text1,black);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,black);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
- 1. 파동2차.PNG (0.08 MB)
답변 1
예스스탁 예스스탁 답변
2017-12-11 16:43:17
안녕하세요
예스스탁입니다.
올려주신 내용은 식작성에 시간이 많이 소모되는 내용입니다
업무상 식작성에 많은 시간이 소모되는 내용은 작성해 드리기 어렵습니다.
도움을 드리지 못해 죄송합니다.
즐거운 하루되세요
> 솔잎22 님이 쓴 글입니다.
> 제목 : 2차파동
> 아래는 bestkim님의 문의에서 따온 코드입니다. 프로그램이 일목요연해서 사용하고 있습니다.
다만 한 가지 덧 붙이고 싶은 것이 있습니다.
이 코드에서 나오는 파동의 고저를 이용하여 2차로 다시 고저를 찾아서 추세선을 긋는 2차파동선을 그리는 코드를 부탁드립니다. 그림을 첨부합니다. 그림에서 붉은 추세선이 2차 파동이고 제가 수작업으로 그려넣은 것인데 이것을 자동으로 그리는 코드를 부탁합니다. (참고로 검은 파동선은 아래 코드로 만들어진 것입니다.) 2차 파동을 자세히 보시면 붉은 선이 안보이는 부분, 즉 검은선과 일치하는 부분이 있습니다. 이 경우는 1차 파동이 바로 2차 파동이 되는 경우로 정의해야 할 것 같습니다.
그리고 한 가지 표현 방식의 문제인데... 1차 파동과 2차 파동을 각각 표시하거나 표시하지 않는 옵션을 넣어 주시면 감사하겠습니다. 1차와 2차를 같이 보거나 1차만 보거나 2차만 보거나 할 수 있는 기능 말입니다.
#bestkim
Input:length(5),종가사용여부(0),파동선두께(1),수치표시(0);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
PlaySound("F:₩예스트레이더소리₩띠웅.wav");
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,black);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,black);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
PlaySound("F:₩예스트레이더소리₩띠웅.wav");
Text_SetStyle(Text1, 2, 0);
Text_SetColor(Text1,black);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,black);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
다음글
이전글