커뮤니티

손익합산 제어수식

프로필 이미지
새로운세상
2010-12-08 10:10:12
569
글번호 34153
답변완료
안녕하세요.. 다음 수식을 부탁드립니다. 분봉기준으로 다음과 같은 리버스시스템 수식이 있을 때 if C > ma(C,20) then Buy(); if C < ma(C,20) then Sell(); 1) "현재포지션손익+당일거래발생으로인한손익 <= -2.0pt"이면 당일 매매 중단 <설명> 1. 첫거래 진입이 발생하여 손익이 변동되고 있는데, 만약 손실이 2pt이상 발생하면 해당시점에서 청산 --> 당일매매 종료 만약 손실이 2pt미만 또는 수익에서 청산되었을 경우 두번째 거래로 진행 2. 첫번째 진입청산에서 +1pt의 수익이 발생하였고, 두번째 진입청산에서 -1.5pt의 손실이 있었고, 세번째 진입중인데 현재 -1.5pt의 손실이 발생하고 있다면 이시점에서 세번째 청산 --> 당일매매 종료 3. 첫진입청산에서 -0.5pt의 손실이 있었고, 두번째 진입중 -1.5pt의 손실이 발생하고 있다면 이시점에서 청산 --> 당일매매 종료 위와 같은 방식으로 '현재포지션 손익'과 '당일 거래발생된 손익'을 합하여 2pt이상 손실이 되는 시점에서 매매를 종료하려고 합니다. 2) 당일 진입청산이 일어난 거래중 수익거래가 5회이하,손실거래가 3회이하일 경우 매매를 지속합니다. 즉 당일 최대거래횟수는 8회이하,수익거래횟수 5회이하,손실거래 3회이하가 될 것입니다. 3) 상기 1) 2)를 동시에 만족하는 수식을 부탁드립니다. (리버스시스템입니다) 리버스의 경우 첫진입을 제외하고 두번째부터는 진입과 청산이 동시에 일어나기 때문에 당일 기발생된 손익을 계산하기도 전에 추가진입이 발생할 가능성이 있을 것 같아서 '진입시간지연'을 사용하여 새로운 진입전에 현재까지의 손익을 계산할 수 있도록 할 예정인데, 제가 말씀드린 방식이 맞는지도 궁금합니다. 이부분도 감안하여 수식 부탁드립니다. (체결을 원활히 하기 위하여 현재가 +-5 호가 선택, 손익계산을 위하여 진입시간지연 5초 사용 예정임) 감사합니다~ 그럼 오늘도 활기찬 하루가 되시기를 바라겠습니다.
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2010-12-08 16:41:50

