커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
4398
글번호 230811
지표
답변완료

수식 에러, 수정 요청드립니다!!

하기와같이 수식 수정해주셨는데요, buy, sell은 전략에서만 사용 가능하다고 에러발생합니다. 자동 매매는 안해도 되니, 화살표와 화살표 발생시 가격만 뜨게 수정해주세요. ========================================================================== 안녕하세요 예스스탁입니다. 올려드린 수식이 시스템수식으로 조건만족시 매수와 매도신호가 화살표로 발생하는 식입니다. 조건만족시 가격이 출력되세 추가해 드립니다. 1. Input : shortPeriod(20), longPeriod(60); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); # 매수/매도청산 If CrossUP(value1, value2) Then { Buy("b"); Text_New(sdate,stime,H+PriceScale*2,NumToStr(c,2)); } # 매도/매수청산 If CrossDown(value1, value2) Then { Sell(); Text_New(sdate,stime,L-PriceScale*2,NumToStr(c,2)); } 2 Input : shortPeriod(20), longPeriod(120); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); # 매수/매도청산 If CrossUP(value1, value2) Then { Buy("b"); Text_New(sdate,stime,H+PriceScale*2,NumToStr(c,2)); } # 매도/매수청산 If CrossDown(value1, value2) Then { Sell(); Text_New(sdate,stime,L-PriceScale*2,NumToStr(c,2)); } 즐거운 하루되세요
프로필 이미지
hongka21
2018-06-18
158
글번호 119800
강조
답변완료

문의

