커뮤니티

문의

프로필 이미지
좌오비우오비
2021-01-19 10:48:24
768
글번호 145585
답변완료

첨부 이미지

아래는 sell 전용수식입니다. 시뮬레이션한 결과는 첨부파일1 전략실행차트로 세팅한 결과는 첨부파일2 질문 동일한 수식인데 시뮬레이션 결과대로 전략실행차트가 실행되지 않습니다. 살펴주셨으면 합니다. 수정내용은 수식에 # 표시를 해주시면 고맙겠습니다. *************************************************************************************** input : 거래횟수(20),시작시간(090000); input : d1(100),ER1(100),EF1(100),X1(99999),CR1(0),CF1(0); input : d2(100),ER2(100),EF2(100),X2(99999),CR2(0),CF2(0); var : T1(0,Data1),entry(0,Data1),HH(0,Data1),LL(0,Data1),EH(0,Data1),EL(0,Data1),E1(0,Data1),H1(0,Data1),i1(0,Data1),S1(0,Data1),L1(0,Data1),V1(0,Data1); var : sum(0,Data1); sum = Data2(c)+ data3(c); if Data2((sdate != sdate[1] and stime >= 시작시간) or (sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간)) Then{ T1 = TotalTrades; E1 = 0; HH = sum; } if data2(stime >= 시작시간) then{ if sum > HH Then HH = sum; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then{ if E1 == 0 and sum <= HH-data2(PriceScale)*d1 and sum[1] < HH-data2(PriceScale)*d1 Then{ E1 = 1; L1 = sum; i1 = data2(index); V1 = HH; //시작점 종가 } if E1 == 1 and index > i1 then{ if sum < L1 Then L1 = sum; #고가가 시작봉종가보다 작을 때만 눌림체크 if sum <= V1 and sum >= L1+data2(PriceScale)*ER1 Then{ E1 = 2; i1 = data2(index); S1 = L1; } } //시작점 종가보다 높은 가격이 발생하면 초기화 if E1 >= 1 and sum > V1 Then{ E1 = 0; HH = sum; } if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF1 and Data2(NextBarSdate == sDate) Then{ sell("s1"); } } if TotalTrades > TotalTrades[1] Then{ E1 = 0; HH = sum; } if sum > HH Then HH = sum; if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{ if E1 == 0 and sum <= HH-data2(PriceScale)*d2 and sum[1] < HH-data2(PriceScale)*d2 Then{ E1 = 1; L1 = sum; i1 = data2(index); } if E1 == 1 and data2(index) > i1 then{ if sum < L1 Then L1 = sum; if sum >= L1+data2(PriceScale)*ER2 Then{ E1 = 2; i1 = data2(index); S1 = L1; } } if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF2 and Data2(NextBarSdate == sDate) Then{ sell("s2"); E1 = 0; } } if MarketPosition == -1 and IsEntryName("s1") == true Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = sum; E1 = 0; } if sum < EL Then{ EL = sum; E1 = 0; } if E1 == 0 and sum >= EL+data2(PriceScale)*X1 Then{ E1 = 1; H1 = sum; i1 = index; } if E1 == 1 and data2(index) > i1 Then{ if sum > H1 Then H1 = sum; if sum <= H1-data2(PriceScale)*CR1 Then{ E1 = 2; I1 = data2(index); S1 = H1; } } if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF1 Then{ ExitShort("sx1"); E1 = 0; } } } if MarketPosition == -1 and IsEntryName("s2") == true Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = sum; E1 = 0; } if sum < EL Then{ EL = sum; E1 = 0; } if E1 == 0 and sum >= EL+data2(PriceScale)*X2 Then{ E1 = 1; H1 = sum; i1 = index; } if E1 == 1 and index > i1 Then{ if sum > H1 Then H1 = sum; if sum <= H1-data2(PriceScale)*CR2 Then{ E1 = 2; I1 = data2(index); S1 = H1; } } if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF2 Then{ ExitShort("sx2"); E1 = 0; } } } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-01-19 13:59:08

