커뮤니티

문의드립니다.

프로필 이미지
엠제이
2012-04-18 15:49:09
553
글번호 50216
답변완료
수식지왕님의 인공지능 수식인데 여기에 아래와 같은 청산로직을 추가하고 싶습니다. 현물로만 매매할 예정입니다. [추가하고 싶은 청산로직] ================================================================================== if CodeCategory == 1 Then{ if BasePrice < 50000 Then 매도수량 = int(int(MaxContracts*0.4)/10)*10; Else 매도수량 = int(MaxContracts*0.4); } if CodeCategory == 2 Then 매도수량 = int(MaxContracts*0.4); if CurrentContracts == MaxContracts Then exitlong("청산5",atlimit,EntryPrice*1.05,"",매도수량,1); if CurrentContracts < MaxContracts and highest(H,BarsSinceEntry) >= EntryPrice*1.05 Then{ exitlong("청산3",AtStop,EntryPrice*1.03); exitlong("청산10",atlimit,EntryPrice*1.1, "", 매도수량, 1); } if CurrentContracts == MaxContracts and highest(H,BarsSinceEntry) >= EntryPrice*1.03 Then{ exitlong("청산0",AtStop,EntryPrice*1); } [수식지왕님의 인공지능 시스템식에 위의 청산로직을 추가하고 싶습니다.] ================================================================================== #==========================================# # 시스템명 : Golden_Dead Cross (자동최적화) # 이동평균 + 지수이동평균 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:수수료(0.02),거래세(0.3),슬리피지(0.0); //현물에 맞춤 Var:shortPeriod(0), longPeriod(0), indicators(0), j(0),n(0),최적변수(0), 매수(10),매도(-10),매수비용(0),매도비용(0),평가일(False); Array:shortMa[1001](0),longMa[1001](0), 누적수익[1001](0),모의횟수[1001](0),모의진입[1001](0),모의수익률[1001](0), 모의방향[1001](0),모의이익[1001](0),모의승수[1001](0),확정손실폭[1001](0), 모의승률[1001](0),보상비율[1001](0),잠재손실[1001](0),최대손실폭[1001](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# 매수비용 = 1 + 수수료/100; 매도비용 = 1 - (수수료+거래세)/100; If (BarInterval==1 && Int(Date/100)[1] < Int(Date/100) //매월마다 최적 변수 search //&& (Int(Date/100)-Int(Date/10000)*100)%3 == 0 //또는 분기 1회 ) || (BarInterval > 1 && //분봉일 때는 Date[1] < Date && DayOfWeek(Date[1]) >= DayOfWeek(Date)) //매주마다 Then 평가일 = True; Else 평가일 = False; #=========================================================# # 메인처리 (Main Routine) #=========================================================# For n = 1 To 1000 { indicators = Int((n-1)/(25*20))%2; //이평구분(0~1) shortPeriod = Int((n-1)/25)%20+10; //10~29 longPeriod = (n-1)%25*2+20; //20~69 If shortPeriod < longPeriod Then //장기 기간이 단기 기간보다 더 클때만 진행 { #이동평균 계산 If indicators == 0 Then { shortMa[n] = Ma(C, shortPeriod); longMa[n] = Ma(C, longPeriod); } #지수이동평균 계산 If indicators == 1 Then { If Index == 1 Then { shortMa[n] = C; //shortMa[n] = Ema(C, shortPeriod); longMa[n] = C; //longMa[n] = Ema(C, longPeriod); } //값이 틀리게 나오므로 Else //지수이평도 아래와 같이 풀어서 써야 한다. { shortMa[n] = C * (2/(shortPeriod+1)) + shortMa[n][1] * (1-(2/(shortPeriod+1))); longMa[n] = C * (2/(longPeriod+1)) + longMa[n][1] * (1-(2/(longPeriod+1))); } } //if n==1834 /*and date == 19920727*/ Then //print("검증1.csv",",%.2f,%.2f,%.2f,%.2f",sP,lP,shortMa[n],longMa[n]); //MessageLog("검증1,%.2f,%.2f,%.2f,%.2f",shortMa[n][1],longMa[n][1],shortMa[n],longMa[n]); #=========================================================# # 시뮬레이션 평가 #=========================================================# If 모의방향[n] == 매수 Then { 모의이익[n] = (C*매도비용 - 모의진입[n]*매수비용) - (슬리피지*2); 잠재손실[n] = Min(잠재손실[n],(L*매도비용 - 모의진입[n]*매수비용) - (슬리피지*2)); } Else If 모의방향[n] == 매도 Then { 모의이익[n] = (모의진입[n]*매도비용 - C*매수비용) - (슬리피지*2); 잠재손실[n] = Min(잠재손실[n],(모의진입[n]*매도비용 - H*매수비용) - (슬리피지*2)); } Else { 모의이익[n] = 0; 잠재손실[n] = 0; } 최대손실폭[n] = Min(최대손실폭[n],확정손실폭[n]+잠재손실[n]); # 매수/매도청산 # If CrossUP(shortMa[n], longMa[n]) Then //For문 안에서 계산상 오류가 생기므로 If shortMa[n][1] <= longMa[n][1] && //풀어서 사용 shortMa[n] > longMa[n] Then { If 모의방향[n][1] == 매도 Then { 누적수익[n] = 누적수익[n] + 모의이익[n]; If 모의이익[n] > 0 Then 모의승수[n] = 모의승수[n] + 1; 모의수익률[n] = 모의이익[n]*100/모의진입[n]; 모의횟수[n] = 모의횟수[n] + 1; 모의승률[n] = 모의승수[n]*100/모의횟수[n]; 보상비율[n] = 누적수익[n]/Abs(최대손실폭[n]); 모의방향[n] = 0; 확정손실폭[n] = Min(확정손실폭[n]+모의이익[n],0); 잠재손실[n] = 0; //if n == 1834 then print("거래내역.csv",",매도청산1,%.2f,%.2f,%.2f,%.2f",C,모의이익[n],누적수익[n],모의수익률[n]); } If 모의방향[n] == 0 && Iff(BarInterval==1,1,Iff(Time<142000,1,0))==1 //분봉이 아니면 무조건 적용 Then { 모의방향[n] = 매수; 모의진입[n] = C; //if n == 1834 then print("거래내역.csv",",매수,%.2f",모의진입[n]); } } # 매도/매수청산 # If CrossDown(shortMa[n], longMa[n]) Then If shortMa[n][1] >= longMa[n][1] && shortMa[n] < longMa[n] Then { If 모의방향[n][1] == 매수 Then { 누적수익[n] = 누적수익[n] + 모의이익[n]; If 모의이익[n] > 0 Then 모의승수[n] = 모의승수[n] + 1; 모의수익률[n] = 모의이익[n]*100/모의진입[n]; 모의횟수[n] = 모의횟수[n] + 1; 모의승률[n] = 모의승수[n]*100/모의횟수[n]; 보상비율[n] = 누적수익[n]/Abs(최대손실폭[n]); 모의방향[n] = 0; 확정손실폭[n] = Min(확정손실폭[n]+모의이익[n],0); 잠재손실[n] = 0; //if n == 1834 then print("거래내역.csv",",매수청산1,%.2f,%.2f,%.2f,%.2f",C,모의이익[n],누적수익[n],모의수익률[n]); } If CodeCategory() > 2 && //파생상품 모의방향[n] == 0 && Iff(BarInterval==1,1,Iff(Time<142000,1,0))==1 Then { 모의방향[n] = 매도; 모의진입[n] = C; //if n == 1834 then print("거래내역.csv",",매도,%.2f",모의진입[n]); } } If 평가일 == True Then { If 보상비율[최적변수] < 보상비율[n] && //이부분은 개발자 맘대로 설정 // If 누적수익[최적변수] < 누적수익[n] && //보상비율 대신 누적수익으로 대체 모의승률[n] > 40 Then 최적변수 = n; } } } #==========================================# # 시뮬레이션 결과 검증용 #==========================================# /*If LastBarOnChart == 1 Then { For j = 1 to 1000 { var1 = Int((j-1)/(25*20))%2; //이평구분(0~1) var2 = Int((j-1)/25)%20+10; //10~29 var3 = (j-1)%25*2+20; //20~68 Print("시뮬보고서.csv",",%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,var1,var2,var3, 누적수익[j],모의횟수[j],모의승수[j],모의승률[j],최대손실폭[j],보상비율[j]); } }*/ #==========================================# # 시스템식 #==========================================# If 최적변수 > 0 Then { #현재 적용되고 있는 변수 값을 알고 싶을 때 아래 주석을 풀고 디버깅한다. if 최적변수[1] != 최적변수 Then { var1 = Int((j-1)/(25*20))%2; var2 = Int((최적변수-1)/25)%20+10; var3 = (최적변수-1)%25*2+20; // MessageLog(",%.2f,%.2f,%.2f,%.2f",최적변수,var1,var2,var3); Print("최적변수.csv",",%.2f,%.2f,%.2f,%.2f",최적변수,var1,var2,var3); } value1 = shortMa[최적변수]; //이미 위에서 계산해 놓은 값을 이용 value2 = longMa[최적변수]; # 매수/매도청산 If CrossUP(value1, value2) Then { ExitShort(); If 누적수익[최적변수] > 0 Then Buy(); } # 매도/매수청산 If CrossDown(value1, value2) Then { ExitLong(); If 누적수익[최적변수] > 0 Then Sell(); } }
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2012-04-18 18:54:42

