커뮤니티

시스템식 부탁드립니다.

프로필 이미지
양치기
2023-04-14 10:57:23
1016
글번호 168174
답변완료

첨부 이미지

항상 도움 주셔서 감사합니다. 아래와 같이 코딩했는데 제가 생각했던 의도대로 되지 않아서요 보완좀 부탁드립니다. Inputs : PT(50),SL(300); Inputs : TS(10),TP(30); Inputs : 매수물타기(30),매도물타기(30) ; Inputs : 익절폭(10) ; Inputs : 틱사이즈(0.00005) ; Inputs : 이평기간1(20); Inputs : SP(24), LP(52), SigP(18); Var : 이평20(0) ; Var : MACDV(0), MACDsig(0) ; //MACD var : 매수가격(0), 매도가격(0); Var : 주가추세(0); 이평20 = ema(C,이평기간1) ; MACDV = MACD(sP, lP); MACDsig = ema(MACDV,SIGP); if countif(C>이평20,5)>=3 and countif(이평20>이평20[1],5)>=3 and countif(Macdv>macdv[1],5)>=3 and countif(MACDV>MAcdsig,5)>=3 then 주가추세 = 1 ; else if countif(C<이평20,5)>=3 and countif(이평20<이평20[1],5)>=3 and countif(Macdv<macdv[1],5)>=3 and countif(MACDV<MAcdsig,5)>=3 then 주가추세 = -1 ; else 주가추세 = 0 ; var1 = 매수물타기*PriceScale; If marketposition == 0 and 주가추세 == 1 then { Buy("B1",OnClose,DEf,1); 매수가격 = Max(C,EntryPrice(0),LatestEntryPrice(0)) ; } if MarketPosition == 1 Then { 매수가격 = Max(C,EntryPrice(0),AvgEntryPrice,LatestEntryPrice(0)) ; if MaxEntries(0) == 1 then Buy("B2",AtLimit,매수가격-var1*MaxEntries,1); if MaxEntries(0) == 2 Then Buy("B3",AtLimit,매수가격-var1*MaxEntries,2); if MaxEntries(0) == 3 Then Buy("B4",AtLimit,매수가격-var1*MaxEntries,4); if MaxEntries(0) == 4 Then Buy("B5",AtLimit,매수가격-var1*MaxEntries,8); if MaxEntries(0) == 5 Then Buy("B6",AtLimit,매수가격-var1*MaxEntries,12); if OpenPositionProfit/틱사이즈 > 익절폭*PriceScale Then ExitLong("BX",AtLimit,C+익절폭*PriceScale); } var2 = 매도물타기*PriceScale; If marketposition == 0 and 주가추세 == -1 then { Sell("S1",OnClose,DEf,1); 매도가격 = Min(C,EntryPrice(0),LatestEntryPrice(0)) ; } if MarketPosition == -1 and CurrentContracts <= 총계약수 Then { 매도가격 = Min(C,EntryPrice(0),AvgEntryPrice,LatestEntryPrice(0)) ; if MaxEntries(0) == 1 then Sell("S2",AtLimit,매도가격+var2*MaxEntries,1); if MaxEntries(0) == 2 Then Sell("S3",AtLimit,매도가격+var2*MaxEntries,2); if MaxEntries(0) == 3 Then Sell("S4",AtLimit,매도가격+var2*MaxEntries,4); if MaxEntries(0) == 4 Then Sell("S5",AtLimit,매도가격+var2*MaxEntries,8); if MaxEntries(0) == 5 Then Sell("S6",AtLimit,매도가격+var2*MaxEntries,12); if OpenPositionProfit/틱사이즈 > 익절폭*PriceScale Then ExitShort("SX",AtLimit,C-익절폭*PriceScale); } SetStopLoss(SL*PriceScale,PointStop); SetStopProfittarget(PT*PriceScale,PointStop); SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop); 위 같이 코딩했는데요. 물타기 할때최대 5번까지 진입하고 싶은데 매매 내역을 보니까 여러번 진입 했습니다. 5번째 진입 후 청산 후 다시 진입은 가능하지만 청산되지 않은 시점에서 다시 추가로 진입이 되었습니다. 그리고 가격도 동일한 가격으로 진입이 됩니다. 총 누적 계약수가 최대 26계약까지 가능한데 26계약 이상으로 매수진입이 되어서요. 미청산 상태에서는 추가 진입이 되지 않도록 수정 좀 부탁드립니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-04-14 14:51:43

