커뮤니티

수식 수정 부탁합니다.

프로필 이미지
한건
2016-08-08 20:41:00
147
글번호 100841
답변완료

첨부 이미지

알려주신 수식대로 적용해서 해봤는데 이상하게 나오네요. 조건이 만족된 사진의 1번과 2번캔들에서 지정한 가격에 주문이 나가게 하려고요. 뭐를 잘못 한걸까요? 1. atlimit 주문을 &#50043;는데도 조건만족 즉시 신호가 나가지않고 다음봉, 혹은 서너봉 후에 주문이 나갑니다. 2. 체결된 가격이 지정가와 다릅니다. 사진처럼 엉뚱한 캔들의 시가에서 주문이 나가네요. ========================================================== input : p1(5),P2(60),p3(120),금액(1000000); var : a1(0),a2(0),a3(0),dncnt(0); a1=ma(c,p1); a2=ma(c,p2); a3=ma(c,p3); #==== 60선과 120선이 골든나면 고가와 저가를 기준====# if crossup(a2,a3) then { Value1 = h; Value2 = L; } #===채널을 하향돌파한적이 있는지 체크===# if CrossUp(c,Value1) Then dncnt = 0; if CrossDown(c,Value2) Then dncnt = dncnt+1; #========주문식==============# #==== 전일종가가 상단보다 크고, 현재가격이 상단과 같거나 작아지면 즉시 상단가격에 금액만큼 신규매수주문=== # If c[1] > Value1 and Low <= Value1 Then buy("b1",AtLimit,Value1,floor(금액/C)); #==== 종가가 채널을 하향돌파한적이 없고, 현재가격이 채널하단에 닿으면 즉시 하단가격에 추가매수주문 ====# If dncnt == 0 and Low <= Value2 Then buy("b2",AtLimit,Value2,floor(금액/C)); #==== 현재 매수잔량이 있으면, 하단가격에서 채널두깨만큼 뺀가격에 추가매수주문 ====# If MarketPosition == 1 and dncnt >= 1 Then buy("b3",AtLimit,value2 - (Value1-Value2),floor(금액/C)); #==== 매수잔량이있고, 종가가 채널을 하방이탈한 상태이니, 평균단가에서 청산해라 ====# if MarketPosition == 1 and dncnt >= 1 Then ExitLong("BP",AtLimit,AvgEntryPrice); ======================================================================================
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-08-09 09:16:58

