커뮤니티

코드 해석 부탁드립니다.

프로필 이미지
퀀트드래곤
2020-02-03 16:40:31
369
글번호 135583
답변완료
안녕하세요. 답변으로 아래와 같은 코드를 받았는데요, 이해가 되지 않는 부분이 있어서 질문드렸습니다 질문 1. OO[cnt] = OO[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; 이 배열 부분에해한 설명 가능할까요? 질문 2. 그리고 2개 연속 양봉인데 OO[1] > CC[1] and OO[2] > CC[2] 보내주신 코드는 "전봉과 전전봉이 양봉이면" 이라는 뜻 같은데 OO[0] > CC[0] and OO[1] > CC[1] 이 맞지 않을까요? 질문 3. 진입코드가 ExitLong("2차 매수익절_1안",OnClose, def, "매수"); 이와 같은데 이러면 봉의 끝나는 부분에서 매매가 된다면 실거래에서는 불가능한 로직인가요? 아니면 어떤식으로 주문이 나가는건가요? ------------답변 내용------------------------ 안녕하세요 예스스탁입니다. Input : shortPeriod(5), longPeriod(20); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); # 매수/매도청산 If CrossUP(value1, value2) Then { Buy("매수"); } If CrossDown(value1, value2) Then { Sell("매도"); } input : convert(30); var : S1(0), D1(0), TM(0), TF1(0), rng1(0), rng2(0), OOO1(0), OOO2(0), CCC1(0), CCC2(0), cnt(0); Array : OO[10](0), CC[10](0); if bdate != bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; # TM = TimeToMinutes(stime) - S1 Else TM = TimeToMinutes(stime)+1440-S1; # 아니면 TM = TimeToMinutes(stime) + 1440 - S1 TF1 = TM % convert; # TF1 = TM 나누기 convert(30)의 '나머지' if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF1 < TF1[1]) Then # TF[1]이 보다 유일하게 커질때가 30분 정각이다.(틱봉에선 반영이 잘 안되지만, 그래도 근사값을 구할수는 있다) { OO[0] = O; CC[0] = C; for cnt = 1 to 99 { OO[cnt] = OO[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; } } CC[0] = c; } // 청산<익절> --------------------------------------------------------------------------------------------------------------- if MarketPosition == 1 Then { if OO[1] > CC[1] and OO[2] > CC[2] Then ExitLong("2차 매수익절_1안",OnClose, def, "매수"); else if CurrentContracts == 1 Then ExitLong("2차 매수본절익절_1안", atstop, EntryPrice, "매수", 1, 1); } if MarketPosition == -1 Then { if OO[1] < CC[1] and OO[2] < CC[2] Then ExitShort("2차 매도익절_1안", OnClose,def, "매도"); else if CurrentContracts == 1 Then ExitShort("2차 매도본절익절_1안", atstop, EntryPrice, "매도", 1, 1); } // 손절 SetStopLoss(10, PointStop); 즐거운 명절 되시기 바랍니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-02-04 14:55:48

안녕하세요 예스스탁입니다. 1 OO,CC는 타주기의 시가와 종가를 저장하기 위한 배열변수입니다. OO[0]과 CC[0]은 현재의 값을 저장하고 타주기 시간경계가 넘어가면 (if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF1 < TF1[1]) Then) 기존 [0]번방의 값은 [1]번방 으로 ([1]번방에 [0]번방의 1봉전값을 저장) 기존 [1]번방의 값은 [2]번방 으로 ([2]번방에 [1]번방의 1봉전값을 저장) 기존 [2]번방의 값은 [3]번방 으로 ([3]번방에 [2]번방의 1봉전값을 저장) .... 기존 [8]번방의 값은 [9]번방 으로 ([9]번방에 [8]번방의 1봉전값을 저장) 넘기는 로직입니다. 2 양봉/음봉은 해당주기의 봉이 모두 끝나야 알수 있으므로 양봉음봉 기준이 타주기이므로 타주기의 시간경계를 넘어가는 첫봉완성시에 [0]을 제외하고 1과 2로 연속 양봉과 음봉을 파악하게 작성한 것입니다. 3 랭귀지의 봉완성은 다음봉 시가가 수신될때입니다 신호타입 중 onclose는 다음봉 시가가 수신될때 if조건이 만족하면 신호와 주문이를 발생하는 타입입니다. 즐거운 하루되세요 > 퀀트드래곤 님이 쓴 글입니다. > 제목 : 코드 해석 부탁드립니다. > 안녕하세요. 답변으로 아래와 같은 코드를 받았는데요, 이해가 되지 않는 부분이 있어서 질문드렸습니다 질문 1. OO[cnt] = OO[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; 이 배열 부분에해한 설명 가능할까요? 질문 2. 그리고 2개 연속 양봉인데 OO[1] > CC[1] and OO[2] > CC[2] 보내주신 코드는 "전봉과 전전봉이 양봉이면" 이라는 뜻 같은데 OO[0] > CC[0] and OO[1] > CC[1] 이 맞지 않을까요? 질문 3. 진입코드가 ExitLong("2차 매수익절_1안",OnClose, def, "매수"); 이와 같은데 이러면 봉의 끝나는 부분에서 매매가 된다면 실거래에서는 불가능한 로직인가요? 아니면 어떤식으로 주문이 나가는건가요? ------------답변 내용------------------------ 안녕하세요 예스스탁입니다. Input : shortPeriod(5), longPeriod(20); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); # 매수/매도청산 If CrossUP(value1, value2) Then { Buy("매수"); } If CrossDown(value1, value2) Then { Sell("매도"); } input : convert(30); var : S1(0), D1(0), TM(0), TF1(0), rng1(0), rng2(0), OOO1(0), OOO2(0), CCC1(0), CCC2(0), cnt(0); Array : OO[10](0), CC[10](0); if bdate != bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; # TM = TimeToMinutes(stime) - S1 Else TM = TimeToMinutes(stime)+1440-S1; # 아니면 TM = TimeToMinutes(stime) + 1440 - S1 TF1 = TM % convert; # TF1 = TM 나누기 convert(30)의 '나머지' if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF1 < TF1[1]) Then # TF[1]이 보다 유일하게 커질때가 30분 정각이다.(틱봉에선 반영이 잘 안되지만, 그래도 근사값을 구할수는 있다) { OO[0] = O; CC[0] = C; for cnt = 1 to 99 { OO[cnt] = OO[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; } } CC[0] = c; } // 청산<익절> --------------------------------------------------------------------------------------------------------------- if MarketPosition == 1 Then { if OO[1] > CC[1] and OO[2] > CC[2] Then ExitLong("2차 매수익절_1안",OnClose, def, "매수"); else if CurrentContracts == 1 Then ExitLong("2차 매수본절익절_1안", atstop, EntryPrice, "매수", 1, 1); } if MarketPosition == -1 Then { if OO[1] < CC[1] and OO[2] < CC[2] Then ExitShort("2차 매도익절_1안", OnClose,def, "매도"); else if CurrentContracts == 1 Then ExitShort("2차 매도본절익절_1안", atstop, EntryPrice, "매도", 1, 1); } // 손절 SetStopLoss(10, PointStop); 즐거운 명절 되시기 바랍니다.