커뮤니티

원 글(91906) 시스템 (수정) 추가 문의 드립니다.

프로필 이미지
나스닥에센피
2025-06-05 20:32:55
241
글번호 191468
답변완료
원 글(91906) 시스템 (수정) 추가 문의 드립니다. 아래 수식에서 선물의 추세를 추가로 반영하고자 합니다. 즉 전날의 추세가 상승추세면서 매도신호가 뜨면 이 신호는 따라가지 않고 추후에 매수신호가 나오면 다시 따라가는 식으로 변경하고자 합니다. 즉 하락추세나 중립추세의 경우는 모든 신호를 따라가고, 상승추세에 매도신호만 건너뛰는 식으로 변경하고자 합니다. 추세를 상승, 하락, 중립 등으로 구분하여 외부변수 처리해주실 수 있는지요. 케이스를 설명해보겠습니다. 개장전에 외부변수로 추세를 입력한 후, 전일의 추세가 상승추세라면, 1. 당일 첫 신호가 매도가 뜨면 진입하지 않고, 추후 매수신호가 뜰 때 첫 진입을 하고, 이후 다시 매도신호가 뜨면, 매수분 청산하고 매도는 진입하지 않습니다. 일중최대진입회수가 3회라면 이상으로 첫 신호(매도)와 둘째 매수신호, 셋째 매도 신호로 3회가 충족되어 일중 거래를 끝냅니다. 2. 당일 첫 신호가 매수라면 즉시 진입하고, 추후 매도신호가 나오면 매수 청산만 하고 매도 진입은 하지 않으며, 이후 매수신호가 다시 나오면 포지션이 없는 상태에서 매수진입하면서 총 3회의 일중최대진입회수라면 이후에 매도신호가 나오더라도 청산하고 거래를 끝내며, 이후 매도신호가 나오지 않으면 마감 시간에 청산합니다. 답변에 미리 감사드립니다. ================================================== 안녕하세요 예스스탁입니다. 정산가는 별도로 제공되지 않아 외부변수 처리해드립니다. input : 기준(1),일중최대진입횟수(2),당일손실틱수(100); input : C1정산가(17000),C2정산가(5100); 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)); } 즐거운 하루되세요 > 나스닥에센피 님이 쓴 글입니다. > 제목 : 원 글(91906) 시스템 (수정) 다시 문의 드립니다. > 원 글(91906) 시스템 (수정) 다시 문의 드립니다. 아래 수식에서 나에차 계산시, 나에차 = 나스닥100선물% - S&P500선물% 에서 각 선물 등락률이 전일종가 대비로 계산되는 것으로 알고 있는데요. 각각의 선물 등락률을 전일 종가가 아니라 전일 정산가 대비로 계산해 적용하고 싶은데, 각각의 정산가를 외부 변수로 빼서 매일 입력하더라도 변경하고 싶은데 이 시스템을 변경 가능할까요? 아래 시스템 식에서 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); (중략) R1 = Data1((C-C1)/C1*100); R2 = Data2((C-C2)/C2*100); 나에차 = R1-R2; (이하 생략) 즉, 위 시스템의 C1, C2를 "input"변수로 추가하여 매일 수기로 입력하는 방식을 통하더라도 등락률을 정산가 대비로 변경할 수 있을지요? 답변에 미리 감사드립니다. 즐거운 휴일 되시기 바랍니다. > 예스스탁 님이 쓴 글(2025.03.17)입니다. > 제목 : 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 청산(현재 포지션) ``` 답변에 미리 감사드립니다. 행복한 주말 보내세요.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-06-09 14:38:43

안녕하세요 예스스탁입니다. input : 기준(1),일중최대진입횟수(2),당일손실틱수(100); input : C1정산가(17000),C2정산가(5100); input : 추세(0);#상승1, 하락-1, 중립 0 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),T(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; T = 0; if T == 0 and 나에차 >= 기준 and 추세 >= 0 then { T = 1; count = count+1; Buy(); } if T == 0 and 나에차 <= 기준 and 추세 <= 0 Then { T = -1; count = count+1; Sell(); } } Else { if Tcond == true and Xcond == False Then { if T == 1 and 나에차 < 0 and 나에차[1] < 0 and count < 일중최대진입횟수 Then { count = count+1; if 추세 == 1 Then { T = 0; ExitLong(); } Else { T = -1; Sell("bs"); } } if T == -1 and 나에차 > 0 and 나에차[1] > 0 and count < 일중최대진입횟수 Then { count = count+1; if 추세 == -1 Then { ExitShort(); T = 0; } Else { T = 1; Buy("sb"); } } if T == 1 and 나에차 < 0 and 나에차[1] < 0 and count == 일중최대진입횟수 Then { ExitLong("bx"); } if T == -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)); } 즐거운 하루되세요 > 나스닥에센피 님이 쓴 글입니다. > 제목 : 원 글(91906) 시스템 (수정) 추가 문의 드립니다. > 원 글(91906) 시스템 (수정) 추가 문의 드립니다. 아래 수식에서 선물의 추세를 추가로 반영하고자 합니다. 즉 전날의 추세가 상승추세면서 매도신호가 뜨면 이 신호는 따라가지 않고 추후에 매수신호가 나오면 다시 따라가는 식으로 변경하고자 합니다. 즉 하락추세나 중립추세의 경우는 모든 신호를 따라가고, 상승추세에 매도신호만 건너뛰는 식으로 변경하고자 합니다. 추세를 상승, 하락, 중립 등으로 구분하여 외부변수 처리해주실 수 있는지요. 케이스를 설명해보겠습니다. 개장전에 외부변수로 추세를 입력한 후, 전일의 추세가 상승추세라면, 1. 당일 첫 신호가 매도가 뜨면 진입하지 않고, 추후 매수신호가 뜰 때 첫 진입을 하고, 이후 다시 매도신호가 뜨면, 매수분 청산하고 매도는 진입하지 않습니다. 일중최대진입회수가 3회라면 이상으로 첫 신호(매도)와 둘째 매수신호, 셋째 매도 신호로 3회가 충족되어 일중 거래를 끝냅니다. 2. 당일 첫 신호가 매수라면 즉시 진입하고, 추후 매도신호가 나오면 매수 청산만 하고 매도 진입은 하지 않으며, 이후 매수신호가 다시 나오면 포지션이 없는 상태에서 매수진입하면서 총 3회의 일중최대진입회수라면 이후에 매도신호가 나오더라도 청산하고 거래를 끝내며, 이후 매도신호가 나오지 않으면 마감 시간에 청산합니다. 답변에 미리 감사드립니다. ================================================== 안녕하세요 예스스탁입니다. 정산가는 별도로 제공되지 않아 외부변수 처리해드립니다. input : 기준(1),일중최대진입횟수(2),당일손실틱수(100); input : C1정산가(17000),C2정산가(5100); 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)); } 즐거운 하루되세요 > 나스닥에센피 님이 쓴 글입니다. > 제목 : 원 글(91906) 시스템 (수정) 다시 문의 드립니다. > 원 글(91906) 시스템 (수정) 다시 문의 드립니다. 아래 수식에서 나에차 계산시, 나에차 = 나스닥100선물% - S&P500선물% 에서 각 선물 등락률이 전일종가 대비로 계산되는 것으로 알고 있는데요. 각각의 선물 등락률을 전일 종가가 아니라 전일 정산가 대비로 계산해 적용하고 싶은데, 각각의 정산가를 외부 변수로 빼서 매일 입력하더라도 변경하고 싶은데 이 시스템을 변경 가능할까요? 아래 시스템 식에서 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); (중략) R1 = Data1((C-C1)/C1*100); R2 = Data2((C-C2)/C2*100); 나에차 = R1-R2; (이하 생략) 즉, 위 시스템의 C1, C2를 "input"변수로 추가하여 매일 수기로 입력하는 방식을 통하더라도 등락률을 정산가 대비로 변경할 수 있을지요? 답변에 미리 감사드립니다. 즐거운 휴일 되시기 바랍니다. > 예스스탁 님이 쓴 글(2025.03.17)입니다. > 제목 : 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 청산(현재 포지션) ``` 답변에 미리 감사드립니다. 행복한 주말 보내세요.