커뮤니티

시스템식 부탁드립니다.

프로필 이미지
양치기
2023-03-16 20:41:58
701
글번호 167216
답변완료
항상 도움 주셔서 감사합니다. 종목: 해외선물 차트 : 주봉차트 주봉차트에서 봉완성 기준이 아닌 가격조건 만족기준으로만 매매하려 합니다. 아래와 같이 코딩 했는데 위 조건처럼 매매가 되지 않습니다.[느림] 제가 놓치고 있는게 무엇인지 모르겠습니다. 도움 부탁드립니다. 매수 : 현재가가 주봉 10일 이동평균선 위에 있고 현재 이동평균선이 상승중이고 MACD가 0선 위면 매수 위 3가지 모두 만족하면 현재가에서 10틱 하락시 매수 매수물타기 : 포지션 진입이후 진입가격 대비 10틱이 하락하거나 이미 진입된 포지션의 평균진입가격 대비 10틱 하락할때 마다 1계약씩 추가매수(최대 진입횟수 20회) 매수 물타기 청산1 : 포지션 진입이후 계약수가 10개 이내일 경우에는 진입 건별로 10틱 이상 수익이 발생할때마다 1계약씩 청산 포지션 진입이후 계약수가 11개 이상일 경우에는 평균 진입가격보다 10틱 이상 수익발생할 경우 모든 계약 청산 매수청산 : 캔들(현재가가)이 10일 이동평균선 아래로 하락하거나 10일 이동평균선추세가 하락전환하거나 MACD가 0선 아래로 하락시 매수청산 매도 : 현재가가 주봉 10일 이동평균선 아래에 있고 현재 이동평균선이 하락중이고 MACD가 0선 아래면 매도 위 3가지 모두 만족하면 현재가에서 10틱 상승시 매도 매도물타기 : 포지션 진입이후 진입가격 대비 10틱이 상승하거나 이미 진입된 포지션의 평균진입가격 대비 10틱 상승할때 마다 1계약씩 추가매도(최대 진입횟수 20회) 매도 물타기 청산1 : 포지션 진입이후 계약수가 10개 이내일 경우에는 진입 건별로 10틱 이상 수익이 발생할때마다 1계약씩 청산 포지션 진입이후 계약수가 11개 이상일 경우에는 평균 진입가격보다 10틱 이상 수익발생할 경우 모든 계약 청산 매도청산 : 캔들(현재가가)이 10일 이동평균선 위로 상승하거나 10일 이동평균선추세가 상승전환하거나 MACD가 0선 위로 상승시 매도청산 위에 설명한대로 아래 시스템식 수정 부탁드립니다. #----------------------------------------------------------------------- # 매수 If marketposition == 0 and C > 이평 and 이평 > 이평[1] and MACDV > 0 then Buy("B",AtLimit,C-PriceScale*매수폭,amt); If marketposition == 1 and MACDv < 0 or 이평[0] < 이평[1] or C < 이평 Then ExitLong("BX",AtLimit,C,"",amt,1); # 매도 If marketposition == 0 and C < 이평 and 이평 < 이평[1] and MACDV < 0 then Sell("S",AtLimit,C+PriceScale*매도폭,amt); If marketposition == -1 and MACDv > 0 or 이평[0] > 이평[1] or C > 이평 Then ExitShort("SX",AtLimit,C,"",amt,1); 도움 부탁드립니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-03-16 13:39:31

