커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

부탁드립니다 항상 감사합니다

Input: length(100), mult(1), TP_Ratio(1.01), SL_Ratio(0.99), 진입수량(1); Var: src(0), a(0), b(0), size(0), var1(0), var2(0), Condition1(false), Condition2(false), t1(0), t2(0), value1(0), value2(0), 진입가(0), TP(0), SL(0), posFlag(0), tx(0); // 1. 원본 가격 src = Close; // 2. size 계산 size = iff((a[1]-a[2]) > 0 or (b[1]-b[2]) < 0 , atr(length) , TrueRange); // 3. 상승/하락 조건 기간 카운트 if a[1] > a[2] Then Begin Condition1 = true; var1 = 0; end Else if Condition1 then var1 = var1 + 1; if b[1] < b[2] Then Begin Condition2 = true; var2 = 0; end Else if Condition2 then var2 = var2 + 1; // 4. 추세선 계산 a = max(src,a[1]) - size/pow(length,2)*(var1*mult); b = min(src,b[1]) + size/pow(length,2)*(var2*mult); // 5. 꺾임 방향 t1 = iff(a > a[1], 1, iff(a < a[1], -1, t1[1])); t2 = iff(b > b[1], 1, iff(b < b[1], -1, t2[1])); // 6. 꺾임 발생 시 진입 If t1 == -1 and t1 != t1[1] and posFlag = 0 Then Begin SellShort("Short") next bar at market; 진입가 = Close; TP = 진입가 * SL_Ratio; // 숏 전략이므로 SL<진입가 SL = 진입가 * TP_Ratio; posFlag = -1; tx = Text_New(Date, Time, High, "&#11015; 매도진입"); Text_SetColor(tx, Red); End; If t2 == -1 and t2 != t2[1] and posFlag = 0 Then Begin Buy("Long") next bar at market; 진입가 = Close; TP = 진입가 * TP_Ratio; SL = 진입가 * SL_Ratio; posFlag = 1; tx = Text_New(Date, Time, Low, "&#11014; 매수진입"); Text_SetColor(tx, Blue); End; // 7. TP/SL 도달 시 청산 If posFlag = -1 Then Begin If Close <= TP or Close >= SL Then Begin BuyToCover("청산") next bar at market; posFlag = 0; End; End; If posFlag = 1 Then Begin If Close >= TP or Close <= SL Then Begin Sell("청산") next bar at market; posFlag = 0; End; End; // 8. 시각화 Plot1(a, "상단추세"); Plot2(b, "하단추세"); Plot3(value1, "상단꺾임"); Plot4(value2, "하단꺾임"); 오류수정부탁드립니다
프로필 이미지
윤호석
2025-05-22
224
글번호 191067
지표
답변완료

기존수식에 양봉조건만 넣어주세요

var : 목(0),표(0),가(0),조건(False),cs(-1); if dayclose()> dayclose(1)*1.29 Then { 목 = dayclose; 표 = dayopen; 가 = floor((목+표)/2); cs = 0; } 조건 = crossdown(c, 가); if cs >= 0 and 조건 Then cs = cs+1; if cs == 1 and cs[1] == 0 Then Find(1); 선생님께서 만들어주신 수식입니다. 여기에서 양봉만나오게하는조건을 넣었는데 오류가 나서 번거롭더라도 직접넣어주시면 감사하겠습니다
프로필 이미지
장대박
2025-05-22
179
글번호 191066
종목검색

사공하늘 님에 의해서 삭제되었습니다.

프로필 이미지
사공하늘
2025-05-22
63
글번호 191065
검색
답변완료

수식 부탁드립니다

다음신호의 수식변환을 부탁드립니다.' 감사합니다. A=shift(c,-12+1); B=shift(c,-26+1); BB=BBandsUp(70,3); M=Macd(5,52); 조건1=CrossUp(A,BB(0)) && !(M>0); S2=Valuewhen(1,조건1&&!조건1(1),L); T=Ttsf(C, 50); CrossUp(T, S2)
프로필 이미지
쭈니이리
2025-05-22
178
글번호 191064
종목검색
답변완료

부탁드립니다 항상 감사합니다

