첨부 이미지
그림1
그림2
신호가 발생한 캔들의 바로 이전 캔들을 손절의 기준으로 잡는 식 문의들 드렸고,
답변을 받았습니다.
알려주식 매수청산식은 다음과 같습니다.
if EntryPrice < (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2 Then
value1 = L[BarsSinceEntry+1];
Else
value1 = (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2;
ExitLong("bx",AtStop,value1);
진입가격이 신호 1봉전 캔들의 (고가+저가)/2 보다 작으면 value1 값은 신호1봉전캔들의 저가,
그렇지 않으면 value1 값은 신호1봉전 캔들의 중심가격
그런데,
첫번째 그림을 보시면
신호가격은 1봉전 캔들의 중심보다 높지만
청산신호는 신호 바로전 캔들의 저가보다도 더 낮은 가격에 나왔습니다.
그러나,
두번째 사진의 경우를 보면
신호 이전 캔들의 중심가격에 청산신호가 나왔습니다.
이것이 과거봉 가설 때문인 것인지요??
또 한가지 궁금한 것은,
위 두사진을 보면 모두 청산신호는 신호발생캔들이 아닌 그 다음봉에서 나옵니다.
과거봉 가설 때문에 이런 문제가 생긴다면,
신호가 발생한 캔들을 포함해서
신호가 발생한 이후 청산전에 만들어지는 모든 캔들에서
신호발생 바로 1봉전 캔들의 저가를 이탈하는 순간 청산신호가 나오게 하는 수식을 알고 싶습니다.
setstoploss의 경우에는 진입신호발생 캔들에도 스탑로스신호가 발생하는 것처럼요.
과거봉 가설 때문에 시뮬레이션에서는 제대로 표현이 안되는 경우도 있을 수 있겠지만,
실시간에서 진입신호가 나온 바로 1봉전 캔들의 저가에 도달하는 순간 청산이 되는 수식을 부탁드립니다.
신호가 나온 캔들에서도 조건에 맞으면 청산신호가 나오도록 부탁드립니다.
답변 1
예스스탁
예스스탁 답변
2023-08-30 11:47:51
안녕하세요
예스스탁입니다.
1
1번그림과 2번그림 모두 신호가격이 전봉의 중심가격보다 높으므로
중심가격을 기준으로 신호가 발생한 내용입니다.
해당 내용은 봉가설과는 관련이 없습니다.
exitlong에서 atstop은 지정한 가격 이하의 시세가 발생하면 즉시 신호발생합니다.
2번식은 시가가 중심가격보다 높게 시작했으므로 이후 하락해 중심가격 이하의 가격에서 신호가 발생했지만
1번식에서는 봉의시가가 이미 중심가격보다 낮게 나오므로 시가에 신호가 발생한 내용입니다.
저가를 기준으로 나온 신호가 아닙니다.
2
신호가 발생한 봉에서 청산이 나오게 하려면 별도로 수식을 추가하셔야 합니다.
MarketPosition, entryprice등은 신호발생후 1개봉은 완성되어야 값을 리턴합니다.
진입신호와 같이 셋팅이 되어 신호봉에만 감시하는 내용을 추가로 지정해 주시면 됩니다.
진입신호와 같이 셋팅이 되려면 진입가격을 별도로 산정해서 지정해 주셔야 합니다.
주석 내용 참고하시기 바랍니다.
var1 = ma(C,20);
Var2 = ma(C,60);
if MarketPosition <= 0 and CrossUp(var1,Var2) Then
{
Buy("b",AtStop,NextBarOpen);
if NextBarOpen > (H[1]+L[1])/2 Then
value1 = L[1];
Else
value1 = (H[1]+L[1])/2;
ExitLong("bx1",AtStop,value1);
}
if MarketPosition == 1 Then
{
if EntryPrice < (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2 Then
value1 = L[BarsSinceEntry+1];
Else
value1 = (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2;
ExitLong("bx",AtStop,value1);
}
if MarketPosition >= 0 and CrossDown(var1,Var2) Then
{
Sell("s",AtStop,NextBarOpen);
if NextBarOpen < (H[1]+L[1])/2 Then
value2 = H[1];
Else
value2 = (H[1]+L[1])/2;
ExitShort("sx1",AtStop,value2);
}
if MarketPosition == 1 Then
{
if EntryPrice > (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2 Then
value2 = H[BarsSinceEntry+1];
Else
value2 = (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2;
ExitShort("sx",AtStop,value2);
}
즐거운 하루되세요
> 하루만 님이 쓴 글입니다.
> 제목 : 83550 답변에 대해 추가 문의 드립니다.
> 신호가 발생한 캔들의 바로 이전 캔들을 손절의 기준으로 잡는 식 문의들 드렸고,
답변을 받았습니다.
알려주식 매수청산식은 다음과 같습니다.
if EntryPrice < (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2 Then
value1 = L[BarsSinceEntry+1];
Else
value1 = (H[BarsSinceEntry+1]+L[BarsSinceEntry+1])/2;
ExitLong("bx",AtStop,value1);
진입가격이 신호 1봉전 캔들의 (고가+저가)/2 보다 작으면 value1 값은 신호1봉전캔들의 저가,
그렇지 않으면 value1 값은 신호1봉전 캔들의 중심가격
그런데,
첫번째 그림을 보시면
신호가격은 1봉전 캔들의 중심보다 높지만
청산신호는 신호 바로전 캔들의 저가보다도 더 낮은 가격에 나왔습니다.
그러나,
두번째 사진의 경우를 보면
신호 이전 캔들의 중심가격에 청산신호가 나왔습니다.
이것이 과거봉 가설 때문인 것인지요??
또 한가지 궁금한 것은,
위 두사진을 보면 모두 청산신호는 신호발생캔들이 아닌 그 다음봉에서 나옵니다.
과거봉 가설 때문에 이런 문제가 생긴다면,
신호가 발생한 캔들을 포함해서
신호가 발생한 이후 청산전에 만들어지는 모든 캔들에서
신호발생 바로 1봉전 캔들의 저가를 이탈하는 순간 청산신호가 나오게 하는 수식을 알고 싶습니다.
setstoploss의 경우에는 진입신호발생 캔들에도 스탑로스신호가 발생하는 것처럼요.
과거봉 가설 때문에 시뮬레이션에서는 제대로 표현이 안되는 경우도 있을 수 있겠지만,
실시간에서 진입신호가 나온 바로 1봉전 캔들의 저가에 도달하는 순간 청산이 되는 수식을 부탁드립니다.
신호가 나온 캔들에서도 조건에 맞으면 청산신호가 나오도록 부탁드립니다.