안녕하세요 예스스탁입니다. 수식에서 사용하는 봉번호가 index와 data2(index)가 혼재되어 있어 신호가 달랐습니다. i1 = data2(index); i1에 data2의 index가 저장되어 있는데 if index > i1 와 같이 기본차트 index 와 비교하는 내용이 있었습니다 수식에서 사용되는 모든 index는 data2(index)로 변경해 드립니다. input : 거래횟수(20),시작시간(090000); input : d1(100),ER1(100),EF1(100),X1(99999),CR1(0),CF1(0); input : d2(100),ER2(100),EF2(100),X2(99999),CR2(0),CF2(0); var : T1(0,Data1),entry(0,Data1),HH(0,Data1),LL(0,Data1),EH(0,Data1),EL(0,Data1),E1(0,Data1),H1(0,Data1),i1(0,Data1),S1(0,Data1),L1(0,Data1),V1(0,Data1); var : sum(0,Data1); sum = Data2(c)+ data3(c); if Data2((sdate != sdate[1] and stime >= 시작시간) or (sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간)) Then { T1 = TotalTrades; E1 = 0; HH = sum; } if data2(stime >= 시작시간) then { if sum > HH Then HH = sum; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then { if E1 == 0 and sum <= HH-data2(PriceScale)*d1 and sum[1] < HH-data2(PriceScale)*d1 Then { E1 = 1; L1 = sum; i1 = data2(index); V1 = HH; //시작점 종가 } if E1 == 1 and data2(index) > i1 then { if sum < L1 Then L1 = sum; #고가가 시작봉종가보다 작을 때만 눌림체크 if sum <= V1 and sum >= L1+data2(PriceScale)*ER1 Then { E1 = 2; i1 = data2(index); S1 = L1; } } //시작점 종가보다 높은 가격이 발생하면 초기화 if E1 >= 1 and sum > V1 Then { E1 = 0; HH = sum; } if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF1 and Data2(NextBarSdate == sDate) Then { sell("s1"); } } if TotalTrades > TotalTrades[1] Then { E1 = 0; HH = sum; } if sum > HH Then HH = sum; if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then { if E1 == 0 and sum <= HH-data2(PriceScale)*d2 and sum[1] < HH-data2(PriceScale)*d2 Then { E1 = 1; L1 = sum; i1 = data2(index); } if E1 == 1 and data2(index) > i1 then { if sum < L1 Then L1 = sum; if sum >= L1+data2(PriceScale)*ER2 Then { E1 = 2; i1 = data2(index); S1 = L1; } } if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF2 and Data2(NextBarSdate == sDate) Then { sell("s2"); E1 = 0; } } if MarketPosition == -1 and IsEntryName("s1") == true Then { if entry >= 1 then { if CurrentContracts > CurrentContracts[1] Then { EL = sum; E1 = 0; } if sum < EL Then { EL = sum; E1 = 0; } if E1 == 0 and sum >= EL+data2(PriceScale)*X1 Then { E1 = 1; H1 = sum; i1 = data2(index); } if E1 == 1 and data2(index) > i1 Then { if sum > H1 Then H1 = sum; if sum <= H1-data2(PriceScale)*CR1 Then { E1 = 2; I1 = data2(index); S1 = H1; } } if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF1 Then { ExitShort("sx1"); E1 = 0; } } } if MarketPosition == -1 and IsEntryName("s2") == true Then { if entry >= 1 then { if CurrentContracts > CurrentContracts[1] Then { EL = sum; E1 = 0; } if sum < EL Then { EL = sum; E1 = 0; } if E1 == 0 and sum >= EL+data2(PriceScale)*X2 Then { E1 = 1; H1 = sum; i1 = data2(index); } if E1 == 1 and data2(index) > i1 Then { if sum > H1 Then H1 = sum; if sum <= H1-data2(PriceScale)*CR2 Then { E1 = 2; I1 = data2(index); S1 = H1; } } if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF2 Then { ExitShort("sx2"); E1 = 0; } } } } 즐거운 하루되세요 > 좌오비우오비 님이 쓴 글입니다. > 제목 : 문의 > 아래는 sell 전용수식입니다. 시뮬레이션한 결과는 첨부파일1 전략실행차트로 세팅한 결과는 첨부파일2 질문 동일한 수식인데 시뮬레이션 결과대로 전략실행차트가 실행되지 않습니다. 살펴주셨으면 합니다. 수정내용은 수식에 # 표시를 해주시면 고맙겠습니다. *************************************************************************************** input : 거래횟수(20),시작시간(090000); input : d1(100),ER1(100),EF1(100),X1(99999),CR1(0),CF1(0); input : d2(100),ER2(100),EF2(100),X2(99999),CR2(0),CF2(0); var : T1(0,Data1),entry(0,Data1),HH(0,Data1),LL(0,Data1),EH(0,Data1),EL(0,Data1),E1(0,Data1),H1(0,Data1),i1(0,Data1),S1(0,Data1),L1(0,Data1),V1(0,Data1); var : sum(0,Data1); sum = Data2(c)+ data3(c); if Data2((sdate != sdate[1] and stime >= 시작시간) or (sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간)) Then{ T1 = TotalTrades; E1 = 0; HH = sum; } if data2(stime >= 시작시간) then{ if sum > HH Then HH = sum; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then{ if E1 == 0 and sum <= HH-data2(PriceScale)*d1 and sum[1] < HH-data2(PriceScale)*d1 Then{ E1 = 1; L1 = sum; i1 = data2(index); V1 = HH; //시작점 종가 } if E1 == 1 and index > i1 then{ if sum < L1 Then L1 = sum; #고가가 시작봉종가보다 작을 때만 눌림체크 if sum <= V1 and sum >= L1+data2(PriceScale)*ER1 Then{ E1 = 2; i1 = data2(index); S1 = L1; } } //시작점 종가보다 높은 가격이 발생하면 초기화 if E1 >= 1 and sum > V1 Then{ E1 = 0; HH = sum; } if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF1 and Data2(NextBarSdate == sDate) Then{ sell("s1"); } } if TotalTrades > TotalTrades[1] Then{ E1 = 0; HH = sum; } if sum > HH Then HH = sum; if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{ if E1 == 0 and sum <= HH-data2(PriceScale)*d2 and sum[1] < HH-data2(PriceScale)*d2 Then{ E1 = 1; L1 = sum; i1 = data2(index); } if E1 == 1 and data2(index) > i1 then{ if sum < L1 Then L1 = sum; if sum >= L1+data2(PriceScale)*ER2 Then{ E1 = 2; i1 = data2(index); S1 = L1; } } if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF2 and Data2(NextBarSdate == sDate) Then{ sell("s2"); E1 = 0; } } if MarketPosition == -1 and IsEntryName("s1") == true Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = sum; E1 = 0; } if sum < EL Then{ EL = sum; E1 = 0; } if E1 == 0 and sum >= EL+data2(PriceScale)*X1 Then{ E1 = 1; H1 = sum; i1 = index; } if E1 == 1 and data2(index) > i1 Then{ if sum > H1 Then H1 = sum; if sum <= H1-data2(PriceScale)*CR1 Then{ E1 = 2; I1 = data2(index); S1 = H1; } } if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF1 Then{ ExitShort("sx1"); E1 = 0; } } } if MarketPosition == -1 and IsEntryName("s2") == true Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = sum; E1 = 0; } if sum < EL Then{ EL = sum; E1 = 0; } if E1 == 0 and sum >= EL+data2(PriceScale)*X2 Then{ E1 = 1; H1 = sum; i1 = index; } if E1 == 1 and index > i1 Then{ if sum > H1 Then H1 = sum; if sum <= H1-data2(PriceScale)*CR2 Then{ E1 = 2; I1 = data2(index); S1 = H1; } } if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF2 Then{ ExitShort("sx2"); E1 = 0; } } } }