커뮤니티

로직 문의

프로필 이미지
sewzie
2025-05-14 11:33:18
203
글번호 190804
답변완료
안녕하세요 몇가지 질문이 있습니다 질문 #1 제가 봤을때는 동일한 논리인 아래 두 코드가 백테스트에는 다른 결과를 보여주는데요 제가 잘못 이해하고 있는게 있을까요? 감사합니다 코드 #1 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); Condition1 = CrossUp(C,hh[1]) and MarketPosition == 0; Condition2 = CrossDown(C,ll[1]) and MarketPosition == 0; If Condition1 == True and CrossUp(C,hh[1]) then Buy("B1",AtMarket,DEf,1); If Condition2 == True and CrossDown(C,ll[1]) then Sell("B2",AtMarket,DEf,1); 코드 #2 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); If CrossUp(C,hh[1]) then Buy("B1",AtMarket,DEf,1); If CrossDown(C,ll[1]) then Sell("B2",AtMarket,DEf,1); 질문 #2 아래 코드의 논리를 제가 이렇게 이해하고 있는데, 맞는지 검증 부탁드립니다 현재봉에서 직전 XX봉 고가/저가 돌파가 나오면 매수/매도 포지션이 있을때 entryprice가 진입봉의 저가/고가를 벗어나면 청산 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); Condition1 = CrossUp(C,hh[1]) and MarketPosition == 0; Condition2 = CrossDown(C,ll[1]) and MarketPosition == 0; If Condition1 == True then Buy("B1",AtMarket,DEf,1); If Condition2 == True then Sell("B2",AtMarket,DEf,1); // 손절: 진입신호 봉의 저가 손절 input:FF(8); // 1~10, 진입 후 XX봉 경과 If MarketPosition == 1 and EntryPrice < L[BarsSinceEntry] Then ExitLong("C1"); If MarketPosition == -1 and EntryPrice > H[BarsSinceEntry] Then ExitShort("C2");
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2025-05-14 17:04:58

안녕하세요 예스스탁입니다. 1 MarketPosition == 0 조건은 차트상 무포지션일때만 진입하라는 내용입니다. 그러므로 코드1은 반대조건으로 스위칭이 되지 않게 됩니다. 코드1에 MarketPosition == 0 조건을 제외하시면 2개 코드가 동일합니다. 2 예 맞습니다. 1번에서 답변드린대로 스위칭은 가능하지 않고 진입후 청산완료 후에 다음 진입이 될 수 있습니다. 즐거운 하루되세요 > sewzie 님이 쓴 글입니다. > 제목 : 로직 문의 > 안녕하세요 몇가지 질문이 있습니다 질문 #1 제가 봤을때는 동일한 논리인 아래 두 코드가 백테스트에는 다른 결과를 보여주는데요 제가 잘못 이해하고 있는게 있을까요? 감사합니다 코드 #1 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); Condition1 = CrossUp(C,hh[1]) and MarketPosition == 0; Condition2 = CrossDown(C,ll[1]) and MarketPosition == 0; If Condition1 == True and CrossUp(C,hh[1]) then Buy("B1",AtMarket,DEf,1); If Condition2 == True and CrossDown(C,ll[1]) then Sell("B2",AtMarket,DEf,1); 코드 #2 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); If CrossUp(C,hh[1]) then Buy("B1",AtMarket,DEf,1); If CrossDown(C,ll[1]) then Sell("B2",AtMarket,DEf,1); 질문 #2 아래 코드의 논리를 제가 이렇게 이해하고 있는데, 맞는지 검증 부탁드립니다 현재봉에서 직전 XX봉 고가/저가 돌파가 나오면 매수/매도 포지션이 있을때 entryprice가 진입봉의 저가/고가를 벗어나면 청산 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); Condition1 = CrossUp(C,hh[1]) and MarketPosition == 0; Condition2 = CrossDown(C,ll[1]) and MarketPosition == 0; If Condition1 == True then Buy("B1",AtMarket,DEf,1); If Condition2 == True then Sell("B2",AtMarket,DEf,1); // 손절: 진입신호 봉의 저가 손절 input:FF(8); // 1~10, 진입 후 XX봉 경과 If MarketPosition == 1 and EntryPrice < L[BarsSinceEntry] Then ExitLong("C1"); If MarketPosition == -1 and EntryPrice > H[BarsSinceEntry] Then ExitShort("C2");
프로필 이미지

sewzie

2025-05-14 21:52:28

안녕하세요, 답변 감사합니다 2번에 손절 관련하여 로직이 맞다고 말씀해주셨는데, 막상 NG.1로 실험해보면 한번도 손절이 일어나지 않습니다 확인 부탁드리겠습니다, 감사합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 로직 문의 > 안녕하세요 예스스탁입니다. 1 MarketPosition == 0 조건은 차트상 무포지션일때만 진입하라는 내용입니다. 그러므로 코드1은 반대조건으로 스위칭이 되지 않게 됩니다. 코드1에 MarketPosition == 0 조건을 제외하시면 2개 코드가 동일합니다. 2 예 맞습니다. 1번에서 답변드린대로 스위칭은 가능하지 않고 진입후 청산완료 후에 다음 진입이 될 수 있습니다. 즐거운 하루되세요 > sewzie 님이 쓴 글입니다. > 제목 : 로직 문의 > 안녕하세요 몇가지 질문이 있습니다 질문 #1 제가 봤을때는 동일한 논리인 아래 두 코드가 백테스트에는 다른 결과를 보여주는데요 제가 잘못 이해하고 있는게 있을까요? 감사합니다 코드 #1 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); Condition1 = CrossUp(C,hh[1]) and MarketPosition == 0; Condition2 = CrossDown(C,ll[1]) and MarketPosition == 0; If Condition1 == True and CrossUp(C,hh[1]) then Buy("B1",AtMarket,DEf,1); If Condition2 == True and CrossDown(C,ll[1]) then Sell("B2",AtMarket,DEf,1); 코드 #2 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); If CrossUp(C,hh[1]) then Buy("B1",AtMarket,DEf,1); If CrossDown(C,ll[1]) then Sell("B2",AtMarket,DEf,1); 질문 #2 아래 코드의 논리를 제가 이렇게 이해하고 있는데, 맞는지 검증 부탁드립니다 현재봉에서 직전 XX봉 고가/저가 돌파가 나오면 매수/매도 포지션이 있을때 entryprice가 진입봉의 저가/고가를 벗어나면 청산 var : hh(0),ll(0); input:X1(5); // 1~10, 직전 XX봉 횟수 ll = lowest(L,X1); hh = highest(H,X1); Condition1 = CrossUp(C,hh[1]) and MarketPosition == 0; Condition2 = CrossDown(C,ll[1]) and MarketPosition == 0; If Condition1 == True then Buy("B1",AtMarket,DEf,1); If Condition2 == True then Sell("B2",AtMarket,DEf,1); // 손절: 진입신호 봉의 저가 손절 input:FF(8); // 1~10, 진입 후 XX봉 경과 If MarketPosition == 1 and EntryPrice < L[BarsSinceEntry] Then ExitLong("C1"); If MarketPosition == -1 and EntryPrice > H[BarsSinceEntry] Then ExitShort("C2");