예스스탁
예스스탁 답변
2020-06-10 11:50:33
안녕하세요
예스스탁입니다.
기존의 작성해 드린 수식이 올리신 글에 양봉시작, 음봉시작이라는 내용이 있어
몸통이 이평을 돌파하고 CCI가 상승이면
다음봉이 시가대비 1틱이상 상승만 하면 즉시 신호가 발생하는 수식이었습니다.
시가 대비 1틱 이상 시세 발생하면 해당 시점에서는 양봉이므로 해당 시점에 진입을 하는데
봉종가시점에는 양봉이 아닐수 있습니다.
모두 봉완성시점으로 조건체크하게 수정해 드립니다.
지정하신 동그라미봉에 CCI상승까지 확인을 하려면 봉완성뿐이 방법이 없습니다.
주석을 붙여드립니다. 주석 내용 참고하셔서 이후 수정보완해 완성하시기 바랍니다.
1
input : StartTime(91000),EndTime(130000);
input : P1(5),P2(10),P3(20),CCIP(9);
input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3);
input : 익절틱수(100),손절틱수(100);
var : Tcond(false),mav1(0),mav2(0),mav3(0),CCIv(0);
#지정한 StartTime 시간봉이 발생하면 Tcond는 true
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
#지정한 EndTime 시간봉이 발생하면 Tcond는 false
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
#이평
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
#CCI
CCIv = CCI(CCIP);
#매봉 이평을 몸통으로 돌파한 횟수계산
var1 = 0;
if max(C,O) > mav1 and mav1 > min(C,O) Then
var1 = var1+1;
if max(C,O) > mav2 and mav2 > min(C,O) Then
var1 = var1+1;
if max(C,O) > mav3 and mav3 > min(C,O) Then
var1 = var1+1;
#지정한 시간대이면
if Tcond == true then
{
#현재봉 무포지션이거나 매도포지션이면
if MarketPosition <= 0 and
#전봉에서 양봉 몸통으로 3개이평 모두 돌파(종가는 이평3개보다 크고 시가는 작음)
C[1] > max(mav1[1],mav2[1],mav3[1]) and min(mav1[1],mav2[1],mav3[1]) > O and
#현재봉 양봉
C > O and
#현재봉 CCI상승
CCIv > CCIv[1] and
#전봉기준 최근 5개봉 진폭은 50틱 이상
highest(h,진폭봉수)[1] >= lowest(L,진폭봉수)[1]+PriceScale*진폭틱수 and
#전봉기준 최근 N개봉 동안 돌파봉이 3봉 이하
countif(var1 >= 1,N) <= 돌파봉수 then
buy("b");
#현재봉 무포지션이거나 매수포지션이면
if MarketPosition >= 0 and
#전봉에서 음봉 몸통으로 3개이평 모두 돌파(종가는 이평3개보다 작고 시가는 큼)
C[1] < max(mav1[1],mav2[1],mav3[1]) and min(mav1[1],mav2[1],mav3[1]) < O[1] and
#현재봉 음봉
C < O and
#현재봉 CCI 하락
CCIv < CCIv[1] and
#전봉기준 최근 5개봉 진폭은 50틱 이상
highest(h,진폭봉수)[1] >= lowest(L,진폭봉수)[1]+PriceScale*진폭틱수 and
#전봉기준 최근 5개봉 동안 돌파봉이 3봉 이하
countif(var1 >= 1,N)[1] <= 돌파봉수 then
sell("s");
#매수진입후 음봉 발생하면 청산
if MarketPosition == 1 then
{
if C < O Then
ExitLong("bx1");
}
#매도진입후 양봉 발생하면 청산
if MarketPosition == -1 then
{
if C > O Then
ExitShort("sx1");
}
}
#강제청산 익절설정
SetStopProfittarget(PriceScale*익절틱수,PointStop);
#강제청산 손절설정
SetStoploss(PriceScale*손절틱수,PointStop);
#당일청산 설정
if EndTime > Starttime Then
SetStopEndofday(EndTime);
if EndTime < Starttime Then
{
if sdate != sdate[1] Then
SetStopEndofday(EndTime);
if bdate != bdate[1] Then
SetStopEndofday(0);
}
2
input : StartTime(91000),EndTime(130000);
input : P1(5),P2(10),P3(20),P4(60),P5(120),CCIP(9);
input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3);
input : 익절틱수(100),손절틱수(100);
var : Tcond(false),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),CCIv(0);
#지정한 StartTime 시간봉이 발생하면 Tcond는 true
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
#지정한 EndTime 시간봉이 발생하면 Tcond는 false
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
#이평
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
mav4 = ma(C,P4);
mav5 = ma(C,P5);
#CCI
CCIv = CCI(CCIP);
#매봉 이평 양봉돌파갯수
var1 = 0;
if C > mav1 and mav1 > O Then
var1 = var1+1;
if C > mav2 and mav2 > O Then
var1 = var1+1;
if C > mav3 and mav3 > O Then
var1 = var1+1;
if C > mav4 and mav4 > O Then
var1 = var1+1;
if C > mav5 and mav5 > O Then
var1 = var1+1;
#매봉 이평 음봉돌파갯수
var2 = 0;
if C < mav1 and mav1 < O Then
var2 = var2+1;
if C < mav2 and mav2 < O Then
var2 = var2+1;
if C < mav3 and mav3 < O Then
var2 = var2+1;
if C < mav4 and mav4 < O Then
var2 = var2+1;
if C < mav5 and mav5 < O Then
var2 = var2+1;
#지정한 시간대이면
if Tcond == true then
{
#현재봉 무포지션이거나 매도포지션이면
if MarketPosition <= 0 and
#전봉에서 양봉 몸통으로 5개 이평 중 2개 이상 돌파
var1[1] >= 2 and
#현재봉 양봉
C > O and
#현재봉 CCI상승
CCIv > CCIv[1] and
#전봉기준 최근 5개봉 진폭은 50틱 이상
highest(h,진폭봉수)[1] >= lowest(L,진폭봉수)[1]+PriceScale*진폭틱수 and
#전봉기준 최근 최근 5개봉 동안 돌파봉이 3봉 이하
countif(var1 >= 1,N)[1] <= 돌파봉수 then
buy("b");
#현재봉 무포지션이거나 매수포지션이면
if MarketPosition >= 0 and
#전봉에서 음봉 몸통으로 5개 이평 중 2개 이상 돌파
var2[1] >= 2 and
#현재봉 음봉
C < O and
#현재봉 CCI 하락
CCIv < CCIv[1] and
#전봉기준 최근 5개봉 진폭은 50틱 이상
highest(h,진폭봉수)[1] >= lowest(L,진폭봉수)[1]+PriceScale*진폭틱수 and
#전봉기준 최근 5개봉 동안 돌파봉이 3봉 이하
countif(var1 >= 1,N)[1] <= 돌파봉수 then
sell("s");
#매수진입후 음봉 발생하면 청산
if MarketPosition == 1 then
{
if C < O Then
ExitLong("bx1");
}
#매도진입후 양봉 발생하면 청산
if MarketPosition == -1 then
{
if C > O Then
ExitShort("sx1");
}
}
#강제청산 익절설정
SetStopProfittarget(PriceScale*익절틱수,PointStop);
#강제청산 손절설정
SetStoploss(PriceScale*손절틱수,PointStop);
#당일청산 설정
if EndTime > Starttime Then
SetStopEndofday(EndTime);
if EndTime < Starttime Then
{
if sdate != sdate[1] Then
SetStopEndofday(EndTime);
if bdate != bdate[1] Then
SetStopEndofday(0);
}
즐거운 하루되세요
> 가날 님이 쓴 글입니다.
> 제목 : 어제 수식 수정부탁드려요
> 제가 원하는 곳에서 신호가 않나와서요
---------------------------------
그림 1에서 네모 봉을 확인후(봉의 몸통으로 이평선을 돌파한경우에만) + 아래 화살표처럼 CCI 우상향일시 동그라미 봉에서 매수가 진입이 되게 하고싶습니다 동그라미가 음봉으로 시작하면 안되고 네모봉 종가와 같거나 양봉으로 시작해야 됩니다
매도일때는 반대의경우 입니다
1번그림처럼 네모봉이 5 10 20 분봉이 돌파 해도 되지만 바로아래그림처럼 5, 10 20 60 120 모두 돌파해도 상관없습니다 5 10만 돌파하거나 5.20만 돌파 하면 안됩니다 네모 봉 몸통으로 3개이상만 순서상관없이 돌파하면 됩니다
------------------------------------
그림 4처럼 이전 봉들이 연속적으로 3개이상 돌파봉이 되었다면 진입 금지 입니다
이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우 위와같이 봉몸통으로 돌파한봉이 최근 5개봉중 3개 이하 여야되고 5,10 20 60 120 중 순서는 상관없이 3개 봉 이하일때만 진입입니다
----------------------------------------
그림 2처럼 만든어주신 시스템 적용했는데 원하지 않는 곳에서 매매가 시작 됩니다
-----------------------------------
그림 3처럼 만약 네모 봉에서 매도 신호가 발생을했으면 동그라미 봉이 양봉으로 끝났을때 청산 원하는데 그렇게 안되는거 같아서 수정부탁드려요
---------------------------
1번시스템은 위와 같이 수정 부탁드리오 2번시스템은 위내용과 동일하고 5 10 20 60 120분봉 2개이상 몸통돌파봉을 확인하고 경우 매수일경우 매도일경우 청산도 위와 같이 해주시면됩니다
혹시 가능하다면 초보라서 시스템에 자세한 주석 부탁드립니다
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 부탁드려요
> 안녕하세요
예스스탁입니다.
1
input : StartTime(91000),EndTime(130000);
input : P1(5),P2(10),P3(20),CCIP(9);
input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3);
input : 익절틱수(100),손절틱수(100);
var : Tcond(false),mav1(0),mav2(0),mav3(0),CCIv(0);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
CCIv = CCI(CCIP);
var1 = 0;
if max(C,O) > mav1 and mav1 > min(C,O) Then
var1 = var1+1;
if max(C,O) > mav2 and mav2 > min(C,O) Then
var1 = var1+1;
if max(C,O) > mav3 and mav3 > min(C,O) Then
var1 = var1+1;
if Tcond == true then
{
if MarketPosition <= 0 and
C > max(mav1,mav2,mav3) and min(mav1,mav2,mav3) > O and
CCIv > CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
buy("b",AtStop,NextBarSdate+PriceScale*1);
if MarketPosition >= 0 and
C < max(mav1,mav2,mav3) and min(mav1,mav2,mav3) < O and
CCIv < CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
sell("s",AtStop,NextBarSdate-PriceScale*1);
if MarketPosition == 1 then
{
if C < O Then
ExitLong("bx1");
}
if MarketPosition == -1 then
{
if C > O Then
ExitShort("sx1");
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStoploss(PriceScale*손절틱수,PointStop);
if EndTime > Starttime Then
SetStopEndofday(EndTime);
if EndTime < Starttime Then
{
if sdate != sdate[1] Then
SetStopEndofday(EndTime);
if bdate != bdate[1] Then
SetStopEndofday(0);
}
2
input : StartTime(91000),EndTime(130000);
input : P1(5),P2(10),P3(20),P4(60),P5(120),CCIP(9);
input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3);
input : 익절틱수(100),손절틱수(100);
var : Tcond(false),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),CCIv(0);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
mav4 = ma(C,P4);
mav5 = ma(C,P5);
CCIv = CCI(CCIP);
var1 = 0;
if C > mav1 and mav1 > O Then
var1 = var1+1;
if C > mav2 and mav2 > O Then
var1 = var1+1;
if C > mav3 and mav3 > O Then
var1 = var1+1;
if C > mav4 and mav4 > O Then
var1 = var1+1;
if C > mav5 and mav5 > O Then
var1 = var1+1;
var2 = 0;
if C < mav1 and mav1 < O Then
var2 = var2+1;
if C < mav2 and mav2 < O Then
var2 = var2+1;
if C < mav3 and mav3 < O Then
var2 = var2+1;
if C < mav4 and mav4 < O Then
var2 = var2+1;
if C < mav5 and mav5 < O Then
var2 = var2+1;
if Tcond == true then
{
if MarketPosition <= 0 and
var1 >= 2 and
CCIv > CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
buy("b",AtStop,NextBarSdate+PriceScale*1);
if MarketPosition >= 0 and
var2 >= 2 and
CCIv < CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
sell("s",AtStop,NextBarSdate-PriceScale*1);
if MarketPosition == 1 then
{
if C < O Then
ExitLong("bx1");
}
if MarketPosition == -1 then
{
if C > O Then
ExitShort("sx1");
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStoploss(PriceScale*손절틱수,PointStop);
if EndTime > Starttime Then
SetStopEndofday(EndTime);
if EndTime < Starttime Then
{
if sdate != sdate[1] Then
SetStopEndofday(EndTime);
if bdate != bdate[1] Then
SetStopEndofday(0);
}
즐거운 하루되세요
> 가날 님이 쓴 글입니다.
> 제목 : 시스템식 부탁드려요
> 매매 시작시간은 오전 9시 10분 종료시간은 13시
매수조건 :
전양봉이 몸통으로 5 10 20이평을(순서는 상관없음) 돌파후 양봉시작 + CCI 우상향일시
+ 이전 최근 5봉의 최저점 최고점 진폭 50틱이상 + 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우
매도조건 :
전음봉이 몸통으로 5 10 20이평을(순서는 상관없음) 돌파후 양봉시작 + CCI 우하향일시 매도
+ 이전 최근 5봉의 최저점 최고점 진폭 50틱이상 + 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우
청산조건 :
매수후 완성봉이 음봉나올때 나 수익 100틱 손절 100틱
매도후 완성봉이 양봉이 나오면 청산 수익 100틱 손절 100틱
제가 숫자로 지정한것들은 변수로 설정 부탁드립니다
-----------------------
추가적으로 위 시스템이랑 모두 같은 조건에서
전양봉이 몸통으로 5 10 20분봉(순서는 상관없음) 돌파후 양봉시작 을
->
전양봉이 몸통으로 5 ,10,20,60,120 이평선중에 ( 순서는 상관없음) 2개 분봉 돌파
음봉도 반대의 경우로 매매할수있는 시스템식도 추가적으로 부탁드려요
총2개 부탁드려요
요청이 많아서 죄송 합니다