안녕하세요 예스스탁입니다. input : 당일손익(-2); var : PLR(0),XCommission(0),XSlippage(0),OpenPL(0),dayPL(0),count(0),Loss(0),Profit(0); XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 PLR = 0; count = 0; for var1 = 0 to 10{ if sdate == EntryDate(var1) Then count = count+1; if var1 > 0 Then{ if sdate == EntryDate(var1) Then PLR = PLR+PositionProfit(var1); if sdate == ExitDate(var1) and PositionProfit(var1) < 0 Then loss = loss + 1; if sdate == ExitDate(var1) and PositionProfit(var1) > 0 Then Profit = Profit + 1; } } if MarketPosition() == 0 Then{ OpenPL = 0; dayPL = PLR; } Else{ OpenPL = (PositionProfit-(XCommission+XSlippage)); dayPL = PLR+OpenPL; } if dayPL > 당일손익 and count < 8 and Profit < 3 and Loss < 5 Then{ if C > ma(c,20) Then buy("b"); if C < ma(c,20) Then Sell("S"); } if MarketPosition == 1 and CrossDown(c,ma(c,20)) Then exitlong("BX"); if MarketPosition == -1 and CrossUp(c,ma(c,20)) Then ExitShort("SX"); if MarketPosition() == 1 and CrossDown(dayPL,당일손익) Then exitlong("XX"); 즐거운 하루되세요 > 새로운세상 님이 쓴 글입니다. > 제목 : 손익합산 제어수식 > 안녕하세요.. 다음 수식을 부탁드립니다. 분봉기준으로 다음과 같은 리버스시스템 수식이 있을 때 if C > ma(C,20) then Buy(); if C < ma(C,20) then Sell(); 1) "현재포지션손익+당일거래발생으로인한손익 <= -2.0pt"이면 당일 매매 중단 <설명> 1. 첫거래 진입이 발생하여 손익이 변동되고 있는데, 만약 손실이 2pt이상 발생하면 해당시점에서 청산 --> 당일매매 종료 만약 손실이 2pt미만 또는 수익에서 청산되었을 경우 두번째 거래로 진행 2. 첫번째 진입청산에서 +1pt의 수익이 발생하였고, 두번째 진입청산에서 -1.5pt의 손실이 있었고, 세번째 진입중인데 현재 -1.5pt의 손실이 발생하고 있다면 이시점에서 세번째 청산 --> 당일매매 종료 3. 첫진입청산에서 -0.5pt의 손실이 있었고, 두번째 진입중 -1.5pt의 손실이 발생하고 있다면 이시점에서 청산 --> 당일매매 종료 위와 같은 방식으로 '현재포지션 손익'과 '당일 거래발생된 손익'을 합하여 2pt이상 손실이 되는 시점에서 매매를 종료하려고 합니다. 2) 당일 진입청산이 일어난 거래중 수익거래가 5회이하,손실거래가 3회이하일 경우 매매를 지속합니다. 즉 당일 최대거래횟수는 8회이하,수익거래횟수 5회이하,손실거래 3회이하가 될 것입니다. 3) 상기 1) 2)를 동시에 만족하는 수식을 부탁드립니다. (리버스시스템입니다) 리버스의 경우 첫진입을 제외하고 두번째부터는 진입과 청산이 동시에 일어나기 때문에 당일 기발생된 손익을 계산하기도 전에 추가진입이 발생할 가능성이 있을 것 같아서 '진입시간지연'을 사용하여 새로운 진입전에 현재까지의 손익을 계산할 수 있도록 할 예정인데, 제가 말씀드린 방식이 맞는지도 궁금합니다. 이부분도 감안하여 수식 부탁드립니다. (체결을 원활히 하기 위하여 현재가 +-5 호가 선택, 손익계산을 위하여 진입시간지연 5초 사용 예정임) 감사합니다~ 그럼 오늘도 활기찬 하루가 되시기를 바라겠습니다.
프로필 이미지

새로운세상

2010-12-09 09:28:53