안녕하세요 예스스탁입니다. 1 이평이나 macd는 모두 봉완성시로만 가능합니다. 첫진입은 봉완성시 지정한 조건이 만족하면 다음봉에서 종가대비 10틱 떨어지는 시세가 발생할때 진입하게 됩니다. 2 차트가 주봉차트와 같이 장기간 차트라 추가진입이 문제가 됩니다. 진입함수 한개는 각 봉에 한번만 발생할 수 있어 최근 진입가 대비 10틱 하락/상승시마다 하나의 buy나 sell 진입하게 할수가 없습니다. 한봉에 여러번 진입을 하기 위해서는 가격별로 각각의 진입함수로 작성을 해야 합니다. 올려주신 내용은 최대 20번 진입이고 한봉에서 여러번 진입이 가능하므로 아래와 같이 나열해 작성하셔야 합니다. 3 input : 매수폭(10),amt(1); var : 이평(0),macdv(0); 이평 = ma(C,20); macdv = macd(12,26); If marketposition == 0 and C > 이평 and 이평 > 이평[1] and MACDV > 0 then { value1 = C; Buy("b1.",AtLimit,value1-PriceScale*매수폭*1,amt); Buy("b2.",AtLimit,value1-PriceScale*매수폭*2,amt); Buy("b3.",AtLimit,value1-PriceScale*매수폭*3,amt); Buy("b4.",AtLimit,value1-PriceScale*매수폭*4,amt); Buy("b5.",AtLimit,value1-PriceScale*매수폭*5,amt); Buy("b6.",AtLimit,value1-PriceScale*매수폭*6,amt); Buy("b7.",AtLimit,value1-PriceScale*매수폭*7,amt); Buy("b8.",AtLimit,value1-PriceScale*매수폭*8,amt); Buy("b9.",AtLimit,value1-PriceScale*매수폭*9,amt); Buy("b10.",AtLimit,value1-PriceScale*매수폭*10,amt); Buy("b11.",AtLimit,value1-PriceScale*매수폭*11,amt); Buy("b12.",AtLimit,value1-PriceScale*매수폭*12,amt); Buy("b13.",AtLimit,value1-PriceScale*매수폭*13,amt); Buy("b14.",AtLimit,value1-PriceScale*매수폭*14,amt); Buy("b15.",AtLimit,value1-PriceScale*매수폭*15,amt); Buy("b16.",AtLimit,value1-PriceScale*매수폭*16,amt); Buy("b17.",AtLimit,value1-PriceScale*매수폭*17,amt); Buy("b18.",AtLimit,value1-PriceScale*매수폭*18,amt); Buy("b19.",AtLimit,value1-PriceScale*매수폭*19,amt); Buy("b20.",AtLimit,value1-PriceScale*매수폭*20,amt); } If marketposition == 1 Then { if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*2 Then Buy("b2",AtLimit,value1-PriceScale*매수폭*2,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*3 Then Buy("b3",AtLimit,value1-PriceScale*매수폭*3,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*4 Then Buy("b4",AtLimit,value1-PriceScale*매수폭*4,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*5 Then Buy("b5",AtLimit,value1-PriceScale*매수폭*5,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*6 Then Buy("b6",AtLimit,value1-PriceScale*매수폭*6,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*7 Then Buy("b7",AtLimit,value1-PriceScale*매수폭*7,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*8 Then Buy("b8",AtLimit,value1-PriceScale*매수폭*8,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*9 Then Buy("b9",AtLimit,value1-PriceScale*매수폭*9,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*10 Then Buy("b10",AtLimit,value1-PriceScale*매수폭*10,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*11 Then Buy("b11",AtLimit,value1-PriceScale*매수폭*11,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*12 Then Buy("b12",AtLimit,value1-PriceScale*매수폭*12,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*13 Then Buy("b13",AtLimit,value1-PriceScale*매수폭*13,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*14 Then Buy("b14",AtLimit,value1-PriceScale*매수폭*14,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*15 Then Buy("b15",AtLimit,value1-PriceScale*매수폭*15,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*16 Then Buy("b16",AtLimit,value1-PriceScale*매수폭*16,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*17 Then Buy("b17",AtLimit,value1-PriceScale*매수폭*17,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*18 Then Buy("b18",AtLimit,value1-PriceScale*매수폭*18,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*19 Then Buy("b19",AtLimit,value1-PriceScale*매수폭*19,amt); if lowest(L,BarsSinceEntry) > value1-PriceScale*매수폭*20 Then Buy("b20",AtLimit,value1-PriceScale*매수폭*20,amt); #청산 if MACDv < 0 or 이평[0] < 이평[1] or C < 이평 Then ExitLong("BX"); if CurrentContracts >= 10 Then ExitLong("bp",AtLimit,AvgEntryPrice+PriceScale*10); } # 매도 If marketposition == 0 and C < 이평 and 이평 < 이평[1] and MACDV < 0 then { Value2 = C; Sell("S1.",AtLimit,value2+PriceScale*매수폭*1,amt); Sell("S2.",AtLimit,value2+PriceScale*매수폭*2,amt); Sell("S3.",AtLimit,value2+PriceScale*매수폭*3,amt); Sell("S4.",AtLimit,value2+PriceScale*매수폭*4,amt); Sell("S5.",AtLimit,value2+PriceScale*매수폭*5,amt); Sell("S6.",AtLimit,value2+PriceScale*매수폭*6,amt); Sell("S7.",AtLimit,value2+PriceScale*매수폭*7,amt); Sell("S8.",AtLimit,value2+PriceScale*매수폭*8,amt); Sell("S9.",AtLimit,value2+PriceScale*매수폭*9,amt); Sell("S10.",AtLimit,value2+PriceScale*매수폭*10,amt); Sell("S11.",AtLimit,value2+PriceScale*매수폭*11,amt); Sell("S12.",AtLimit,value2+PriceScale*매수폭*12,amt); Sell("S13.",AtLimit,value2+PriceScale*매수폭*13,amt); Sell("S14.",AtLimit,value2+PriceScale*매수폭*14,amt); Sell("S15.",AtLimit,value2+PriceScale*매수폭*15,amt); Sell("S16.",AtLimit,value2+PriceScale*매수폭*16,amt); Sell("S17.",AtLimit,value2+PriceScale*매수폭*17,amt); Sell("S18.",AtLimit,value2+PriceScale*매수폭*18,amt); Sell("S19.",AtLimit,value2+PriceScale*매수폭*19,amt); Sell("S20.",AtLimit,value2+PriceScale*매수폭*20,amt); } If marketposition == -1 Then { if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*2 Then Sell("S2",AtLimit,value2+PriceScale*매수폭*2,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*3 Then Sell("S3",AtLimit,value2+PriceScale*매수폭*3,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*4 Then Sell("S4",AtLimit,value2+PriceScale*매수폭*4,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*5 Then Sell("S5",AtLimit,value2+PriceScale*매수폭*5,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*6 Then Sell("S6",AtLimit,value2+PriceScale*매수폭*6,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*7 Then Sell("S7",AtLimit,value2+PriceScale*매수폭*7,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*8 Then Sell("S8",AtLimit,value2+PriceScale*매수폭*8,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*9 Then Sell("S9",AtLimit,value2+PriceScale*매수폭*9,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*10 Then Sell("S10",AtLimit,value2+PriceScale*매수폭*10,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*11 Then Sell("S11",AtLimit,value2+PriceScale*매수폭*11,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*12 Then Sell("S12",AtLimit,value2+PriceScale*매수폭*12,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*13 Then Sell("S13",AtLimit,value2+PriceScale*매수폭*13,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*14 Then Sell("S14",AtLimit,value2+PriceScale*매수폭*14,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*15 Then Sell("S15",AtLimit,value2+PriceScale*매수폭*15,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*16 Then Sell("S16",AtLimit,value2+PriceScale*매수폭*16,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*17 Then Sell("S17",AtLimit,value2+PriceScale*매수폭*17,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*18 Then Sell("S18",AtLimit,value2+PriceScale*매수폭*18,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*19 Then Sell("S19",AtLimit,value2+PriceScale*매수폭*19,amt); if highest(H,BarsSinceEntry) < value2+PriceScale*매수폭*20 Then Sell("S20",AtLimit,value2+PriceScale*매수폭*20,amt); if MACDv > 0 or 이평[0] > 이평[1] or C > 이평 Then ExitShort("SX"); if CurrentContracts >= 10 Then ExitShort("sp",AtLimit,AvgEntryPrice-PriceScale*10); } if MarketPosition != 0 and CurrentContracts < 10 Then { SetStopProfittarget(PriceScale*10,PointStop); } Else SetStopProfittarget(0); 즐거운 하루되세요 > 양치기 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 항상 도움 주셔서 감사합니다. 종목: 해외선물 차트 : 주봉차트 주봉차트에서 봉완성 기준이 아닌 가격조건 만족기준으로만 매매하려 합니다. 아래와 같이 코딩 했는데 위 조건처럼 매매가 되지 않습니다.[느림] 제가 놓치고 있는게 무엇인지 모르겠습니다. 도움 부탁드립니다. 매수 : 현재가가 주봉 10일 이동평균선 위에 있고 현재 이동평균선이 상승중이고 MACD가 0선 위면 매수 위 3가지 모두 만족하면 현재가에서 10틱 하락시 매수 매수물타기 : 포지션 진입이후 진입가격 대비 10틱이 하락하거나 이미 진입된 포지션의 평균진입가격 대비 10틱 하락할때 마다 1계약씩 추가매수(최대 진입횟수 20회) 매수 물타기 청산1 : 포지션 진입이후 계약수가 10개 이내일 경우에는 진입 건별로 10틱 이상 수익이 발생할때마다 1계약씩 청산 포지션 진입이후 계약수가 11개 이상일 경우에는 평균 진입가격보다 10틱 이상 수익발생할 경우 모든 계약 청산 매수청산 : 캔들(현재가가)이 10일 이동평균선 아래로 하락하거나 10일 이동평균선추세가 하락전환하거나 MACD가 0선 아래로 하락시 매수청산 매도 : 현재가가 주봉 10일 이동평균선 아래에 있고 현재 이동평균선이 하락중이고 MACD가 0선 아래면 매도 위 3가지 모두 만족하면 현재가에서 10틱 상승시 매도 매도물타기 : 포지션 진입이후 진입가격 대비 10틱이 상승하거나 이미 진입된 포지션의 평균진입가격 대비 10틱 상승할때 마다 1계약씩 추가매도(최대 진입횟수 20회) 매도 물타기 청산1 : 포지션 진입이후 계약수가 10개 이내일 경우에는 진입 건별로 10틱 이상 수익이 발생할때마다 1계약씩 청산 포지션 진입이후 계약수가 11개 이상일 경우에는 평균 진입가격보다 10틱 이상 수익발생할 경우 모든 계약 청산 매도청산 : 캔들(현재가가)이 10일 이동평균선 위로 상승하거나 10일 이동평균선추세가 상승전환하거나 MACD가 0선 위로 상승시 매도청산 위에 설명한대로 아래 시스템식 수정 부탁드립니다. #----------------------------------------------------------------------- # 매수 If marketposition == 0 and C > 이평 and 이평 > 이평[1] and MACDV > 0 then Buy("B",AtLimit,C-PriceScale*매수폭,amt); If marketposition == 1 and MACDv < 0 or 이평[0] < 이평[1] or C < 이평 Then ExitLong("BX",AtLimit,C,"",amt,1); # 매도 If marketposition == 0 and C < 이평 and 이평 < 이평[1] and MACDV < 0 then Sell("S",AtLimit,C+PriceScale*매도폭,amt); If marketposition == -1 and MACDv > 0 or 이평[0] > 이평[1] or C > 이평 Then ExitShort("SX",AtLimit,C,"",amt,1); 도움 부탁드립니다. 감사합니다.