아래수식으로 자동최적화로 수치를 찾고싶은데 어떻게 바꿔야하나요 // 작성자 : 수식지왕 Input: 원계정(100000000) , S1HiPeriod(20) , S1LoPeriod(10) , S2HiPeriod(55) , S2LoPeriod(20) , AtrPeriod(20) , S2비율(50) , N배수(2) ; Var: 명목계정(0), 계정배분완료(False), S1Hi(0), S1Lo(0), S2Hi(0), S2Lo(0), j(0), SumTr(0), DayAtr(0), Unit(0), 진입구분(0), 진입횟수(0), N(0), 추가진입가격(0), 단기돌파무시(False), sumV0(0), sumV1(0), maV0(0), maV1(0), DeadCnt(0), 휩소여부(False); Array : 손절가격[5](0), 진입가격[5](0), 계정크기[5](0), 계정체크[5](0); /*=============================================*/ /* 계정관리 */ /*=============================================*/ If 계정배분완료 == False Then //최초 한번만 실행 { 계정체크[0] = 원계정 * 0.9; //10% 손실나면 계정크기[0] = 원계정 * 0.8; //명목계정은 20% 감소 시켜서 운용 For j = 0 To 3 { 계정체크[j+1] = 계정크기[j] * 0.9; 계정크기[j+1] = 계정크기[j] * 0.8; } 계정배분완료 = True; } If NetProfit() >= 0 Then { 명목계정 = 원계정; } Else { For j = 0 To 4 { If 원계정 + NetProfit() < 계정체크[j] Then //10% 손실나면 { 명목계정 = 계정크기[j]; //명목계정은 20% 감소시켜서 운용 } } } /*=============================================*/ /* 변동성 계산 */ /*=============================================*/ // 분봉에서 일봉의 ATR계산, 전일의 ATR이 산출됨 SumTr = 0; For j = 1 To AtrPeriod { SumTr = SumTr + Max(DayHigh(j)-DayLow(j),Abs(DayClose(j+1)-DayHigh(j)),Abs(DayClose(j+1)-DayLow(j))); } DayAtr = SumTr/AtrPeriod; /*=============================================*/ /* 채널 계산 */ /*=============================================*/ // 분봉에서 일봉의 고,저점 계산, 전일의 고,저점임 S1Hi = 0; S1Lo = 0; S2Hi = 0; S2Lo = 0; For j = 1 To S2HiPeriod { If j <= S1LoPeriod && (S1Lo == 0 || S1Lo > DayLow(j)) Then S1Lo = DayLow(j); If j <= S2LoPeriod && (S2Lo == 0 || S2Lo > DayLow(j)) Then S2Lo = DayLow(j); If j <= S1HiPeriod && S1Hi < DayHigh(j) Then S1Hi = DayHigh(j); If S2Hi < DayHigh(j) Then S2Hi = DayHigh(j); } /*=============================================*/ /* 휩소 판단 */ /*=============================================*/ //이평선 데드카운트가 일정 수 이상일 때 휩소로 판단 sumV0 = 0; sumV1 = 0; For j = 0 To S1HiPeriod - 1 { sumV0 = sumV0 + DayClose(j); sumV1 = sumV1 + DayClose(j+1); } maV0 = sumV0 / S1HiPeriod; maV1 = sumV1 / S1HiPeriod; DeadCnt = 0; For j = 0 To S1HiPeriod - 1 { if maV1 <= DayClose(j+1) && maV0 > DayClose(j) then DeadCnt = DeadCnt + 1; } ############## # 진입식 # ############## /*=============================================*/ /* 시스템 1(S1) : 20일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S1Hi) && 단기돌파무시 == False Then { 진입구분 = 1; N = DayAtr; Unit = int((명목계정 * 0.01)/N); //거래단위 계산 추가진입가격 = S1Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; If DeadCnt >= 4 Then //이평 데드크로스 횟수를 4회 이상일 경우 휩소로 봄 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S1매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S1 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 1 Then { If 진입횟수 == 1 && //CurrentEntries()함수를 써도 되나 단계를 체크하기 위해 별도 변수 사용 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S1매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S1매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S1매수4",OnClose,DEF,int(Unit/4)); } } /*=============================================*/ /* 시스템 2(S2) : 55일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S2Hi) Then { 진입구분 = 2; N = DayAtr; Unit = (명목계정 * 0.01)/N; //거래단위 계산 Unit = int(Unit * S2비율 * 0.01); //S2거래비중 조정 추가진입가격 = S2Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; 단기돌파무시 = False; //단기돌파무시가 True로 설정되었다면 초기화 If DeadCnt >= 4 Then 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S2매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S2 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 2 Then { If 진입횟수 == 1 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S2매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S2매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S2매수4",OnClose,DEF,int(Unit/4)); } } ############## # 청산식 # ############## /*=============================================*/ /* S1 단기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 1 Then { If C < S1Lo Then { If OpenPositionProfit() < 0 Then //이익이 발생했다면 다음번 단기돌파시 진입 무시 { 단기돌파무시 = False; } Else { 단기돌파무시 = True; } 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S1추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; //추가 진입을 막기 위해 초기화 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; 단기돌파무시 = False; //손절포인트를 돌파했다면 다음번 단기돌파 때 진입 ExitLong("S1손절4",OnClose,DEF,"S1매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; //4번 다 진입하지 못하고 손절포인트 만날 수 있으므로 진입횟수 = 2; //각 청산식마다 초기화 손절가격[3] = 0; 진입가격[3] = 0; 단기돌파무시 = False; ExitLong("S1손절3",OnClose,DEF,"S1매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; 단기돌파무시 = False; ExitLong("S1손절2",OnClose,DEF,"S1매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; 단기돌파무시 = False; ExitLong("S1손절1",OnClose,DEF,"S1매수1",DEF); } } /*=============================================*/ /* S2 장기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 2 Then { If C < S2Lo Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S2추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; ExitLong("S2손절4",OnClose,DEF,"S2매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; 진입횟수 = 2; 손절가격[3] = 0; 진입가격[3] = 0; ExitLong("S2손절3",OnClose,DEF,"S2매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; ExitLong("S2손절2",OnClose,DEF,"S2매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; ExitLong("S2손절1",OnClose,DEF,"S2매수1",DEF); } } If DayAtr >= 명목계정 * 0.01 * N배수 Then { ExitLong(); }
프로필 이미지
렉쳐
2018-06-17
148
글번호 119799
시스템
답변완료

전일의 고가,저가의 이격도표현

안녕하세요 관리자님 고생이 많으십니다. 1.[(전일의 최고가 - 전일의 시가)+오늘의 시가] 의 값을 차트에 선으로 표현하고 이 선에대한 오늘의 주가의 이격도를 표현하고 싶습니다 2.[오늘의 시가-(전일의 시가 - 전일의 최저가)+오늘의 시가] 의 값을 차트에 선으로 표현하고 이 선에대한 오늘의 주가의 이격도를 표현하고 싶습니다. 결국 차트에 선2개가 표현되고 이격도는 2개가 되겠습니다. 도와주십시요
프로필 이미지
카카
2018-06-17
153
글번호 119798
지표
답변완료

수식수정문의

