커뮤니티
시스템식 다시한번 검토부탁드립니다
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. 89118_질문용.JPG (0.07 MB)
답변 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));
}