Input: rsiLen(14), rsiCut(50), macdFastLen(12), macdSlowLen(26), macdSignalLen(9), tp1Ratio(1.005), tp2Ratio(1.010), tp3Ratio(1.015), slRatio(0.99), volumeMultiplier(2.0), 평균거래량기간(20), 시작시간(93000), 종료시간(150000); Var: rsiVal(0), macdFastEMA(0), macdSlowEMA(0), macdMain(0), macdSignal(0), macdHist(0), 진입가(0), TP1(0), TP2(0), TP3(0), SL(0), 거래량기준(0), 텍스트ID(0), 손익비텍스트(0), TL1(0), TL2(0), TL3(0), TL4(0), 박스상(0), 박스하(0), 매수조건(false), 청산1(false), 청산2(false), 청산3(false); // ① RSI + MACD 계산 rsiVal = RSI(rsiLen); If CurrentBar = 1 Then Begin macdFastEMA = Close; macdSlowEMA = Close; End Else Begin macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1))); macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1))); macdMain = macdFastEMA - macdSlowEMA; macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1))); macdHist = macdMain - macdSignal; End; // ② 거래량 기준 거래량기준 = Average(Volume, 평균거래량기간); // ③ 진입 조건 + 박스 + 라벨 If sTime >= 시작시간 and sTime <= 종료시간 and 매수조건 = false Then Begin If rsiVal > rsiCut and macdHist > 0 and macdHist[1] < 0 and Volume > 거래량기준 * volumeMultiplier Then Begin 진입가 = Close; TP1 = 진입가 * tp1Ratio; TP2 = 진입가 * tp2Ratio; TP3 = 진입가 * tp3Ratio; SL = 진입가 * slRatio; 박스상 = TP3; 박스하 = SL; // 자동 매수 진입 Buy("LongEntry") Next Bar at Market; // 박스 표시 (TL 선 4개) TL_Delete(TL1); TL_Delete(TL2); TL_Delete(TL3); TL_Delete(TL4); Text_Delete(손익비텍스트); TL1 = TL_New(Date, Time, 박스상, Date + 1, Time, 박스상); TL2 = TL_New(Date, Time, 박스하, Date + 1, Time, 박스하); TL3 = TL_New(Date, Time, 박스상, Date, Time, 박스하); TL4 = TL_New(Date + 1, Time, 박스상, Date + 1, Time, 박스하); For TL in [TL1, TL2, TL3, TL4] Do Begin TL_SetColor(TL, RGB(200,255,200)); TL_SetSize(TL, 1); End; // 손익비 라벨 손익비텍스트 = Text_New(Date, Time, (TP3 + SL)/2, "손익비 " + NumToStr(AbsValue(TP3 - 진입가) / AbsValue(진입가 - SL), 1) + ":1"); Text_SetColor(손익비텍스트, Green); Text_SetStyle(손익비텍스트, 1, 0); 텍스트ID = Text_New(Date, Time, Low, "*매수 진입조건 만족"); Text_SetColor(텍스트ID, Green); 매수조건 = true; 청산1 = false; 청산2 = false; 청산3 = false; End; End; // ④ TP별 청산 시뮬레이션 If 매수조건 Then Begin If 청산1 = false and Close >= TP1 Then Begin Alert("&#128200; TP1 도달 &#8211; 30% 청산"); 청산1 = true; End; If 청산2 = false and Close >= TP2 Then Begin Alert("&#128200; TP2 도달 &#8211; 50% 청산"); 청산2 = true; End; If 청산3 = false and Close >= TP3 Then Begin Alert("&#9989; TP3 도달 &#8211; 나머지 20% 청산 완료"); 청산3 = true; 매수조건 = false; End; If Close <= SL Then Begin Alert("&#9940; 손절가 도달 &#8211; 전체 청산"); 청산1 = true; 청산2 = true; 청산3 = true; 매수조건 = false; End; End; // ⑤ 목표가 시각화 If 매수조건 Then Begin Plot1(TP1, "TP1", RGB(0, 150, 255)); Plot2(TP2, "TP2", RGB(0, 100, 200)); Plot3(TP3, "TP3", RGB(0, 50, 150)); End; 지표작성시 오류가 나서 수정부탁드립니다. 2. Input: rsiLen(14), rsiCut(50), macdFastLen(12), macdSlowLen(26), macdSignalLen(9), tp1Ratio(0.995), tp2Ratio(0.990), tp3Ratio(0.985), slRatio(1.01), volumeMultiplier(2.0), 평균거래량기간(20), 시작시간(93000), 종료시간(150000); Var: rsiVal(0), macdFastEMA(0), macdSlowEMA(0), macdMain(0), macdSignal(0), macdHist(0), 진입가(0), TP1(0), TP2(0), TP3(0), SL(0), 거래량기준(0), 텍스트ID(0), TL1(0), TL2(0), TL3(0), TL4(0), 박스상(0), 박스하(0), 매도조건(false); // ▶? 1. RSI 계산 rsiVal = RSI(rsiLen); // ▶? 2. MACD 수동 계산 (Index 기준 초기화 제거) If CurrentBar == 1 Then Begin macdFastEMA = Close; macdSlowEMA = Close; macdMain = 0; macdSignal = 0; macdHist = 0; End Else Begin macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1))); macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1))); macdMain = macdFastEMA - macdSlowEMA; macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1))); macdHist = macdMain - macdSignal; End; // ▶? 3. 평균 거래량 계산 거래량기준 = ma(Volume, 평균거래량기간); // ▶? 4. 진입 조건 + 시간 필터 If sTime >= 시작시간 and sTime <= 종료시간 Then Begin If rsiVal < rsiCut and macdHist < 0 and macdHist[1] > 0 and Volume > 거래량기준 * volumeMultiplier Then Begin 매도조건 = true; 진입가 = Close; // 목표가 / 손절가 계산 TP1 = 진입가 * tp1Ratio; TP2 = 진입가 * tp2Ratio; TP3 = 진입가 * tp3Ratio; SL = 진입가 * slRatio; 박스상 = SL; 박스하 = TP3; // ?? 손익비 박스 (TL 선 4개) TL1 = TL_New(sDate, sTime, 박스상, sDate, sTime, 박스하); TL2 = TL_New(sDate[1], sTime[1], 박스상, sDate[1], sTime[1], 박스하); TL3 = TL_New(sDate[1], sTime[1], 박스상, sDate, sTime, 박스상); TL4 = TL_New(sDate[1], sTime[1], 박스하, sDate, sTime, 박스하); TL_SetColor(TL1, RGB(255, 200, 200)); TL_SetSize(TL1, 1); TL_SetColor(TL2, RGB(255, 200, 200)); TL_SetSize(TL2, 1); TL_SetColor(TL3, RGB(255, 200, 200)); TL_SetSize(TL3, 1); TL_SetColor(TL4, RGB(255, 200, 200)); TL_SetSize(TL4, 1); // ?? 텍스트 알림 텍스트ID = Text_New(Date, Time, High, "*진입조건만족"); Text_SetColor(텍스트ID, RGB(255, 0, 0)); End; End; // ▶? 5. 목표가 / 손절가 Plot 시각화 If 매도조건 Then Begin Plot1(TP1, "TP1", RGB(0, 150, 255)); Plot2(TP2, "TP2", RGB(0, 100, 200)); Plot3(TP3, "TP3", RGB(0, 50, 150)); Plot4(SL, "손절", RGB(255, 0, 0)); End; 매수 버젼도 만들어주시면 감사드리겠습니다. 그리고 가능하다면 위 2번째 수식의 매수 매도 통합버젼도 부탁드리겠습니다 오늘도 고생많으십니다 감사합니다
프로필 이미지
윤호석
2025-05-22
229
글번호 191063
지표

