커뮤니티

에러 수정 요망

프로필 이미지
sungdong
2018-07-16 21:58:52
259
글번호 120647
답변완료
1.어느날 우연히 통화 중에 김**차장님이 알려준 시스템 성능보고서를 보는 법과 print하는 법을 배워서 고맙게 활용하다 일년전에 물어봤던 수식지왕님의 시스템을 활용하고자 합니다 2. 질문(1번,2번) 내용은 해당 위치에 써 놓았음(//를 지워서 검증이 에러가 나도록 했음) 3. 전략챠트에 어떤 시스템을 띄워놓으면 신호가 해당되면 알려주던데 오늘 화면분할을 실행시켜 25개 띄워놓고 전체를 누르고 적응시켜봤는데 어떤 신호도 안나오던데 혹시 한종목만 나오는 것인지요? 4.마지막으로 검색 종목을 엑셀로 보내지던데 역으로 엑셀의 종목을 관심종목으로 가져오는 방법이 있는지요?? #==========================================# # 시스템명 : 고저라인_자동추세선_ver_15 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then{ 질문1) 50일 정도만 검색하려는데 맞는지?? #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%.s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%.s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } 질문2) 1.진입명과 청산명을 print해보고 싶고(제가 해보니까 공란으로나오네요) 2. 시스템 성능 보고서는 진입후 청산이 되기전에는 "평가"라고 나오는데 역시 출력될 때 보고서 처럼 청산 종류에 평가라고 나왔으면 합니다. 제가 엑셀을 보면 진입과 청산된 것 만 나오고 진입해서 진행중인 종목의 결과는 안나오네요.
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2018-07-17 09:46:02

안녕하세요 예스스탁입니다. 1 특정일 부터 계산 및 신호가 발생하고자 하시면 아래와 같이 처리하시면 됩니다. Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Tcond(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then { 고[1,1] = C; 저[1,1] = C; } if sdate >= 시작 then { #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } } 2 진입명과 청산명은 텍스트이므로 %s로 지정하셔야 합니다. 평가는 차트상 마지막거래가 미청산인 경우에 표시가 되는데 수식으로 마지막 거래만 표시되게 할수 없습니다. 미청산일때 손익평가를 출력하면 매봉 출력이 되어 차트 봉수만큼 나오게 됩니다. 마지막 거래가 미청산 거래인경우에는 출력을 포기하셔야 합니다. 3 수식은 차트에 적용되므로 분할화면에도 모두 적용됩니다. 차트의 봉수가 부족하거나 조건에 맞지 않으면 신호가 없습니다. 4 엑셀의 종목을 자동으로 관심종목으로 추가할수는 없습니다. 즐거운 하루되세요 > sungdong 님이 쓴 글입니다. > 제목 : 에러 수정 요망 > 1.어느날 우연히 통화 중에 김**차장님이 알려준 시스템 성능보고서를 보는 법과 print하는 법을 배워서 고맙게 활용하다 일년전에 물어봤던 수식지왕님의 시스템을 활용하고자 합니다 2. 질문(1번,2번) 내용은 해당 위치에 써 놓았음(//를 지워서 검증이 에러가 나도록 했음) 3. 전략챠트에 어떤 시스템을 띄워놓으면 신호가 해당되면 알려주던데 오늘 화면분할을 실행시켜 25개 띄워놓고 전체를 누르고 적응시켜봤는데 어떤 신호도 안나오던데 혹시 한종목만 나오는 것인지요? 4.마지막으로 검색 종목을 엑셀로 보내지던데 역으로 엑셀의 종목을 관심종목으로 가져오는 방법이 있는지요?? #==========================================# # 시스템명 : 고저라인_자동추세선_ver_15 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then{ 질문1) 50일 정도만 검색하려는데 맞는지?? #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%.s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%.s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } 질문2) 1.진입명과 청산명을 print해보고 싶고(제가 해보니까 공란으로나오네요) 2. 시스템 성능 보고서는 진입후 청산이 되기전에는 "평가"라고 나오는데 역시 출력될 때 보고서 처럼 청산 종류에 평가라고 나왔으면 합니다. 제가 엑셀을 보면 진입과 청산된 것 만 나오고 진입해서 진행중인 종목의 결과는 안나오네요.
프로필 이미지

sungdong

2018-07-17 10:28:35

제가 진입명과 청산명은 텍스트이므로 %s로 지정햇었고 다시 PRINT를 시켜보아도 엑셀에는 진입명,청산명이라는 글자만 나오지 결과는 안나오네요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 에러 수정 요망 > 안녕하세요 예스스탁입니다. 1 특정일 부터 계산 및 신호가 발생하고자 하시면 아래와 같이 처리하시면 됩니다. Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Tcond(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then { 고[1,1] = C; 저[1,1] = C; } if sdate >= 시작 then { #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } } 2 진입명과 청산명은 텍스트이므로 %s로 지정하셔야 합니다. 평가는 차트상 마지막거래가 미청산인 경우에 표시가 되는데 수식으로 마지막 거래만 표시되게 할수 없습니다. 미청산일때 손익평가를 출력하면 매봉 출력이 되어 차트 봉수만큼 나오게 됩니다. 마지막 거래가 미청산 거래인경우에는 출력을 포기하셔야 합니다. 3 수식은 차트에 적용되므로 분할화면에도 모두 적용됩니다. 차트의 봉수가 부족하거나 조건에 맞지 않으면 신호가 없습니다. 4 엑셀의 종목을 자동으로 관심종목으로 추가할수는 없습니다. 즐거운 하루되세요 > sungdong 님이 쓴 글입니다. > 제목 : 에러 수정 요망 > 1.어느날 우연히 통화 중에 김**차장님이 알려준 시스템 성능보고서를 보는 법과 print하는 법을 배워서 고맙게 활용하다 일년전에 물어봤던 수식지왕님의 시스템을 활용하고자 합니다 2. 질문(1번,2번) 내용은 해당 위치에 써 놓았음(//를 지워서 검증이 에러가 나도록 했음) 3. 전략챠트에 어떤 시스템을 띄워놓으면 신호가 해당되면 알려주던데 오늘 화면분할을 실행시켜 25개 띄워놓고 전체를 누르고 적응시켜봤는데 어떤 신호도 안나오던데 혹시 한종목만 나오는 것인지요? 4.마지막으로 검색 종목을 엑셀로 보내지던데 역으로 엑셀의 종목을 관심종목으로 가져오는 방법이 있는지요?? #==========================================# # 시스템명 : 고저라인_자동추세선_ver_15 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then{ 질문1) 50일 정도만 검색하려는데 맞는지?? #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%.s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%.s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } 질문2) 1.진입명과 청산명을 print해보고 싶고(제가 해보니까 공란으로나오네요) 2. 시스템 성능 보고서는 진입후 청산이 되기전에는 "평가"라고 나오는데 역시 출력될 때 보고서 처럼 청산 종류에 평가라고 나왔으면 합니다. 제가 엑셀을 보면 진입과 청산된 것 만 나오고 진입해서 진행중인 종목의 결과는 안나오네요.
프로필 이미지

예스스탁 예스스탁 답변

2018-07-17 10:36:21

안녕하세요 예스스탁입니다. 올려주신 수식에는 %.s로 되어 있습니다 %s로 지정되어 있어야 합니다. 1번 답변수식 참고하시기 바랍니다. 즐거운 하루되세요 > sungdong 님이 쓴 글입니다. > 제목 : Re : Re : 에러 수정 요망 > 제가 진입명과 청산명은 텍스트이므로 %s로 지정햇었고 다시 PRINT를 시켜보아도 엑셀에는 진입명,청산명이라는 글자만 나오지 결과는 안나오네요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 에러 수정 요망 > 안녕하세요 예스스탁입니다. 1 특정일 부터 계산 및 신호가 발생하고자 하시면 아래와 같이 처리하시면 됩니다. Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Tcond(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then { 고[1,1] = C; 저[1,1] = C; } if sdate >= 시작 then { #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } } 2 진입명과 청산명은 텍스트이므로 %s로 지정하셔야 합니다. 평가는 차트상 마지막거래가 미청산인 경우에 표시가 되는데 수식으로 마지막 거래만 표시되게 할수 없습니다. 미청산일때 손익평가를 출력하면 매봉 출력이 되어 차트 봉수만큼 나오게 됩니다. 마지막 거래가 미청산 거래인경우에는 출력을 포기하셔야 합니다. 3 수식은 차트에 적용되므로 분할화면에도 모두 적용됩니다. 차트의 봉수가 부족하거나 조건에 맞지 않으면 신호가 없습니다. 4 엑셀의 종목을 자동으로 관심종목으로 추가할수는 없습니다. 즐거운 하루되세요 > sungdong 님이 쓴 글입니다. > 제목 : 에러 수정 요망 > 1.어느날 우연히 통화 중에 김**차장님이 알려준 시스템 성능보고서를 보는 법과 print하는 법을 배워서 고맙게 활용하다 일년전에 물어봤던 수식지왕님의 시스템을 활용하고자 합니다 2. 질문(1번,2번) 내용은 해당 위치에 써 놓았음(//를 지워서 검증이 에러가 나도록 했음) 3. 전략챠트에 어떤 시스템을 띄워놓으면 신호가 해당되면 알려주던데 오늘 화면분할을 실행시켜 25개 띄워놓고 전체를 누르고 적응시켜봤는데 어떤 신호도 안나오던데 혹시 한종목만 나오는 것인지요? 4.마지막으로 검색 종목을 엑셀로 보내지던데 역으로 엑셀의 종목을 관심종목으로 가져오는 방법이 있는지요?? #==========================================# # 시스템명 : 고저라인_자동추세선_ver_15 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716), #ssssssssssssssssssssssssssssssssss 파동선두께(7),추세선두께(0),파동선색(red),수치표시(1); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then{ 질문1) 50일 정도만 검색하려는데 맞는지?? #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then { Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2)); Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다); Buy("매수"); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 4 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,green); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell("매도"); } } #==========================================# If 처리구분 == "" Then { If Index - 고[2,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[2,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong("매수유지"); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort("매도필수"); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } if TotalTrades > TotalTrades[1] Then { Print("0716.CSV",",%s,포지션,%.f,진입명,%.s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%.s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f", SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1)); } 질문2) 1.진입명과 청산명을 print해보고 싶고(제가 해보니까 공란으로나오네요) 2. 시스템 성능 보고서는 진입후 청산이 되기전에는 "평가"라고 나오는데 역시 출력될 때 보고서 처럼 청산 종류에 평가라고 나왔으면 합니다. 제가 엑셀을 보면 진입과 청산된 것 만 나오고 진입해서 진행중인 종목의 결과는 안나오네요.