안녕하세요... 작성해주신 수식을 예스랭귀지 편집기에 그대로 복사하고, 연결선물 1분봉을 한달정도 기간으로 띄운후 적용시켜보았는데, 해당기간의 첫번째 거래만 일어나고 그후 매매가 없는 것으로 나옵니다. 수수료와 슬리피지는 '설정창'에서 했습니다. 어느 부분이 잘못된 것인지 아무리 봐도 모르겠는데, 말씀드린 것처럼 연결선물 1분봉 한달정도 기간설정후 작성해주신 로직을 적용하여 보시고 어느 부분이 잘못된 것인지 검토 부탁드리겠습니다. 1) 그리고 수식 맨 마지막 부분에 if MarketPosition() == 1 and CrossDown(dayPL,당일손익) Then exitlong("XX"); 이 있는데, 매도포지션일 경우도 고려하여 아래와 같이 추가해 주는 것이 맞는지요? if MarketPosition() == -1 and CrossDown(dayPL,당일손익) Then exitshort("SXX"); 2) 그냥 리버스로 사용할 때 if MarketPosition == 1 and CrossDown(c,ma(c,20)) Then exitlong("BX"); if MarketPosition == -1 and CrossUp(c,ma(c,20)) Then ExitShort("SX"); 이부분은 생략하여도 상관 없겠지요? 감사합니다~ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 손익합산 제어수식 > 안녕하세요 예스스탁입니다. input : 당일손익(-2); var : PLR(0),XCommission(0),XSlippage(0),OpenPL(0),dayPL(0),count(0),Loss(0),Profit(0); XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 PLR = 0; count = 0; for var1 = 0 to 10{ if sdate == EntryDate(var1) Then count = count+1; if var1 > 0 Then{ if sdate == EntryDate(var1) Then PLR = PLR+PositionProfit(var1); if sdate == ExitDate(var1) and PositionProfit(var1) < 0 Then loss = loss + 1; if sdate == ExitDate(var1) and PositionProfit(var1) > 0 Then Profit = Profit + 1; } } if MarketPosition() == 0 Then{ OpenPL = 0; dayPL = PLR; } Else{ OpenPL = (PositionProfit-(XCommission+XSlippage)); dayPL = PLR+OpenPL; } if dayPL > 당일손익 and count < 8 and Profit < 3 and Loss < 5 Then{ if C > ma(c,20) Then buy("b"); if C < ma(c,20) Then Sell("S"); } if MarketPosition == 1 and CrossDown(c,ma(c,20)) Then exitlong("BX"); if MarketPosition == -1 and CrossUp(c,ma(c,20)) Then ExitShort("SX"); if MarketPosition() == 1 and CrossDown(dayPL,당일손익) Then exitlong("XX"); 즐거운 하루되세요 > 새로운세상 님이 쓴 글입니다. > 제목 : 손익합산 제어수식 > 안녕하세요.. 다음 수식을 부탁드립니다. 분봉기준으로 다음과 같은 리버스시스템 수식이 있을 때 if C > ma(C,20) then Buy(); if C < ma(C,20) then Sell(); 1) "현재포지션손익+당일거래발생으로인한손익 <= -2.0pt"이면 당일 매매 중단 <설명> 1. 첫거래 진입이 발생하여 손익이 변동되고 있는데, 만약 손실이 2pt이상 발생하면 해당시점에서 청산 --> 당일매매 종료 만약 손실이 2pt미만 또는 수익에서 청산되었을 경우 두번째 거래로 진행 2. 첫번째 진입청산에서 +1pt의 수익이 발생하였고, 두번째 진입청산에서 -1.5pt의 손실이 있었고, 세번째 진입중인데 현재 -1.5pt의 손실이 발생하고 있다면 이시점에서 세번째 청산 --> 당일매매 종료 3. 첫진입청산에서 -0.5pt의 손실이 있었고, 두번째 진입중 -1.5pt의 손실이 발생하고 있다면 이시점에서 청산 --> 당일매매 종료 위와 같은 방식으로 '현재포지션 손익'과 '당일 거래발생된 손익'을 합하여 2pt이상 손실이 되는 시점에서 매매를 종료하려고 합니다. 2) 당일 진입청산이 일어난 거래중 수익거래가 5회이하,손실거래가 3회이하일 경우 매매를 지속합니다. 즉 당일 최대거래횟수는 8회이하,수익거래횟수 5회이하,손실거래 3회이하가 될 것입니다. 3) 상기 1) 2)를 동시에 만족하는 수식을 부탁드립니다. (리버스시스템입니다) 리버스의 경우 첫진입을 제외하고 두번째부터는 진입과 청산이 동시에 일어나기 때문에 당일 기발생된 손익을 계산하기도 전에 추가진입이 발생할 가능성이 있을 것 같아서 '진입시간지연'을 사용하여 새로운 진입전에 현재까지의 손익을 계산할 수 있도록 할 예정인데, 제가 말씀드린 방식이 맞는지도 궁금합니다. 이부분도 감안하여 수식 부탁드립니다. (체결을 원활히 하기 위하여 현재가 +-5 호가 선택, 손익계산을 위하여 진입시간지연 5초 사용 예정임) 감사합니다~ 그럼 오늘도 활기찬 하루가 되시기를 바라겠습니다.