예스스탁
예스스탁 답변
2025-05-30 11:08:34
안녕하세요
예스스탁입니다.
Input : NMin(5); // Step 1 until 30
Input: ATRperiod(14),ATRFactor(10); // Step 10 until 100
Vars: FirstNHigh(0), FirstNLow(0), FirstNOpen(0), FirstNClose(0);
Vars: ATR14(0), StopLoss(0);
var : s1(0),d1(0),tm(0);
var : sumTR(0),TH(0),TL(0),cnt(0),ATRV(0);
#일봉 ATR계산
sumTR = 0;
for cnt = 0 to ATRperiod-1
{
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;
StopLoss = ATRV * ATRFactor / 100;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
FirstNHigh = H;
FirstNLow = L;
FirstNOpen = O;
FirstNClose = c;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
if TM < NMin Then
{
if h > FirstNHigh Then
FirstNHigh = h;
if l < FirstNLow Then
FirstNLow = l;
FirstNClose = c;
}
// 3. 매수 조건: 첫 5분봉 양봉 & High 돌파
If FirstNClose > FirstNOpen and Close > FirstNHigh and TM >= NMin Then
{
If MarketPosition == 0 Then
Buy("ORBLong",AtMarket,DEf,1);
}
// 4. 매도 조건: 첫 5분봉 음봉 & Low 돌파
If FirstNClose < FirstNOpen and Close < FirstNLow and TM >= NMin Then
{
If MarketPosition == 0 Then
Sell("ORBShort",AtMarket,DEf,1);
}
// 5. 스탑로스 (ATR 10% 이탈 시)
If MarketPosition == 1 Then ExitLong("A1",AtStop,EntryPrice - StopLoss);
If MarketPosition == -1 Then ExitShort("B1",AtStop,EntryPrice + StopLoss);
}
// 6. 당일 청산(해외선물 새벽시간)
if sDate != sDate[1] Then
SetStopEndofday(066600);
if Bdate != Bdate[1] Then
SetStopEndofday(0);
즐거운 하루되세요
> sewzie 님이 쓴 글입니다.
> 제목 : 수식 검증 및 문의
> 안녕하세요, 아래 문의사항 확인 부탁드립니다
1. 아래 로직대로 코드가 짜였는지 검증 부탁드립니다.
- 장 오픈 후 5분~30분(변수로 테스트) 봉의 High and Low를 파악 (8시~익일 7시 운영 거래소)
- 첫 봉이 양봉이었으면 매수만 가능. 종가가 High를 돌파하면 매수 진입
- 첫 봉이 음봉이었으면 매도만 가능, 종가가 Low를 돌파하면 매도 진입
- 스탑로스는 14일 ATR * XX%
- 당일청산 (익일 7시 전)
2. 14일 ATR을 사용하고 싶은데 코드는 봉수 기준이라 14일만 따로 적용할 수 있는 방법이 있을까요?
3. SetStopEndofDay는 한국시간 익일에 장 마감하는 미국장에도 적용이 올바르게 된건가요?
감사합니다
[코드]
Input: NMin(5); // Step 1 until 30
Vars: FirstNHigh(0), FirstNLow(0), FirstNOpen(0), FirstNClose(0);
Vars: ATR14(0), StopLoss(0);
// N분 단위 첫 봉의 종료시간 계산
Vars: FirstEndTime(0);
FirstEndTime = 80000 + NMin * 100;
// 1. 첫 5분봉 High/Low/Open/Close 파악 (5분봉 기준)
If Date <> Date[1] Then
{
FirstNHigh = TimeHigh(80000, FirstEndTime);
FirstNLow = TimeLow(80000, FirstEndTime);
FirstNOpen = TimeOpen(80000, FirstEndTime);
FirstNClose = TimeClose(80000, FirstEndTime);
}
// 2. ATR(14) 계산 및 스탑로스 설정
Input: ATRFactor(10); // Step 10 until 100
ATR14 = ATR(14);
StopLoss = ATR14 * ATRFactor / 100;
// 3. 매수 조건: 첫 5분봉 양봉 & High 돌파
If FirstNClose > FirstNOpen and Close > FirstNHigh Then
{
If MarketPosition == 0 Then
Buy("ORBLong",AtMarket,DEf,1);
}
// 4. 매도 조건: 첫 5분봉 음봉 & Low 돌파
If FirstNClose < FirstNOpen and Close < FirstNLow Then
{
If MarketPosition == 0 Then
Sell("ORBShort",AtMarket,DEf,1);
}
// 5. 스탑로스 (ATR 10% 이탈 시)
If MarketPosition == 1 Then ExitLong("A1",AtStop,EntryPrice - StopLoss);
If MarketPosition == -1 Then ExitShort("B1",AtStop,EntryPrice + StopLoss);
// 6. 당일 청산
If MarketPosition <> 0 Then SetStopEndofday(065500);