커뮤니티

수식 문의

프로필 이미지
흑수돌
2023-02-10 10:12:58
654
글번호 166156
답변완료
항상 친절한 답변 감사드립니다. 아래와 같은 수식을 구하고 싶습니다. 미리 요약 :: - 시그널이 발생하면 상,하단선을 만든다. - 상하단 레인지를 이용해 익절폭을 정한다. - 레인지 안에서는 중복신호 안 낸다. - 시그널 - 손,익절되면 레인지도 사라진다. - 레인지를 거꾸로 벗어나면 스위칭을 낸다. - 스위칭은 손/익절 전까지 중복 안 한다. (다른 시그널과는 중복가능) ========================= 어떤 시그널 var1 var2 이 발생 했다고 했을 때, (ex : var1 = rsi 30 crossup 매수 var2 = rsi 70 crossdn 매도 ## 일단 레인지를 찾습니다. 지표 1 : 볼린저 밴드 상단/ 하단선 지표 2 : price channel 상단+n틱 / 하단선-n틱 var1 매수시그널 발생 캔들 기준 : 하단선 : 밴드하단선과 price channel 하단선-n틱 중 더 낮은 가격 상단선 : 밴드상단선과 price channel 상단+n틱 중 더 낮은 가격 var2 매도 시그널 발생 캔들 기준 : 상단선 : 밴드상단선과 price channel 상단+n틱 중 더 높은 가격 하단선 : 밴드하단선과 price channel 하단선-n틱 중 더 높은 가격 레인지값 : 상단선 - 하단선 ===레인지의 활용 ==== a. var1 : (상단선) + (레인지값 * 0.5)에 도달 시 수익청산 b. var2 : (하단선) - (레인지값 * 0.5)에 도달 시 수익 청산 c. 추가 진입 금지 : 1. var1 또는 var2 포지션이 있고 2. 종가가 레인지 안에 있다면 3. 어떤 시그널도 추가로 발생시키지 않습니다. d. 단, 포지션이 없다면 레인지도 사라지고 시그널은 다시 발생. === 손절과 스위칭 === e. var1 매수 시그널의 손절과 스위칭 : (하단선)과 (현재가기준 볼린저밴드 하단선) 중 더 낮은 가격을 이탈하면 -> 매수는 손절하고 매도 스위칭. -> var1 매수 포지션은 사라졌으므로 레인지도 사라짐. -> (e. 스위칭 시그널)은 var1, var2 시그널이 아니므로 레인지 생성 안함. -> 즉, var1 or var2는 중복 발생 가능 익절 : 진입가에서 (진입가봉+직전봉)의 최고최저가 진폭) 만큼 빠지면 청산. 손절 : 직전 var1 시그널 고가 돌파 시 손절 ★ (e. 시그널) 은 손절되거나 익절되기 전까지 중복 생성 안함. k. var2 시그널은 그 반대 -> var2 : 상단선 과 현재가 기준 볼린저밴드 상단선) 중 더 높은 가격을 돌파 -> var2매도는 손절하고 매수 진입. -> var2 포지션 사라졌으므로 레인지도 사라짐. -> (k. 스위칭 시그널)은 var1, var2 시그널이 아니므로 레인지 생성 안함. -> 즉, var1 or var2는 중복 발생 가능 익절 : 진입가에서 (진입가봉+직전봉)의 최고최저가 진폭) 만큼 오르면 청산. 손절 : 직전 var2 시그널 저가 이탈 시 손절 ★ (e. 시그널) 은 손절되거나 익절되기 전까지 중복 생성 안함. -------------------------- 도움이 되실지 모르겠는데 일전에 도움 주신 비슷한 수식을 첨부드립니다. (그런데 작동은 안하더라고요) Input : Vector(9), Period(14), 매수선(30), 매도선(70); input : 저가봉(5),고가봉(5),저가폭(10),고가폭(10); Input : shortPeriod(12), longPeriod(26); Var : rsi_(0), rsi_signal(0) ; var : ll(0),hh(0),eh(0),el(0),BuyEntry(False),SellEntry(False); Var : MACDv(0), MACDsig(0), macdosc(0); rsi_ = RSI(Period); rsi_signal = MA(RSI(Period), Vector); ll = lowest(l,저가봉); hh = highest(h,고가봉); if MarketPosition != 0 Then { if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then { eh = hh; el = ll; } } /* 시그널 레인지를 만듬 ::: eh = @@ 매수 신호가 발생한 캔들을 기준으로 (저가봉) 기간 중 최저가를 찾아서 n틱을 빼줌. el = @@ 매도 신호가 발생한 캔들을 기준으로 (고가봉) 기간 중 최고가를 찾아서 n1틱을 더해줌 */ BuyEntry = true; SellEntry = true; if MarketPosition == 0 Then { if MarketPosition(1) == 1 and (C > ll[BarsSinceEntry(1)]-PriceScale*저가폭 and C < HH[BarsSinceEntry(1)]+PriceScale*고가폭) Then BuyEntry = False; if MarketPosition(1) == -1 and (C > ll[BarsSinceEntry(1)]-PriceScale*저가폭 and C < HH[BarsSinceEntry(1)]+PriceScale*고가폭) Then SellEntry = False; } else { if MarketPosition == 1 and C > el-PriceScale*저가폭 and C < eh+PriceScale*고가폭 Then BuyEntry = false; if MarketPosition == -1 and C > el-PriceScale*저가폭 and C < eh+PriceScale*고가폭 Then SellEntry = false; } /* ( eh + 고가폭) 보다 아래에 있으면서 (el + 저가폭 ) 위에 있는 신호는 걸러낸다. 시그널 레인지 안에서 발생한 시그널은 제외시킴 = (신호가 발생한 캔들 기준으로 N봉 기간) 의 최고가와 최저가에서 N틱을 더해서 레인지를 만들고, 그 레인지 안에 발생한 신호는 걸러낸다. */ if macdosc > 0 && #rsi_signal < 매수선 && rsi_ > 매수선 && rsi_[1] < 매수선 Then { if BuyEntry == true Then Buy("B1"); } if macdosc < 0 && #rsi_signal > 매도선 && rsi_ < 매도선 && rsi_[1] > 매도선 Then { if SellEntry == true Then Sell("S1"); } if MarketPosition == 1 Then Sell("Bx",AtStop,ll[BarsSinceEntry]-PriceScale*저가폭); if MarketPosition == -1 Then BUY("Sx",AtStop,hh[BarsSinceEntry]+PriceScale*고가폭); #시그널 레인지를 벗어나면 손절 하는 대신 즉시 반대신호를 냄. #단, 손절대신 낸 신호는 같은 레인지 안에서 중복될 수 있음.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-02-10 14:05:23

안녕하세요 예스스탁입니다. input : P(20),dv(2),LENGTH(10),n(5),RSIP(14); VAR : TCHAN(0), BCHAN(0); var : bbup(0),bbdn(0); var : RSIv(0); var : upv(0),dnv(0),RR(0),BH(0),SL(0); RSIV = RSI(RSIP); if MarketPosition == 0 and CrossUp(RSIV,30) Then Buy("b"); if MarketPosition == 0 and CrossDown(RSIV,70) Then Sell("s"); bbup = BollBandUp(P,dv); bbdn = BollBandDown(P,dv); TCHAN = HIGHEST(HIGH, LENGTH)[1]+n; BCHAN = LOWEST(LOW, LENGTH)[1]-n; if MarketPosition == 1 Then { bh = highest(H,BarsSinceEntry); if IsEntryName("b") == true Then { upv = min(bbup[BarsSinceEntry],TCHAN[BarsSinceEntry]); dnv = min(bbdn[BarsSinceEntry],BCHAN[BarsSinceEntry]); RR = upv-dnv; ExitLong("bp",AtLimit,upv+RR*0.5); Sell("bs",AtStop,dnv-RR*0.5); } Else { ExitLong("sbp",AtLimit,EntryPrice+(highest(H,2)[BarsSinceEntry]-lowest(L,2)[BarsSinceEntry])); ExitLong("sbl",AtStop,sl); } } if MarketPosition == -1 Then { sl = lowest(L,BarsSinceEntry); if IsEntryName("b") == true Then { upv = max(bbup[BarsSinceEntry],TCHAN[BarsSinceEntry]); dnv = max(bbdn[BarsSinceEntry],BCHAN[BarsSinceEntry]); RR = upv-dnv; ExitShort("sp",AtLimit,upv+RR*0.5); Buy("sb",AtStop,upv+RR*0.5); } Else { ExitShort("bsp",AtLimit,EntryPrice-(highest(H,2)[BarsSinceEntry]-lowest(L,2)[BarsSinceEntry])); ExitShort("bsl",AtStop,bh); } } 즐거운 하루되세요 > 흑수돌 님이 쓴 글입니다. > 제목 : 수식 문의 > 항상 친절한 답변 감사드립니다. 아래와 같은 수식을 구하고 싶습니다. 미리 요약 :: - 시그널이 발생하면 상,하단선을 만든다. - 상하단 레인지를 이용해 익절폭을 정한다. - 레인지 안에서는 중복신호 안 낸다. - 시그널 - 손,익절되면 레인지도 사라진다. - 레인지를 거꾸로 벗어나면 스위칭을 낸다. - 스위칭은 손/익절 전까지 중복 안 한다. (다른 시그널과는 중복가능) ========================= 어떤 시그널 var1 var2 이 발생 했다고 했을 때, (ex : var1 = rsi 30 crossup 매수 var2 = rsi 70 crossdn 매도 ## 일단 레인지를 찾습니다. 지표 1 : 볼린저 밴드 상단/ 하단선 지표 2 : price channel 상단+n틱 / 하단선-n틱 var1 매수시그널 발생 캔들 기준 : 하단선 : 밴드하단선과 price channel 하단선-n틱 중 더 낮은 가격 상단선 : 밴드상단선과 price channel 상단+n틱 중 더 낮은 가격 var2 매도 시그널 발생 캔들 기준 : 상단선 : 밴드상단선과 price channel 상단+n틱 중 더 높은 가격 하단선 : 밴드하단선과 price channel 하단선-n틱 중 더 높은 가격 레인지값 : 상단선 - 하단선 ===레인지의 활용 ==== a. var1 : (상단선) + (레인지값 * 0.5)에 도달 시 수익청산 b. var2 : (하단선) - (레인지값 * 0.5)에 도달 시 수익 청산 c. 추가 진입 금지 : 1. var1 또는 var2 포지션이 있고 2. 종가가 레인지 안에 있다면 3. 어떤 시그널도 추가로 발생시키지 않습니다. d. 단, 포지션이 없다면 레인지도 사라지고 시그널은 다시 발생. === 손절과 스위칭 === e. var1 매수 시그널의 손절과 스위칭 : (하단선)과 (현재가기준 볼린저밴드 하단선) 중 더 낮은 가격을 이탈하면 -> 매수는 손절하고 매도 스위칭. -> var1 매수 포지션은 사라졌으므로 레인지도 사라짐. -> (e. 스위칭 시그널)은 var1, var2 시그널이 아니므로 레인지 생성 안함. -> 즉, var1 or var2는 중복 발생 가능 익절 : 진입가에서 (진입가봉+직전봉)의 최고최저가 진폭) 만큼 빠지면 청산. 손절 : 직전 var1 시그널 고가 돌파 시 손절 ★ (e. 시그널) 은 손절되거나 익절되기 전까지 중복 생성 안함. k. var2 시그널은 그 반대 -> var2 : 상단선 과 현재가 기준 볼린저밴드 상단선) 중 더 높은 가격을 돌파 -> var2매도는 손절하고 매수 진입. -> var2 포지션 사라졌으므로 레인지도 사라짐. -> (k. 스위칭 시그널)은 var1, var2 시그널이 아니므로 레인지 생성 안함. -> 즉, var1 or var2는 중복 발생 가능 익절 : 진입가에서 (진입가봉+직전봉)의 최고최저가 진폭) 만큼 오르면 청산. 손절 : 직전 var2 시그널 저가 이탈 시 손절 ★ (e. 시그널) 은 손절되거나 익절되기 전까지 중복 생성 안함. -------------------------- 도움이 되실지 모르겠는데 일전에 도움 주신 비슷한 수식을 첨부드립니다. (그런데 작동은 안하더라고요) Input : Vector(9), Period(14), 매수선(30), 매도선(70); input : 저가봉(5),고가봉(5),저가폭(10),고가폭(10); Input : shortPeriod(12), longPeriod(26); Var : rsi_(0), rsi_signal(0) ; var : ll(0),hh(0),eh(0),el(0),BuyEntry(False),SellEntry(False); Var : MACDv(0), MACDsig(0), macdosc(0); rsi_ = RSI(Period); rsi_signal = MA(RSI(Period), Vector); ll = lowest(l,저가봉); hh = highest(h,고가봉); if MarketPosition != 0 Then { if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then { eh = hh; el = ll; } } /* 시그널 레인지를 만듬 ::: eh = @@ 매수 신호가 발생한 캔들을 기준으로 (저가봉) 기간 중 최저가를 찾아서 n틱을 빼줌. el = @@ 매도 신호가 발생한 캔들을 기준으로 (고가봉) 기간 중 최고가를 찾아서 n1틱을 더해줌 */ BuyEntry = true; SellEntry = true; if MarketPosition == 0 Then { if MarketPosition(1) == 1 and (C > ll[BarsSinceEntry(1)]-PriceScale*저가폭 and C < HH[BarsSinceEntry(1)]+PriceScale*고가폭) Then BuyEntry = False; if MarketPosition(1) == -1 and (C > ll[BarsSinceEntry(1)]-PriceScale*저가폭 and C < HH[BarsSinceEntry(1)]+PriceScale*고가폭) Then SellEntry = False; } else { if MarketPosition == 1 and C > el-PriceScale*저가폭 and C < eh+PriceScale*고가폭 Then BuyEntry = false; if MarketPosition == -1 and C > el-PriceScale*저가폭 and C < eh+PriceScale*고가폭 Then SellEntry = false; } /* ( eh + 고가폭) 보다 아래에 있으면서 (el + 저가폭 ) 위에 있는 신호는 걸러낸다. 시그널 레인지 안에서 발생한 시그널은 제외시킴 = (신호가 발생한 캔들 기준으로 N봉 기간) 의 최고가와 최저가에서 N틱을 더해서 레인지를 만들고, 그 레인지 안에 발생한 신호는 걸러낸다. */ if macdosc > 0 && #rsi_signal < 매수선 && rsi_ > 매수선 && rsi_[1] < 매수선 Then { if BuyEntry == true Then Buy("B1"); } if macdosc < 0 && #rsi_signal > 매도선 && rsi_ < 매도선 && rsi_[1] > 매도선 Then { if SellEntry == true Then Sell("S1"); } if MarketPosition == 1 Then Sell("Bx",AtStop,ll[BarsSinceEntry]-PriceScale*저가폭); if MarketPosition == -1 Then BUY("Sx",AtStop,hh[BarsSinceEntry]+PriceScale*고가폭); #시그널 레인지를 벗어나면 손절 하는 대신 즉시 반대신호를 냄. #단, 손절대신 낸 신호는 같은 레인지 안에서 중복될 수 있음.