예스스탁
예스스탁 답변
2016-03-18 18:16:55
안녕하세요
예스스탁입니다.
1.
수식은 위에서 아래로 읽어들어 갑니다.
Input: 원계정(100000),증거금(3000),포인트밸류(1000),안전자산비율(0.5);
Var: 평가자산(0),진입수량(0),안전자산(0);
If MarketPosition != MarketPosition[1] Then{
안전자산 = 평가자산*안전자산비율;
}
평가자산 = 원계정 + NetProfit*포인트밸류 + OpenPositionProfit*포인트밸류;
진입수량 = Int((평가자산-안전자산)/증거금);
위와 같이 작성하시면
If MarketPosition != MarketPosition[1] Then{
위 조건이 만족할때 평가자산이
아직 현재봉에서 계산하기 전이므로 기존에 계산된값(전봉값)이 사용됩니다.
아래와 같이 평가자산을 if문보다 위에 위치하시면 됩니다.
Input: 원계정(100000),증거금(3000),포인트밸류(1000),안전자산비율(0.5);
Var: 평가자산(0),진입수량(0),안전자산(0);
평가자산 = 원계정 + NetProfit*포인트밸류 + OpenPositionProfit*포인트밸류;
If MarketPosition != MarketPosition[1] Then{
안전자산 = 평가자산*안전자산비율;
}
진입수량 = Int((평가자산-안전자산)/증거금);
If Ma(C,5) > Ma(C,20) Then Buy("매수",AtMarket,DEF,진입수량);
If Ma(C,5) < Ma(C,20) Then Sell("매도",AtMarket,DEF,진입수량);
2
"첫 진입수량은 33이아닌 16으로 되야하고"
위 내용은 어떤 내용인지 이해를 못했습니다.
신호가 발생한 이후에 포지션이 변동이 생기게 됩니다.
첫진입은 이전에 포지션이 변경이 없었으므로 안전자산 값이 0입니다.
NetProfit,OpenPositionProfit또한 0이므로 실상 원계정/증거금 으로만 계산이 됩니다.
첫진입수량을 16이 되기 위해서는 원계정이 절반값만 사용하는 방법뿐이 없습니다.
Input: 원계정(100000),증거금(3000),포인트밸류(1000),안전자산비율(0.5);
Var: 평가자산(0),진입수량(0),안전자산(0);
평가자산 = 원계정 + NetProfit*포인트밸류 + OpenPositionProfit*포인트밸류;
If index == 0 or MarketPosition != MarketPosition[1] Then{
안전자산 = 평가자산*안전자산비율;
}
진입수량 = Int((평가자산-안전자산)/증거금);
If Ma(C,5) > Ma(C,20) Then Buy("매수",AtMarket,DEF,진입수량);
If Ma(C,5) < Ma(C,20) Then Sell("매도",AtMarket,DEF,진입수량);
즐거운 하루되세요
> 9단 님이 쓴 글입니다.
> 제목 : 수정부탁드립니다.
> 아래수식은 마켓포지션이 바뀌면 평가자산의 반을 안전자산으로 고정시킨뒤 이후에 평가자산이 어떻게 변하던간에 안전자산을 뺀 값으로 진입수량을 결정하는 전략의 일부입니다.
*** 디버깅해보면 마켓포지션이 바뀌기 한줄전의 값으로 진입수량이 결정되는 문제점을 해결하고 싶습니다.
첫 진입수량은 33이아닌 16으로 되야하고, 이후에도 진입수량의 값은 마켓포지션이 바뀌었을때의 안전자산값이 적용되게 수정부탁드립니다.
###########################################
Input: 원계정(100000),증거금(3000),포인트밸류(1000),안전자산비율(0.5);
Var: 평가자산(0),진입수량(0),안전자산(0);
If MarketPosition != MarketPosition[1] Then{
안전자산 = 평가자산*안전자산비율;
}
평가자산 = 원계정 + NetProfit*포인트밸류 + OpenPositionProfit*포인트밸류;
진입수량 = Int((평가자산-안전자산)/증거금);
If Ma(C,5) > Ma(C,20) Then Buy("매수",AtMarket,DEF,진입수량);
If Ma(C,5) < Ma(C,20) Then Sell("매도",AtMarket,DEF,진입수량);
MessageLog("시가,%.2f,종가,%.2f,MP,%.0f,NP,%.0f,OpenPP,%.0f,안전자산,%.0f,평가자산,%.0f,계약수,%.0f,마진,%.0f",open,close,MarketPosition,NetProfit*포인트밸류,OpenPositionProfit*포인트밸류,안전자산,평가자산,CurrentContracts,증거금*CurrentContracts);