커뮤니티

전략 손익결과로 진입 사이즈 조절

프로필 이미지
기사단장
2023-07-30 19:28:36
818
글번호 171050
답변완료
담당자님 항상 도움 주셔서 감사드립니다. 다름이아니라 전략 성과함수인 NetProfit 결과 자체를 활용하여, 과거 50일 손익 저점 하향 돌파 시 진입 사이즈를 최소화 하고, 과거 50일 손익 고가 돌파 시 진입 사이즈를 증가시키는 로직을 시스템에 적용하고자, 일자별 NetProfit을 배열로 기록하여 활용하고자 하였으나, 어떤 이유인지 전략이 작동하지 않습니다. 번거로우시겟지만 아래 로직에 어떤 문제가 있는지 검토해주시면 감사하겠습니다. 혹시 로직이 비효율적이라면 보다 효율적인 로직을 제안해주시면 감사하겠습니다. 항상 도움 주셔서 감사드립니다. var: dd(0),Size(0); Array: Profit[400](0); #1. 일자기록 if Bdate != Bdate[1] Then { dd = dd+1; Profit[dd] = NetProfit; } #2-1. 최근 50일 최저 손익 하향 돌파시 누적일자 기록 if dd > 50 and Profit[dd] < Min(Profit[dd-1],Profit[dd-2],Profit[dd-3],Profit[dd-4],Profit[dd-5],Profit[dd-6],Profit[dd-7],Profit[dd-8],Profit[dd-9],Profit[dd-10],Profit[dd-11],Profit[dd-12],Profit[dd-13],Profit[dd-14],Profit[dd-15],Profit[dd-16],Profit[dd-17],Profit[dd-18],Profit[dd-19],Profit[dd-20],Profit[dd-21],Profit[dd-22],Profit[dd-23],Profit[dd-24],Profit[dd-25],Profit[dd-26],Profit[dd-27],Profit[dd-28],Profit[dd-29],Profit[dd-30],Profit[dd-31],Profit[dd-32],Profit[dd-33],Profit[dd-34],Profit[dd-35],Profit[dd-36],Profit[dd-37],Profit[dd-38],Profit[dd-39],Profit[dd-40],Profit[dd-41],Profit[dd-42],Profit[dd-43],Profit[dd-44],Profit[dd-45],Profit[dd-46],Profit[dd-47],Profit[dd-48],Profit[dd-49],Profit[dd-50]) Then { value1 = dd; } #2-2. 하향 돌파일자 이후 진입 Size 1 If value1 < dd and value1 > 0 Then { Size = 1; } Else //해당하지 않는 경우 size 100 { Size == 100; } #3-1. 최근 50일 최고 손익 상향 돌파 시 누적일자 기록 기록 if dd > 50 and Profit[dd] > Max(Profit[dd-1],Profit[dd-2],Profit[dd-3],Profit[dd-4],Profit[dd-5],Profit[dd-6],Profit[dd-7],Profit[dd-8],Profit[dd-9],Profit[dd-10],Profit[dd-11],Profit[dd-12],Profit[dd-13],Profit[dd-14],Profit[dd-15],Profit[dd-16],Profit[dd-17],Profit[dd-18],Profit[dd-19],Profit[dd-20],Profit[dd-21],Profit[dd-22],Profit[dd-23],Profit[dd-24],Profit[dd-25],Profit[dd-26],Profit[dd-27],Profit[dd-28],Profit[dd-29],Profit[dd-30],Profit[dd-31],Profit[dd-32],Profit[dd-33],Profit[dd-34],Profit[dd-35],Profit[dd-36],Profit[dd-37],Profit[dd-38],Profit[dd-39],Profit[dd-40],Profit[dd-41],Profit[dd-42],Profit[dd-43],Profit[dd-44],Profit[dd-45],Profit[dd-46],Profit[dd-47]) Then { value1 = 0; Value2 = dd; } #3-2. 상향 돌파 이후 진입 size 100 If value2 < dd and Value2 > 0 Then { Size = 100; } #매수 조건 # 1. 상한선 돌파 매수 if MarketPosition == 0 and DayLow(1) > DayLow(2) and DayOpen(1) > DayClose(2) and NextBarSdate > sdate then buy("시초매수",AtMarket,Def,Size); #매도 조건: 시초가 매도 if MarketPosition == 1 and NextBarSdate > sdate Then { ExitLong("시초매도",AtMarket,DEF,""); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-07-31 14:49:29