아랫수식은 매수진입으로 하는데 매도진입 매수청산으로선물에서 사용할 수 있게 수정 부탁드리겠습니다. 터틀입니다. --- // 작성자 : 수식지왕 Input: 원계정(100000000) , S1HiPeriod(20) , S1LoPeriod(10) , S2HiPeriod(55) , S2LoPeriod(20) , AtrPeriod(20) , S2비율(50) , N배수(2) ; Var: 명목계정(0), 계정배분완료(False), S1Hi(0), S1Lo(0), S2Hi(0), S2Lo(0), j(0), SumTr(0), DayAtr(0), Unit(0), 진입구분(0), 진입횟수(0), N(0), 추가진입가격(0), 단기돌파무시(False), sumV0(0), sumV1(0), maV0(0), maV1(0), DeadCnt(0), 휩소여부(False); Array : 손절가격[5](0), 진입가격[5](0), 계정크기[5](0), 계정체크[5](0); /*=============================================*/ /* 계정관리 */ /*=============================================*/ If 계정배분완료 == False Then //최초 한번만 실행 { 계정체크[0] = 원계정 * 0.9; //10% 손실나면 계정크기[0] = 원계정 * 0.8; //명목계정은 20% 감소 시켜서 운용 For j = 0 To 3 { 계정체크[j+1] = 계정크기[j] * 0.9; 계정크기[j+1] = 계정크기[j] * 0.8; } 계정배분완료 = True; } If NetProfit() >= 0 Then { 명목계정 = 원계정; } Else { For j = 0 To 4 { If 원계정 + NetProfit() < 계정체크[j] Then //10% 손실나면 { 명목계정 = 계정크기[j]; //명목계정은 20% 감소시켜서 운용 } } } /*=============================================*/ /* 변동성 계산 */ /*=============================================*/ // 분봉에서 일봉의 ATR계산, 전일의 ATR이 산출됨 SumTr = 0; For j = 1 To AtrPeriod { SumTr = SumTr + Max(DayHigh(j)-DayLow(j),Abs(DayClose(j+1)-DayHigh(j)),Abs(DayClose(j+1)-DayLow(j))); } DayAtr = SumTr/AtrPeriod; /*=============================================*/ /* 채널 계산 */ /*=============================================*/ // 분봉에서 일봉의 고,저점 계산, 전일의 고,저점임 S1Hi = 0; S1Lo = 0; S2Hi = 0; S2Lo = 0; For j = 1 To S2HiPeriod { If j <= S1LoPeriod && (S1Lo == 0 || S1Lo > DayLow(j)) Then S1Lo = DayLow(j); If j <= S2LoPeriod && (S2Lo == 0 || S2Lo > DayLow(j)) Then S2Lo = DayLow(j); If j <= S1HiPeriod && S1Hi < DayHigh(j) Then S1Hi = DayHigh(j); If S2Hi < DayHigh(j) Then S2Hi = DayHigh(j); } /*=============================================*/ /* 휩소 판단 */ /*=============================================*/ //이평선 데드카운트가 일정 수 이상일 때 휩소로 판단 sumV0 = 0; sumV1 = 0; For j = 0 To S1HiPeriod - 1 { sumV0 = sumV0 + DayClose(j); sumV1 = sumV1 + DayClose(j+1); } maV0 = sumV0 / S1HiPeriod; maV1 = sumV1 / S1HiPeriod; DeadCnt = 0; For j = 0 To S1HiPeriod - 1 { if maV1 <= DayClose(j+1) && maV0 > DayClose(j) then DeadCnt = DeadCnt + 1; } ############## # 진입식 # ############## /*=============================================*/ /* 시스템 1(S1) : 20일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S1Hi) && 단기돌파무시 == False Then { 진입구분 = 1; N = DayAtr; Unit = int((명목계정 * 0.01)/N); //거래단위 계산 추가진입가격 = S1Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; If DeadCnt >= 4 Then //이평 데드크로스 횟수를 4회 이상일 경우 휩소로 봄 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S1매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S1 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 1 Then { If 진입횟수 == 1 && //CurrentEntries()함수를 써도 되나 단계를 체크하기 위해 별도 변수 사용 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S1매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S1매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S1매수4",OnClose,DEF,int(Unit/4)); } } /*=============================================*/ /* 시스템 2(S2) : 55일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S2Hi) Then { 진입구분 = 2; N = DayAtr; Unit = (명목계정 * 0.01)/N; //거래단위 계산 Unit = int(Unit * S2비율 * 0.01); //S2거래비중 조정 추가진입가격 = S2Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; 단기돌파무시 = False; //단기돌파무시가 True로 설정되었다면 초기화 If DeadCnt >= 4 Then 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S2매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S2 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 2 Then { If 진입횟수 == 1 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S2매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S2매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S2매수4",OnClose,DEF,int(Unit/4)); } } ############## # 청산식 # ############## /*=============================================*/ /* S1 단기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 1 Then { If C < S1Lo Then { If OpenPositionProfit() < 0 Then //이익이 발생했다면 다음번 단기돌파시 진입 무시 { 단기돌파무시 = False; } Else { 단기돌파무시 = True; } 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S1추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; //추가 진입을 막기 위해 초기화 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; 단기돌파무시 = False; //손절포인트를 돌파했다면 다음번 단기돌파 때 진입 ExitLong("S1손절4",OnClose,DEF,"S1매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; //4번 다 진입하지 못하고 손절포인트 만날 수 있으므로 진입횟수 = 2; //각 청산식마다 초기화 손절가격[3] = 0; 진입가격[3] = 0; 단기돌파무시 = False; ExitLong("S1손절3",OnClose,DEF,"S1매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; 단기돌파무시 = False; ExitLong("S1손절2",OnClose,DEF,"S1매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; 단기돌파무시 = False; ExitLong("S1손절1",OnClose,DEF,"S1매수1",DEF); } } /*=============================================*/ /* S2 장기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 2 Then { If C < S2Lo Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S2추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; ExitLong("S2손절4",OnClose,DEF,"S2매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; 진입횟수 = 2; 손절가격[3] = 0; 진입가격[3] = 0; ExitLong("S2손절3",OnClose,DEF,"S2매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; ExitLong("S2손절2",OnClose,DEF,"S2매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; ExitLong("S2손절1",OnClose,DEF,"S2매수1",DEF); } } If DayAtr >= 명목계정 * 0.01 * N배수 Then { ExitLong(); }
프로필 이미지
렉쳐
2018-06-17
147
글번호 119797
시스템
답변완료

