커뮤니티

시스템식 부탁드립니다.

프로필 이미지
양치기
2023-04-07 18:58:06
1455
글번호 168015
답변완료
항상 도움 주셔서 감사합니다. 질문사항 시스템식에서 주문함수 exitlong(),exitshort()와 SetStopProfittarget()와 Setstoploss()를 같이 사용하고 싶습니다. 보통 주문청산을 사용할때는 exitlong(),exitshort()를 중간에 주문청산시 사용하고 코딩 맨 마지막에는 SetStopProfittarget()와 Setstoploss()를 사용합니다. 저는 SetStopProfittarget()와 Setstoploss()를 중간에도 사용하고 필요시 2번 이상도 사용하고 싶습니다. 그래서 아래와 같이 코딩해 보았는데 잘 되지 않는것 같습니다. 도움 부탁드립니다. input : 틱사이즈(0.01) ; var : 이평(0) ; 이평 = ma(C,20) ; f marketposition == 0 and C > 이평 then { Buy("b1",OnClose,DEf,amt); 매수가격 = EntryPrice(0) ; } if MarketPosition == 1 Then { if MaxEntries(0) == 1 then Buy("b2",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 2 Then Buy("b3",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 3 Then Buy("b4",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 4 Then Buy("b5",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 5 Then Buy("b6",AtLimit,매수가격-10*pricescal*MaxEntries,1); # 청산 1 Exitlong("BP",AtLimit,AvgEntryPrice+10*PriceScale) ; # 청산 2 if OpenPositionProfit/틱사이즈 > 10*PriceScale Then ExitLong("bx",AtLimit,c+10*PriceScale); # 청산 3-1 if MaxEntries() >= 3 Then SetStopProfittarget(10*PriceScale,PointStop); Else SetStopProfittarget(0); # 청산 3-2 if MaxEntries() < 3 Then SetStopProfittarget(10*PriceScale,PointStop); Else SetStopProfittarget(0); } # 청산 4 SetStopProfittarget(50*PriceScale,PointStop); 위와 같이 청산 코딩을 4개로 할 경우 문제(청산이 안되거나)가 되는 부분이나 논리적으로 잘못된 부분이 있으시면 수정 부탁드립니다. 제가 하고자 하는 청산은 아래와 같습니다. 청산 1 : 가격이 하락하여 다계약 진입한 경우 진입 평균가보다 10틱 위에서 청산 청산 2 : 가격이 하락하여 다계약 진입한 경우 다계약의 현재 포지션 총수익 10틱 이상인 경우 현재가에서 10틱 위에서 청산 청산 3 : 총 3회 이상 진입한 경우 3번째 진입부터는 10틱 이상 수익시 개별 청산 3회 미만은 평균가보다 10틱 이상 또는현재 총수익이 10틱 이상인 경우 청산 또는 총 3회 미만 진입한 경우는 10틱 이상 수익시 개별 청산하고 3회 이상부터는 평균가 보다 10틱 이상 또는 총수익이 10틱 이상인 경우 청산 청산 4 : 1계약 진입후 가격이 지속 상승한 경우 50틱에서 청산(익절) 도움 부탁드립니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-04-10 09:22:58

안녕하세요 예스스탁입니다. 강제청산은 종류별로 하나만 셋팅이 됩니다. 작성하신 수식에서는 가장 마지막에 셋팅되는 SetStopProfittarget(50*PriceScale,PointStop); 만 셋팅이 되게 됩니다. 개별청산이 SetStopProfittarget을 사용할 수 밖에 없으므로 1회진입시 +50틱 청산은 exitliong,exitshort 함수로 처리하셔야 합니다. 청산3-1이나 청산 3-2는 택일해서 하나만 사용하셔야 합니다. var : 이평(0),매수가격(0); 이평 = ma(C,20) ; if marketposition == 0 and C > 이평 then { Buy("b1",OnClose,DEf,amt); 매수가격 = EntryPrice(0) ; } if MarketPosition == 1 Then { if MaxEntries(0) == 1 then Buy("b2",AtLimit,매수가격-10*PriceScale*MaxEntries,1); if MaxEntries(0) == 2 Then Buy("b3",AtLimit,매수가격-10*PriceScale*MaxEntries,1); if MaxEntries(0) == 3 Then Buy("b4",AtLimit,매수가격-10*PriceScale*MaxEntries,1); if MaxEntries(0) == 4 Then Buy("b5",AtLimit,매수가격-10*PriceScale*MaxEntries,1); if MaxEntries(0) == 5 Then Buy("b6",AtLimit,매수가격-10*PriceScale*MaxEntries,1); #1회 진입 if MaxEntries == 1 Then #+50틱에서 청산(익절) ExitLong("bx",AtLimit,EntryPrice+PriceScale*50); } # 청산 3-1 if MaxEntries() >= 3 Then SetStopProfittarget(10*PriceScale,PointStop); Else { SetStopProfittarget(0); if MaxEntries >= 2 and MaxEntries < 3 Then { # 청산 1 #진입 평균가보다 10틱 위 청산 Exitlong("bx1",AtLimit,AvgEntryPrice+10*PriceScale) ; # 청산 2 #포지션 총수익 10틱 이상인 경우 ExitLong("bx2",AtLimit,AvgEntryPrice+(10*PriceScale)/CurrentContracts); } } # 청산 3-2 if MaxEntries() < 3 Then { SetStopProfittarget(10*PriceScale,PointStop); } Else { SetStopProfittarget(0); if MaxEntries >= 2 and MaxEntries < 3 Then { # 청산 1 #진입 평균가보다 10틱 위 청산 Exitlong("bx1",AtLimit,AvgEntryPrice+10*PriceScale) ; # 청산 2 #포지션 총수익 10틱 이상인 경우 ExitLong("bx2",AtLimit,AvgEntryPrice+(10*PriceScale)/CurrentContracts); } } } Else SetStopProfittarget(0); 즐거운 하루되세요 > 양치기 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 항상 도움 주셔서 감사합니다. 질문사항 시스템식에서 주문함수 exitlong(),exitshort()와 SetStopProfittarget()와 Setstoploss()를 같이 사용하고 싶습니다. 보통 주문청산을 사용할때는 exitlong(),exitshort()를 중간에 주문청산시 사용하고 코딩 맨 마지막에는 SetStopProfittarget()와 Setstoploss()를 사용합니다. 저는 SetStopProfittarget()와 Setstoploss()를 중간에도 사용하고 필요시 2번 이상도 사용하고 싶습니다. 그래서 아래와 같이 코딩해 보았는데 잘 되지 않는것 같습니다. 도움 부탁드립니다. input : 틱사이즈(0.01) ; var : 이평(0) ; 이평 = ma(C,20) ; f marketposition == 0 and C > 이평 then { Buy("b1",OnClose,DEf,amt); 매수가격 = EntryPrice(0) ; } if MarketPosition == 1 Then { if MaxEntries(0) == 1 then Buy("b2",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 2 Then Buy("b3",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 3 Then Buy("b4",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 4 Then Buy("b5",AtLimit,매수가격-10*pricescal*MaxEntries,1); if MaxEntries(0) == 5 Then Buy("b6",AtLimit,매수가격-10*pricescal*MaxEntries,1); # 청산 1 Exitlong("BP",AtLimit,AvgEntryPrice+10*PriceScale) ; # 청산 2 if OpenPositionProfit/틱사이즈 > 10*PriceScale Then ExitLong("bx",AtLimit,c+10*PriceScale); # 청산 3-1 if MaxEntries() >= 3 Then SetStopProfittarget(10*PriceScale,PointStop); Else SetStopProfittarget(0); # 청산 3-2 if MaxEntries() < 3 Then SetStopProfittarget(10*PriceScale,PointStop); Else SetStopProfittarget(0); } # 청산 4 SetStopProfittarget(50*PriceScale,PointStop); 위와 같이 청산 코딩을 4개로 할 경우 문제(청산이 안되거나)가 되는 부분이나 논리적으로 잘못된 부분이 있으시면 수정 부탁드립니다. 제가 하고자 하는 청산은 아래와 같습니다. 청산 1 : 가격이 하락하여 다계약 진입한 경우 진입 평균가보다 10틱 위에서 청산 청산 2 : 가격이 하락하여 다계약 진입한 경우 다계약의 현재 포지션 총수익 10틱 이상인 경우 현재가에서 10틱 위에서 청산 청산 3 : 총 3회 이상 진입한 경우 3번째 진입부터는 10틱 이상 수익시 개별 청산 3회 미만은 평균가보다 10틱 이상 또는현재 총수익이 10틱 이상인 경우 청산 또는 총 3회 미만 진입한 경우는 10틱 이상 수익시 개별 청산하고 3회 이상부터는 평균가 보다 10틱 이상 또는 총수익이 10틱 이상인 경우 청산 청산 4 : 1계약 진입후 가격이 지속 상승한 경우 50틱에서 청산(익절) 도움 부탁드립니다. 감사합니다.