답변완료
수식질문드립니다.
수고많으십니다. 아래는 1분봉으로 쓰고있는 전고전저돌파매매수식입니다
A. 그림1을 보시면
매수는 전고점을 돌파후 진입하며, 청산지점을 차액지점(전고-전저)위치에 청산지점으로 잡았습니다. (봉완성후의 진입가는 보다 위의 가격일수있으므로 전고점으로부터의 상승한
차액지점을 청산지점으로 함)
그리고, 그림처럼 다음 전고점이 나오더라도 포지션 진입한 시점과의 상승차액지점을 청산지점으로 잡을수 있도록 부탁드립니다.
매도는 반대입니다. 그리고 전고 전저 꼭지점에 가격표시도 부탁드립니다.
B. 국내선물 개장시간 9:00 이후 발생한 전저와 전고돌파에 한해서 A수식 부탁드립니다.
그러니까 전일 고가(저가)가 아니라 금일 9:00부터 신규 발생한 고가(저가)를 돌파할때 부터 적용되게한다는 얘기지요. 장초반에 전일 전고(전저)점 돌파 진입을 막기 위함입니다.
그림2 참조부탁합니다
=====================================================================================
Input:barCnt(5);
Var:j(0),turnPntBit(""),TL1(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 9 {
barArr[j] = barArr[j] + 1;
}
// 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다
// 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다
Condition1 = Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt);
Condition2 = Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt);
// 전환점구분 null값으로 초기화;
// if 고점조건, 저점조건 동시 만족시 then
// if 이전 고점,저점 범위를 모두 벗어났을 때
// 전환점구분 = 고저점;
// else if 이전 고점을 갱신했다면 전환점구분 = 고점;
// else if 이전 저점을 갱신했다면 전환점구분 = 저점;
// else if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점;
// else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점;
// else if 고점조건 만족하면 전환점구분 = 고점;
// else if 저점조건 만족하면 전환전구분 = 저점;
turnPntBit = "";
If Condition1 and Condition2 Then {
If Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt] Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H[barCnt] Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Hi" Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
// if 전환점구분에 값이 있을 때만 아래 실행, 없으면 통과
If turnPntBit <> "" Then
{
// if 전환점구분이 고저점이면 then
// 이전 파동은 연장시키고 아래에서 새로이 파동선을 추가토록 한다.
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
// if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then
// 배열값들을 이전값으로 Move;
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H[barCnt]) or
(turnPntBit == "Lo" and valArr[1] > L[barCnt]))) Then {
// 값 배열에는 고점 또는 저점을 대입;
// 봉개수 배열에는 입력변수의 봉개수 대입;
// 전환점 배열에 전환점구분값을 대입;
valArr[1] = IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
turnPntArr[1] = turnPntBit;
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],
sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
TL_SetSize(TL1,2);
TL_SetColor(TL1,GREEN);
var : TL11(0),TL12(0);
if turnPntArr[1][0] == "Hi" Then{
TL_Delete(TL11);
TL11 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetExtRight(TL11,true);
TL_SetColor(TL11,YELLOW);
TL_SetSize(TL11,2);
}
if turnPntArr[1][0] == "Lo" Then{
TL_Delete(TL12);
TL12 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetExtRight(TL12,true);
TL_SetColor(TL12,CYAN);
TL_SetSize(TL12,2);
}
if turnPntArr[1] == "Lo" and crossup(C,valArr[2]) and stime >= 090000 and stime < 150000 Then
buy();
if turnPntArr[1] == "Hi" and CrossDown(C,valArr[2]) and stime >= 090000 and stime < 150000 Then
sell();
if stime == 150000 or (stime > 150000 and stime[1] < 150000) Then
{
exitlong();
ExitShort();
}
2020-08-11
1084
글번호 141387
시스템
답변완료
개장 후 첫번째 봉에서 진입
안녕하세요 ^^
예전에 코딩하다가 너무 어려워서 포기할까 하다가 ,,, 다시 돌아왔습니다,
처음부터 다시 해보려고 합니다 ^^
# ENTRY
IF H < LTR THEN BUY("L",ATSTOP,LTR);
# EXIT
IF MARKETPOSITION == 1 and NextBarSdate != sdate then
exitlong("EL",ATMARKET);
상기 수식을 입력할 경우 개장 후 첫번째 봉에서 진입 시그널이 발생하지 않습니다.
어떻게 수정해야 될까요?
2020-08-11
837
글번호 141386
시스템