커뮤니티

수식 질문드립니다.

프로필 이미지
캣피쉬
2021-03-11 10:55:51
832
글번호 146953
답변완료
https://www.yesstock.com/Board/View.asp?db=board100036&Ext=0&startpage=1&pageno=1&num=132355&ref=132315&Sort=&KeyField=Subject&KeyWord=%B8%B8%B1%E2 1. 위 게시판 참조해서 만들려고 해봤는데 잘 안되네요.. 만기주일 경우만 stoptrailing 적용하고 싶습니다. 현재 아래식은 stoptrailing 이 만기주 아닌경우도 적용됩니다.... 만기주만 되게 가능할까요? 2. 추가로 만기 이후도 날짜 카운트 가능하면 부탁드립니다. 월물 첫날 둘째날 셋째날 이정도 선까지 구분하고 싶습니다. 3. 트리플 만기일 지정가능한지 궁금합니다. ---------------------------- input : StartTime(91000),EndTime(150000); #Input : shortPeriod(6), longPeriod(50); Input : s1(5), s2(60); input : aaa(-0.40),bbb(0.35); input : 손절(3); input : 익절(5); input : sellfilter(0.25); input : buyfilter(0.65); input : N(5),MM(0.07); input : jinpok(8.9); input : losstick(10); input : profittick(10); input : loss(0); input : profit(0); # var : YYYY(0),MMM(0); var : ThisMonth1(0),ThisMonthXdate(0); var : NextMonth1(0),NextMonthXdate(0); var : Thurs(0),cnt(0),remain(0),mangi(0); var : Tcond(false,Data1); var : C2(0,Data2); var : C3(0,Data3); var : 최소이익(0),손실범위(0); 최소이익 = PriceScale*profittick; 손실범위 = PriceScale*losstick; #value1 = ma(C, shortPeriod); #value2 = ma(C, longPeriod); Value3 = ma(C2, s1); Value4 = ma(C2, s2); if index == 0 or sdate != sdate[1] Then { YYYY = Floor(sDate / 10000)*10000; MMM = Floor(FracPortion(sdate/10000)*100)*100; thisMonth1 = YYYY+MMM+1; if MMM+100 <= 1200 Then NextMonth1 = YYYY+(MMM+100)+1; Else NextMonth1 = (YYYY+10000)+100+1; Thurs = 0; for cnt = 0 to 15 { if DayOfWeek(thisMonth1+cnt) == 4 Then { Thurs = Thurs+1; if Thurs == 2 Then thisMonthXdate = thisMonth1+cnt; } } Thurs = 0; for cnt = 0 to 15 { if DayOfWeek(NextMonth1+cnt) == 4 Then { Thurs = Thurs+1; if Thurs == 2 Then NextMonthXdate = NextMonth1+cnt; } } if sdate <= thisMonthXdate then { remain = DateToJulian(thisMonthXdate)-DateToJulian(sdate); } Else remain = DateToJulian(NextMonthXdate)-DateToJulian(sdate); if remain == 0 then mangi = 3; else if remain >= 1 and remain <= 3 then mangi = 2; else if remain >= 4 and remain <= 10 then mangi = 1; Else mangi = 0; } 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 Tcond = true; C2 = Data2(c); C3 = Data3(c); # 매수/매도청산 if Tcond == true Then { If CrossUP(value3, value4) and c3>buyfilter and (DayHigh(0)-DayLow(0)<jinpok) #data2(c) <= aaa and Then { Buy(); if (DayHigh(0)-DayLow(0)>jinpok) and ((DayHigh(0)-(DayHigh(0)-DayLow(0))/2))<c Then ExitLong(); } If CrossDown(value3, value4) and c3<sellfilter and (DayHigh(0)-DayLow(0)<jinpok) #data2(c) >= bbb and Then { Sell(); if (DayHigh(0)-DayLow(0)>jinpok) and ((DayHigh(0)-(DayHigh(0)-DayLow(0))/2))>c Then ExitShort(); } } if Data2(Highest(C2,n) >= Lowest(C2,n)+MM) and c2[0]<c2[3] Then ExitLong(); if Data2(Highest(C2,n) >= Lowest(C2,n)+MM) and c2[0]>c2[3] Then exitshort(); SetStopEndofday(EndTime); SetStoploss(손절,PointStop); SetStopProfittarget(익절,PointStop); if mangi==2 Then { #SetStopTrailing(손실범위 , 최소이익 , PointStop); SetStopTrailing(loss ,profit , percentStop,0); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-03-11 10:58:26

