커뮤니티
수식 수정 부탁합니다.
2016-08-08 20:41:00
147
글번호 100841
알려주신 수식대로 적용해서 해봤는데 이상하게 나오네요.
조건이 만족된 사진의 1번과 2번캔들에서 지정한 가격에 주문이 나가게 하려고요.
뭐를 잘못 한걸까요?
1.
atlimit 주문을 썻는데도 조건만족 즉시 신호가 나가지않고 다음봉, 혹은 서너봉 후에
주문이 나갑니다.
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. 101367_캡처.PNG (0.04 MB)
답변 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 주문을 썻는데도 조건만족 즉시 신호가 나가지않고 다음봉, 혹은 서너봉 후에
주문이 나갑니다.
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);
======================================================================================
다음글
이전글