커뮤니티

재문의

프로필 이미지
소주까기인형
2012-10-08 20:27:14
336
글번호 55426
답변완료

첨부 이미지

안녕하세요. 어제 질문에 수식을 짜주셧는데 그게 실행을 해보니 제가 생각했던것 하고 조금 다릅니다. 여기 관련글과 첨부파일을 올려 설명드립니다. 질문내용-------------------------- 당일 청산 시스템입니다(오후3시3분) 조건1, ma(c,5)와ma(c,20) 골드크로스 조건2, MACD(shortPeriod, longPeriod)가 골드크로스 조건3, ma(c,5)-ma(c,20)>= 0.1 //0.1는 변수처리 조건4, ma(c,5)와ma(c,20) 데드크로스 조건5, MACD(shortPeriod, longPeriod)가 데드크로스 조건6, ma(c,5)-ma(c,20)>= -0.1 //-0.1는 변수처리 조건7, 하루손실 2포인트(100만원) 이내 (2포인트 이상 손실시 신규진입중지) //포인트는 변수처리 조건8, 당일매매횟수 5회이내 //횟수 변수처리 매수진입조건 ; 조건1,조건2,조건3,조건7,조건8 모두(and) 만족시 진입 청산조건 ; 조건4,조건5, 만족시 청산 매도진입조건 ; 조건4,조건5,조건6,조건7,조건8 모두(and)만족시 매도진입 청산조건 ; 조건1,조건2 만족시 청산 * 당일 첫진입은 전일 마지막진입 조건에따라 i) 장시작가로 진입 하는경우와 ii) 첫봉완성후 진입하는 경우 두가지로 나눠서 수식을 좀 부탁드립니다. 답변내용--------------------------------------------------------- 안녕하세요 예스스탁입니다. 1. input : P1(5),P2(20),ShortPeriod(12),LongPeriod(26),N1(0.1),N2(-0.1),loss(-2),entry(5); var : PredayPL(0),XCommission(0),XSlippage(0),dayPL(0),count(0),cnt(0); #당일누적손익계산 시작 if date != date[1] Then PredayPL = NetProfit[1]; XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 if MarketPosition() == 0 Then dayPL = (NetProfit-PredayPL); Else dayPL = (NetProfit-PredayPL)+(PositionProfit-(XCommission+XSlippage)); count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count=count+1; } var1 = ma(c,P1); var2 = ma(C,P2); var3 = MACD(ShortPeriod,LongPeriod); Condition1 = crossup(var1,var2); Condition2 = crossup(var3,0); Condition3 = var1-var2 >= N1; Condition4 = CrossDown(var1,var2); Condition5 = CrossDown(var3,0); Condition6 = var1-var2 <= N2; Condition7 = dayPL > Loss; Condition8 = count < entry; if stime == 151500 and MarketPosition == 0 Then{ if MarketPosition(1) == 1 Then buy(); if MarketPosition(1) == -1 Then sell(); } if Condition1 and Condition2 and Condition3 and Condition7 and Condition8 Then buy(); if Condition4 or Condition5 Then ExitLong(); if Condition4 and Condition5 and Condition6 and Condition7 and Condition8 Then sell(); if Condition1 or Condition2 Then ExitShort(); 2. input : P1(5),P2(20),ShortPeriod(12),LongPeriod(26),N1(0.1),N2(-0.1),loss(-2),entry(5); var : PredayPL(0),XCommission(0),XSlippage(0),dayPL(0),count(0),cnt(0); #당일누적손익계산 시작 if date != date[1] Then PredayPL = NetProfit[1]; XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 if MarketPosition() == 0 Then dayPL = (NetProfit-PredayPL); Else dayPL = (NetProfit-PredayPL)+(PositionProfit-(XCommission+XSlippage)); count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count=count+1; } var1 = ma(c,P1); var2 = ma(C,P2); var3 = MACD(ShortPeriod,LongPeriod); Condition1 = crossup(var1,var2); Condition2 = crossup(var3,0); Condition3 = var1-var2 >= N1; Condition4 = CrossDown(var1,var2); Condition5 = CrossDown(var3,0); Condition6 = var1-var2 <= N2; Condition7 = dayPL > Loss; Condition8 = count < entry; if dayindex == 0 and MarketPosition == 0 Then{ if MarketPosition(1) == 1 Then buy(); if MarketPosition(1) == -1 Then sell(); } if Condition1 and Condition2 and Condition3 and Condition7 and Condition8 Then buy(); if Condition4 or Condition5 Then ExitLong(); if Condition4 and Condition5 and Condition6 and Condition7 and Condition8 Then sell(); if Condition1 or Condition2 Then ExitShort(); -------------------------------------------------------------------------------------- 여기서는 조건3과 조건6의 변수를 아주작게(ex 0.1 ------> 0)로해서 좀더 자주신호가 나오게했습니다. 다음은 첨부그림파일에서 설명을 드리겠습니다.(두수식중 일단 두번째 수식을 참고했습니다)
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-10-09 13:47:26