안녕하세요 예스스탁입니다. 강제청산 함수는 한번 값이 셋팅되면 해당 설정이 유지됩니다. 만기주에만 셋팅이 되고 만기주가 아닐때는 해제되어야 하므로 아래와 같이 mangi==2가 아닐때는 해제되는 내용이 추가되어야 합니다. if mangi==2 Then { #SetStopTrailing(손실범위 , 최소이익 , PointStop); SetStopTrailing(loss ,profit , percentStop,0); } Else SetStopTrailing(0,0);#해제 또한 해당식이 만기주는 2, 만기일은 3을 리턴합니다. 만기일까지 포함해서 트레일링스탑을 적용하신다면 mangi>=2로 조건이 지정되어야 합니다. 즐거운 하루되세요 > 캣피쉬 님이 쓴 글입니다. > 제목 : 수식 질문드립니다. > https://www.yesstock.com/Board/View.asp?db=board100036&Ext=0&startpage=1&pageno=1&num=132355&ref=132315&Sort=&KeyField=Subject&KeyWord=%B8%B8%B1%E2 1. 위 게시판 참조해서 만들려고 해봤는데 잘 안되네요.. 만기주일 경우만 stoptrailing 적용하고 싶습니다. 현재 아래식은 stoptrailing 이 만기주 아닌경우도 적용됩니다.... 만기주만 되게 가능할까요? 2. 추가로 만기 이후도 날짜 카운트 가능하면 부탁드립니다. 월물 첫날 둘째날 셋째날 이정도 선까지 구분하고 싶습니다. 3. 트리플 만기일 지정가능한지 궁금합니다. ---------------------------- input : StartTime(91000),EndTime(150000); #Input : shortPeriod(6), longPeriod(50); Input : s1(5), s2(60); input : aaa(-0.40),bbb(0.35); input : 손절(3); input : 익절(5); input : sellfilter(0.25); input : buyfilter(0.65); input : N(5),MM(0.07); input : jinpok(8.9); input : losstick(10); input : profittick(10); input : loss(0); input : profit(0); # var : YYYY(0),MMM(0); var : ThisMonth1(0),ThisMonthXdate(0); var : NextMonth1(0),NextMonthXdate(0); var : Thurs(0),cnt(0),remain(0),mangi(0); var : Tcond(false,Data1); var : C2(0,Data2); var : C3(0,Data3); var : 최소이익(0),손실범위(0); 최소이익 = PriceScale*profittick; 손실범위 = PriceScale*losstick; #value1 = ma(C, shortPeriod); #value2 = ma(C, longPeriod); Value3 = ma(C2, s1); Value4 = ma(C2, s2); if index == 0 or sdate != sdate[1] Then { YYYY = Floor(sDate / 10000)*10000; MMM = Floor(FracPortion(sdate/10000)*100)*100; thisMonth1 = YYYY+MMM+1; if MMM+100 <= 1200 Then NextMonth1 = YYYY+(MMM+100)+1; Else NextMonth1 = (YYYY+10000)+100+1; Thurs = 0; for cnt = 0 to 15 { if DayOfWeek(thisMonth1+cnt) == 4 Then { Thurs = Thurs+1; if Thurs == 2 Then thisMonthXdate = thisMonth1+cnt; } } Thurs = 0; for cnt = 0 to 15 { if DayOfWeek(NextMonth1+cnt) == 4 Then { Thurs = Thurs+1; if Thurs == 2 Then NextMonthXdate = NextMonth1+cnt; } } if sdate <= thisMonthXdate then { remain = DateToJulian(thisMonthXdate)-DateToJulian(sdate); } Else remain = DateToJulian(NextMonthXdate)-DateToJulian(sdate); if remain == 0 then mangi = 3; else if remain >= 1 and remain <= 3 then mangi = 2; else if remain >= 4 and remain <= 10 then mangi = 1; Else mangi = 0; } 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 Tcond = true; C2 = Data2(c); C3 = Data3(c); # 매수/매도청산 if Tcond == true Then { If CrossUP(value3, value4) and c3>buyfilter and (DayHigh(0)-DayLow(0)<jinpok) #data2(c) <= aaa and Then { Buy(); if (DayHigh(0)-DayLow(0)>jinpok) and ((DayHigh(0)-(DayHigh(0)-DayLow(0))/2))<c Then ExitLong(); } If CrossDown(value3, value4) and c3<sellfilter and (DayHigh(0)-DayLow(0)<jinpok) #data2(c) >= bbb and Then { Sell(); if (DayHigh(0)-DayLow(0)>jinpok) and ((DayHigh(0)-(DayHigh(0)-DayLow(0))/2))>c Then ExitShort(); } } if Data2(Highest(C2,n) >= Lowest(C2,n)+MM) and c2[0]<c2[3] Then ExitLong(); if Data2(Highest(C2,n) >= Lowest(C2,n)+MM) and c2[0]>c2[3] Then exitshort(); SetStopEndofday(EndTime); SetStoploss(손절,PointStop); SetStopProfittarget(익절,PointStop); if mangi==2 Then { #SetStopTrailing(손실범위 , 최소이익 , PointStop); SetStopTrailing(loss ,profit , percentStop,0); }