커뮤니티

잘 부탁드립니다

프로필 이미지
현우르곳
2023-06-22 13:56:50
1515
글번호 169993
답변완료

첨부 이미지

안녕하세요. 코드 실행결과 강제청산과 추가매수가 한봉에 같이 나옵니다. 1. 매도가 추가매수보다 먼저 작동해서 추가매수를 진행하지 못하게 하고 싶습니다. 캔들 하나에 매도와 매수는 한번만 이루어지게 부탁드려요 2. 그리고 코드상에서 추가매수는 0이 나올 수 없는데 0이 나오네요.. 왜그런가요? 감사합니다 input : nDate(20200101), 보유기간(14); var : hh(0), MID(0), varl(0), vol(0); #첫 매수조건 if MarketPosition == 0 and sDate >= nDate and V > 4 * V[1] and C >= O and Average(C, 120)[1] < Average(C,120) and L <= Average(C,5) and C >= Average(C, 120) Then Buy("첫 매수", OnClose,Def,1); if MarketPosition ==1 and LatestEntryName(0) == "첫 매수" Then MID = (C[BarsSinceEntry] + O[BarsSinceEntry])/2; #추가매수조건 if MarketPosition ==1 Then{ varl = (L-C[1])/C[1]*100; vol = floor(abs(varl)); if vol > 1 and DateToJulian(sDate) < DateToJulian(EntryDate) + 보유기간 Then Buy("추가매수",OnClose,Def,vol); if CurrentContracts > CurrentContracts[1] Then hh = h; if h > hh Then hh = h; #매도(익절,청산 조건) if DateToJulian(sDate) >= DateToJulian(EntryDate) + 보유기간 Then ExitLong("기간이탈", OnClose); if C <= Average(C,120) Then ExitLong("이평이탈", OnClose); if C < MID or O < MID Then ExitLong("중심봉이탈",OnClose); if L <= 0.98 * Average(C, 5) Then ExitLong("강제청산",OnClose); if hh >= AvgEntryPrice * 1.06 Then ExitLong("매도",AtStop,hh*0.97); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-06-23 09:59:47

안녕하세요 예스스탁입니다. 1 현재 작성하신 내용이 진입과 청산이 하나봉에서 동시에 충족될 수 있습니다. 청산발생시 진입이 동시에 발생하면 청산이 해당 진입까지 다시 청산합니다. 신호 및에 0은 남은 수량입니다. 해당 봉에서 모두 청산되수 수량이 0이 되었다는 의미입니다. 2 진입과 청산이 동시 충족할수 있는 경우에 청산이 발생하면 진입이 나오지 않게 코딩하셔야 합니다. 청산 중 "매도"는 봉 미완성시에 나오는 청산이므로 관계가 없고 나머지 청산은 모두 봉완성시 청산으로 진입과 같이 만족할 수 있습니다. 봉완성시 청산 조건에 만족하면 진입이 발생하지 않게 변수등으로 제어하시면 됩니다. input : nDate(20200101), 보유기간(14); var : hh(0), MID(0), varl(0), vol(0); #첫 매수조건 if MarketPosition == 0 and sDate >= nDate and V > 4 * V[1] and C >= O and Average(C, 120)[1] < Average(C,120) and L <= Average(C,5) and C >= Average(C, 120) Then Buy("첫 매수", OnClose,Def,1); if MarketPosition ==1 and LatestEntryName(0) == "첫 매수" Then MID = (C[BarsSinceEntry] + O[BarsSinceEntry])/2; #추가매수조건 if MarketPosition ==1 Then { varl = (L-C[1])/C[1]*100; vol = floor(abs(varl)); if CurrentContracts > CurrentContracts[1] Then hh = h; if h > hh Then hh = h; #매도(익절,청산 조건) Condition1 = False; if DateToJulian(sDate) >= DateToJulian(EntryDate) + 보유기간 Then { Condition1 = true; ExitLong("기간이탈", OnClose); } if C <= Average(C,120) Then { Condition1 = true; ExitLong("이평이탈", OnClose); } if C < MID or O < MID Then { Condition1 = true; ExitLong("중심봉이탈",OnClose); } if L <= 0.98 * Average(C, 5) Then { Condition1 = true; ExitLong("강제청산",OnClose); } if hh >= AvgEntryPrice * 1.06 Then ExitLong("매도",AtStop,hh*0.97); if Condition1 == False and vol > 1 and DateToJulian(sDate) < DateToJulian(EntryDate) + 보유기간 Then Buy("추가매수",OnClose,Def,vol); } 즐거운 하루되세요 > 현우르곳 님이 쓴 글입니다. > 제목 : 잘 부탁드립니다 > 안녕하세요. 코드 실행결과 강제청산과 추가매수가 한봉에 같이 나옵니다. 1. 매도가 추가매수보다 먼저 작동해서 추가매수를 진행하지 못하게 하고 싶습니다. 캔들 하나에 매도와 매수는 한번만 이루어지게 부탁드려요 2. 그리고 코드상에서 추가매수는 0이 나올 수 없는데 0이 나오네요.. 왜그런가요? 감사합니다 input : nDate(20200101), 보유기간(14); var : hh(0), MID(0), varl(0), vol(0); #첫 매수조건 if MarketPosition == 0 and sDate >= nDate and V > 4 * V[1] and C >= O and Average(C, 120)[1] < Average(C,120) and L <= Average(C,5) and C >= Average(C, 120) Then Buy("첫 매수", OnClose,Def,1); if MarketPosition ==1 and LatestEntryName(0) == "첫 매수" Then MID = (C[BarsSinceEntry] + O[BarsSinceEntry])/2; #추가매수조건 if MarketPosition ==1 Then{ varl = (L-C[1])/C[1]*100; vol = floor(abs(varl)); if vol > 1 and DateToJulian(sDate) < DateToJulian(EntryDate) + 보유기간 Then Buy("추가매수",OnClose,Def,vol); if CurrentContracts > CurrentContracts[1] Then hh = h; if h > hh Then hh = h; #매도(익절,청산 조건) if DateToJulian(sDate) >= DateToJulian(EntryDate) + 보유기간 Then ExitLong("기간이탈", OnClose); if C <= Average(C,120) Then ExitLong("이평이탈", OnClose); if C < MID or O < MID Then ExitLong("중심봉이탈",OnClose); if L <= 0.98 * Average(C, 5) Then ExitLong("강제청산",OnClose); if hh >= AvgEntryPrice * 1.06 Then ExitLong("매도",AtStop,hh*0.97); }