안녕하세요 예스스탁입니다. 올려주신 내용은 수식으로 별도로 처리할 내용이 없습니다. 피라미딩 설정이나 직접 의도에 맞게 수정하셔야 합니다. 1 올려주신 내용은 파리미딩설정으로 처리하셔야 합니다. 청산되지 않으면 진입별로 1회 진입하셔야 하므로 피라미딩을 다른진입신호만 허용으로 설정하고 적용하시면 됩니다. 2 현재 진입수량이 1번진입부터 6번까지 총 28개 입니다. 글에는 26으로 되어 있는데 해당 부분 의도하시는 내용에 맞게 수량 조정하시기 바랍니다. 3 atlimit타입은 매수에서는 지정한 가격 이하 매도에서는 지정한 가격 이상입니다. 현재 매도가격이 여러가격 중 최저가 입니다. 해당 최저가보다 현재가격이 높으면 청산발생후 바로 동일진입이 발생할 수 있습니다. 즐거운 하루되세요 > 양치기 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 항상 도움 주셔서 감사합니다. 아래와 같이 코딩했는데 제가 생각했던 의도대로 되지 않아서요 보완좀 부탁드립니다. Inputs : PT(50),SL(300); Inputs : TS(10),TP(30); Inputs : 매수물타기(30),매도물타기(30) ; Inputs : 익절폭(10) ; Inputs : 틱사이즈(0.00005) ; Inputs : 이평기간1(20); Inputs : SP(24), LP(52), SigP(18); Var : 이평20(0) ; Var : MACDV(0), MACDsig(0) ; //MACD var : 매수가격(0), 매도가격(0); Var : 주가추세(0); 이평20 = ema(C,이평기간1) ; MACDV = MACD(sP, lP); MACDsig = ema(MACDV,SIGP); if countif(C>이평20,5)>=3 and countif(이평20>이평20[1],5)>=3 and countif(Macdv>macdv[1],5)>=3 and countif(MACDV>MAcdsig,5)>=3 then 주가추세 = 1 ; else if countif(C<이평20,5)>=3 and countif(이평20<이평20[1],5)>=3 and countif(Macdv<macdv[1],5)>=3 and countif(MACDV<MAcdsig,5)>=3 then 주가추세 = -1 ; else 주가추세 = 0 ; var1 = 매수물타기*PriceScale; If marketposition == 0 and 주가추세 == 1 then { Buy("B1",OnClose,DEf,1); 매수가격 = Max(C,EntryPrice(0),LatestEntryPrice(0)) ; } if MarketPosition == 1 Then { 매수가격 = Max(C,EntryPrice(0),AvgEntryPrice,LatestEntryPrice(0)) ; if MaxEntries(0) == 1 then Buy("B2",AtLimit,매수가격-var1*MaxEntries,1); if MaxEntries(0) == 2 Then Buy("B3",AtLimit,매수가격-var1*MaxEntries,2); if MaxEntries(0) == 3 Then Buy("B4",AtLimit,매수가격-var1*MaxEntries,4); if MaxEntries(0) == 4 Then Buy("B5",AtLimit,매수가격-var1*MaxEntries,8); if MaxEntries(0) == 5 Then Buy("B6",AtLimit,매수가격-var1*MaxEntries,12); if OpenPositionProfit/틱사이즈 > 익절폭*PriceScale Then ExitLong("BX",AtLimit,C+익절폭*PriceScale); } var2 = 매도물타기*PriceScale; If marketposition == 0 and 주가추세 == -1 then { Sell("S1",OnClose,DEf,1); 매도가격 = Min(C,EntryPrice(0),LatestEntryPrice(0)) ; } if MarketPosition == -1 and CurrentContracts <= 총계약수 Then { 매도가격 = Min(C,EntryPrice(0),AvgEntryPrice,LatestEntryPrice(0)) ; if MaxEntries(0) == 1 then Sell("S2",AtLimit,매도가격+var2*MaxEntries,1); if MaxEntries(0) == 2 Then Sell("S3",AtLimit,매도가격+var2*MaxEntries,2); if MaxEntries(0) == 3 Then Sell("S4",AtLimit,매도가격+var2*MaxEntries,4); if MaxEntries(0) == 4 Then Sell("S5",AtLimit,매도가격+var2*MaxEntries,8); if MaxEntries(0) == 5 Then Sell("S6",AtLimit,매도가격+var2*MaxEntries,12); if OpenPositionProfit/틱사이즈 > 익절폭*PriceScale Then ExitShort("SX",AtLimit,C-익절폭*PriceScale); } SetStopLoss(SL*PriceScale,PointStop); SetStopProfittarget(PT*PriceScale,PointStop); SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop); 위 같이 코딩했는데요. 물타기 할때최대 5번까지 진입하고 싶은데 매매 내역을 보니까 여러번 진입 했습니다. 5번째 진입 후 청산 후 다시 진입은 가능하지만 청산되지 않은 시점에서 다시 추가로 진입이 되었습니다. 그리고 가격도 동일한 가격으로 진입이 됩니다. 총 누적 계약수가 최대 26계약까지 가능한데 26계약 이상으로 매수진입이 되어서요. 미청산 상태에서는 추가 진입이 되지 않도록 수정 좀 부탁드립니다.