안녕하세요 예스스탁입니다. atlimit은 봉완성시 가격을 셋팅하고 다음봉에서 현재가와 셋팅된 가격을 비교해 신호가 발생합니다. if문으로 c[1] > Value1 and Low <= Value1 와 같은 조건을 지정하면 현재봉의 저가가 value1보다 작고 전봉 종가는 value1보다 큰 상태에서 가격이 셋팅되고 다음봉의 시세중 value1보다 낮은 시세가 발생하면 신호가 발생하게 됩니다. 즉 크로스 다운한 봉 다음봉에 신호를 발생하는 것과 같습니다. atlimit은 if문 자체를 봉 미완성시에 체크하라는 내용이 아닙니다. if문은 무조건 봉완성시에 조건체크를 합니다. 이전 답변드린 식에 아래와 같이 식을 작성해 드렸습니다. 봉의 저가가 채널상단위에 있는 봉이 발생하면 다음봉에서 시세가 하락해 채널상단이하의 시세가 발생하면 매수입니다. 즉 IF문으로 아직 지정한 채널보다 봉이 위에 있는 상태를 지정하고 다음봉이 채널을 터치하면 매수하게 작성해야 합니다. If L > 채널상단 Then buy("b1",atlimit,채널상단,1); 작성하신 진입식에서는 if조건문을 변경하셔야 합니다. #==== 전일종가가 상단보다 크고, 현재가격이 상단과 같거나 작아지면 즉시 상단가격에 금액만큼 신규매수주문=== # If L > value1 Then buy("b1",AtLimit,Value1,floor(금액/C)); #==== 종가가 채널을 하향돌파한적이 없고, 현재가격이 채널하단에 닿으면 즉시 하단가격에 추가매수주문 ====# If Low > Value2 Then buy("b2",AtLimit,Value2,floor(금액/C)); #==== 현재 매수잔량이 있으면, 하단가격에서 채널두깨만큼 뺀가격에 추가매수주문 ====# If MarketPosition == 1 and L > value2 - (Value1-Value2) Then buy("b3",AtLimit,value2 - (Value1-Value2),floor(금액/C)); 참고로 항상 B1 --> B2 --> B3 순서로 진입하고 하시면 아래와 같이 내용을 추가하시면 됩니다. 청산식도 2회이상 진입이 누적되면 평단가에서 청산하라고 지정하시면 됩니다. #========================================================== input : p1(5),P2(60),p3(120),금액(1000000); var : a1(0),a2(0),a3(0),dncnt(0); a1=ma(c,p1); a2=ma(c,p2); a3=ma(c,p3); #==== 60선과 120선이 골든나면 고가와 저가를 기준====# if crossup(a2,a3) then { Value1 = h; Value2 = L; value3 = value2 - (value1-value2); } #===채널을 하향돌파한적이 있는지 체크===# if CrossUp(c,Value1) Then dncnt = 0; if CrossDown(c,Value2) Then dncnt = dncnt+1; #========주문식==============# #==== 전일종가가 상단보다 크고, 현재가격이 상단과 같거나 작아지면 즉시 상단가격에 금액만큼 신규매수주문=== # If MarketPosition == 0 and L > value1 Then{ buy("b1",AtLimit,Value1,floor(금액/C)); //무포지션에서 한봉이 상단,하단,하단-폭 라인을 한번에 터치할경우 대비 buy("b2.",AtLimit,Value2,floor(금액/C)); buy("b3.",AtLimit,value3,floor(금액/C)); } #==== 종가가 채널을 하향돌파한적이 없고, 현재가격이 채널하단에 닿으면 즉시 하단가격에 추가매수주문 ====# If MarketPosition == 1 and MaxEntries == 1 and Low > Value2 Then{ buy("b2",AtLimit,Value2,floor(금액/C)); //첫진입후 한봉이 하단, 하단-1폭 라인을 한번에 터치할 경우 대비 buy("b3..",AtLimit,value3,floor(금액/C)); } #==== 현재 매수잔량이 있으면, 하단가격에서 채널두깨만큼 뺀가격에 추가매수주문 ====# If MarketPosition == 1 and MaxEntries == 2 and L > value2 - (Value1-Value2) Then buy("b3",AtLimit,value2 - (Value1-Value2),floor(금액/C)); #==== 매수잔량이있고, 종가가 채널을 하방이탈한 상태이니, 평균단가에서 청산해라 ====# if MarketPosition == 1 and MaxEntries >= 2 Then ExitLong("BP",AtLimit,AvgEntryPrice); # ====================================================================================== 즐거운 하루되세요 > 한건 님이 쓴 글입니다. > 제목 : 수식 수정 부탁합니다. > 알려주신 수식대로 적용해서 해봤는데 이상하게 나오네요. 조건이 만족된 사진의 1번과 2번캔들에서 지정한 가격에 주문이 나가게 하려고요. 뭐를 잘못 한걸까요? 1. atlimit 주문을 &#50043;는데도 조건만족 즉시 신호가 나가지않고 다음봉, 혹은 서너봉 후에 주문이 나갑니다. 2. 체결된 가격이 지정가와 다릅니다. 사진처럼 엉뚱한 캔들의 시가에서 주문이 나가네요. ========================================================== input : p1(5),P2(60),p3(120),금액(1000000); var : a1(0),a2(0),a3(0),dncnt(0); a1=ma(c,p1); a2=ma(c,p2); a3=ma(c,p3); #==== 60선과 120선이 골든나면 고가와 저가를 기준====# if crossup(a2,a3) then { Value1 = h; Value2 = L; } #===채널을 하향돌파한적이 있는지 체크===# if CrossUp(c,Value1) Then dncnt = 0; if CrossDown(c,Value2) Then dncnt = dncnt+1; #========주문식==============# #==== 전일종가가 상단보다 크고, 현재가격이 상단과 같거나 작아지면 즉시 상단가격에 금액만큼 신규매수주문=== # If c[1] > Value1 and Low <= Value1 Then buy("b1",AtLimit,Value1,floor(금액/C)); #==== 종가가 채널을 하향돌파한적이 없고, 현재가격이 채널하단에 닿으면 즉시 하단가격에 추가매수주문 ====# If dncnt == 0 and Low <= Value2 Then buy("b2",AtLimit,Value2,floor(금액/C)); #==== 현재 매수잔량이 있으면, 하단가격에서 채널두깨만큼 뺀가격에 추가매수주문 ====# If MarketPosition == 1 and dncnt >= 1 Then buy("b3",AtLimit,value2 - (Value1-Value2),floor(금액/C)); #==== 매수잔량이있고, 종가가 채널을 하방이탈한 상태이니, 평균단가에서 청산해라 ====# if MarketPosition == 1 and dncnt >= 1 Then ExitLong("BP",AtLimit,AvgEntryPrice); ======================================================================================