커뮤니티

함수요청

프로필 이미지
흰둥이아빠
2023-09-20 16:31:47
525
글번호 172616
답변완료
안녕하세요? 아래 글번호 83866번 재질문드립니다. 스크립트 검증 부탁드립니다. 작성주신 스크립트를 국내선물 1분봉에 적용해보면 9월 19일은, [1]은 나오나 [2]가 나오지 않습니다. 따라서 [3]으로도 연결이 안됩니다. 해당일은 DayOpen < DayClose(1) and value1 > DayOpen 이고 Var2 = DayHigh = 343.25, Var3 = DayLow = 342.70 입니다. [1] 09:06에 CrossDown(c=342.65,var3=342.70)을 만족하므로 익봉 시가인 09:07에 342.60으로 "s1" 신호가 생성되어야 합니다. [2] 그리고 09:27 완성봉 종가가 343.30이므로 CrossUp(c=343.30,var2=343.25)이 되어 익봉 시가인 09:28에 343.30으로 "b2" 신호가 나와야 합니다. [3] 그리고 11:20에는 CrossDown(c=341.80, var1=341.86)이면서 (var1=341.86) < (var3 =342.70)을 만족하므로 익봉 시가인 11:21에 341.75로 "Cx" 신호가 나와야 합니다. [4] 아울러 매수, 매도 신호가 최대 1번씩 총 2번이 나와서 당일 추가 신호는 없어야 합니다. ////////////글번호 83866번에서 작성주신 스크립트//////////// var : b(0),s(0); var1 = ma(c,100); if Bdate != Bdate[1] Then { b = 0; s = 0; value1 = var1; } if DayIndex < 7 Then { Var2 = DayHigh; Var3 = DayLow; } if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then b = b+1; if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then s = s+1; if MarketPosition >= 0 and DayOpen < DayClose(1) and value1 > DayOpen Then { if s < 1 and DayIndex >= 7 and CrossDown(C,Var3) Then Sell("s1",AtMarket); if b < 1 and s == 1 and CrossUp(C,Var2) Then Buy("b2",AtMarket); if CrossDown(c,var1)and var1 < Var3 Then ExitLong("Cx",AtMarket); } if MarketPosition <= 0 and DayOpen > DayClose(1) and value1 < DayOpen Then { if b < 1 and DayIndex >= 7 and CrossUp(C,Var2) Then Buy("b1",AtMarket); if s < 1 and b == 1 and CrossDown(C,Var3) Then Sell("s2",AtMarket); if CrossUp(c,var1) and var1 > Var2 Then ExitShort("Px",AtMarket); } SetStopEndofday(151900); ////////////스크립트로 작성하고자는 전략//////////// 1번 신호는 2번 신호보다 우선하여 나오게 하고 싶습니다. 즉 s1은 b2에 우선합니다. b1은 s2에 우선합니다. s1이 발생하지 않았는데 b2가 먼저 나오게 하지 않게 하고자 합니다. s1이 발생된 후에는 b2가 나올 수 있습니다. b1이 발생하지 않았는데 s2가 먼저 나오게 하지 않게 하고자 합니다. b1이 발생된 후에는 s2가 나올 수 있습니다. 당일 매수는 최대 1번, 매도도 1번, 도합 2번까지 진입이 가능하게 하고자 합니다. 1 .당일 시초가가 전일 종가대비 하락 출발하되 시초가 당시의 100ma > 시초가일 때 가) 당일 개장 후 7개봉의 고점과 저점을 잡고 저점 이탈시 익봉 시가에 매도(s1) 진입 나) 당일 개장 후 7개봉의 고점과 저점을 잡고 s1인 상태에서 고점 돌파시 익봉 시가에 매수(b2) 진입 다) 분봉의 종가가 100ma를 하향 이탈하되 당시 100ma가 당일 개장 후 7개봉 저점보다 작은 상태이면 b2 청산 2. 당일 시초가가 전일 종가대비 상승 출발하되 시초가 당시의 100ma < 시초가일 때 가) 당일 개장 후 7개봉의 고점과 저점을 잡고 고점 돌파시 익봉 시가에 매수(b1) 진입 나) 당일 개장 후 7개봉의 고점과 저점을 잡고 b1인 상태에서 저점 이탈시 익봉 시가에 매도(s2) 진입 다) 분봉의 종가가 100ma를 상향 돌파하되 당시 100ma가 당일 개장 후 7개봉 고점보다 큰 상태이면 s2 청산 3. 15시 19분 강제청산 *1번 신호는 2번 신호보다 우선하여 나오게 하고 싶습니다. 즉 s1은 b2에 우선합니다. b1은 s2에 우선합니다. s1이 발생하지 않았는데 b2가 먼저 나오게 하지 않게 하고자 합니다. s1이 발생된 후에는 b2가 나올 수 있습니다. b1이 발생하지 않았는데 s2가 먼저 나오게 하지 않게 하고자 합니다. b1이 발생된 후에는 s2가 나올 수 있습니다. 당일 매수는 최대 1번, 매도도 1번, 도합 2번까지 진입이 가능하게 하고자 합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-09-21 13:56:30

