커뮤니티

시스템식 다시한번 검토부탁드립니다

프로필 이미지
bigdeal
2015-07-17 17:21:57
138
글번호 88612
답변완료

첨부 이미지

안녕하세요 질의시 마다 신속한 답변 주심에 너무 감사드립니다. "당일 거래에서 수수료나 슬리피지를 포함해서 일정금액이상 누적수익이나 손실발생하면 진입금지하는 시스템식" 질의 답변내용대로 아래와 같이 수식을 만들어 테스트 해보았는데 첨부와 같이 엉뚱한 곳에서 청산되는 결과가 나와서 다시한번 검토 부탁드립니다. 슬리피지는 매수/매도 진입 매수/매도 청산 0.3틱 이고 강제청산에서 목표수익 1pt 입니다.. 수고하십시요.. 식 ) input : 당일수익(1),당일손실(-1); var : NP(0),PreNP(0),DayPL(0),XX(0),YY(0); var1 = ma(C,20); NP = NetProfit; if date != date[1] Then preNP = NP[1]; dayPL = (NP-PreNP); if dayPL < 당일수익 and daypl > 당일손실 then { if crossup(c,var1) Then buy(); if crossdown(c,var1) Then sell(); } if MarketPosition == 1 Then{ if CommissionMethod == 0 Then XX = (EntryPrice*(EntryCommission/100)+C*(ExitCommission/100))*CurrentContracts; if CommissionMethod == 1 Then XX = (EntryCommission+ExitCommission)*CurrentContracts; if CommissionMethod == 2 Then XX = (EntryCommission*PriceScale+ExitCommission*PriceScale)*CurrentContracts; if SlippageMethod == 0 Then YY = (EntryPrice*(EntrySlippage/100)+C*(ExitSlippage/100))*CurrentContracts; if SlippageMethod == 1 Then YY = (EntrySlippage+ExitSlippage)*CurrentContracts; if SlippageMethod == 2 Then YY = (EntrySlippage*PriceScale+ExitSlippage*PriceScale)*CurrentContracts; ExitLong("bx1",AtLimit,EntryPrice+(당일수익-daypl)+(XX+YY)); ExitLong("bx2",AtStop,EntryPrice-(당일손실+daypl)-(XX+YY)); } if MarketPosition == -1 Then{ if CommissionMethod == 0 Then XX = (EntryPrice*(EntryCommission/100)+C*(ExitCommission/100))*CurrentContracts; if CommissionMethod == 1 Then XX = (EntryCommission+ExitCommission)*CurrentContracts; if CommissionMethod == 2 Then XX = (EntryCommission*PriceScale+ExitCommission*PriceScale)*CurrentContracts; if SlippageMethod == 0 Then YY = (EntryPrice*(EntrySlippage/100)+C*(ExitSlippage/100))*CurrentContracts; if SlippageMethod == 1 Then YY = (EntrySlippage+ExitSlippage)*CurrentContracts; if SlippageMethod == 2 Then YY = (EntrySlippage*PriceScale+ExitSlippage*PriceScale)*CurrentContracts; ExitShort("sx1",AtLimit,EntryPrice-(당일수익-daypl)-(XX+YY)); ExitShort("sx2",AtStop,EntryPrice+(당일손실+daypl)+(XX+YY)); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-07-20 10:01:17

안녕하세요 예스스탁입니다. 외부변수를 모두 양수로 지정해야 하는데 음수로 잘못 적어 드렸습니다. 외부변수는 당일수익, 당일손실 모두 양수로 지정하시면 됩니다. 진입후 역방향 진입에 의해 리버스 될때도 당일수익/당일손실 감안하게 내용을 추가했습니다. 기존에는 리버스는 체크하지 않았습니다. input : 당일수익(1),당일손실(1); var : NP(0),PreNP(0),DayPL(0),XX(0),YY(0); var1 = ma(C,20); NP = NetProfit; if date != date[1] Then preNP = NP[1]; dayPL = (NP-PreNP); if dayPL < 당일수익 and daypl > -당일손실 then { if MarketPosition == 0 and crossup(c,var1) Then buy("b"); if MarketPosition == 0 and crossdown(c,var1) Then sell("s"); } if MarketPosition == 1 Then{ if CommissionMethod == 0 Then XX = (EntryPrice*(EntryCommission/100)+C*(ExitCommission/100))*CurrentContracts; if CommissionMethod == 1 Then XX = (EntryCommission+ExitCommission)*CurrentContracts; if CommissionMethod == 2 Then XX = (EntryCommission*PriceScale+ExitCommission*PriceScale)*CurrentContracts; if SlippageMethod == 0 Then YY = (EntryPrice*(EntrySlippage/100)+C*(ExitSlippage/100))*CurrentContracts; if SlippageMethod == 1 Then YY = (EntrySlippage+ExitSlippage)*CurrentContracts; if SlippageMethod == 2 Then YY = (EntrySlippage*PriceScale+ExitSlippage*PriceScale)*CurrentContracts; if CrossDown(c,var1) Then{ if (C >= EntryPrice+(당일수익-daypl)+(XX+YY)) or ( C <= EntryPrice-(당일손실+daypl)+(XX+YY)) Then exitlong("bx"); Else Sell("S2"); } ExitLong("bx1",AtLimit,EntryPrice+(당일수익-daypl)+(XX+YY)); ExitLong("bx2",AtStop,EntryPrice-(당일손실+daypl)+(XX+YY)); } if MarketPosition == -1 Then{ if CommissionMethod == 0 Then XX = (EntryPrice*(EntryCommission/100)+C*(ExitCommission/100))*CurrentContracts; if CommissionMethod == 1 Then XX = (EntryCommission+ExitCommission)*CurrentContracts; if CommissionMethod == 2 Then XX = (EntryCommission*PriceScale+ExitCommission*PriceScale)*CurrentContracts; if SlippageMethod == 0 Then YY = (EntryPrice*(EntrySlippage/100)+C*(ExitSlippage/100))*CurrentContracts; if SlippageMethod == 1 Then YY = (EntrySlippage+ExitSlippage)*CurrentContracts; if SlippageMethod == 2 Then YY = (EntrySlippage*PriceScale+ExitSlippage*PriceScale)*CurrentContracts; if CrossUp(c,var1) Then{ MessageLog("%.2f %.2f %.2f",C,EntryPrice+(당일손실+daypl)-(XX+YY),EntryPrice-(당일수익-daypl)-(XX+YY)); if (C >= EntryPrice+(당일손실+daypl)-(XX+YY)) or (C <= EntryPrice-(당일수익-daypl)-(XX+YY)) Then ExitShort("sx"); Else Buy("b2"); } ExitShort("sx1",AtLimit,EntryPrice-(당일수익-daypl)-(XX+YY)); ExitShort("sx2",AtStop,EntryPrice+(당일손실+daypl)-(XX+YY)); } 즐거운 하루되세요 > bigdeal 님이 쓴 글입니다. > 제목 : 시스템식 다시한번 검토부탁드립니다 > 안녕하세요 질의시 마다 신속한 답변 주심에 너무 감사드립니다. "당일 거래에서 수수료나 슬리피지를 포함해서 일정금액이상 누적수익이나 손실발생하면 진입금지하는 시스템식" 질의 답변내용대로 아래와 같이 수식을 만들어 테스트 해보았는데 첨부와 같이 엉뚱한 곳에서 청산되는 결과가 나와서 다시한번 검토 부탁드립니다. 슬리피지는 매수/매도 진입 매수/매도 청산 0.3틱 이고 강제청산에서 목표수익 1pt 입니다.. 수고하십시요.. 식 ) input : 당일수익(1),당일손실(-1); var : NP(0),PreNP(0),DayPL(0),XX(0),YY(0); var1 = ma(C,20); NP = NetProfit; if date != date[1] Then preNP = NP[1]; dayPL = (NP-PreNP); if dayPL < 당일수익 and daypl > 당일손실 then { if crossup(c,var1) Then buy(); if crossdown(c,var1) Then sell(); } if MarketPosition == 1 Then{ if CommissionMethod == 0 Then XX = (EntryPrice*(EntryCommission/100)+C*(ExitCommission/100))*CurrentContracts; if CommissionMethod == 1 Then XX = (EntryCommission+ExitCommission)*CurrentContracts; if CommissionMethod == 2 Then XX = (EntryCommission*PriceScale+ExitCommission*PriceScale)*CurrentContracts; if SlippageMethod == 0 Then YY = (EntryPrice*(EntrySlippage/100)+C*(ExitSlippage/100))*CurrentContracts; if SlippageMethod == 1 Then YY = (EntrySlippage+ExitSlippage)*CurrentContracts; if SlippageMethod == 2 Then YY = (EntrySlippage*PriceScale+ExitSlippage*PriceScale)*CurrentContracts; ExitLong("bx1",AtLimit,EntryPrice+(당일수익-daypl)+(XX+YY)); ExitLong("bx2",AtStop,EntryPrice-(당일손실+daypl)-(XX+YY)); } if MarketPosition == -1 Then{ if CommissionMethod == 0 Then XX = (EntryPrice*(EntryCommission/100)+C*(ExitCommission/100))*CurrentContracts; if CommissionMethod == 1 Then XX = (EntryCommission+ExitCommission)*CurrentContracts; if CommissionMethod == 2 Then XX = (EntryCommission*PriceScale+ExitCommission*PriceScale)*CurrentContracts; if SlippageMethod == 0 Then YY = (EntryPrice*(EntrySlippage/100)+C*(ExitSlippage/100))*CurrentContracts; if SlippageMethod == 1 Then YY = (EntrySlippage+ExitSlippage)*CurrentContracts; if SlippageMethod == 2 Then YY = (EntrySlippage*PriceScale+ExitSlippage*PriceScale)*CurrentContracts; ExitShort("sx1",AtLimit,EntryPrice-(당일수익-daypl)-(XX+YY)); ExitShort("sx2",AtStop,EntryPrice+(당일손실+daypl)+(XX+YY)); }