안녕하세요 예스스탁입니다. 지정하신 조건은 모두 한봉에 조건이 충족이 되어야 합니다. 즉 각 크로스가 발생하는 시점이 동일봉이어야 신호가 발생합니다. 그림에 표시한 부분은 이평 크로스가 발생하고 이후에 MACD크로스하므로 동일봉이 아니므로 신호가 발생하지 않는 것입니다. 아래는 수정한 식입니다. 이평 크로스가 발생한 상태에서 MACD 크로스가 발생하거나 MACD크로스가 발생한 상태에서 이평 크로스가 발생할때도 신호가 발생하게 했습니다. 1. input : P1(5),P2(20),ShortPeriod(12),LongPeriod(26),N1(0),N2(0),loss(-2),entry(5); var : PredayPL(0),XCommission(0),XSlippage(0),dayPL(0),count(0),cnt(0); #당일누적손익계산 시작 if date != date[1] Then PredayPL = NetProfit[1]; XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 if MarketPosition() == 0 Then dayPL = (NetProfit-PredayPL); Else dayPL = (NetProfit-PredayPL)+(PositionProfit-(XCommission+XSlippage)); count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count=count+1; } var1 = ma(c,P1); var2 = ma(C,P2); var3 = MACD(ShortPeriod,LongPeriod); Condition1 = crossup(var1,var2) and var3 > 0; Condition2 = crossup(var3,0) and var1 > var2; Condition3 = var1-var2 >= N1; Condition4 = CrossDown(var1,var2) and var3 < 0; Condition5 = CrossDown(var3,0) and var1 < var2; Condition6 = var1-var2 <= N2; Condition7 = dayPL > Loss; Condition8 = count < entry; if stime == 151500 and MarketPosition == 0 Then{ if MarketPosition(1) == 1 Then buy("b",AtMarket); if MarketPosition(1) == -1 Then sell("s",AtMarket); } if (Condition1 or Condition2) and Condition3 and Condition7 and Condition8 Then buy(); if Condition4 or Condition5 Then ExitLong(); if (Condition4 or Condition5) and Condition6 and Condition7 and Condition8 Then sell(); if Condition1 or Condition2 Then ExitShort(); 2. input : P1(5),P2(20),ShortPeriod(12),LongPeriod(26),N1(0),N2(0),loss(-2),entry(5); var : PredayPL(0),XCommission(0),XSlippage(0),dayPL(0),count(0),cnt(0); #당일누적손익계산 시작 if date != date[1] Then PredayPL = NetProfit[1]; XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 if MarketPosition() == 0 Then dayPL = (NetProfit-PredayPL); Else dayPL = (NetProfit-PredayPL)+(PositionProfit-(XCommission+XSlippage)); count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count=count+1; } var1 = ma(c,P1); var2 = ma(C,P2); var3 = MACD(ShortPeriod,LongPeriod); Condition1 = crossup(var1,var2) and var3 > 0; Condition2 = crossup(var3,0) and var1 > var2; Condition3 = var1-var2 >= N1; Condition4 = CrossDown(var1,var2) and var3 < 0; Condition5 = CrossDown(var3,0) and var1 < var2; Condition6 = var1-var2 <= N2; Condition7 = dayPL > Loss; Condition8 = count < entry; if dayindex == 0 and MarketPosition == 0 Then{ if MarketPosition(1) == 1 Then buy(); if MarketPosition(1) == -1 Then sell(); } if (Condition1 or condition2) and Condition3 and Condition7 and Condition8 Then buy(); if Condition4 or Condition5 Then ExitLong(); if (Condition4 or Condition5) and Condition6 and Condition7 and Condition8 Then sell(); if Condition1 or Condition2 Then ExitShort(); 즐거운 하루되세요 > 소주까기인형 님이 쓴 글입니다. > 제목 : 재문의 > 안녕하세요. 어제 질문에 수식을 짜주셧는데 그게 실행을 해보니 제가 생각했던것 하고 조금 다릅니다. 여기 관련글과 첨부파일을 올려 설명드립니다. 질문내용-------------------------- 당일 청산 시스템입니다(오후3시3분) 조건1, ma(c,5)와ma(c,20) 골드크로스 조건2, MACD(shortPeriod, longPeriod)가 골드크로스 조건3, ma(c,5)-ma(c,20)>= 0.1 //0.1는 변수처리 조건4, ma(c,5)와ma(c,20) 데드크로스 조건5, MACD(shortPeriod, longPeriod)가 데드크로스 조건6, ma(c,5)-ma(c,20)>= -0.1 //-0.1는 변수처리 조건7, 하루손실 2포인트(100만원) 이내 (2포인트 이상 손실시 신규진입중지) //포인트는 변수처리 조건8, 당일매매횟수 5회이내 //횟수 변수처리 매수진입조건 ; 조건1,조건2,조건3,조건7,조건8 모두(and) 만족시 진입 청산조건 ; 조건4,조건5, 만족시 청산 매도진입조건 ; 조건4,조건5,조건6,조건7,조건8 모두(and)만족시 매도진입 청산조건 ; 조건1,조건2 만족시 청산 * 당일 첫진입은 전일 마지막진입 조건에따라 i) 장시작가로 진입 하는경우와 ii) 첫봉완성후 진입하는 경우 두가지로 나눠서 수식을 좀 부탁드립니다. 답변내용--------------------------------------------------------- 안녕하세요 예스스탁입니다. 1. input : P1(5),P2(20),ShortPeriod(12),LongPeriod(26),N1(0.1),N2(-0.1),loss(-2),entry(5); var : PredayPL(0),XCommission(0),XSlippage(0),dayPL(0),count(0),cnt(0); #당일누적손익계산 시작 if date != date[1] Then PredayPL = NetProfit[1]; XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 if MarketPosition() == 0 Then dayPL = (NetProfit-PredayPL); Else dayPL = (NetProfit-PredayPL)+(PositionProfit-(XCommission+XSlippage)); count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count=count+1; } var1 = ma(c,P1); var2 = ma(C,P2); var3 = MACD(ShortPeriod,LongPeriod); Condition1 = crossup(var1,var2); Condition2 = crossup(var3,0); Condition3 = var1-var2 >= N1; Condition4 = CrossDown(var1,var2); Condition5 = CrossDown(var3,0); Condition6 = var1-var2 <= N2; Condition7 = dayPL > Loss; Condition8 = count < entry; if stime == 151500 and MarketPosition == 0 Then{ if MarketPosition(1) == 1 Then buy(); if MarketPosition(1) == -1 Then sell(); } if Condition1 and Condition2 and Condition3 and Condition7 and Condition8 Then buy(); if Condition4 or Condition5 Then ExitLong(); if Condition4 and Condition5 and Condition6 and Condition7 and Condition8 Then sell(); if Condition1 or Condition2 Then ExitShort(); 2. input : P1(5),P2(20),ShortPeriod(12),LongPeriod(26),N1(0.1),N2(-0.1),loss(-2),entry(5); var : PredayPL(0),XCommission(0),XSlippage(0),dayPL(0),count(0),cnt(0); #당일누적손익계산 시작 if date != date[1] Then PredayPL = NetProfit[1]; XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정 XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정 if MarketPosition() == 0 Then dayPL = (NetProfit-PredayPL); Else dayPL = (NetProfit-PredayPL)+(PositionProfit-(XCommission+XSlippage)); count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count=count+1; } var1 = ma(c,P1); var2 = ma(C,P2); var3 = MACD(ShortPeriod,LongPeriod); Condition1 = crossup(var1,var2); Condition2 = crossup(var3,0); Condition3 = var1-var2 >= N1; Condition4 = CrossDown(var1,var2); Condition5 = CrossDown(var3,0); Condition6 = var1-var2 <= N2; Condition7 = dayPL > Loss; Condition8 = count < entry; if dayindex == 0 and MarketPosition == 0 Then{ if MarketPosition(1) == 1 Then buy(); if MarketPosition(1) == -1 Then sell(); } if Condition1 and Condition2 and Condition3 and Condition7 and Condition8 Then buy(); if Condition4 or Condition5 Then ExitLong(); if Condition4 and Condition5 and Condition6 and Condition7 and Condition8 Then sell(); if Condition1 or Condition2 Then ExitShort(); -------------------------------------------------------------------------------------- 여기서는 조건3과 조건6의 변수를 아주작게(ex 0.1 ------> 0)로해서 좀더 자주신호가 나오게했습니다. 다음은 첨부그림파일에서 설명을 드리겠습니다.(두수식중 일단 두번째 수식을 참고했습니다)