안녕하세요 예스스탁입니다. var : b(0),s(0); var1 = ma(c,100); if Bdate != Bdate[1] Then { b = 0; s = 0; value1 = var1; } if DayIndex < 7 Then { Var2 = DayHigh; Var3 = DayLow; } if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then b = b+1; if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then s = s+1; if DayOpen < DayClose(1) and value1 > DayOpen Then { if MarketPosition >= 0 and s < 1 and DayIndex >= 7 and CrossDown(C,Var3) Then Sell("s1",AtMarket); if MarketPosition <= 0 and b < 1 and s == 1 and CrossUp(C,Var2) Then Buy("b2",AtMarket); if MarketPosition == 1 and CrossDown(c,var1)and var1 < Var3 Then ExitLong("Cx",AtMarket); } if DayOpen > DayClose(1) and value1 < DayOpen Then { if MarketPosition <= 0 and b < 1 and DayIndex >= 7 and CrossUp(C,Var2) Then Buy("b1",AtMarket); if MarketPosition >= 0 and s < 1 and b == 1 and CrossDown(C,Var3) Then Sell("s2",AtMarket); if MarketPosition == -1 and CrossUp(c,var1) and var1 > Var2 Then ExitShort("Px",AtMarket); } SetStopEndofday(151900); 즐거운 하루되세요 > 흰둥이아빠 님이 쓴 글입니다. > 제목 : 함수요청 > 안녕하세요? 아래 글번호 83866번 재질문드립니다. 스크립트 검증 부탁드립니다. 작성주신 스크립트를 국내선물 1분봉에 적용해보면 9월 19일은, [1]은 나오나 [2]가 나오지 않습니다. 따라서 [3]으로도 연결이 안됩니다. 해당일은 DayOpen < DayClose(1) and value1 > DayOpen 이고 Var2 = DayHigh = 343.25, Var3 = DayLow = 342.70 입니다. [1] 09:06에 CrossDown(c=342.65,var3=342.70)을 만족하므로 익봉 시가인 09:07에 342.60으로 "s1" 신호가 생성되어야 합니다. [2] 그리고 09:27 완성봉 종가가 343.30이므로 CrossUp(c=343.30,var2=343.25)이 되어 익봉 시가인 09:28에 343.30으로 "b2" 신호가 나와야 합니다. [3] 그리고 11:20에는 CrossDown(c=341.80, var1=341.86)이면서 (var1=341.86) < (var3 =342.70)을 만족하므로 익봉 시가인 11:21에 341.75로 "Cx" 신호가 나와야 합니다. [4] 아울러 매수, 매도 신호가 최대 1번씩 총 2번이 나와서 당일 추가 신호는 없어야 합니다. ////////////글번호 83866번에서 작성주신 스크립트//////////// var : b(0),s(0); var1 = ma(c,100); if Bdate != Bdate[1] Then { b = 0; s = 0; value1 = var1; } if DayIndex < 7 Then { Var2 = DayHigh; Var3 = DayLow; } if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then b = b+1; if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then s = s+1; if MarketPosition >= 0 and DayOpen < DayClose(1) and value1 > DayOpen Then { if s < 1 and DayIndex >= 7 and CrossDown(C,Var3) Then Sell("s1",AtMarket); if b < 1 and s == 1 and CrossUp(C,Var2) Then Buy("b2",AtMarket); if CrossDown(c,var1)and var1 < Var3 Then ExitLong("Cx",AtMarket); } if MarketPosition <= 0 and DayOpen > DayClose(1) and value1 < DayOpen Then { if b < 1 and DayIndex >= 7 and CrossUp(C,Var2) Then Buy("b1",AtMarket); if s < 1 and b == 1 and CrossDown(C,Var3) Then Sell("s2",AtMarket); if CrossUp(c,var1) and var1 > Var2 Then ExitShort("Px",AtMarket); } SetStopEndofday(151900); ////////////스크립트로 작성하고자는 전략//////////// 1번 신호는 2번 신호보다 우선하여 나오게 하고 싶습니다. 즉 s1은 b2에 우선합니다. b1은 s2에 우선합니다. s1이 발생하지 않았는데 b2가 먼저 나오게 하지 않게 하고자 합니다. s1이 발생된 후에는 b2가 나올 수 있습니다. b1이 발생하지 않았는데 s2가 먼저 나오게 하지 않게 하고자 합니다. b1이 발생된 후에는 s2가 나올 수 있습니다. 당일 매수는 최대 1번, 매도도 1번, 도합 2번까지 진입이 가능하게 하고자 합니다. 1 .당일 시초가가 전일 종가대비 하락 출발하되 시초가 당시의 100ma > 시초가일 때 가) 당일 개장 후 7개봉의 고점과 저점을 잡고 저점 이탈시 익봉 시가에 매도(s1) 진입 나) 당일 개장 후 7개봉의 고점과 저점을 잡고 s1인 상태에서 고점 돌파시 익봉 시가에 매수(b2) 진입 다) 분봉의 종가가 100ma를 하향 이탈하되 당시 100ma가 당일 개장 후 7개봉 저점보다 작은 상태이면 b2 청산 2. 당일 시초가가 전일 종가대비 상승 출발하되 시초가 당시의 100ma < 시초가일 때 가) 당일 개장 후 7개봉의 고점과 저점을 잡고 고점 돌파시 익봉 시가에 매수(b1) 진입 나) 당일 개장 후 7개봉의 고점과 저점을 잡고 b1인 상태에서 저점 이탈시 익봉 시가에 매도(s2) 진입 다) 분봉의 종가가 100ma를 상향 돌파하되 당시 100ma가 당일 개장 후 7개봉 고점보다 큰 상태이면 s2 청산 3. 15시 19분 강제청산 *1번 신호는 2번 신호보다 우선하여 나오게 하고 싶습니다. 즉 s1은 b2에 우선합니다. b1은 s2에 우선합니다. s1이 발생하지 않았는데 b2가 먼저 나오게 하지 않게 하고자 합니다. s1이 발생된 후에는 b2가 나올 수 있습니다. b1이 발생하지 않았는데 s2가 먼저 나오게 하지 않게 하고자 합니다. b1이 발생된 후에는 s2가 나올 수 있습니다. 당일 매수는 최대 1번, 매도도 1번, 도합 2번까지 진입이 가능하게 하고자 합니다.