커뮤니티

수식 수정을 부탁드립니다

프로필 이미지
장보고153
2025-07-11 02:36:33
167
글번호 192422
답변완료
트레이딩뷰의 UT BOT 지표를 시스템용 매수 매도로 전환한 식입니다 검증 결과 이상이 없다고 확인되는데 구동하면 논리값이나 논리표현이 와야 한다는 메세지가 뜹니다 늘 건강하세요. Input: Key_Value(1), // Key Vaule. 'This changes the sensitivity' ATR_Period(10), // ATR Period UseHeikinAshi(False); // Signals from Heikin Ashi Candles (이 기능은 예스트레이더에서 별도 구현 필요) Var: xATR(0), // ATR 값 nLoss(0), // 손실 한도 xATRTrailingStop(0),// 트레일링 스톱 값 pos(0), // 추세 방향 (1:상승, -1:하락, 0:중립) src(0), // 계산에 사용될 가격 데이터 (종가 또는 Heikin Ashi 종가) ema(0), // EMA 값 above(False), // 상향 돌파 여부 below(False), // 하향 돌파 여부 BuySignal(False), // 매수 신호 발생 여부 SellSignal(False); // 매도 신호 발생 여부 // 모든 변수를 수식 시작점에서 명확하게 초기화합니다. // 이렇게 하면 컴파일러가 변수들이 사용되기 전에 항상 초기화되었다고 인식할 수 있습니다. xATR = 0; nLoss = 0; xATRTrailingStop = 0; pos = 0; src = Close; // 기본적으로 현재 봉의 종가로 초기화 ema = 0; above = False; below = False; BuySignal = False; SellSignal = False; // Heikin Ashi 캔들 사용 여부에 따라 src 값 결정 // 예스트레이더에서 Heikin Ashi 캔들 데이터를 직접 가져오는 기능이 없으므로, // 이 부분은 일반 종가(Close)를 사용하거나, Heikin Ashi 캔들 계산 로직을 별도로 구현해야 합니다. If UseHeikinAshi Then Begin // Heikin Ashi 캔들 데이터 가져오기 (예스트레이더에서 직접 지원하지 않음, 별도 구현 필요) // 예시: src = HAKENASHI_CLOSE(); 또는 Heikin Ashi 계산 로직 삽입 src = Close; // UseHeikinAshi가 True여도 일단 Close를 사용합니다. (이 부분은 사용자 정의 함수로 대체되어야 합니다.) End Else Begin src = Close; // UseHeikinAshi가 False이면 현재 봉의 종가 사용 End; // ATR 계산 xATR = ATR(ATR_Period); nLoss = Key_Value * xATR; // xATRTrailingStop 계산 // 첫 봉에서는 xATRTrailingStop[1] 값이 없으므로 초기값을 설정해야 합니다. If CurrentBar == 1 Then Begin xATRTrailingStop = src - nLoss; // 첫 봉 초기값 설정 End Else Begin If src > xATRTrailingStop[1] And src[1] > xATRTrailingStop[1] Then Begin xATRTrailingStop = Max(xATRTrailingStop[1], src - nLoss); End Else If src < xATRTrailingStop[1] And src[1] < xATRTrailingStop[1] Then Begin xATRTrailingStop = Min(xATRTrailingStop[1], src + nLoss); End Else If src > xATRTrailingStop[1] Then Begin xATRTrailingStop = src - nLoss; End Else Begin xATRTrailingStop = src + nLoss; End; End; // pos (추세 방향) 계산 If CurrentBar == 1 Then Begin pos = 0; // 첫 봉 초기값 End Else Begin If src[1] < xATRTrailingStop[1] And src > xATRTrailingStop[1] Then Begin pos = 1; // 상승 추세 전환 End Else If src[1] > xATRTrailingStop[1] And src < xATRTrailingStop[1] Then Begin pos = -1; // 하락 추세 전환 End Else Begin pos = pos[1]; // 이전 추세 유지 End; End; // EMA (period 1은 사실상 src와 동일) ema = src; // EMA(src, 1)은 src와 동일합니다. // 교차 신호 // 'Cross' 대신 'CrossUp'과 'CrossDown' 함수를 사용합니다. // 라인 81: ema가 xATRTrailingStop을 상향 돌파 above = CrossUp(ema, xATRTrailingStop); // 라인 82: xATRTrailingStop이 ema를 상향 돌파 == ema가 xATRTrailingStop을 하향 돌파 below = CrossDown(ema, xATRTrailingStop); // 매수/매도 신호 조건 BuySignal = (src > xATRTrailingStop) And above; SellSignal = (src < xATRTrailingStop) And below; // 매수/매도 명령 If BuySignal Then Begin Buy("UT_Buy"); End; If SellSignal Then Begin Sell("UT_Sell"); End;
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-11 10:18:20