우유 님에 의해서 삭제되었습니다.

프로필 이미지
우유
2025-05-21
16
글번호 191062
시스템
답변완료

질문 부탁드립니다

수고가 많으십니다 질문 몇 가지 부탁드리겠습니다 질문1) text함수에서 혹시 줄 바꾸기는 가능한가요?? txtt[0]=text_new(sd[0],st[0],aa[0],NumToStr(Var22,0)+" "+NumToStr((aa[0]-aa[1])/aa[1]*100,0)+"%"); 위의 식 처럼 여러개의 값이 있을때 한줄이 아닌 값 사이에 줄 바꾸기 (엔터) 로 표시를 하고 싶습니다 질문2) (질문2와 질문3 관련 수식은 맨 아래에 첨부하였습니다) 같은 텍스트 식 ( txtt[0] ) 에 aa[] 배열의 순서를 표시를 하고 싶습니다 현재봉이 몇 번째 aa[] 인지를 표시하려고 하는데 예를들어 가장 최근봉 (aa[0] ) 에서는 0, 그 전전 봉 ( aa[2] ) 에서는 2 라고 숫자를 나타내고 싶습니다 질문3) for- if - else 문에 관련된 질문입니다 첨부된 식에다 아래 for 문을 추가했을때, value1=0; for cnt=1 to 5 { if a[0]*1.1 < a[cnt] then { value1=a[cnt]; } else { a[1]=a[0]*1.1; } } 이 조건의 의미는 for 문을 수행했을때 (cnt = 1 to 5) a[0]*1.1 < a[cnt] 경우가 없다면 a[1] 에 a[0]*1.1 를 대입하라는 의미가 되는건가요?? 그리고 for cnt=1 to 5 { if a[0]*1.2 < a[cnt] then { value1=a[cnt]; } else { if a[0]*1.05 < a[cnt] then { value1=a[cnt]; } } } 이렇게 작성한다면 if a[0]*1.1 < a[cnt] 의 경우가 없다면 if a[0]*1.05 < a[cnt] 를 for 루프 수행 하라는 의미가 되는게 맞나요? 감사합니다 var : cnt(0), sum1(0), sumi1(0),summ(0),tt(0),hh(0),ll(0),tl(0),tl1(0),n(0),ae(0); var: sum2(0),sumi2(0),count(0),sumaa(0),sumai(0),avgaa(0); var : t(0),StartBarIndex(0),dd(0),d1(0),d2(0),e1(0),e2(0); Array : ii[50](0),aa[50](0),cc[50](0),ee[50](0),ttl[30](0),txtt[40](0), tttl1[40](0),tttl2[40](0),sd[45](0),st[45](0),ad[50](0),at[50](0); if Bdate != Bdate[1] Then { DD = DD+1; } if (h>l*1.08) and (d1 == 0 or (d1 > 0 and dd >= d1+5)) Then { d1 = dd; hh = h; var1 = Index; Var2 = var1[1]; Var3 = Var2[1]; sum1=0; sumi1=0; sum2=0; sumi2=0; For cnt = 1 to (var1-Var2) { sum1=sum1+l[cnt]; sumi1=sumi1+1; } value1=sum1/sumi1; For cnt = 49 DownTo 1 { aa[cnt] = aa[cnt-1]; sd[cnt] =sd[cnt-1]; st[cnt] =st[cnt-1]; txtt[cnt] = txtt[cnt-1]; tttl1[cnt]=tttl1[cnt-1]; } aa[0] = value1; sd[0] = sDate; st[0] = sTime; TL_SetExtRight( tttl1[3],False); tttl1[0] = TL_New(sd[5],st[5],aa[5],sd[0],st[0],aa[0]); TL_SetDrawMode( tttl1[0],0); TL_Delete( tttl1[3]); TL_SetExtRight( tttl1[0],true); txtt[0]=text_new(sd[0],st[0],aa[0],NumToStr(Var22,0)+" "+ NumToStr((aa[0]-aa[1])/aa[1]*100,0)+"%"); Text_SetSize(txtt[0],15); Text_SetBold(txtt[0],1); Text_SetStyle(txtt[0], 0, 0); } if aa[0] >0 then Plot11(aa[0],"average",Cyan,Def,1);
프로필 이미지
yamu
2025-05-22
161
글번호 191060
지표
답변완료

