안녕하세요.
항상 도와주셔서 감사드립니다.
지표가 특정기준 이하일 경우 매수하는 로직을 사용할 경우 지표가 계속해서 횡보할 경우 매수매도를 반복하는 것을 제한하기 위해,
지표가 이전에 시그널이 나온 값보다 더 작을 경우에만 추가 매수를 하는 로직을 짜고싶습니다.
[예: 이격도가 95이하일 때 매수하는 조건일 경우 아래와 같이 매수합니다]
93(1차매수), 95, 94, 93, 92(2차매수;93보다 작으므로)
이격도 95 이하일때는 value1에 값을 저장한 후 value1과 최근 이격도값을 비교하여 작은경우에만 value1을 저장하였으나 매매가 작동하지 않습니다.
아래 최대한 고민해봤는데 도와주시면 감사하겠습니다.
만약 컨셉이 잘못됬다면 새로 작성해주셔도 감사하겠습니다.
#1분봉에서 사용하였습니다.
DParity = Disparity(Period); //이격도
if Dparity <= 95
and Dparity < value1 Then
{
#해당봉의 이격도 값 저장
value1 = Dparity;
}
else
{
#하락이 끝나면 Value1 초기화
if Dparity > 95 Then
Value1 = Dparity;
}
# 이격도가 95이하이면서 이전 이격도 값보다 작은 후 상승 전환하는 경우만 매수
If accumN(iff(Dparity<= 95,1,0),2)>=1 //95를 잠깐 들어갔다 crossup하는경우도 매수하기위해
and accumN(iff(Dparity<value1,1,0),2)>=1 //위와 마찬가지 사유로 accumN사용
and Dparity[1]<Dparity[0] //위조건이 있은 후 이격도가 상승전환 한 경우만 매수
Buy("상한매수",Atmarket,DEF,floor(Deposit/C));
if marketposition==1
and Dparity[1]>Dparity[0] then //이격도가 하락전환하면 바로 매도
exitlong("매도",AtMarket,DEF,"",currentcontracts/2);
감사합니다.
답변 1
예스스탁
예스스탁 답변
2020-05-21 11:24:56
안녕하세요
예스스탁입니다.
if MarketPosition == 1 then
{
if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then
value1 = DParity[BarsSinceEntry];
}
위와 같이 작성하시면 가장 최근 진입신호봉의 이격도값을 value1변수에 저장할수 있습니다.
이격도가 95이하이면서 이전 이격도 값보다 작은 후 상승 전환하는 경우만 추가매수이므로
아래와 같이 작성하시면 됩니다.
input : Period(20);
var : T(0),DParity(0);
DParity = Disparity(Period); //이격도
#이격도 상승부터 다음 하락전까지는 1
if DParity > DParity[1] Then
T = 1;
#이격도 하락부터 다음 상승전까지는 -1
if DParity < DParity[1] Then
T = -1;
if MarketPosition == 1 then
{
if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then
value1 = DParity[BarsSinceEntry];
if DParity <= 95 and
T == 1 and T != T[1] and
(value1 == 0 or (value1 > 0 and DParity < value1)) Then
Buy("추가매수",Atmarket,DEF,floor(Deposit/C));
}
즐거운 하루되세요
> 기사단장 님이 쓴 글입니다.
> 제목 : 지표 시그널 재진입 제한
> 안녕하세요.
항상 도와주셔서 감사드립니다.
지표가 특정기준 이하일 경우 매수하는 로직을 사용할 경우 지표가 계속해서 횡보할 경우 매수매도를 반복하는 것을 제한하기 위해,
지표가 이전에 시그널이 나온 값보다 더 작을 경우에만 추가 매수를 하는 로직을 짜고싶습니다.
[예: 이격도가 95이하일 때 매수하는 조건일 경우 아래와 같이 매수합니다]
93(1차매수), 95, 94, 93, 92(2차매수;93보다 작으므로)
이격도 95 이하일때는 value1에 값을 저장한 후 value1과 최근 이격도값을 비교하여 작은경우에만 value1을 저장하였으나 매매가 작동하지 않습니다.
아래 최대한 고민해봤는데 도와주시면 감사하겠습니다.
만약 컨셉이 잘못됬다면 새로 작성해주셔도 감사하겠습니다.
#1분봉에서 사용하였습니다.
DParity = Disparity(Period); //이격도
if Dparity <= 95
and Dparity < value1 Then
{
#해당봉의 이격도 값 저장
value1 = Dparity;
}
else
{
#하락이 끝나면 Value1 초기화
if Dparity > 95 Then
Value1 = Dparity;
}
# 이격도가 95이하이면서 이전 이격도 값보다 작은 후 상승 전환하는 경우만 매수
If accumN(iff(Dparity<= 95,1,0),2)>=1 //95를 잠깐 들어갔다 crossup하는경우도 매수하기위해
and accumN(iff(Dparity<value1,1,0),2)>=1 //위와 마찬가지 사유로 accumN사용
and Dparity[1]<Dparity[0] //위조건이 있은 후 이격도가 상승전환 한 경우만 매수
Buy("상한매수",Atmarket,DEF,floor(Deposit/C));
if marketposition==1
and Dparity[1]>Dparity[0] then //이격도가 하락전환하면 바로 매도
exitlong("매도",AtMarket,DEF,"",currentcontracts/2);
감사합니다.