부탁 드립니다.

도움 주심에 감사 드립니다. 질문1) 다음은 현재일 기준 4일전 까지만 선을 긋고 있습니다. 이것을 과거일을 지정하고 그날자 이전 4일동안 선을 긋고 싶습니다. 미리 감사 드립니다. input:시간(080000); if sTime >= 시간 and stime[1] < 시간 Then{ var1 = max(H,H[1]); var2 = min(L,L[1]); var3 = sdate; if H > H[1] Then var4 = stime; Else var4 = stime[1]; if L < L[1] Then var5 = stime; Else var5 = stime[1]; var11 = var1[1]; var21 = var2[1]; var31 = var3[1]; var41 = var4[1]; var51 = var5[1]; value1 = TL_New(var31,var41,var11,var3,var4,var1); value2 = TL_New(var31,var51,var21,var3,var5,var2); value11 = value1[1]; value21 = value2[1]; value12 = value11[1]; value22 = value21[1]; value13 = value12[1]; value23 = value22[1]; value14 = value13[1]; value24 = value23[1]; TL_Delete(value14); TL_Delete(value24); } 질문2) 다음 수식에서 추세선인TL2,TL3가 현재 그어지는 선의 길이에서 좌우 끝단까지 연장해서 그을수 있도록 부탁 드립니다. Input:length(10),파동선선택1(1),추세선두께(0); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 if 파동선선택1==1 then{ TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); } TL_SetSize(TL1,1); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } If k > 1 Then { // 낮은 전저점이 찾아졌다면 TL2 = TL_New(저[k,3],저[k,4],저[k,1],sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); TL_SetColor(TL2,magenta); TL_SetSize(TL2,추세선두께); } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } Else { // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 if 파동선선택1==1 then{ TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); } TL_SetSize(TL1,1); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } q = 0; For j = 2 To 10 { If 고[1,1] < 고[j,1] Then { // 전고점보다 높은 이전 전고점을 찾는다 q = j; j = 10; // exit loop } } If q > 1 Then { // 높은 전고점이 찾아졌다면 TL3 = TL_New(고[q,3],고[q,4],고[q,1],sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); TL_SetColor(TL3,blue); TL_SetSize(TL3,2); TL_SetSize(TL3,추세선두께); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } }
프로필 이미지
yes
2018-06-18
173
글번호 119796
지표
답변완료

수식부탁드립니다

#,아래수식에서 질문드립니다 1,음운과양운이 교차하는지점에서 연장선을 Y축까지 오른쪽그리기와 교차값을 텍스트 출력 하고 싶습니다, [이때,현재가로부터 이전5개(변수처리)의 교차점연장선과 값만 표시되게] 2,1식을 data2 적용할수있게 도움 부탁드립니다. Inputs: shortperiod(9), midperiod(26), longperiod(52); Variables: 기준선(0), 전환선(0), 후행스팬(0), 선행스팬1(0), 선행스팬2(0); 전환선 = (Highest(High, shortperiod) + Lowest(Low, shortperiod)) / 2; 기준선 = (Highest(High, midperiod) + Lowest(Low, midperiod)) / 2; 선행스팬1 = (전환선 + 기준선) / 2 ; 선행스팬2 = (Highest(High, longperiod) + Lowest(Low, longperiod)) / 2; Plot1(선행스팬1," 선행스팬1"); Plot2(선행스팬2, "선행스팬2"); ##,언제나 늘 고맙습니다^^
프로필 이미지
회원
2018-06-17
177
글번호 119795
지표
답변완료

수식 부탁드립니다

매번 도움주심에 다시한번 진심으로 감사드립니다 ^^* 지수가 "특정지표"를 상하 어느방향으로든 일단 돌파후 다시 눌려서 그 해당지표와 다시 만난후 그 돌파방향의 봉이 완성시 음성신호가 발생되게하고싶습니다 즉, "N패턴"에 해당되는 봉이 완성시 음성신호가 발생되었으면합니다 (* 봉의 꼬리로 해당지표를 터치만했거나 혹은 해당지표를 봉의 일부가 살짝 돌파했더라도 봉의 "종가기준"으로 "N패턴"에 해당되는 봉이 완성시는 조건만족으로 간주)) * 상 하돌파 각각 별도 부탁드립니다 <* "해당지표" 목록입니다> 1, 시가 2, 단순이평선(20선) 3, 가중이평선(20선) 4, 일목균형중 "기준선" 5, if Bdate != Bdate[1] Then{ var1 = H; var2 = L; } plot1(var1); plot2(var2); (* 상단선에는 "상방N패턴", 하단선에는 "하방N패턴" 만 발생되면 됩니다) 6, input : P1(5),P2(10); var : count(0); var : sumV1(0),sumV2(0),sumV3(0),sumV4(0); var : mav1(0),mav2(0),mav3(0),mav4(0); sumV1 = 0; sumV2 = 0; for count = 0 to P2{ if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; plot1(mav1); plot2(mav2); 7, Input : Period(5); Var : Sum(0), Counter(0), CSum(0),DayWMA(0); Sum = 0; CSum = 0; For counter = 0 To Period-1 Begin Sum = Sum + DayClose(counter) * (Period - counter); CSum = CSum + Period - counter; End; If CSum > 0 Then DayWMA = Sum / CSum; Else DayWMA = 0; plot1(DayWMA); 매번 이렇게 번거롭게해드려서 정말 죄송합니다 예스트레이더를 접한지 얼마안되다보니 이렇게 부탁할일이 많네요 ㅎ 감사합니다 !!!
프로필 이미지
유로파54
2018-06-17
171
글번호 119794
지표
답변완료

수식문의드립니다.

데이터매니져에 1분봉에 사용 할 data2값을 넣고 data1과 비교하는 시스템수식을 만들려고 합니다. 여기서 data2에 입력하는 수치는 1달동안 계속 사용하는데 날마다 data2값을 갱신해서 등록해줘야 하나요?
프로필 이미지
산인
2018-06-17
157
글번호 119793
지표
답변완료

지표 및 함수 문의

안녕하세요. 일봉 Vertical Horizontal filter 를 분봉상에 표현하고자 합니다. 함수가 포함되어 있는데 함수를 수정해도 지표를 수정해도 잘 안되네요 ㅜㅜ 부탁드립니다. 함수의 AccumN(abs(C - C[1]), P); 부분을 AccumN(abs(Dayclose - DayClose[1]), P); 과 같은 방식이 아니라 AccumN(abs(C - DayClose[1]), P); (c= 분봉 종가) 위와 같은 분봉상에서 움직임을 가지는 지표로 가능한지도 부탁드립니다. 그리고 지표값에 대한 이평선을 추가하고 싶습니다. 감사합니다.
프로필 이미지
봉고
2018-06-17
165
글번호 119792
지표