커뮤니티

수식 문의 드립니다

프로필 이미지
루라라라
2023-03-20 02:49:38
846
글번호 167316
답변완료
sTime 사용법이 이게 맞을까요? 만약 이게 아니라면, 제가 적어놓은, 의도하는 의미대로 수식을 작성하려면 어떻게 수정해야할지 좀 부탁드리겠습니다 ㅠ 당일 특정 시간대를 넘겼을때만(15시 10분 이후) buy나 sell등의 주문이(at stop으로) 작동하게끔 하고 싶습니다. 1번 if MarketPosition == 0 and sTime >= 151000 Then { Buy("진입", AtStop, highest(c, 20), Floor(수량)); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 0이면서, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 <어제인 16일 목요일로부터 과거 20일간의 최고가>보다 크다면, 그 가격에 즉시 매수주문 2번 if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] and sTime >= 151000 Then Buy("추가진입", AtStop, LatestEntryPrice(0)*1.1, Floor(수량) ); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 MarketPosition == 1 이면서, 16일 목요일(어제) 기준으로 CurrentContracts > CurrentContracts[1] 이면서 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 <이전 진입가격의 1.1배>보다 크다면, 그 가격에 즉시 매수 주문 3번 If MarketPosition==1 and sTime >= 151000 Then { SetStopLoss(cut_n*ATr(20),PointStop); } Else SetStopLoss(0); 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 1이면서, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 진입가격-cut_n*ATr(20) 보다 작다면, 그 가격에 즉시 매도주문 4번 If MarketPosition==1 and RSI(20) >= 60 and sTime >= 151000 Then { ExitLong("청산", atstop, Highest(C,20)-3*ATR(20) ); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 1이면서 RSI(20) 값이 60 이상이고, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 ( Highest(C,20)-3*ATR(20) ) 보다 작다면, 그 가격에 즉시 매도주문 ---------------------------- 아니면 아래와 같이 맨 처음에 sTime조건을 먼저 설정해주는게 맞는지.... If sTime >= 151000 Then { if MarketPosition == 0 Then { Buy("진입", AtStop, highest(c, 20), Floor(수량)); } }
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2023-03-20 13:34:49

안녕하세요 예스스탁입니다. 수식에 시간을 지정하는 내용이 들어가면 분봉에 적용해야 합니다. 내용에 전일자등이 있는데 차트가 일봉이면 시간조건은 지정이 불가능합니다. 좀더 자세한 설명이 필요합니다. 02-3453-1060으로 전화주시기 바랍니다. 즐거운 하루되세요 > 루라라라 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다 > sTime 사용법이 이게 맞을까요? 만약 이게 아니라면, 제가 적어놓은, 의도하는 의미대로 수식을 작성하려면 어떻게 수정해야할지 좀 부탁드리겠습니다 ㅠ 당일 특정 시간대를 넘겼을때만(15시 10분 이후) buy나 sell등의 주문이(at stop으로) 작동하게끔 하고 싶습니다. 1번 if MarketPosition == 0 and sTime >= 151000 Then { Buy("진입", AtStop, highest(c, 20), Floor(수량)); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 0이면서, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 <어제인 16일 목요일로부터 과거 20일간의 최고가>보다 크다면, 그 가격에 즉시 매수주문 2번 if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] and sTime >= 151000 Then Buy("추가진입", AtStop, LatestEntryPrice(0)*1.1, Floor(수량) ); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 MarketPosition == 1 이면서, 16일 목요일(어제) 기준으로 CurrentContracts > CurrentContracts[1] 이면서 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 <이전 진입가격의 1.1배>보다 크다면, 그 가격에 즉시 매수 주문 3번 If MarketPosition==1 and sTime >= 151000 Then { SetStopLoss(cut_n*ATr(20),PointStop); } Else SetStopLoss(0); 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 1이면서, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 진입가격-cut_n*ATr(20) 보다 작다면, 그 가격에 즉시 매도주문 4번 If MarketPosition==1 and RSI(20) >= 60 and sTime >= 151000 Then { ExitLong("청산", atstop, Highest(C,20)-3*ATR(20) ); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 1이면서 RSI(20) 값이 60 이상이고, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 ( Highest(C,20)-3*ATR(20) ) 보다 작다면, 그 가격에 즉시 매도주문 ---------------------------- 아니면 아래와 같이 맨 처음에 sTime조건을 먼저 설정해주는게 맞는지.... If sTime >= 151000 Then { if MarketPosition == 0 Then { Buy("진입", AtStop, highest(c, 20), Floor(수량)); } }
프로필 이미지

예스스탁 예스스탁 답변

2023-03-20 15:03:17

안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. 시간조건을 주기 위해서는 차트가 분봉이하 주기일때만 가능합니다. 기존수식이 일봉에서 사용되는 내용이므로 분봉차트에서 일봉지표를 구현해서 수식에서 사용하셔야 합니다. 기존식에 cut_n과 수량은 내용확인이 되지 않아 추가하지 못했습니다. 기존식에서 수식내용 가져와 추가하시기 바랍니다. input : HPeriod(20); input : ATRPeriod(10); Input : RSIPeriod(20); var : HC(0),cnt(0); var : sumTR(0),TH(0),TL(0),ATRV(0); var : SigSum(0),count2(0),RSIsig(0); Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0); var : idx(0), PreUpAvg(0), preDownAvg(0),RSIV(0),RSIV1(0); Array : C1[100](0); #일봉 highest(C,2) 계산 HC = 0; For cnt = 1 to HPeriod { if HC == 0 or (HC > 0 and DayClose(cnt) > HC) Then HC = DayClose(cnt); } #일봉 ATR계산 sumTR = 0; for cnt = 1 to ATRPeriod { If DayClose(cnt+1) > DayHigh(cnt) then TH = DayClose(cnt+1); else TH = DayHigh(cnt); If DayClose(cnt+1) < daylow(cnt) then TL = DayClose(cnt+1); else TL = daylow(cnt); sumTR = sumTR + (TH-TL); } ATRV = sumTR/ATRPeriod; #일봉 RSI계산 if Bdate != Bdate[1] Then { for cnt = 1 to 99 { C1[cnt] = C1[cnt-1][1]; } PreUpAvg = UpAvg[1]; preDownAvg = DownAvg[1]; idx = idx + 1; RSIV1 = RSIV[1]; } C1[0] = C; If idx == RSIPeriod+2 Then { UpSum = 0; DownSum = 0; For Counter = 0 To RSIPeriod - 1 { UpAmt = C1[Counter] - C1[Counter+1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpSum = UpSum + UpAmt; DownSum = DownSum + DownAmt; } UpAvg = UpSum / RSIPeriod; DownAvg = DownSum / RSIPeriod; } If idx > RSIPeriod+2 Then { UpAmt = C1[0] - C1[1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpAvg = (PreUpAvg * (RSIPeriod - 1) + UpAmt) / RSIPeriod; DownAvg = (preDownAvg * (RSIPeriod - 1) + DownAmt) / RSIPeriod; } If UpAvg + DownAvg <> 0 Then RSIv = 100 * UpAvg / (UpAvg + DownAvg); Else RSIv = 0; #첫진입 if MarketPosition == 0 and sTime >= 151000 Then { Buy("진입", AtStop, HC, Floor(수량)); } #진입 후 다음날 15시 10분 이후 if MarketPosition == 1 Then { if sDate > EntryDate and sTime >= 151000 Then Buy("추가진입", AtStop, LatestEntryPrice(0)*1.1, Floor(수량) ); if sDate > EntryDate and sTime >= 151000 Then SetStopLoss(cut_n*ATRV); Else SetStopLoss(0); if sDate > EntryDate and RSIV >= 60 and sTime >= 151000 Then ExitLong("청산", atstop, HC-3*ATRV); } Else SetStopLoss(0); 즐거운 하루되세요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 문의 드립니다 > 안녕하세요 예스스탁입니다. 수식에 시간을 지정하는 내용이 들어가면 분봉에 적용해야 합니다. 내용에 전일자등이 있는데 차트가 일봉이면 시간조건은 지정이 불가능합니다. 좀더 자세한 설명이 필요합니다. 02-3453-1060으로 전화주시기 바랍니다. 즐거운 하루되세요 > 루라라라 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다 > sTime 사용법이 이게 맞을까요? 만약 이게 아니라면, 제가 적어놓은, 의도하는 의미대로 수식을 작성하려면 어떻게 수정해야할지 좀 부탁드리겠습니다 ㅠ 당일 특정 시간대를 넘겼을때만(15시 10분 이후) buy나 sell등의 주문이(at stop으로) 작동하게끔 하고 싶습니다. 1번 if MarketPosition == 0 and sTime >= 151000 Then { Buy("진입", AtStop, highest(c, 20), Floor(수량)); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 0이면서, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 <어제인 16일 목요일로부터 과거 20일간의 최고가>보다 크다면, 그 가격에 즉시 매수주문 2번 if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] and sTime >= 151000 Then Buy("추가진입", AtStop, LatestEntryPrice(0)*1.1, Floor(수량) ); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 MarketPosition == 1 이면서, 16일 목요일(어제) 기준으로 CurrentContracts > CurrentContracts[1] 이면서 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 <이전 진입가격의 1.1배>보다 크다면, 그 가격에 즉시 매수 주문 3번 If MarketPosition==1 and sTime >= 151000 Then { SetStopLoss(cut_n*ATr(20),PointStop); } Else SetStopLoss(0); 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 1이면서, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 진입가격-cut_n*ATr(20) 보다 작다면, 그 가격에 즉시 매도주문 4번 If MarketPosition==1 and RSI(20) >= 60 and sTime >= 151000 Then { ExitLong("청산", atstop, Highest(C,20)-3*ATR(20) ); } 제가 원하는 의미 : 16일 목요일(어제) 기준으로 마켓 포지션이 1이면서 RSI(20) 값이 60 이상이고, 17일 금요일(오늘) 기준으로 15시 10분이 넘었을때, 15시 10분부터 장마감전까지 실시간 현재가격이 ( Highest(C,20)-3*ATR(20) ) 보다 작다면, 그 가격에 즉시 매도주문 ---------------------------- 아니면 아래와 같이 맨 처음에 sTime조건을 먼저 설정해주는게 맞는지.... If sTime >= 151000 Then { if MarketPosition == 0 Then { Buy("진입", AtStop, highest(c, 20), Floor(수량)); } }