커뮤니티

다시 수식 문의드립니다.

프로필 이미지
만법귀일
2018-06-28 16:15:13
196
글번호 120141
답변완료
친절하게 답변 주셔서 감사합니다. 그럼 예스랭귀지에서 가능한 수식만 작성해주실수 없을까요? 혼자 아무리 매뉴얼 보고 수식을 짜보아도 검증을 해보면 실제 주문이 나가지 않아서요. 한 번 수식 예를 작성해주시면 그 걸 기반으로 해서 매뉴얼 보면서 공부해 나가면 좀 낫지 않을까 생각이 들어서요. 1. 당일 일중거래에 적용하고자 합니다. 당일 차트의 시봉을 1번봉으로 해서 3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다. (1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면 가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다. 매도해주었는데 세 봉의 고가+1틱에 도달하면 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다. 손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다. 나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다. (2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면 현재가가 세 봉의 고가 –1틱에 도달하면 매도주문을 넣어주고 현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주고 싶습니다. 매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 매수청산해주고 다시 매도로 진입해줍니다. (3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면 / 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다. 중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다. 그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 –1틱 가격에 도달해도 청산해주지 않습니다. (4) 오후 1시까지 세 봉의 고가를 돌파한 신고가가 발생하고 세 봉의 저가를 돌파하는 신저가가 발생하지 않은 경우 방향을 매수로 결정하고 오후 1시에 보유한 진입이 매도이면 모두 청산해주고자 합니다. 세 봉의 고가를 돌파한 신고가가 발생하고 다시 세 봉의 저가를 돌파한 신저가가 발생한 경우 방향을 매도로 결정해주고 오후 1시에 보유한 진입이 매수이면 모두 청산해주고자 합니다. (5) 신고가 신저가가 연속해서 발생할 때 마지막에 발생한 게 신고가이면 방향을 매수로 결정해주고 마지막에 발생한 게 신저가이면 방향을 매도로 결정해주고 싶습니다. (6) 오후 1시까지 세 봉의 저가로 매도한 진입이 진입가 기준 0.3프로 익절가에 도달했는데 다시 오후 1시까지 세 봉의 중위값으로 돌아온 경우 기존 매도진입을 모두 청산해주고 매수진입해주고 싶습니다. (7) 매도 진입의 손절을 설정해줄 때 오전 1100까지의 고가를 계산한 후 매도의 손절은 오전 1100까지의 고가를 돌파하는 신고가가 발생한 경우 신고가보다 5틱 아래 가격에 0.3프로를 더한 가격으로 손절가를 설정해주고 싶습니다. (8) 그 날 진입의 손실의 합이 2.5이상이면 모든 보유 진입을 청산해주고자 합니다. (9) 그 날 진입의 수익의 합이 3.5이상이면 모든 보유 진입을 청산해주고자 합니다. (10) 보유한 모든 진입은 종가에 청산해주고 싶습니다. 질문이 많아 죄송합니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-06-28 18:09:21

안녕하세요 예스스탁입니다. 1. var : idx(0),head(0),tail(0),sumHead(0),sumTail(0); var : HH(0),LL(0),MM(0); head = H-max(C,O); tail = min(C,O)-L; sumHead = AccumN(head,3); sumTail = AccumN(head,3); HH = highest(H,3); LL = lowest(L,3); mm = (HH+LL)/2; if bdate != bdate[1] Then { idx = 0; } idx = idx+1; if idx == 5 Then { if (sumHead > sumTail) or (sumHead == sumTail and C < O) Then sell("s"); } if idx > 5 Then { if MarketPosition == -1 Then { if (ExitDate(1) != sdate or (ExitDate(1) == sdate and PositionProfit(1) >= 0)) then buy("sb",AtStop,HH+PriceScale*1); Else ExitShort("sx",AtStop,HH+PriceScale*1); ExitShort("sl",AtStop,mm*1.002); ExitShort("sp",AtStop,mm*0.996); } if MarketPosition == 1 Then { if (ExitDate(1) != sdate or (ExitDate(1) == sdate and PositionProfit(1) >= 0)) then sell("bs",AtStop,LL-PriceScale*1); else ExitLong("bx",AtStop,LL-PriceScale*1); ExitLong("bl",AtStop,mm*0.998); ExitLong("bp",AtStop,mm*1.004); } } 2 var : idx(0),head(0),tail(0),sumHead(0),sumTail(0); var : HH(0),LL(0),MM(0); head = H-max(C,O); tail = min(C,O)-L; sumHead = AccumN(head,3); sumTail = AccumN(head,3); HH = highest(H,3); LL = lowest(L,3); mm = (HH+LL)/2; if bdate != bdate[1] Then { idx = 0; } idx = idx+1; if idx == 5 Then { var1 = abs(c-mm); } if idx >= 5 Then { if MarketPosition <= 0 and var1 <= dayopen*0.001 Then buy("b",AtLimit,ll+PriceScale*1); if MarketPosition >= 0 and var1 <= dayopen*0.001 Then sell("s",Atlimit,hh-PriceScale*1); } if MarketPosition == -1 Then { buy("sb",Atlimit,mm); ExitShort("sl",AtStop,HH+PriceScale*1); } if MarketPosition == 1 Then { sell("bs",AtStop,mm); ExitLong("bl",AtStop,LL-PriceScale*1); } SetStopProfittarget(0.4,PercentStop); 3 var : idx(0),HH(0),LL(0),MM(0),T1(0),entrycount(0); HH = highest(H,3); LL = lowest(L,3); mm = (HH+LL)/2; if bdate != bdate[1] Then { idx = 0; T1 = TotalTrades; } idx = idx+1; if MarketPosition == 0 Then entrycount = TotalTrades-t1; Else entrycount = TotalTrades-t1+1; if idx == 5 Then { var1 = c; var2 = mm; } if idx >= 5 and entrycount == 0 Then { if MarketPosition <= 0 and abs(var1-var2) > dayopen*0.001 and C > var2 Then buy("b",AtLimit,mm); } if MarketPosition == -1 Then { buy("sb",AtLimit,mm); } if MarketPosition == 1 and entrycount < 3 Then { sell("bs",Atlimit,HH-PriceScale*1); } 4 var : idx(0),HH(0),LL(0),MM(0); HH = highest(H,3); LL = lowest(L,3); mm = (HH+LL)/2; if bdate != bdate[1] Then { Condition1 = false; Condition2 = false; } if stime <= 130000 then { if H > HH[1] Then Condition1 = false; if L < LL[1] Then Condition2 = false; } if MarketPosition ==1 and stime >= 130000 and stime[1] < 130000 and Condition1 == true and Condition2 == false Then exitlong(); 5 var : HH(0),LL(0),MM(0),T(0); HH = highest(H,3); LL = lowest(L,3); mm = (HH+LL)/2; if H > HH[1] Then T = 1; if L < LL[1] Then T = -1; if T == 1 and 매수조건 Then buy(); if T == -1 and 매도조건 Then sell(); 6 var : HH(0),LL(0),MM(0),T(0); HH = highest(H,3); LL = lowest(L,3); mm = (HH+LL)/2; if MarketPosition >= 0 and stime < 130000 Then sell("s",AtStop,LL); if MarketPosition == -1 and stime < 130000 and Lowest(L,BarsSinceEntry) <= EntryPrice*0.997 Then buy("b",AtStop,mm); 7. if stime < 110000 Then var1 = dayhigh; if MarketPosition == 1 and highest(H,BarsSinceEntry) > var1 Then ExitShort("sx",AtStop,(highest(H,BarsSinceEntry)-PriceScale*5)*1.003); 8,9 Input : 당일수익(3.5),당일손실(2.5); Var : N1(0),dayPl(0),Xcond(false); if Bdate != Bdate[1] Then { Xcond = false; N1 = NetProfit; } daypl = NetProfit-N1; if TotalTrades > TotalTrades[1] and (IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then Xcond = true; if Xcond == false then { if /*매수진입조건*/ Then { buy("b"); } if /*매도진입조건*/ Then { sell("s"); } } if MarketPosition == 1 then { ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts)); ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts)); } if MarketPosition == -1 then { ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts)); ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts)); } 10 아래와 같이 당일청산함수에 정규장 이내 시간으로 시간을 지정해 셋팅하시면 됩니다. SetStopEndofday(152000); 즐거운 하루되세요 > 만법귀일 님이 쓴 글입니다. > 제목 : 다시 수식 문의드립니다. > 친절하게 답변 주셔서 감사합니다. 그럼 예스랭귀지에서 가능한 수식만 작성해주실수 없을까요? 혼자 아무리 매뉴얼 보고 수식을 짜보아도 검증을 해보면 실제 주문이 나가지 않아서요. 한 번 수식 예를 작성해주시면 그 걸 기반으로 해서 매뉴얼 보면서 공부해 나가면 좀 낫지 않을까 생각이 들어서요. 1. 당일 일중거래에 적용하고자 합니다. 당일 차트의 시봉을 1번봉으로 해서 3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다. (1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면 가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다. 매도해주었는데 세 봉의 고가+1틱에 도달하면 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다. 손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다. 나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다. (2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면 현재가가 세 봉의 고가 &#8211;1틱에 도달하면 매도주문을 넣어주고 현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주고 싶습니다. 매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 매수청산해주고 다시 매도로 진입해줍니다. (3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면 / 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다. 중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다. 그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 &#8211;1틱 가격에 도달해도 청산해주지 않습니다. (4) 오후 1시까지 세 봉의 고가를 돌파한 신고가가 발생하고 세 봉의 저가를 돌파하는 신저가가 발생하지 않은 경우 방향을 매수로 결정하고 오후 1시에 보유한 진입이 매도이면 모두 청산해주고자 합니다. 세 봉의 고가를 돌파한 신고가가 발생하고 다시 세 봉의 저가를 돌파한 신저가가 발생한 경우 방향을 매도로 결정해주고 오후 1시에 보유한 진입이 매수이면 모두 청산해주고자 합니다. (5) 신고가 신저가가 연속해서 발생할 때 마지막에 발생한 게 신고가이면 방향을 매수로 결정해주고 마지막에 발생한 게 신저가이면 방향을 매도로 결정해주고 싶습니다. (6) 오후 1시까지 세 봉의 저가로 매도한 진입이 진입가 기준 0.3프로 익절가에 도달했는데 다시 오후 1시까지 세 봉의 중위값으로 돌아온 경우 기존 매도진입을 모두 청산해주고 매수진입해주고 싶습니다. (7) 매도 진입의 손절을 설정해줄 때 오전 1100까지의 고가를 계산한 후 매도의 손절은 오전 1100까지의 고가를 돌파하는 신고가가 발생한 경우 신고가보다 5틱 아래 가격에 0.3프로를 더한 가격으로 손절가를 설정해주고 싶습니다. (8) 그 날 진입의 손실의 합이 2.5이상이면 모든 보유 진입을 청산해주고자 합니다. (9) 그 날 진입의 수익의 합이 3.5이상이면 모든 보유 진입을 청산해주고자 합니다. (10) 보유한 모든 진입은 종가에 청산해주고 싶습니다. 질문이 많아 죄송합니다. 감사합니다.