안녕하세요 예스스탁입니다. 1 시뮬레이션 차트는 변수 최적화기능이 있어 모든 input변수가 숫자변수이어야 합니다. UseHeikinAshi변수를 0 또는 1로 지정하게 변경해 드립니다. false면 0, true면 1로 지정하시면 됩니다. 2 UseHeikinAshi가 1로 지정되면 하켄아쉬 종가를 사용하게 추가해 드립니다. 3 Input: Key_Value(1), // Key Vaule. 'This changes the sensitivity' ATR_Period(10), // ATR Period UseHeikinAshi(0);#0:False, 1:true // Signals from Heikin Ashi Candles (이 기능은 예스트레이더에서 별도 구현 필요) Var: xATR(0), // ATR 값 nLoss(0), // 손실 한도 xATRTrailingStop(0),// 트레일링 스톱 값 pos(0), // 추세 방향 (1:상승, -1:하락, 0:중립) src(0), // 계산에 사용될 가격 데이터 (종가 또는 Heikin Ashi 종가) ema(0), // EMA 값 above(False), // 상향 돌파 여부 below(False), // 하향 돌파 여부 BuySignal(False), // 매수 신호 발생 여부 SellSignal(False); // 매도 신호 발생 여부 var : xClose(0),xOpen(0),xHigh(0),xLow(0); // 모든 변수를 수식 시작점에서 명확하게 초기화합니다. // 이렇게 하면 컴파일러가 변수들이 사용되기 전에 항상 초기화되었다고 인식할 수 있습니다. xATR = 0; nLoss = 0; xATRTrailingStop = 0; pos = 0; src = Close; // 기본적으로 현재 봉의 종가로 초기화 ema = 0; above = False; below = False; BuySignal = False; SellSignal = False; #Heiken Ashi 시고저종 if index == 0 then { xClose = (O+H+L+C)/4; xOpen = open; xHigh = MaxList( high, xOpen, xClose); xLow = MinList( low, xOpen,xClose); } else { xClose = (O+H+L+C)/4; xOpen = (xOpen [1] + xClose [1])/2 ; xHigh = MaxList(High, xOpen, xClose) ; xLow = MinList(Low, xOpen, xClose) ; } // Heikin Ashi 캔들 사용 여부에 따라 src 값 결정 // 예스트레이더에서 Heikin Ashi 캔들 데이터를 직접 가져오는 기능이 없으므로, // 이 부분은 일반 종가(Close)를 사용하거나, Heikin Ashi 캔들 계산 로직을 별도로 구현해야 합니다. If UseHeikinAshi == 1 Then Begin // Heikin Ashi 캔들 데이터 가져오기 (예스트레이더에서 직접 지원하지 않음, 별도 구현 필요) // 예시: src = HAKENASHI_CLOSE(); 또는 Heikin Ashi 계산 로직 삽입 src = xClose; // UseHeikinAshi가 True여도 일단 Close를 사용합니다. (이 부분은 사용자 정의 함수로 대체되어야 합니다.) End Else Begin src = Close; // UseHeikinAshi가 False이면 현재 봉의 종가 사용 End; // ATR 계산 xATR = ATR(ATR_Period); nLoss = Key_Value * xATR; // xATRTrailingStop 계산 // 첫 봉에서는 xATRTrailingStop[1] 값이 없으므로 초기값을 설정해야 합니다. If CurrentBar == 1 Then Begin xATRTrailingStop = src - nLoss; // 첫 봉 초기값 설정 End Else Begin If src > xATRTrailingStop[1] And src[1] > xATRTrailingStop[1] Then Begin xATRTrailingStop = Max(xATRTrailingStop[1], src - nLoss); End Else If src < xATRTrailingStop[1] And src[1] < xATRTrailingStop[1] Then Begin xATRTrailingStop = Min(xATRTrailingStop[1], src + nLoss); End Else If src > xATRTrailingStop[1] Then Begin xATRTrailingStop = src - nLoss; End Else Begin xATRTrailingStop = src + nLoss; End; End; // pos (추세 방향) 계산 If CurrentBar == 1 Then Begin pos = 0; // 첫 봉 초기값 End Else Begin If src[1] < xATRTrailingStop[1] And src > xATRTrailingStop[1] Then Begin pos = 1; // 상승 추세 전환 End Else If src[1] > xATRTrailingStop[1] And src < xATRTrailingStop[1] Then Begin pos = -1; // 하락 추세 전환 End Else Begin pos = pos[1]; // 이전 추세 유지 End; End; // EMA (period 1은 사실상 src와 동일) ema = src; // EMA(src, 1)은 src와 동일합니다. // 교차 신호 // 'Cross' 대신 'CrossUp'과 'CrossDown' 함수를 사용합니다. // 라인 81: ema가 xATRTrailingStop을 상향 돌파 above = CrossUp(ema, xATRTrailingStop); // 라인 82: xATRTrailingStop이 ema를 상향 돌파 == ema가 xATRTrailingStop을 하향 돌파 below = CrossDown(ema, xATRTrailingStop); // 매수/매도 신호 조건 BuySignal = (src > xATRTrailingStop) And above; SellSignal = (src < xATRTrailingStop) And below; // 매수/매도 명령 If BuySignal Then Begin Buy("UT_Buy"); End; If SellSignal Then Begin Sell("UT_Sell"); End; 즐거운 하루되세요 > 장보고153 님이 쓴 글입니다. > 제목 : 수식 수정을 부탁드립니다 > 트레이딩뷰의 UT BOT 지표를 시스템용 매수 매도로 전환한 식입니다 검증 결과 이상이 없다고 확인되는데 구동하면 논리값이나 논리표현이 와야 한다는 메세지가 뜹니다 늘 건강하세요. Input: Key_Value(1), // Key Vaule. 'This changes the sensitivity' ATR_Period(10), // ATR Period UseHeikinAshi(False); // Signals from Heikin Ashi Candles (이 기능은 예스트레이더에서 별도 구현 필요) Var: xATR(0), // ATR 값 nLoss(0), // 손실 한도 xATRTrailingStop(0),// 트레일링 스톱 값 pos(0), // 추세 방향 (1:상승, -1:하락, 0:중립) src(0), // 계산에 사용될 가격 데이터 (종가 또는 Heikin Ashi 종가) ema(0), // EMA 값 above(False), // 상향 돌파 여부 below(False), // 하향 돌파 여부 BuySignal(False), // 매수 신호 발생 여부 SellSignal(False); // 매도 신호 발생 여부 // 모든 변수를 수식 시작점에서 명확하게 초기화합니다. // 이렇게 하면 컴파일러가 변수들이 사용되기 전에 항상 초기화되었다고 인식할 수 있습니다. xATR = 0; nLoss = 0; xATRTrailingStop = 0; pos = 0; src = Close; // 기본적으로 현재 봉의 종가로 초기화 ema = 0; above = False; below = False; BuySignal = False; SellSignal = False; // Heikin Ashi 캔들 사용 여부에 따라 src 값 결정 // 예스트레이더에서 Heikin Ashi 캔들 데이터를 직접 가져오는 기능이 없으므로, // 이 부분은 일반 종가(Close)를 사용하거나, Heikin Ashi 캔들 계산 로직을 별도로 구현해야 합니다. If UseHeikinAshi Then Begin // Heikin Ashi 캔들 데이터 가져오기 (예스트레이더에서 직접 지원하지 않음, 별도 구현 필요) // 예시: src = HAKENASHI_CLOSE(); 또는 Heikin Ashi 계산 로직 삽입 src = Close; // UseHeikinAshi가 True여도 일단 Close를 사용합니다. (이 부분은 사용자 정의 함수로 대체되어야 합니다.) End Else Begin src = Close; // UseHeikinAshi가 False이면 현재 봉의 종가 사용 End; // ATR 계산 xATR = ATR(ATR_Period); nLoss = Key_Value * xATR; // xATRTrailingStop 계산 // 첫 봉에서는 xATRTrailingStop[1] 값이 없으므로 초기값을 설정해야 합니다. If CurrentBar == 1 Then Begin xATRTrailingStop = src - nLoss; // 첫 봉 초기값 설정 End Else Begin If src > xATRTrailingStop[1] And src[1] > xATRTrailingStop[1] Then Begin xATRTrailingStop = Max(xATRTrailingStop[1], src - nLoss); End Else If src < xATRTrailingStop[1] And src[1] < xATRTrailingStop[1] Then Begin xATRTrailingStop = Min(xATRTrailingStop[1], src + nLoss); End Else If src > xATRTrailingStop[1] Then Begin xATRTrailingStop = src - nLoss; End Else Begin xATRTrailingStop = src + nLoss; End; End; // pos (추세 방향) 계산 If CurrentBar == 1 Then Begin pos = 0; // 첫 봉 초기값 End Else Begin If src[1] < xATRTrailingStop[1] And src > xATRTrailingStop[1] Then Begin pos = 1; // 상승 추세 전환 End Else If src[1] > xATRTrailingStop[1] And src < xATRTrailingStop[1] Then Begin pos = -1; // 하락 추세 전환 End Else Begin pos = pos[1]; // 이전 추세 유지 End; End; // EMA (period 1은 사실상 src와 동일) ema = src; // EMA(src, 1)은 src와 동일합니다. // 교차 신호 // 'Cross' 대신 'CrossUp'과 'CrossDown' 함수를 사용합니다. // 라인 81: ema가 xATRTrailingStop을 상향 돌파 above = CrossUp(ema, xATRTrailingStop); // 라인 82: xATRTrailingStop이 ema를 상향 돌파 == ema가 xATRTrailingStop을 하향 돌파 below = CrossDown(ema, xATRTrailingStop); // 매수/매도 신호 조건 BuySignal = (src > xATRTrailingStop) And above; SellSignal = (src < xATRTrailingStop) And below; // 매수/매도 명령 If BuySignal Then Begin Buy("UT_Buy"); End; If SellSignal Then Begin Sell("UT_Sell"); End;