부탁드립니다

수식이 맞는지 확인 부탁합니다 input : len(100), th(3.0); // ZigZag 기준 변동폭(%) var : i(0), dir(0), ptCnt(0), zzIdx(0), zzPrice(0), zzDir(0), rise1(0), rise2(0), valid(false); // 배열 변수는 'Array :' 키워드를 사용하여 별도로 선언해야 합니다. // 여기서 100은 배열의 최대 크기입니다. len의 최대값에 따라 적절히 조정하세요. Array : zigzagPt[100](0); Array : zigzagIdx[100](0); // ZigZag 포인트 탐지 for i = 1 to len - 1 begin if dir = 0 then begin // 초기 방향 설정 if H[i] > H[0] * (1 + th / 100.0) then begin // 상승 방향 시작 dir = 1; zzPrice = H[i]; zzIdx = i; zzDir = 1; // 상승 zigzagPt[0] = zzPrice; zigzagIdx[0] = zzIdx; ptCnt = 1; end else if L[i] < L[0] * (1 - th / 100.0) then begin // 하락 방향 시작 dir = -1; zzPrice = L[i]; zzIdx = i; zzDir = -1; // 하락 zigzagPt[0] = zzPrice; zigzagIdx[0] = zzIdx; ptCnt = 1; end; end else if dir = 1 then begin // 현재 상승 중 if L[i] < zzPrice * (1 - th / 100.0) then begin // 하락 반전 dir = -1; zzPrice = L[i]; zzIdx = i; zzDir = -1; if ptCnt < 100 then begin // 배열 범위 체크: 100은 zigzagPt 배열의 최대 크기 zigzagPt[ptCnt] = zzPrice; zigzagIdx[ptCnt] = zzIdx; ptCnt = ptCnt + 1; // <-- 이 부분을 수정했습니다. (이전 49줄 에러 관련) end; end; end else if dir = -1 then begin // 현재 하락 중 if H[i] > zzPrice * (1 + th / 100.0) then begin // 상승 반전 dir = 1; zzPrice = H[i]; zzIdx = i; zzDir = 1; if ptCnt < 100 then begin // 배열 범위 체크: 100은 zigzagPt 배열의 최대 크기 zigzagPt[ptCnt] = zzPrice; zigzagIdx[ptCnt] = zzIdx; ptCnt = ptCnt + 1; // <-- 이 부분을 수정했습니다. (이전 62줄 에러 관련) end; end; end; end; // 5파 시작점 (4파 저점) 탐색 조건 // 최소 5개의 ZigZag 포인트가 있어야 조건 검증 가능 (ptCnt >= 5) // zigzagPt[0], zigzagPt[1], zigzagPt[2], zigzagPt[3], zigzagPt[4]까지 필요 if ptCnt >= 5 then begin // 상승 5파동 구조 검증 if zigzagPt[0] < zigzagPt[1] and zigzagPt[1] > zigzagPt[2] and zigzagPt[2] < zigzagPt[3] and zigzagPt[3] > zigzagPt[4] then begin // 주어진 조건 1, 2, 3 적용 if (zigzagPt[1] < zigzagPt[2] and // 조건 1a (1파 고점 < 2파 저점 - 사용자 조건) zigzagPt[2] < zigzagPt[3] and // 조건 1b (2파 저점 < 3파 고점) zigzagPt[2] > zigzagPt[0] and // 조건 2 (2파 저점 > 1파 시작점) zigzagPt[1] <= zigzagPt[4]) then begin // 조건 3 (1파 고점 <= 4파 저점) valid = true; end; end; end; if valid then find(1); // 조건 만족 시 검색
프로필 이미지
갈랑교
2025-05-22
159
글번호 191059
종목검색

