예스스탁
예스스탁 답변
2025-03-17 14:00:52
안녕하세요
예스스탁입니다.
나스닥100선물을 기본차트로
S&P500선물을 참조데이터로 추가하고 식 적용하시면 됩니다.
차트주기는 수식에서 설정할 수 없습니다. 3분봉으로 직접 설정하셔야 합니다.
실계좌의 손익은 랭귀지에서 알수 없습니다.
아래 식에서는 당일 신호상 당일손익기준으로 지정한 틱수 누적손실이면 청산됩니다.
input : 기준(1),일중최대진입횟수(2),당일손실틱수(100);
var : ST(0,Data1),ET(0,Data1);
var : C1(0,Data1),C2(0,Data2);
var : R1(0,Data1),R2(0,Data2),나에차(0,Data1);
var : Tcond(False),count(0,Data1);
var : TT(0,Data1),N1(0,Data1),dayPL(0,Data1),Xcond(False),당일손실(0,Data1);
TT = TotalTrades;
if ET > 0 and Data1(sDate != sDate[1]) Then
SetStopEndofday(ET);
if data1(Bdate != Bdate[1]) Then
{
SetStopEndofday(0);
if sTime >= 80000 Then
{
ST = 233000;
ET = 060000;
}
Else
{
ST = 223000;
ET = 050000;
}
Xcond = False;
N1 = TT[1];
C1 = Data1(c[1]);
}
daypl = NetProfit-N1;
당일손실 = data1(PriceScale)*당일손실틱수;
if TotalTrades > TotalTrades[1] then
{
if daypl <= -당일손실 Then
Xcond = true;
if (IsExitName("dbl",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
}
if Data2(Bdate != Bdate[1]) Then
C2 = Data2(c[1]);
R1 = Data1((C-C1)/C1*100);
R2 = Data2((C-C2)/C2*100);
나에차 = R1-R2;
if data1(ET > 0 and
((sdate != sdate[1] and stime >= ET) or
(sdate == sdate[1] and stime >= ET and stime[1] < ET))) Then
{
Tcond = False;
}
if data1(ST > 0 and
((sdate != sdate[1] and stime >= ST) or
(sdate == sdate[1] and stime >= ST and stime[1] < ST))) Then
{
Tcond = true;
count = 0;
if MarketPosition == 0 and 나에차 >= 기준 then
{
count = count+1;
Buy();
}
if MarketPosition == 0 and 나에차 <= 기준 Then
{
count = count+1;
Sell();
}
}
Else
{
if Tcond == true and Xcond == False Then
{
if MarketPosition == 1 and 나에차 < 0 and 나에차[1] < 0 and count < 일중최대진입횟수 Then
{
count = count+1;
Sell("bs");
}
if MarketPosition == -1 and 나에차 > 0 and 나에차[1] > 0 and count < 일중최대진입횟수 Then
{
count = count+1;
Buy("sb");
}
if MarketPosition == 1 and 나에차 < 0 and 나에차[1] < 0 and count == 일중최대진입횟수 Then
{
ExitLong("bx");
}
if MarketPosition == -1 and 나에차 > 0 and 나에차[1] > 0 and count == 일중최대진입횟수 Then
{
ExitShort("sx");
}
}
}
if MarketPosition == 1 then
{
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
즐거운 하루되세요
> 나스닥에센피 님이 쓴 글입니다.
> 제목 : 시스템 문의 드립니다
> 미국 지수 선물로 아래와 같이 자동매매 프로그램을 만들고자 합니다. 시스템 수식을 부탁드립니다.
자동매매 프로그램 수식 설명:
①차트 표시 주기는 3분 단위로 하며, 첫 진입은 장 개시 첫 3분 경과 후인 22:33분(미국 서머타임 기준 한국 시간)에 나스닥100선물과 S&P500선물 등락률 차(=나스닥100선물% - S&P500선물%, "나에차"라고 한다)가 '+기준'이상이면 당해 3분봉 종가로 매수로, '-기준'이하이면 당해 3분봉 종가로 매도로.(여기서 '외부변수'="나에차", '첫 진입 시간', '손절금액')
②반대 진입은 "나에차"가 기존과 반대 방향으로 '±기준'이상으로 두번 지속되면 한다.
③일중 반대 신호가 두번 나오면 청산만 하고 반대 진입을 더 이상 하지 않는다. 결국 일일 최대 진입 회수는 2회로 한다.
④일중 반대 신호가 두번 나오지 않으면 현물 지수가 마감되는 시간(서머타임 기준 한국 시간 새벽 05시)에 청산하고 거래를 끝낸다.
자동매매 프로그램 로직으로 다시 설명하면,
1. 기본 변수 설정
- `기준`: 매매 신호를 결정하는 기준값.
- `나에차`: 나스닥 100선물과 S&P 500선물의 등락률 차.
- `진입횟수`: 일중 최대 진입 횟수 (최대 2회).
- `진입시간`: 첫 진입 시간 (22:33, 서머타임 기준).
- `청산시간`: 마감 시간 (05:00, 서머타임 기준).
- '손절금액': 일중 계좌 손실 금액
2. 차트 표시 주기 설정
- 차트 주기를 3분으로 설정합니다.
3. 첫 진입 조건
if 현재시간 >= 진입시간 then
나에차 = 나스닥100선물% - S&P500선물%
if 나에차 >= 기준 then
매수(현재 3분봉 종가)
진입횟수 += 1
else if 나에차 <= -기준 then
매도(현재 3분봉 종가)
진입횟수 += 1
```
4. 반대 진입 조건
- 반대 방향 신호가 두 번 지속되는지 체크합니다.
if 나에차의 변화가 기존 방향과 반대이고 |나에차| >= 기준 then
반대신호카운트 += 1
if 반대신호카운트 >= 2 then
if 현재 포지션이 매수이면
매도(현재 3분봉 종가)
else if 현재 포지션이 매도이면
매수(현재 3분봉 종가)
반대신호카운트 = 0
진입횟수 += 1
```
5. 청산 조건
- 일중 반대 신호가 두 번 나왔는지 체크 후, 두 번 나오면 청산만 합니다.
if 반대신호카운트 >= 2 then
청산(현재 포지션)
진입횟수 = 0
```
6. 마감 시간 청산
- 마감 시간에 청산합니다.
if 현재시간 >= 청산시간 then
청산(현재 포지션)
```
답변에 미리 감사드립니다.
행복한 주말 보내세요.
나스닥에센피
2025-03-17 19:44:58
시스템 수식과 친절한 설명에 깊이 감사드립니다.
이 수식을 적용하여 혹시 의문 사항이 생기면 다시 여쭤보겠습니다.
감사합니다.
꾸벅^^
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템 문의 드립니다
>
안녕하세요
예스스탁입니다.
나스닥100선물을 기본차트로
S&P500선물을 참조데이터로 추가하고 식 적용하시면 됩니다.
차트주기는 수식에서 설정할 수 없습니다. 3분봉으로 직접 설정하셔야 합니다.
실계좌의 손익은 랭귀지에서 알수 없습니다.
아래 식에서는 당일 신호상 당일손익기준으로 지정한 틱수 누적손실이면 청산됩니다.
input : 기준(1),일중최대진입횟수(2),당일손실틱수(100);
var : ST(0,Data1),ET(0,Data1);
var : C1(0,Data1),C2(0,Data2);
var : R1(0,Data1),R2(0,Data2),나에차(0,Data1);
var : Tcond(False),count(0,Data1);
var : TT(0,Data1),N1(0,Data1),dayPL(0,Data1),Xcond(False),당일손실(0,Data1);
TT = TotalTrades;
if ET > 0 and Data1(sDate != sDate[1]) Then
SetStopEndofday(ET);
if data1(Bdate != Bdate[1]) Then
{
SetStopEndofday(0);
if sTime >= 80000 Then
{
ST = 233000;
ET = 060000;
}
Else
{
ST = 223000;
ET = 050000;
}
Xcond = False;
N1 = TT[1];
C1 = Data1(c[1]);
}
daypl = NetProfit-N1;
당일손실 = data1(PriceScale)*당일손실틱수;
if TotalTrades > TotalTrades[1] then
{
if daypl <= -당일손실 Then
Xcond = true;
if (IsExitName("dbl",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
}
if Data2(Bdate != Bdate[1]) Then
C2 = Data2(c[1]);
R1 = Data1((C-C1)/C1*100);
R2 = Data2((C-C2)/C2*100);
나에차 = R1-R2;
if data1(ET > 0 and
((sdate != sdate[1] and stime >= ET) or
(sdate == sdate[1] and stime >= ET and stime[1] < ET))) Then
{
Tcond = False;
}
if data1(ST > 0 and
((sdate != sdate[1] and stime >= ST) or
(sdate == sdate[1] and stime >= ST and stime[1] < ST))) Then
{
Tcond = true;
count = 0;
if MarketPosition == 0 and 나에차 >= 기준 then
{
count = count+1;
Buy();
}
if MarketPosition == 0 and 나에차 <= 기준 Then
{
count = count+1;
Sell();
}
}
Else
{
if Tcond == true and Xcond == False Then
{
if MarketPosition == 1 and 나에차 < 0 and 나에차[1] < 0 and count < 일중최대진입횟수 Then
{
count = count+1;
Sell("bs");
}
if MarketPosition == -1 and 나에차 > 0 and 나에차[1] > 0 and count < 일중최대진입횟수 Then
{
count = count+1;
Buy("sb");
}
if MarketPosition == 1 and 나에차 < 0 and 나에차[1] < 0 and count == 일중최대진입횟수 Then
{
ExitLong("bx");
}
if MarketPosition == -1 and 나에차 > 0 and 나에차[1] > 0 and count == 일중최대진입횟수 Then
{
ExitShort("sx");
}
}
}
if MarketPosition == 1 then
{
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
즐거운 하루되세요
> 나스닥에센피 님이 쓴 글입니다.
> 제목 : 시스템 문의 드립니다
> 미국 지수 선물로 아래와 같이 자동매매 프로그램을 만들고자 합니다. 시스템 수식을 부탁드립니다.
자동매매 프로그램 수식 설명:
①차트 표시 주기는 3분 단위로 하며, 첫 진입은 장 개시 첫 3분 경과 후인 22:33분(미국 서머타임 기준 한국 시간)에 나스닥100선물과 S&P500선물 등락률 차(=나스닥100선물% - S&P500선물%, "나에차"라고 한다)가 '+기준'이상이면 당해 3분봉 종가로 매수로, '-기준'이하이면 당해 3분봉 종가로 매도로.(여기서 '외부변수'="나에차", '첫 진입 시간', '손절금액')
②반대 진입은 "나에차"가 기존과 반대 방향으로 '±기준'이상으로 두번 지속되면 한다.
③일중 반대 신호가 두번 나오면 청산만 하고 반대 진입을 더 이상 하지 않는다. 결국 일일 최대 진입 회수는 2회로 한다.
④일중 반대 신호가 두번 나오지 않으면 현물 지수가 마감되는 시간(서머타임 기준 한국 시간 새벽 05시)에 청산하고 거래를 끝낸다.
자동매매 프로그램 로직으로 다시 설명하면,
1. 기본 변수 설정
- `기준`: 매매 신호를 결정하는 기준값.
- `나에차`: 나스닥 100선물과 S&P 500선물의 등락률 차.
- `진입횟수`: 일중 최대 진입 횟수 (최대 2회).
- `진입시간`: 첫 진입 시간 (22:33, 서머타임 기준).
- `청산시간`: 마감 시간 (05:00, 서머타임 기준).
- '손절금액': 일중 계좌 손실 금액
2. 차트 표시 주기 설정
- 차트 주기를 3분으로 설정합니다.
3. 첫 진입 조건
if 현재시간 >= 진입시간 then
나에차 = 나스닥100선물% - S&P500선물%
if 나에차 >= 기준 then
매수(현재 3분봉 종가)
진입횟수 += 1
else if 나에차 <= -기준 then
매도(현재 3분봉 종가)
진입횟수 += 1
```
4. 반대 진입 조건
- 반대 방향 신호가 두 번 지속되는지 체크합니다.
if 나에차의 변화가 기존 방향과 반대이고 |나에차| >= 기준 then
반대신호카운트 += 1
if 반대신호카운트 >= 2 then
if 현재 포지션이 매수이면
매도(현재 3분봉 종가)
else if 현재 포지션이 매도이면
매수(현재 3분봉 종가)
반대신호카운트 = 0
진입횟수 += 1
```
5. 청산 조건
- 일중 반대 신호가 두 번 나왔는지 체크 후, 두 번 나오면 청산만 합니다.
if 반대신호카운트 >= 2 then
청산(현재 포지션)
진입횟수 = 0
```
6. 마감 시간 청산
- 마감 시간에 청산합니다.
if 현재시간 >= 청산시간 then
청산(현재 포지션)
```
답변에 미리 감사드립니다.
행복한 주말 보내세요.