커뮤니티

수식 문의드립니다

프로필 이미지
doilzul
2024-06-09 14:26:23
625
글번호 180417
답변완료
도움 많이 받고 있습니다. 감사합니다 이전 가상거래 추적을 해서 손실시에만 진입하는 필터를 적용하고자 합니다 아래 전략에 적용하는 방법이 있는지요? 제가 짜보려 아무리해도 거래가 초기 2~3개만 되어서.... 감사합니다 input:swingPeriod(5); Var:신고가(False), 신저가(False), j(0),jj(0),최종꼭지점(""),추세구간(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime var : TL1(0); var : HighStop(0), LowStop(0); &#8203; # 추세 판정 신고가 = Highest(H,swingPeriod) == H ; 신저가 = Lowest (L,swingPeriod) == L ; &#8203; If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생 If 최종꼭지점 == "저점" Then { If 저[1,1] > L Then 추세구간 = -1; Else 추세구간 = 1; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < H Then 추세구간 = 1; Else 추세구간 = -1; } } Else If 신고가 == True Then //신고가 발생 추세구간 = 1; Else If 신저가 == True Then //신저가 발생 추세구간 = -1; &#8203; # 상승추세 구간 If 추세구간 == 1 Then { If 최종꼭지점 == "저점" Then { For j = 3 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = H; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 고[1,1] < H Then { // 1번 고점보다 높은 고가 출현 고[1,1] = H; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } 최종꼭지점 = "고점"; } &#8203; # 하락추세 구간 If 추세구간 == -1 Then { If 최종꼭지점 == "고점" then { For j = 3 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = L; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 저[1,1] > L then { 저[1,1] = L; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } 최종꼭지점 = "저점"; } &#8203; # 직전 스윙고가, 스윙저가 if 추세구간 == 1 Then HighStop = 고[2,1]; Else HighStop = 고[1,1]; &#8203; if 추세구간 == -1 Then LowStop = 저[2,1]; Else LowStop = 저[1,1]; &#8203; # 손실필터 if TotalTrades > TotalTrades[1] Then { if PositionProfit(1) < 0 Then trade = true; Else { trade = False; mp = 0; } } if MarketPosition == 0 and trade == False Then { If mp == 0 and CrossUP(C, HighStop) Then { ep = c; mp = 1; If mp == 1 and CrossDown(C, LowStop ) Then { mp = 0; xp = c; if xp < ep Then trade = true; } } If mp == 0 and CrossDown(C, LowStop) Then { ep = c; mp = -1; If mp == -1 and CrossUp(C, HighStop ) Then { mp = 0; xp = c; if xp > ep Then trade = true; } } } # 매매식 if MarketPosition <> 1 Then Buy("B", AtStop, HighStop); &#8203; if MarketPosition <> -1 Then Sell("S", AtStop, LowStop);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-06-10 15:04:35

안녕하세요 예스스탁입니다. 주석 참고하시기 바랍니다. input:swingPeriod(5); Var:신고가(False), 신저가(False), j(0),jj(0),최종꼭지점(""),추세구간(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime var : TL1(0); var : HighStop(0), LowStop(0),mp(0),ep(0); # 추세 판정 신고가 = Highest(H,swingPeriod) == H ; 신저가 = Lowest (L,swingPeriod) == L ; If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생 If 최종꼭지점 == "저점" Then { If 저[1,1] > L Then 추세구간 = -1; Else 추세구간 = 1; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < H Then 추세구간 = 1; Else 추세구간 = -1; } } Else If 신고가 == True Then //신고가 발생 추세구간 = 1; Else If 신저가 == True Then //신저가 발생 추세구간 = -1; # 상승추세 구간 If 추세구간 == 1 Then { If 최종꼭지점 == "저점" Then { For j = 3 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = H; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 고[1,1] < H Then { // 1번 고점보다 높은 고가 출현 고[1,1] = H; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } 최종꼭지점 = "고점"; } # 하락추세 구간 If 추세구간 == -1 Then { If 최종꼭지점 == "고점" then { For j = 3 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = L; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 저[1,1] > L then { 저[1,1] = L; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } 최종꼭지점 = "저점"; } # 직전 스윙고가, 스윙저가 if 추세구간 == 1 Then HighStop = 고[2,1]; Else HighStop = 고[1,1]; if 추세구간 == -1 Then LowStop = 저[2,1]; Else LowStop = 저[1,1]; #HighStop터치 if mp <= 0 and H >= HighStop and H[1] < HighStop and HighStop > 0 Then { #mp는 1 mp = 1; #진입가는 HighStop ep = HighStop; #시가가 HighStop보다 크면 시가가 진입가 if O >= HighStop Then ep = O; } #LowStop터치 if mp >= 0 and L <= LowStop and L[1] > LowStop and LowStop > 0 Then { #mp는 -1 mp = -1; #진입가는 LowStop ep = LowStop; #시가가 LowStop이하이면 진입가는 시가 if O <= HighStop Then ep = O; } # mp가 -1일때 HighStop이 진입가보다 크고 (가상 매도진입후 HighStop에 도달하면 손실) # HighStop을 터치하면 매수 if mp == -1 and HighStop > ep Then Buy("B", AtStop, HighStop); # mp가 1일때 LowStop이 진입가보다 작고 (가상 매수진입후 LowStop에 도달하면 손실) # LowStop을 터치하면 매도 if mp == 1 and lowStop < ep Then Sell("S", AtStop, LowStop); 즐거운 하루되세요 > doilzul 님이 쓴 글입니다. > 제목 : 수식 문의드립니다 > 도움 많이 받고 있습니다. 감사합니다 이전 가상거래 추적을 해서 손실시에만 진입하는 필터를 적용하고자 합니다 아래 전략에 적용하는 방법이 있는지요? 제가 짜보려 아무리해도 거래가 초기 2~3개만 되어서.... 감사합니다 input:swingPeriod(5); Var:신고가(False), 신저가(False), j(0),jj(0),최종꼭지점(""),추세구간(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime var : TL1(0); var : HighStop(0), LowStop(0); &#8203; # 추세 판정 신고가 = Highest(H,swingPeriod) == H ; 신저가 = Lowest (L,swingPeriod) == L ; &#8203; If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생 If 최종꼭지점 == "저점" Then { If 저[1,1] > L Then 추세구간 = -1; Else 추세구간 = 1; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < H Then 추세구간 = 1; Else 추세구간 = -1; } } Else If 신고가 == True Then //신고가 발생 추세구간 = 1; Else If 신저가 == True Then //신저가 발생 추세구간 = -1; &#8203; # 상승추세 구간 If 추세구간 == 1 Then { If 최종꼭지점 == "저점" Then { For j = 3 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = H; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 고[1,1] < H Then { // 1번 고점보다 높은 고가 출현 고[1,1] = H; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } 최종꼭지점 = "고점"; } &#8203; # 하락추세 구간 If 추세구간 == -1 Then { If 최종꼭지점 == "고점" then { For j = 3 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = L; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 저[1,1] > L then { 저[1,1] = L; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } 최종꼭지점 = "저점"; } &#8203; # 직전 스윙고가, 스윙저가 if 추세구간 == 1 Then HighStop = 고[2,1]; Else HighStop = 고[1,1]; &#8203; if 추세구간 == -1 Then LowStop = 저[2,1]; Else LowStop = 저[1,1]; &#8203; # 손실필터 if TotalTrades > TotalTrades[1] Then { if PositionProfit(1) < 0 Then trade = true; Else { trade = False; mp = 0; } } if MarketPosition == 0 and trade == False Then { If mp == 0 and CrossUP(C, HighStop) Then { ep = c; mp = 1; If mp == 1 and CrossDown(C, LowStop ) Then { mp = 0; xp = c; if xp < ep Then trade = true; } } If mp == 0 and CrossDown(C, LowStop) Then { ep = c; mp = -1; If mp == -1 and CrossUp(C, HighStop ) Then { mp = 0; xp = c; if xp > ep Then trade = true; } } } # 매매식 if MarketPosition <> 1 Then Buy("B", AtStop, HighStop); &#8203; if MarketPosition <> -1 Then Sell("S", AtStop, LowStop);