Search
📝

당일수익, 당일손실 제한

당일 누적손익이 지정한 당일수익 이상이거나 지정한 당일손실 이상이면 청산하고 진입을 제한합니다.
거래시간 : 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
복사