안녕하세요 예스스탁입니다. 신호 발생하기 위해서는 수량이 최소 1이상은 되어야 하는데 올리신 식에서 size는 초기값이 0입니다. 선언시 초기값을 1로 지정하고 이후 조건에 따라 변동되게 하셔야 합니다. 또한 50일 최고 최저는 당일 값이 포함되지 않으므로 날짜변경시 1회만 계산하고 이용하게 하시면 됩니다. var: dd(0),Size(1); var : min50(0),max50(0); Array: Profit[400](0); #1. 일자기록 if Bdate != Bdate[1] Then { dd = dd+1; Profit[dd] = NetProfit; if dd > 50 Then { min50 = Min(Profit[dd-1],Profit[dd-2],Profit[dd-3],Profit[dd-4],Profit[dd-5],Profit[dd-6],Profit[dd-7],Profit[dd-8],Profit[dd-9],Profit[dd-10],Profit[dd-11],Profit[dd-12],Profit[dd-13],Profit[dd-14],Profit[dd-15],Profit[dd-16],Profit[dd-17],Profit[dd-18],Profit[dd-19],Profit[dd-20],Profit[dd-21],Profit[dd-22],Profit[dd-23],Profit[dd-24],Profit[dd-25],Profit[dd-26],Profit[dd-27],Profit[dd-28],Profit[dd-29],Profit[dd-30],Profit[dd-31],Profit[dd-32],Profit[dd-33],Profit[dd-34],Profit[dd-35],Profit[dd-36],Profit[dd-37],Profit[dd-38],Profit[dd-39],Profit[dd-40],Profit[dd-41],Profit[dd-42],Profit[dd-43],Profit[dd-44],Profit[dd-45],Profit[dd-46],Profit[dd-47],Profit[dd-48],Profit[dd-49],Profit[dd-50]); max50 = Max(Profit[dd-1],Profit[dd-2],Profit[dd-3],Profit[dd-4],Profit[dd-5],Profit[dd-6],Profit[dd-7],Profit[dd-8],Profit[dd-9],Profit[dd-10],Profit[dd-11],Profit[dd-12],Profit[dd-13],Profit[dd-14],Profit[dd-15],Profit[dd-16],Profit[dd-17],Profit[dd-18],Profit[dd-19],Profit[dd-20],Profit[dd-21],Profit[dd-22],Profit[dd-23],Profit[dd-24],Profit[dd-25],Profit[dd-26],Profit[dd-27],Profit[dd-28],Profit[dd-29],Profit[dd-30],Profit[dd-31],Profit[dd-32],Profit[dd-33],Profit[dd-34],Profit[dd-35],Profit[dd-36],Profit[dd-37],Profit[dd-38],Profit[dd-39],Profit[dd-40],Profit[dd-41],Profit[dd-42],Profit[dd-43],Profit[dd-44],Profit[dd-45],Profit[dd-46],Profit[dd-47],Profit[dd-48],Profit[dd-49],Profit[dd-50]); } Else { min50 = Nan; max50 = Nan; } } /*if CrossUp(C,ma(C,20)) Then Buy(); if CrossDown(C,ma(C,20)) Then Sell(); SetStopEndofday(150000); */ #2-1. 최근 50일 최저 손익 하향 돌파시 누적일자 기록 if dd > 50 and Profit[dd] < min50 Then { value1 = dd; } #2-2. 하향 돌파일자 이후 진입 Size 1 If value1 < dd and value1 > 0 Then { Size = 1; } Else //해당하지 않는 경우 size 100 { Size == 100; } #3-1. 최근 50일 최고 손익 상향 돌파 시 누적일자 기록 기록 if dd > 50 and Profit[dd] > max50 Then { value1 = 0; Value2 = dd; } #3-2. 상향 돌파 이후 진입 size 100 If value2 < dd and Value2 > 0 Then { Size = 100; } #매수 조건 # 1. 상한선 돌파 매수 if MarketPosition == 0 and DayLow(1) > DayLow(2) and DayOpen(1) > DayClose(2) and NextBarSdate > sdate then buy("시초매수",AtMarket,Def,Size); #매도 조건: 시초가 매도 if MarketPosition == 1 and NextBarSdate > sdate Then { ExitLong("시초매도",AtMarket,DEF,""); } 즐거운 하루되세요 > 기사단장 님이 쓴 글입니다. > 제목 : 전략 손익결과로 진입 사이즈 조절 > 담당자님 항상 도움 주셔서 감사드립니다. 다름이아니라 전략 성과함수인 NetProfit 결과 자체를 활용하여, 과거 50일 손익 저점 하향 돌파 시 진입 사이즈를 최소화 하고, 과거 50일 손익 고가 돌파 시 진입 사이즈를 증가시키는 로직을 시스템에 적용하고자, 일자별 NetProfit을 배열로 기록하여 활용하고자 하였으나, 어떤 이유인지 전략이 작동하지 않습니다. 번거로우시겟지만 아래 로직에 어떤 문제가 있는지 검토해주시면 감사하겠습니다. 혹시 로직이 비효율적이라면 보다 효율적인 로직을 제안해주시면 감사하겠습니다. 항상 도움 주셔서 감사드립니다. var: dd(0),Size(0); Array: Profit[400](0); #1. 일자기록 if Bdate != Bdate[1] Then { dd = dd+1; Profit[dd] = NetProfit; } #2-1. 최근 50일 최저 손익 하향 돌파시 누적일자 기록 if dd > 50 and Profit[dd] < Min(Profit[dd-1],Profit[dd-2],Profit[dd-3],Profit[dd-4],Profit[dd-5],Profit[dd-6],Profit[dd-7],Profit[dd-8],Profit[dd-9],Profit[dd-10],Profit[dd-11],Profit[dd-12],Profit[dd-13],Profit[dd-14],Profit[dd-15],Profit[dd-16],Profit[dd-17],Profit[dd-18],Profit[dd-19],Profit[dd-20],Profit[dd-21],Profit[dd-22],Profit[dd-23],Profit[dd-24],Profit[dd-25],Profit[dd-26],Profit[dd-27],Profit[dd-28],Profit[dd-29],Profit[dd-30],Profit[dd-31],Profit[dd-32],Profit[dd-33],Profit[dd-34],Profit[dd-35],Profit[dd-36],Profit[dd-37],Profit[dd-38],Profit[dd-39],Profit[dd-40],Profit[dd-41],Profit[dd-42],Profit[dd-43],Profit[dd-44],Profit[dd-45],Profit[dd-46],Profit[dd-47],Profit[dd-48],Profit[dd-49],Profit[dd-50]) Then { value1 = dd; } #2-2. 하향 돌파일자 이후 진입 Size 1 If value1 < dd and value1 > 0 Then { Size = 1; } Else //해당하지 않는 경우 size 100 { Size == 100; } #3-1. 최근 50일 최고 손익 상향 돌파 시 누적일자 기록 기록 if dd > 50 and Profit[dd] > Max(Profit[dd-1],Profit[dd-2],Profit[dd-3],Profit[dd-4],Profit[dd-5],Profit[dd-6],Profit[dd-7],Profit[dd-8],Profit[dd-9],Profit[dd-10],Profit[dd-11],Profit[dd-12],Profit[dd-13],Profit[dd-14],Profit[dd-15],Profit[dd-16],Profit[dd-17],Profit[dd-18],Profit[dd-19],Profit[dd-20],Profit[dd-21],Profit[dd-22],Profit[dd-23],Profit[dd-24],Profit[dd-25],Profit[dd-26],Profit[dd-27],Profit[dd-28],Profit[dd-29],Profit[dd-30],Profit[dd-31],Profit[dd-32],Profit[dd-33],Profit[dd-34],Profit[dd-35],Profit[dd-36],Profit[dd-37],Profit[dd-38],Profit[dd-39],Profit[dd-40],Profit[dd-41],Profit[dd-42],Profit[dd-43],Profit[dd-44],Profit[dd-45],Profit[dd-46],Profit[dd-47]) Then { value1 = 0; Value2 = dd; } #3-2. 상향 돌파 이후 진입 size 100 If value2 < dd and Value2 > 0 Then { Size = 100; } #매수 조건 # 1. 상한선 돌파 매수 if MarketPosition == 0 and DayLow(1) > DayLow(2) and DayOpen(1) > DayClose(2) and NextBarSdate > sdate then buy("시초매수",AtMarket,Def,Size); #매도 조건: 시초가 매도 if MarketPosition == 1 and NextBarSdate > sdate Then { ExitLong("시초매도",AtMarket,DEF,""); }