커뮤니티

수식 문의 드립니다ㅠ

프로필 이미지
파트라
2021-08-11 08:57:33
967
글번호 151431
답변완료
코스피 200 선물 분봉 거래에서 예를 들어 15분봉을 사용 4번째 Bar(DayIndex == 3)의, High, Low, DayIndex를 별개의 변수로 저장하고 5번째 이후의 Bar에서 만약 High를 돌파하면 그 지점에서 AtStop으로 "Long" 진입 만약 Low를 돌파하면 그 지점에서 AtStop으로 "Short" 진입 진입하였다면 그 봉 번호와 가격정보(OHLC)를 뒤에 봉이 진행되더라도 변하지 않게끔 변수에 저장하고 싶습니다 High도 돌파하고, Low도 돌파하면, 보유하고 있었던 포지션을 청산(어떻게 작성해야 할지 모르겠음..) 이런 수식을 아래와 같이 작성해보았는데요 ======================================================== 시스템 수식 Var : Bar_4_High(0), Bar_4_Low(0), Bar_4_Index(0), Buy_Target(0), Sell_Target(0); Var : Entry_Bar_High(0), Entry_Bar_Low(0), Entry_Bar_Index(0); If bdate != bdate[1] Then { Bar_4_High = 0; Bar_4_Low = 0; Bar_4_Index = 0; Buy_Target = 0; Sell_Target = 0; Entry_Bar_Index = 0; Entry_Bar_High = 0; Entry_Bar_Low = 0; } If DayIndex + 1 == 4 Then { Bar_4_High = H; Bar_4_Low = L; Bar_4_Index = DayIndex + 1; Buy_Target = Bar_4_High + PriceScale; Sell_Target = Bar_4_Low - PriceScale; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and (Close >= Bar_4_High) and !(Close <= Bar_4_Low) then { Buy("Buy", AtStop, Buy_Target); Entry_Bar_Index = DayIndex + 1; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and !(Close >= Bar_4_High) and (Close <= Bar_4_Low) then { Sell("Sell", AtStop, Sell_Target); Entry_Bar_Index = DayIndex + 1; } If DayIndex + 1 == Entry_Bar_Index Then { Entry_Bar_High = H; Entry_Bar_Low = L; } SetStopEndofday(1510); =================================================== 지표 수식 Var : Bar_4_High(0), Bar_4_Low(0), Bar_4_Index(0), Buy_Target(0), Sell_Target(0); Var : Entry_Bar_High(0), Entry_Bar_Low(0), Entry_Bar_Index(0); If bdate != bdate[1] Then { Bar_4_High = 0; Bar_4_Low = 0; Bar_4_Index = 0; Buy_Target = 0; Sell_Target = 0; Entry_Bar_Index = 0; Entry_Bar_High = 0; Entry_Bar_Low = 0; } If DayIndex + 1 == 4 Then { Bar_4_High = H; Bar_4_Low = L; Bar_4_Index = DayIndex + 1; Buy_Target = Bar_4_High + PriceScale; Sell_Target = Bar_4_Low - PriceScale; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and (Close >= Bar_4_High) and !(Close <= Bar_4_Low) then { //Buy("Buy", AtStop, Buy_Target); Entry_Bar_Index = DayIndex + 1; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and !(Close >= Bar_4_High) and (Close <= Bar_4_Low) then { //Sell("Sell", AtStop, Sell_Target); Entry_Bar_Index = DayIndex + 1; } If DayIndex + 1 == Entry_Bar_Index Then { Entry_Bar_High = H; Entry_Bar_Low = L; } Plot1(Bar_4_High); Plot2(Bar_4_Low); Plot3(Bar_4_Index); plot4(Buy_Target); plot5(Sell_Target); plot6(Entry_Bar_Index); plot7(Entry_Bar_High); plot8(Entry_Bar_Low); ===================================================== 이렇게 작성을 한다면 이르면 바로 다음 봉에서라도 진입이 일어나야 할 것 같은데 진입이 늦어지고 또한 첫 번째 봉에서도 진입이 일어나는 현상을 보고 있습니다 제가 무언가를 잘못 파악하고 있는데 도움좀 주시면 감사하겠습니다 예를 들어 위의 산식 복사해서 KP200 선물 15분봉에 적용해보면 8월 10일자 기준 첫 번째 봉에서 BUY 진입이 일어나는 것도 이상하고.. 4번봉의 Low지점을 뚫었으니까 6번봉에서 바로 AtStop으로 주문이 나가야 할 것 같은데 7번봉에서 주문이 나가는 것으로 되어있더라고요.. 지표를 출력해보면 Entry_Bar_Index가 계속 DayIndex가 증가함에 따라 따라서 증가하고 있어서 High, Low도 계속 바귀네요.. Buy, Sell 주문을 넣는 If 문이 딱 한 번만 실행되게 해야 하는데.. For 문 안에 If문을 넣어야 하나요..? 해결책좀 주시기 바랍니다ㅠ
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-08-11 15:47:55

안녕하세요 예스스탁입니다. 신호함수에 사용하는 신호타입 중에 atstop이나 atlimit은 봉완성시 if조건이 만족하면 가격조건이 셋팅되고 다음봉에서 셋팅된 가격 이상이나 이하의 시세가 발생하면 즉시 신호가 발생합니다. atstop은 Buy나 exitshort과 같이 매수주문함수에 사용되면 지정한 가격이상의 시세가 발생할때 즉시 신호, Sell이나 exitLong과 같이 매도주문함수에 사용되면 지정한 가격이하의 시세가 발생할때 즉시 신호가 발생합니다. atlimit은 Buy나 exitshort과 같이 매수주문함수에 사용되면 지정한 가격이하의 시세가 발생할때 즉시 신호, Sell이나 exitLong과 같이 매도주문함수에 사용되면 지정한 가격이상의 시세가 발생할때 즉시 신호가 발생합니다. 완성봉기준으로 조건가격이 셋팅이되고 다음봉 미완성시에 완성봉기준셋팅된 가격과 현재가를 비교해 신호를 발생합니다. 그러므로 당일 마지막봉에 셋팅이 되면 다음날 첫봉의 시세에 신호가 발생하게 됩니다. 또한 작성하신 내용이면 if문에서 봉완성시에 종가로 돌파를 확인하고 다시 atstop으로 다음봉에서 한번더 감시를 해서 신호가 발생하게 됩니다. 아래 수정한 내용을 참고하시기 바랍니다. 1 Var : Bar_4_High(0), Bar_4_Low(0), Bar_4_Index(0), Buy_Target(0), Sell_Target(0); Var : Entry_Bar_High(0), Entry_Bar_Low(0), Entry_Bar_Index(0); var : entry(0); If bdate != bdate[1] Then { Bar_4_High = 0; Bar_4_Low = 0; Bar_4_Index = 0; Buy_Target = 0; Sell_Target = 0; Entry_Bar_Index = 0; Entry_Bar_High = 0; Entry_Bar_Low = 0; } If DayIndex + 1 == 4 Then { Bar_4_High = H; Bar_4_Low = L; Bar_4_Index = DayIndex + 1; Buy_Target = Bar_4_High + PriceScale; Sell_Target = Bar_4_Low - PriceScale; } If (DayIndex + 1 >= 4) and (Bar_4_High != 0) and NextBarSdate == sDate then { Buy("Buy", AtStop, Buy_Target); } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and NextBarSdate == sDate then { Sell("Sell", AtStop, Sell_Target); } If MarketPosition != 0 Then { Entry_Bar_High = H[BarsSinceEntry]; Entry_Bar_Low = L[BarsSinceEntry]; } SetStopEndofday(1510); 2 Var : Bar_4_High(0), Bar_4_Low(0), Bar_4_Index(0), Buy_Target(0), Sell_Target(0); Var : Entry_Bar_High(0), Entry_Bar_Low(0), Entry_Bar_Index(0); var : T(0); If bdate != bdate[1] Then { T = 0; Bar_4_High = 0; Bar_4_Low = 0; Bar_4_Index = 0; Buy_Target = 0; Sell_Target = 0; Entry_Bar_Index = 0; Entry_Bar_High = 0; Entry_Bar_Low = 0; } If DayIndex + 1 == 4 Then { Bar_4_High = H; Bar_4_Low = L; Bar_4_Index = DayIndex + 1; Buy_Target = Bar_4_High + PriceScale; Sell_Target = Bar_4_Low - PriceScale; } If T <= 0 and (DayIndex + 1 > 4) and (Bar_4_High != 0) and H >= Buy_Target then { T = 1; Entry_Bar_Index = DayIndex + 1; } If T >= 0 and (DayIndex + 1 > 4) and (Bar_4_High != 0) and H <= Sell_Target then { T = -1; Entry_Bar_Index = DayIndex + 1; } If DayIndex + 1 == Entry_Bar_Index Then { Entry_Bar_High = H; Entry_Bar_Low = L; } Plot1(Bar_4_High); Plot2(Bar_4_Low); Plot3(Bar_4_Index); plot4(Buy_Target); plot5(Sell_Target); plot6(Entry_Bar_Index); plot7(Entry_Bar_High); plot8(Entry_Bar_Low); 즐거운 하루되세요 > 파트라 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다ㅠ > 코스피 200 선물 분봉 거래에서 예를 들어 15분봉을 사용 4번째 Bar(DayIndex == 3)의, High, Low, DayIndex를 별개의 변수로 저장하고 5번째 이후의 Bar에서 만약 High를 돌파하면 그 지점에서 AtStop으로 "Long" 진입 만약 Low를 돌파하면 그 지점에서 AtStop으로 "Short" 진입 진입하였다면 그 봉 번호와 가격정보(OHLC)를 뒤에 봉이 진행되더라도 변하지 않게끔 변수에 저장하고 싶습니다 High도 돌파하고, Low도 돌파하면, 보유하고 있었던 포지션을 청산(어떻게 작성해야 할지 모르겠음..) 이런 수식을 아래와 같이 작성해보았는데요 ======================================================== 시스템 수식 Var : Bar_4_High(0), Bar_4_Low(0), Bar_4_Index(0), Buy_Target(0), Sell_Target(0); Var : Entry_Bar_High(0), Entry_Bar_Low(0), Entry_Bar_Index(0); If bdate != bdate[1] Then { Bar_4_High = 0; Bar_4_Low = 0; Bar_4_Index = 0; Buy_Target = 0; Sell_Target = 0; Entry_Bar_Index = 0; Entry_Bar_High = 0; Entry_Bar_Low = 0; } If DayIndex + 1 == 4 Then { Bar_4_High = H; Bar_4_Low = L; Bar_4_Index = DayIndex + 1; Buy_Target = Bar_4_High + PriceScale; Sell_Target = Bar_4_Low - PriceScale; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and (Close >= Bar_4_High) and !(Close <= Bar_4_Low) then { Buy("Buy", AtStop, Buy_Target); Entry_Bar_Index = DayIndex + 1; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and !(Close >= Bar_4_High) and (Close <= Bar_4_Low) then { Sell("Sell", AtStop, Sell_Target); Entry_Bar_Index = DayIndex + 1; } If DayIndex + 1 == Entry_Bar_Index Then { Entry_Bar_High = H; Entry_Bar_Low = L; } SetStopEndofday(1510); =================================================== 지표 수식 Var : Bar_4_High(0), Bar_4_Low(0), Bar_4_Index(0), Buy_Target(0), Sell_Target(0); Var : Entry_Bar_High(0), Entry_Bar_Low(0), Entry_Bar_Index(0); If bdate != bdate[1] Then { Bar_4_High = 0; Bar_4_Low = 0; Bar_4_Index = 0; Buy_Target = 0; Sell_Target = 0; Entry_Bar_Index = 0; Entry_Bar_High = 0; Entry_Bar_Low = 0; } If DayIndex + 1 == 4 Then { Bar_4_High = H; Bar_4_Low = L; Bar_4_Index = DayIndex + 1; Buy_Target = Bar_4_High + PriceScale; Sell_Target = Bar_4_Low - PriceScale; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and (Close >= Bar_4_High) and !(Close <= Bar_4_Low) then { //Buy("Buy", AtStop, Buy_Target); Entry_Bar_Index = DayIndex + 1; } If (DayIndex + 1 >= 5) and (Bar_4_High != 0) and !(Close >= Bar_4_High) and (Close <= Bar_4_Low) then { //Sell("Sell", AtStop, Sell_Target); Entry_Bar_Index = DayIndex + 1; } If DayIndex + 1 == Entry_Bar_Index Then { Entry_Bar_High = H; Entry_Bar_Low = L; } Plot1(Bar_4_High); Plot2(Bar_4_Low); Plot3(Bar_4_Index); plot4(Buy_Target); plot5(Sell_Target); plot6(Entry_Bar_Index); plot7(Entry_Bar_High); plot8(Entry_Bar_Low); ===================================================== 이렇게 작성을 한다면 이르면 바로 다음 봉에서라도 진입이 일어나야 할 것 같은데 진입이 늦어지고 또한 첫 번째 봉에서도 진입이 일어나는 현상을 보고 있습니다 제가 무언가를 잘못 파악하고 있는데 도움좀 주시면 감사하겠습니다 예를 들어 위의 산식 복사해서 KP200 선물 15분봉에 적용해보면 8월 10일자 기준 첫 번째 봉에서 BUY 진입이 일어나는 것도 이상하고.. 4번봉의 Low지점을 뚫었으니까 6번봉에서 바로 AtStop으로 주문이 나가야 할 것 같은데 7번봉에서 주문이 나가는 것으로 되어있더라고요.. 지표를 출력해보면 Entry_Bar_Index가 계속 DayIndex가 증가함에 따라 따라서 증가하고 있어서 High, Low도 계속 바귀네요.. Buy, Sell 주문을 넣는 If 문이 딱 한 번만 실행되게 해야 하는데.. For 문 안에 If문을 넣어야 하나요..? 해결책좀 주시기 바랍니다ㅠ