커뮤니티
문의드립니다.
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
엠제이 님에 의해 삭제된 답변입니다.
다음글
이전글