예스스탁
예스스탁 답변
2020-03-13 15:46:53
안녕하세요
예스스탁입니다.
1
현재 손실나면 스위칭을 하는 내용 때문에
손절을 강제청산함수인 SetStopLoss을 사용하지 못하고 대신에 풀어서 작성되어 있습니다.
강제청산함수는 진입후 지정한 손실이 발생하면 즉시 청산이 발생합니다.
랭귀지의 if문은 봉완성시에 조건판단을 합니다.
진입이 발생하고 하나의 봉이 완성이 되어야 MarketPosition이 확정이 됩니다.
진입이 된 이후에 다음봉이 완성이 되어야 아래와 같은 조건이 만족하게 되고
if MarketPosition == 1 Then
if MarketPosition == -1 Then
그때가 되어야 손절값이 셋팅하고 감시에 들어가게 됩니다.
그러므로 진입봉신호가 표시된 다음봉에서 손절로 인한 스위칭/손절 신호가 발생하지 못합니다.
풀어서 작성한 수식이 일반적으로 문제는 없지만 손절값이 아주 작거나
신호봉 다음봉에서 바로 만족하는 경우에 해당 내용만으로는 대응이 되지 않습니다.
진입봉 다음봉에서 손절이 발생할 경우의 내용을 추가해 드립니다.
2
봉간에 갭이 떠 시가가 손절라인을 초과해서 뜨는 경우에는
해당 가격으로 신호가 발생하게 됩니다.
해당 부분은 가격의 갭이 있는 경우이므로 별도로 처리가 되지 않습니다.
3
input : 매수음봉틱수(5),매수양봉틱수(5);
input : 매도양봉틱수(5),매도음봉틱수(5);
input : 진입횟수(5);
input : 익절틱수(50),손절틱수(4);
input : P1(5),P2(20);
var : entry(0),mav1(0),mav2(0),T1(0);
mav1 = ma(C,P1);
mav2 = ma(C,P2);
#영업일 변경
if bdate != bdate[1] Then
{
T1 = TotalTrades[1];
}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if mav1 > mav2 and #정배열
entry < 진입횟수 and #진입횟수가 지정한 값 이하
MarketPosition == 0 and #매수나 무포지션 상태
C[1] == O[1]+매도양봉틱수*PriceScale and #1봉전종가가 1봉전시가+매도양봉틱수 이상
C[0] == O[0]-매도음봉틱수*PriceScale Then #현재봉 종가가 1봉전시가-매도음봉틱수 이하
{
sell("s");
if entry < 진입횟수-1 then
buy("bs1",AtStop,C+PriceScale*4);
Else
ExitShort("sx1",AtStop,C+PriceScale*4);
}
if mav1 < mav2 and #역배열
entry < 진입횟수 and #진입횟수가 지정한 값 이하
MarketPosition == 0 and #매도나 무포지션 상태
C[1] == O[1]-매수음봉틱수*PriceScale and #1봉전종가가 1봉전시가-매수음봉틱수 이하
C[0] == O[0]+매수양봉틱수*PriceScale Then #현재봉 종가가 1봉전시가+매수양봉틱수 이상
{
buy("b");
if entry < 진입횟수-1 Then
sell("sb1",AtStop,C-PriceScale*4);
Else
ExitShort("bx1",AtStop,C-PriceScale*4);
}
#매수진입 후 손절되면 매도로 스위칭
if MarketPosition == 1 Then
{
if entry < 진입횟수 Then
sell("bs",AtStop,EntryPrice-PriceScale*손절틱수);
Else
ExitLong("bsx",AtStop,EntryPrice-PriceScale*손절틱수);
}
#매도진입 후 손절되면 매수로 스위칭
if MarketPosition == -1 and entry < 진입횟수 Then
{
if entry < 진입횟수 Then
buy("sb",AtStop,EntryPrice+PriceScale*손절틱수);
Else
ExitShort("sbx",AtStop,EntryPrice+PriceScale*손절틱수);
}
#목표수익 설정
SetStopProfittarget(PriceScale*익절틱수,PointStop);
즐거운 하루되세요
> 대구어린울프 님이 쓴 글입니다.
> 제목 : 수정부탁드립니다.
> 안녕하세요?
아래수식으로 실전거래를 몇일 하였습니다. (손절4틱, 20틱 2가지)
손절범위에 익절및 손절이 잘 되는거같다가 손절이 -5포인트 넘게가버리네요.
자리비웠다가 나중에 발견했습니다.
오늘은 시험삼아 시스템2개 돌렸는데 하나는 익절이라 이런경우를 모르겠고, 다른시스템 1개가 이렇네요.
그래서 급하게 현재 실제매매하는 조건말고 다른걸로 외부변수에 이것저것 넣어서 성능보고서로 확인해보니, 대부분 잘되다가 한번가량 손절이 제대로 안되고 엄청 손실이크게 뜨는게 여러개 나옵니다.
이건 진입방식(상대3호가, 현재가)의 문제로 주문이 미체결난것이 아니라, 외부변수에 입력해놓은 손절대로 주문이 안나가는것을 말씀드리는것입니다.
제발 꼼꼼히 봐주시어 원인을 수정부탁드리겠습니다.
input : 매수음봉틱수(5),매수양봉틱수(5);
input : 매도양봉틱수(5),매도음봉틱수(5);
input : 진입횟수(5);
input : 익절틱수(50),손절틱수(50);
input : P1(5),P2(20);
var : entry(0),mav1(0),mav2(0);
mav1 = ma(C,P1);
mav2 = ma(C,P2);
#영업일 변경
if bdate != bdate[1] Then
entry = 0;
#포지션이 변경되어 새로운 진입포지션 발생시마다 1씩 증가
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
if mav1 > mav2 and #정배열
entry < 진입횟수 and #진입횟수가 지정한 값 이하
MarketPosition == 0 and #매수나 무포지션 상태
C[1] == O[1]+매도양봉틱수*PriceScale and #1봉전종가가 1봉전시가+매도양봉틱수 이상
C[0] == O[0]-매도음봉틱수*PriceScale Then #현재봉 종가가 1봉전시가-매도음봉틱수 이하
sell("s");
if mav1 < mav2 and #역배열
entry < 진입횟수 and #진입횟수가 지정한 값 이하
MarketPosition == 0 and #매도나 무포지션 상태
C[1] == O[1]-매수음봉틱수*PriceScale and #1봉전종가가 1봉전시가-매수음봉틱수 이하
C[0] == O[0]+매수양봉틱수*PriceScale Then #현재봉 종가가 1봉전시가+매수양봉틱수 이상
buy("b");
#매수진입 후 손절되면 매도로 스위칭
if MarketPosition == 1 Then
{
if entry < 진입횟수 Then
sell("bs",AtStop,EntryPrice-PriceScale*손절틱수);
Else
ExitLong("bsx",AtStop,EntryPrice-PriceScale*손절틱수);
}
#매도진입 후 손절되면 매수로 스위칭
if MarketPosition == -1 and entry < 진입횟수 Then
{
if entry < 진입횟수 Then
buy("sb",AtStop,EntryPrice+PriceScale*손절틱수);
Else
ExitShort("sbx",AtStop,EntryPrice+PriceScale*손절틱수);
}
#목표수익 설정
SetStopProfittarget(PriceScale*익절틱수,PointStop);