커뮤니티

수정부탁드립니다.

프로필 이미지
9단
2016-03-18 14:28:51
66
글번호 96387
답변완료
아래수식은 마켓포지션이 바뀌면 평가자산의 반을 안전자산으로 고정시킨뒤 이후에 평가자산이 어떻게 변하던간에 안전자산을 뺀 값으로 진입수량을 결정하는 전략의 일부입니다. *** 디버깅해보면 마켓포지션이 바뀌기 한줄전의 값으로 진입수량이 결정되는 문제점을 해결하고 싶습니다. 첫 진입수량은 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);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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);