안녕하세요 예스스탁입니다. Input:수수료(0.02),거래세(0.3),슬리피지(0.0); //현물에 맞춤 Var:shortPeriod(0), longPeriod(0), indicators(0), j(0),n(0),최적변수(0), 매수(10),매도(-10),매수비용(0),매도비용(0),평가일(False); Array:shortMa[1001](0),longMa[1001](0), 누적수익[1001](0),모의횟수[1001](0),모의진입[1001](0),모의수익률[1001](0), 모의방향[1001](0),모의이익[1001](0),모의승수[1001](0),확정손실폭[1001](0), 모의승률[1001](0),보상비율[1001](0),잠재손실[1001](0),최대손실폭[1001](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# 매수비용 = 1 + 수수료/100; 매도비용 = 1 - (수수료+거래세)/100; If (BarInterval==1 && Int(Date/100)[1] < Int(Date/100) //매월마다 최적 변수 search //&& (Int(Date/100)-Int(Date/10000)*100)%3 == 0 //또는 분기 1회 ) || (BarInterval > 1 && //분봉일 때는 Date[1] < Date && DayOfWeek(Date[1]) >= DayOfWeek(Date)) //매주마다 Then 평가일 = True; Else 평가일 = False; #=========================================================# # 메인처리 (Main Routine) #=========================================================# For n = 1 To 1000 { indicators = Int((n-1)/(25*20))%2; //이평구분(0~1) shortPeriod = Int((n-1)/25)%20+10; //10~29 longPeriod = (n-1)%25*2+20; //20~69 If shortPeriod < longPeriod Then //장기 기간이 단기 기간보다 더 클때만 진행 { #이동평균 계산 If indicators == 0 Then { shortMa[n] = Ma(C, shortPeriod); longMa[n] = Ma(C, longPeriod); } #지수이동평균 계산 If indicators == 1 Then { If Index == 1 Then { shortMa[n] = C; //shortMa[n] = Ema(C, shortPeriod); longMa[n] = C; //longMa[n] = Ema(C, longPeriod); } //값이 틀리게 나오므로 Else //지수이평도 아래와 같이 풀어서 써야 한다. { shortMa[n] = C * (2/(shortPeriod+1)) + shortMa[n][1] * (1-(2/(shortPeriod+1))); longMa[n] = C * (2/(longPeriod+1)) + longMa[n][1] * (1-(2/(longPeriod+1))); } } //if n==1834 /*and date == 19920727*/ Then //print("검증1.csv",",%.2f,%.2f,%.2f,%.2f",sP,lP,shortMa[n],longMa[n]); //MessageLog("검증1,%.2f,%.2f,%.2f,%.2f",shortMa[n][1],longMa[n][1],shortMa[n],longMa[n]); #=========================================================# # 시뮬레이션 평가 #=========================================================# If 모의방향[n] == 매수 Then { 모의이익[n] = (C*매도비용 - 모의진입[n]*매수비용) - (슬리피지*2); 잠재손실[n] = Min(잠재손실[n],(L*매도비용 - 모의진입[n]*매수비용) - (슬리피지*2)); } Else If 모의방향[n] == 매도 Then { 모의이익[n] = (모의진입[n]*매도비용 - C*매수비용) - (슬리피지*2); 잠재손실[n] = Min(잠재손실[n],(모의진입[n]*매도비용 - H*매수비용) - (슬리피지*2)); } Else { 모의이익[n] = 0; 잠재손실[n] = 0; } 최대손실폭[n] = Min(최대손실폭[n],확정손실폭[n]+잠재손실[n]); # 매수/매도청산 # If CrossUP(shortMa[n], longMa[n]) Then //For문 안에서 계산상 오류가 생기므로 If shortMa[n][1] <= longMa[n][1] && //풀어서 사용 shortMa[n] > longMa[n] Then { If 모의방향[n][1] == 매도 Then { 누적수익[n] = 누적수익[n] + 모의이익[n]; If 모의이익[n] > 0 Then 모의승수[n] = 모의승수[n] + 1; 모의수익률[n] = 모의이익[n]*100/모의진입[n]; 모의횟수[n] = 모의횟수[n] + 1; 모의승률[n] = 모의승수[n]*100/모의횟수[n]; 보상비율[n] = 누적수익[n]/Abs(최대손실폭[n]); 모의방향[n] = 0; 확정손실폭[n] = Min(확정손실폭[n]+모의이익[n],0); 잠재손실[n] = 0; //if n == 1834 then print("거래내역.csv",",매도청산1,%.2f,%.2f,%.2f,%.2f",C,모의이익[n],누적수익[n],모의수익률[n]); } If 모의방향[n] == 0 && Iff(BarInterval==1,1,Iff(Time<142000,1,0))==1 //분봉이 아니면 무조건 적용 Then { 모의방향[n] = 매수; 모의진입[n] = C; //if n == 1834 then print("거래내역.csv",",매수,%.2f",모의진입[n]); } } # 매도/매수청산 # If CrossDown(shortMa[n], longMa[n]) Then If shortMa[n][1] >= longMa[n][1] && shortMa[n] < longMa[n] Then { If 모의방향[n][1] == 매수 Then { 누적수익[n] = 누적수익[n] + 모의이익[n]; If 모의이익[n] > 0 Then 모의승수[n] = 모의승수[n] + 1; 모의수익률[n] = 모의이익[n]*100/모의진입[n]; 모의횟수[n] = 모의횟수[n] + 1; 모의승률[n] = 모의승수[n]*100/모의횟수[n]; 보상비율[n] = 누적수익[n]/Abs(최대손실폭[n]); 모의방향[n] = 0; 확정손실폭[n] = Min(확정손실폭[n]+모의이익[n],0); 잠재손실[n] = 0; //if n == 1834 then print("거래내역.csv",",매수청산1,%.2f,%.2f,%.2f,%.2f",C,모의이익[n],누적수익[n],모의수익률[n]); } If CodeCategory() > 2 && //파생상품 모의방향[n] == 0 && Iff(BarInterval==1,1,Iff(Time<142000,1,0))==1 Then { 모의방향[n] = 매도; 모의진입[n] = C; //if n == 1834 then print("거래내역.csv",",매도,%.2f",모의진입[n]); } } If 평가일 == True Then { If 보상비율[최적변수] < 보상비율[n] && //이부분은 개발자 맘대로 설정 // If 누적수익[최적변수] < 누적수익[n] && //보상비율 대신 누적수익으로 대체 모의승률[n] > 40 Then 최적변수 = n; } } } #==========================================# # 시뮬레이션 결과 검증용 #==========================================# /*If LastBarOnChart == 1 Then { For j = 1 to 1000 { var1 = Int((j-1)/(25*20))%2; //이평구분(0~1) var2 = Int((j-1)/25)%20+10; //10~29 var3 = (j-1)%25*2+20; //20~68 Print("시뮬보고서.csv",",%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,var1,var2,var3, 누적수익[j],모의횟수[j],모의승수[j],모의승률[j],최대손실폭[j],보상비율[j]); } }*/ #==========================================# # 시스템식 #==========================================# If 최적변수 > 0 Then { #현재 적용되고 있는 변수 값을 알고 싶을 때 아래 주석을 풀고 디버깅한다. if 최적변수[1] != 최적변수 Then { var1 = Int((j-1)/(25*20))%2; var2 = Int((최적변수-1)/25)%20+10; var3 = (최적변수-1)%25*2+20; // MessageLog(",%.2f,%.2f,%.2f,%.2f",최적변수,var1,var2,var3); Print("최적변수.csv",",%.2f,%.2f,%.2f,%.2f",최적변수,var1,var2,var3); } value1 = shortMa[최적변수]; //이미 위에서 계산해 놓은 값을 이용 value2 = longMa[최적변수]; # 매수/매도청산 If CrossUP(value1, value2) Then { ExitShort(); If 누적수익[최적변수] > 0 Then Buy(); } # 매도/매수청산 If CrossDown(value1, value2) Then { ExitLong(); If 누적수익[최적변수] > 0 Then Sell(); } } var : 매도수량(0); if CodeCategory == 1 Then{ if BasePrice < 50000 Then 매도수량 = int(int(MaxContracts*0.4)/10)*10; Else 매도수량 = int(MaxContracts*0.4); } if CodeCategory == 2 Then 매도수량 = int(MaxContracts*0.4); if CurrentContracts == MaxContracts Then exitlong("청산5",atlimit,EntryPrice*1.05,"",매도수량,1); if CurrentContracts < MaxContracts and highest(H,BarsSinceEntry) >= EntryPrice*1.05 Then{ exitlong("청산3",AtStop,EntryPrice*1.03); exitlong("청산10",atlimit,EntryPrice*1.1, "", 매도수량, 1); } if CurrentContracts == MaxContracts and highest(H,BarsSinceEntry) >= EntryPrice*1.03 Then{ exitlong("청산0",AtStop,EntryPrice*1); } 즐거운 하루되세요 > 엠제이 님이 쓴 글입니다. > 제목 : 문의드립니다. > 수식지왕님의 인공지능 수식인데 여기에 아래와 같은 청산로직을 추가하고 싶습니다. 현물로만 매매할 예정입니다. [추가하고 싶은 청산로직] ================================================================================== if CodeCategory == 1 Then{ if BasePrice < 50000 Then 매도수량 = int(int(MaxContracts*0.4)/10)*10; Else 매도수량 = int(MaxContracts*0.4); } if CodeCategory == 2 Then 매도수량 = int(MaxContracts*0.4); if CurrentContracts == MaxContracts Then exitlong("청산5",atlimit,EntryPrice*1.05,"",매도수량,1); if CurrentContracts < MaxContracts and highest(H,BarsSinceEntry) >= EntryPrice*1.05 Then{ exitlong("청산3",AtStop,EntryPrice*1.03); exitlong("청산10",atlimit,EntryPrice*1.1, "", 매도수량, 1); } if CurrentContracts == MaxContracts and highest(H,BarsSinceEntry) >= EntryPrice*1.03 Then{ exitlong("청산0",AtStop,EntryPrice*1); } [수식지왕님의 인공지능 시스템식에 위의 청산로직을 추가하고 싶습니다.] ================================================================================== #==========================================# # 시스템명 : Golden_Dead Cross (자동최적화) # 이동평균 + 지수이동평균 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:수수료(0.02),거래세(0.3),슬리피지(0.0); //현물에 맞춤 Var:shortPeriod(0), longPeriod(0), indicators(0), j(0),n(0),최적변수(0), 매수(10),매도(-10),매수비용(0),매도비용(0),평가일(False); Array:shortMa[1001](0),longMa[1001](0), 누적수익[1001](0),모의횟수[1001](0),모의진입[1001](0),모의수익률[1001](0), 모의방향[1001](0),모의이익[1001](0),모의승수[1001](0),확정손실폭[1001](0), 모의승률[1001](0),보상비율[1001](0),잠재손실[1001](0),최대손실폭[1001](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# 매수비용 = 1 + 수수료/100; 매도비용 = 1 - (수수료+거래세)/100; If (BarInterval==1 && Int(Date/100)[1] < Int(Date/100) //매월마다 최적 변수 search //&& (Int(Date/100)-Int(Date/10000)*100)%3 == 0 //또는 분기 1회 ) || (BarInterval > 1 && //분봉일 때는 Date[1] < Date && DayOfWeek(Date[1]) >= DayOfWeek(Date)) //매주마다 Then 평가일 = True; Else 평가일 = False; #=========================================================# # 메인처리 (Main Routine) #=========================================================# For n = 1 To 1000 { indicators = Int((n-1)/(25*20))%2; //이평구분(0~1) shortPeriod = Int((n-1)/25)%20+10; //10~29 longPeriod = (n-1)%25*2+20; //20~69 If shortPeriod < longPeriod Then //장기 기간이 단기 기간보다 더 클때만 진행 { #이동평균 계산 If indicators == 0 Then { shortMa[n] = Ma(C, shortPeriod); longMa[n] = Ma(C, longPeriod); } #지수이동평균 계산 If indicators == 1 Then { If Index == 1 Then { shortMa[n] = C; //shortMa[n] = Ema(C, shortPeriod); longMa[n] = C; //longMa[n] = Ema(C, longPeriod); } //값이 틀리게 나오므로 Else //지수이평도 아래와 같이 풀어서 써야 한다. { shortMa[n] = C * (2/(shortPeriod+1)) + shortMa[n][1] * (1-(2/(shortPeriod+1))); longMa[n] = C * (2/(longPeriod+1)) + longMa[n][1] * (1-(2/(longPeriod+1))); } } //if n==1834 /*and date == 19920727*/ Then //print("검증1.csv",",%.2f,%.2f,%.2f,%.2f",sP,lP,shortMa[n],longMa[n]); //MessageLog("검증1,%.2f,%.2f,%.2f,%.2f",shortMa[n][1],longMa[n][1],shortMa[n],longMa[n]); #=========================================================# # 시뮬레이션 평가 #=========================================================# If 모의방향[n] == 매수 Then { 모의이익[n] = (C*매도비용 - 모의진입[n]*매수비용) - (슬리피지*2); 잠재손실[n] = Min(잠재손실[n],(L*매도비용 - 모의진입[n]*매수비용) - (슬리피지*2)); } Else If 모의방향[n] == 매도 Then { 모의이익[n] = (모의진입[n]*매도비용 - C*매수비용) - (슬리피지*2); 잠재손실[n] = Min(잠재손실[n],(모의진입[n]*매도비용 - H*매수비용) - (슬리피지*2)); } Else { 모의이익[n] = 0; 잠재손실[n] = 0; } 최대손실폭[n] = Min(최대손실폭[n],확정손실폭[n]+잠재손실[n]); # 매수/매도청산 # If CrossUP(shortMa[n], longMa[n]) Then //For문 안에서 계산상 오류가 생기므로 If shortMa[n][1] <= longMa[n][1] && //풀어서 사용 shortMa[n] > longMa[n] Then { If 모의방향[n][1] == 매도 Then { 누적수익[n] = 누적수익[n] + 모의이익[n]; If 모의이익[n] > 0 Then 모의승수[n] = 모의승수[n] + 1; 모의수익률[n] = 모의이익[n]*100/모의진입[n]; 모의횟수[n] = 모의횟수[n] + 1; 모의승률[n] = 모의승수[n]*100/모의횟수[n]; 보상비율[n] = 누적수익[n]/Abs(최대손실폭[n]); 모의방향[n] = 0; 확정손실폭[n] = Min(확정손실폭[n]+모의이익[n],0); 잠재손실[n] = 0; //if n == 1834 then print("거래내역.csv",",매도청산1,%.2f,%.2f,%.2f,%.2f",C,모의이익[n],누적수익[n],모의수익률[n]); } If 모의방향[n] == 0 && Iff(BarInterval==1,1,Iff(Time<142000,1,0))==1 //분봉이 아니면 무조건 적용 Then { 모의방향[n] = 매수; 모의진입[n] = C; //if n == 1834 then print("거래내역.csv",",매수,%.2f",모의진입[n]); } } # 매도/매수청산 # If CrossDown(shortMa[n], longMa[n]) Then If shortMa[n][1] >= longMa[n][1] && shortMa[n] < longMa[n] Then { If 모의방향[n][1] == 매수 Then { 누적수익[n] = 누적수익[n] + 모의이익[n]; If 모의이익[n] > 0 Then 모의승수[n] = 모의승수[n] + 1; 모의수익률[n] = 모의이익[n]*100/모의진입[n]; 모의횟수[n] = 모의횟수[n] + 1; 모의승률[n] = 모의승수[n]*100/모의횟수[n]; 보상비율[n] = 누적수익[n]/Abs(최대손실폭[n]); 모의방향[n] = 0; 확정손실폭[n] = Min(확정손실폭[n]+모의이익[n],0); 잠재손실[n] = 0; //if n == 1834 then print("거래내역.csv",",매수청산1,%.2f,%.2f,%.2f,%.2f",C,모의이익[n],누적수익[n],모의수익률[n]); } If CodeCategory() > 2 && //파생상품 모의방향[n] == 0 && Iff(BarInterval==1,1,Iff(Time<142000,1,0))==1 Then { 모의방향[n] = 매도; 모의진입[n] = C; //if n == 1834 then print("거래내역.csv",",매도,%.2f",모의진입[n]); } } If 평가일 == True Then { If 보상비율[최적변수] < 보상비율[n] && //이부분은 개발자 맘대로 설정 // If 누적수익[최적변수] < 누적수익[n] && //보상비율 대신 누적수익으로 대체 모의승률[n] > 40 Then 최적변수 = n; } } } #==========================================# # 시뮬레이션 결과 검증용 #==========================================# /*If LastBarOnChart == 1 Then { For j = 1 to 1000 { var1 = Int((j-1)/(25*20))%2; //이평구분(0~1) var2 = Int((j-1)/25)%20+10; //10~29 var3 = (j-1)%25*2+20; //20~68 Print("시뮬보고서.csv",",%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,var1,var2,var3, 누적수익[j],모의횟수[j],모의승수[j],모의승률[j],최대손실폭[j],보상비율[j]); } }*/ #==========================================# # 시스템식 #==========================================# If 최적변수 > 0 Then { #현재 적용되고 있는 변수 값을 알고 싶을 때 아래 주석을 풀고 디버깅한다. if 최적변수[1] != 최적변수 Then { var1 = Int((j-1)/(25*20))%2; var2 = Int((최적변수-1)/25)%20+10; var3 = (최적변수-1)%25*2+20; // MessageLog(",%.2f,%.2f,%.2f,%.2f",최적변수,var1,var2,var3); Print("최적변수.csv",",%.2f,%.2f,%.2f,%.2f",최적변수,var1,var2,var3); } value1 = shortMa[최적변수]; //이미 위에서 계산해 놓은 값을 이용 value2 = longMa[최적변수]; # 매수/매도청산 If CrossUP(value1, value2) Then { ExitShort(); If 누적수익[최적변수] > 0 Then Buy(); } # 매도/매수청산 If CrossDown(value1, value2) Then { ExitLong(); If 누적수익[최적변수] > 0 Then Sell(); } }
프로필 이미지

엠제이

2012-04-18 20:19:56

엠제이 님에 의해 삭제된 답변입니다.