와우리 님에 의해서 삭제되었습니다.

프로필 이미지
와우리
2025-05-21
26
글번호 191058
지표
답변완료

수식 문의 드립니다.

안녕하세요. 1. 돌파하는 종목을 검색하는 수식을 작성하고 있는데 LRL함수에 오류가 있는 것 같습니다. 시스템식에서는 문제 없는 것을 확인하였으나, 종목 검색식에서는 LRL함수에 maLine과 같은 변수가 들어가면 "데이터가 존재하지 않습니다" 라고 메시지가 뜹니다. LRLval = LRL(C, 20)와 같이 쓰면 에러없이 검색이 됩니다. 제가 원하는 변수를 사용할 수 있도록 수정 검토 부탁드립니다. maV = ma(C, 20); midLine = (highest(H, KCLength)+lowest(L, KCLength)) / 2; maLine = Close - (midLine+maV) / 2; LRLval = LRL(maLine, 20); If CrossUp(value1,value2) Then { If C == C[1] Then value3 = 0.001; Else value3 = (C-C[1])/C[1]*100; } Else value3 = 0; Find(value3); 2. 또한 수식내에 value3 = 0.001;value3 = (C-C[1])/C[1]*100; value3 = 0; 와 같이 써주는 이유는 무엇인지 설명부탁드립니다. 감사합니다.
프로필 이미지
착한이
2025-05-21
166
글번호 191057
종목검색