당일 누적손익이 지정한 당일수익 이상이거나 지정한 당일손실 이상이면 청산하고
진입을 제한합니다.
거래시간 : StartTime~EndTime, EndTime에 당일청산
진입은 예제로 이평크로스입니다.
당일수익과 당일손실은 틱수로 지정합니다.
Input : 당일수익틱수(50),당일손실틱수(50);
input : StartTime(80000),EndTime(50000);
input : P1(5),P2(20);
Var : NP(0),N1(0),당일실현손익(0),당일수익(0),당일손실(0);
var : Tcond(false),Xcond(false);
var : mav1(0),mav2(0);
//starttime가 Endtime보다 클때(같은날 당일청산하는 경우에는 Endtime으로 바로 지정
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
//starttime가 Endtime작을때,(다음날 새벽에 청산하는 경우 0시에 Endtime으로 지정)
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
//지정한 끝시간이 되면 거래시간 구간체크하는 변수는 false로 변경
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
//지정한 시작시간이 되면
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
//starttime가 Endtime작을때,(다음날 새벽에 청산하는 경우)
IF Endtime <= starttime Then
{
//당일청산해제
SetStopEndofday(0);
}
//거래시간 구간체크하는 변수는 초기값으로 true
Tcond = true;
//당일수익, 당일손실 도당을 체크하는 변수는 초기값으로 false
Xcond = False;
}
//지정한 틱수를 포인트로 환산
당일수익 = PriceScale*당일수익틱수;
당일손실 = PriceScale*당일손실틱수;
//총손익(청산완료된 거래까지의 총손익)
NP = NetProfit;
//영업일 변경시
if Bdate != Bdate[1] Then
{
//전일까지의 총손익 저장
N1 = NP[1];
}
//현재 총손익에서 전일값을 차감해서 당일 총손익 계산
당일실현손익 = NetProfit-N1;
//TotalTrades는 총거래횟수로 TotalTrades의 상승은 청산이 발생한것을 의미합니다)
if TotalTrades > TotalTrades[1] then
{
//당일손익이 당일수익이나 당일손실에 도달했는제 체크해서 도달했으면 Xcond는 true
if 당일실현손익 >= 당일수익 or 당일실현손익 <= -당일손실 Then
Xcond = true;
//지정한 이름의 청산이 발생하면 Xcond는 true
if (IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or
IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
}
mav1 = ma(C,P1);
mav2 = ma(C,P2);
//지정한 시간구간 사이이고 Xcond가 False일때만 진입가능
if Tcond == true and Xcond == false then
{
if MarketPosition <= 0 and CrossUp(mav1,mav2) Then
Buy();
if MarketPosition >= 0 and CrossDown(mav1,mav2) Then
Sell();
}
//매수포지션 진입후
if MarketPosition == 1 then
{
//당일수익 도달가격 계산 : 당일수익값에서 당일실현손익을 빼고 진입수량으로 나누어 상승폭을 계산해서 진입가에 더함
//atlimit타입으로 해당 가격 이상의 현재가 발생시 즉시청산되게 작성
ExitLong("dbp",atlimit,EntryPrice+((당일수익-당일실현손익)/CurrentContracts));
//당일손실 도달가격 계산 : 당일손실값과 당일실현손익을 더하고 진입수량으로 나누어 하락폭을 계산해서 진입가에 뺌
//atstop타입으로 해당 가격 이하의 현재가 발생시 즉시청산되게 작성
ExitLong("dbl",AtStop,EntryPrice-((당일손실+당일실현손익)/CurrentContracts));
}
if MarketPosition == -1 then
{
//당일수익 도달가격 계산 : 당일수익값에서 당일실현손익을 빼고 진입수량으로 나누어 상승폭을 계산해서 진입가에 뺌
//atlimit타입으로 해당 가격 이하의 현재가 발생시 즉시청산되게 작성
ExitShort("dsp",atlimit,EntryPrice-((당일수익-당일실현손익)/CurrentContracts));
//당일손실 도달가격 계산 : 당일손실값과 당일실현손익을 더하고 진입수량으로 나누어 하락폭을 계산해서 진입가에 더함
//atstop타입으로 해당 가격 이상의 현재가 발생시 즉시청산되게 작성
ExitShort("dsl",AtStop,EntryPrice+((당일손실+당일실현손익)/CurrentContracts));
}
JavaScript
복사