예스스탁
예스스탁 답변
2024-03-07 10:06:07
안녕하세요
예스스탁입니다.
if sDate == 20240206 Then
MessageLog("%s",LatestEntryName(0));
수식에 위 내용을 추가해 디버깅해 보시면
신호의 이름이 두번째 봉에서 변경되는 것을 보실수 있습니다.
신호가 Onclose나 atmarket이면 봉완성시(다음봉시가수신)에 신호가 발생합니다.
단지 onclose는 완성봉 종가에 신호표시를 하고 신호가격도 왼성봉종가를 사용하고
atmarket은 다음봉시가에 신호표시를 하고 다읍봉시가를 신호가격으로 사용하는 차이만 있습니다.
그러므로 2개의 타입은 신호가 발생하면 그 다음봉부터 신호의 이름이 인지가 됩니다.
atstop이나 atlimit은 봉 미완성시에 중가에 신호가 발생하므로 해당봉 완성시에
이름인지가 가능합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
>
안녕하세요 아래 수식에 대해 질문이 있어 요청드립니다.
위의 그림을 보면
2024/02/06 09:01 분에 타점1 매수주문이 들어갔고,
2024/02/06 09:02 분에 타점 5%익절 매도주문이 들어갔습니다.
아래의 수식을 확인해보면
" 타점 5%익절" 해당하는 매도주문은 LatestEntryName(0) == "타점" 일 경우에만
주문이 나가는데 LatestEntryName(0) == "타점1" 인데도 매도주문이 나간 이유를
알고 싶습니다.
확인 부탁드리겠습니다.
---------------------------------------------------------------------
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
#----------------------------------------------------------
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
#매수-----------------------------------------------------------------------------
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
#매도-----------------------------------------------------------------------------
if (LatestEntryName(0) == "타점")Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor((베팅금)/타점)*0.4);
#매도-----------------------------------------------------------------------------
if((LatestEntryName(0) == "타점") ) Then
ExitLong("타점 20%익절",AtLimit,AvgEntryPrice*1.2,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절") and c <= P618 Then
ExitLong("타점 20%익절 P618청산",AtLimit,P618,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절 P618청산") and c <= P5 Then
ExitLong("타점 20%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.4);
#돌파매수-----------------------------------------------------------------------------
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" TheN
Buy("타점1",OnClosE,DeF,Floor((베팅금)/HH[1]*0.6));
아직 초보에게는 모르는게 너무 많이 있네요..ㅜ.ㅜ
저는 앞의 전고점을 넘었을때 바로 매수하기 위해서 onclose를 썼는데,
실제로 시스템상으로 그 다음봉부터 신호의 이름이 인지가 된기때문에
신호이름이 인지하기 전에 매도주문이 나갔기 때문에 이런문제가 발생하신다고
하시는게 맞는건가요????
그러면 앞의 전고점 돌파매수(타점1)에서 atstop이나 atlimits를 사용해야
문제가 해결될까요???
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
> 안녕하세요
예스스탁입니다.
if sDate == 20240206 Then
MessageLog("%s",LatestEntryName(0));
수식에 위 내용을 추가해 디버깅해 보시면
신호의 이름이 두번째 봉에서 변경되는 것을 보실수 있습니다.
신호가 Onclose나 atmarket이면 봉완성시(다음봉시가수신)에 신호가 발생합니다.
단지 onclose는 완성봉 종가에 신호표시를 하고 신호가격도 왼성봉종가를 사용하고
atmarket은 다음봉시가에 신호표시를 하고 다읍봉시가를 신호가격으로 사용하는 차이만 있습니다.
그러므로 2개의 타입은 신호가 발생하면 그 다음봉부터 신호의 이름이 인지가 됩니다.
atstop이나 atlimit은 봉 미완성시에 중가에 신호가 발생하므로 해당봉 완성시에
이름인지가 가능합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
>
안녕하세요 아래 수식에 대해 질문이 있어 요청드립니다.
위의 그림을 보면
2024/02/06 09:01 분에 타점1 매수주문이 들어갔고,
2024/02/06 09:02 분에 타점 5%익절 매도주문이 들어갔습니다.
아래의 수식을 확인해보면
" 타점 5%익절" 해당하는 매도주문은 LatestEntryName(0) == "타점" 일 경우에만
주문이 나가는데 LatestEntryName(0) == "타점1" 인데도 매도주문이 나간 이유를
알고 싶습니다.
확인 부탁드리겠습니다.
---------------------------------------------------------------------
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
#----------------------------------------------------------
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
#매수-----------------------------------------------------------------------------
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
#매도-----------------------------------------------------------------------------
if (LatestEntryName(0) == "타점")Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor((베팅금)/타점)*0.4);
#매도-----------------------------------------------------------------------------
if((LatestEntryName(0) == "타점") ) Then
ExitLong("타점 20%익절",AtLimit,AvgEntryPrice*1.2,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절") and c <= P618 Then
ExitLong("타점 20%익절 P618청산",AtLimit,P618,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절 P618청산") and c <= P5 Then
ExitLong("타점 20%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.4);
#돌파매수-----------------------------------------------------------------------------
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" TheN
Buy("타점1",OnClosE,DeF,Floor((베팅금)/HH[1]*0.6));
예스스탁
예스스탁 답변
2024-03-07 13:55:38
안녕하세요
예스스탁입니다.
1
예 이름을 인식하는 시간차이 때문에 발생하는게 맞습니다.
2
작성하신 식에서는 타점1을 atstop으로 작성해도 해결이 가능하지 않습니다
atstop,atlimit은 봉완성시 if조건이 만족하면
값이 셋팅이 되서 다음봉에서 신호가 발생하는데
진입을 atstop을 사용해서 HH를 터치할때 지입을 해도
동시에 청산조건이 만족해서 같은봉에서 발생할 수 있습니다.
아래와 같은 방법을 사용해 보시기 바랍니다.
돌파매수 조건이 만족한 봉에서는 Condition1변수를 true로 만들어서
LatestEntryName(0) == "타점"조건인 청산들은
셋팅이 안게 하는 내용입니다.
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
#----------------------------------------------------------
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
#매수-----------------------------------------------------------------------------
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
if MarketPosition == 1 Then
{
#돌파매수-----------------------------------------------------------------------------
Condition1 = False;
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" Then
{
Condition1 = true;
Buy("타점1",OnClosE,DeF,Floor((베팅금)/HH[1]*0.6));
}
#매도-----------------------------------------------------------------------------
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor((베팅금)/타점)*0.4);
#매도-----------------------------------------------------------------------------
if(LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 20%익절",AtLimit,AvgEntryPrice*1.2,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절") and c <= P618 Then
ExitLong("타점 20%익절 P618청산",AtLimit,P618,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절 P618청산") and c <= P5 Then
ExitLong("타점 20%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.4);
}
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 아직 초보에게는 모르는게 너무 많이 있네요..ㅜ.ㅜ
저는 앞의 전고점을 넘었을때 바로 매수하기 위해서 onclose를 썼는데,
실제로 시스템상으로 그 다음봉부터 신호의 이름이 인지가 된기때문에
신호이름이 인지하기 전에 매도주문이 나갔기 때문에 이런문제가 발생하신다고
하시는게 맞는건가요????
그러면 앞의 전고점 돌파매수(타점1)에서 atstop이나 atlimits를 사용해야
문제가 해결될까요???
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
> 안녕하세요
예스스탁입니다.
if sDate == 20240206 Then
MessageLog("%s",LatestEntryName(0));
수식에 위 내용을 추가해 디버깅해 보시면
신호의 이름이 두번째 봉에서 변경되는 것을 보실수 있습니다.
신호가 Onclose나 atmarket이면 봉완성시(다음봉시가수신)에 신호가 발생합니다.
단지 onclose는 완성봉 종가에 신호표시를 하고 신호가격도 왼성봉종가를 사용하고
atmarket은 다음봉시가에 신호표시를 하고 다읍봉시가를 신호가격으로 사용하는 차이만 있습니다.
그러므로 2개의 타입은 신호가 발생하면 그 다음봉부터 신호의 이름이 인지가 됩니다.
atstop이나 atlimit은 봉 미완성시에 중가에 신호가 발생하므로 해당봉 완성시에
이름인지가 가능합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
>
안녕하세요 아래 수식에 대해 질문이 있어 요청드립니다.
위의 그림을 보면
2024/02/06 09:01 분에 타점1 매수주문이 들어갔고,
2024/02/06 09:02 분에 타점 5%익절 매도주문이 들어갔습니다.
아래의 수식을 확인해보면
" 타점 5%익절" 해당하는 매도주문은 LatestEntryName(0) == "타점" 일 경우에만
주문이 나가는데 LatestEntryName(0) == "타점1" 인데도 매도주문이 나간 이유를
알고 싶습니다.
확인 부탁드리겠습니다.
---------------------------------------------------------------------
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
#----------------------------------------------------------
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
#매수-----------------------------------------------------------------------------
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
#매도-----------------------------------------------------------------------------
if (LatestEntryName(0) == "타점")Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor((베팅금)/타점)*0.4);
#매도-----------------------------------------------------------------------------
if((LatestEntryName(0) == "타점") ) Then
ExitLong("타점 20%익절",AtLimit,AvgEntryPrice*1.2,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절") and c <= P618 Then
ExitLong("타점 20%익절 P618청산",AtLimit,P618,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "타점 20%익절 P618청산") and c <= P5 Then
ExitLong("타점 20%익절 P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.4);
#돌파매수-----------------------------------------------------------------------------
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" TheN
Buy("타점1",OnClosE,DeF,Floor((베팅금)/HH[1]*0.6));