커뮤니티
자산관리에 관해 질문드린 사람입니다
2010-01-25 15:40:08
786
글번호 27670
답변이 자산관리(자금관리)에 관한 프로그램 기능이 없다는 내용인지
아니면 대신증권의 자산관리 수식을 예스랭귀지로 구현할 수 없다는 건지 궁금하고
시스템 트레이딩에서 자금관리에 대한 부분이 가장 중요한 걸로 알고 있는데
여기에 대한 부분이 어디에도 전혀 언급이 없는 것 같아 예스랭귀지를 이용한
자금관리 방법에 관한 공부를 하고 싶어도 방법이 없는 것 같습니다.
자금관리 이론에 관한 내용과 이에 따른 시스템에 적용할 수 있는 수식을 보유하고
계실 것 같은데 있으시면 자료를 요청 드립니다.
답변 3
캐빈이야
2010-01-25 18:16:44
자산관리하기는 그렇고요 그냥 일정금액으로 진입하는 방식을 설명드릴려고 합니다.
###########################
## 예시1
###########################
input : 금액(0);
var1 = int(금액/C); 금액에 대해서 수량을 계산한다.
buy("진입",DEF,DEF,var1);
이렇게 하면 금액에 대한 수량만 진입합니다.
여기에 여러번 나눠서 진입하고 싶다면, 조건식으로 경우의 수를 둔다음
금액을 쪼개서 하면 됩니다.
###########################
## 예시2
###########################
input : 금액(0);
if (A조건) then {var2 = 금액/2;} else
if (B조건) then {var2 = 금액/3;} else
if (C조건) then {var2 = 금액/4;}
var1 = int(var2/C); 조건별 금액(VAR2)에 대해서 수량을 계산한다.
buy("진입",DEF,DEF,var1);
얼핏 전글에서 보니 수익이 날때와 손실이 날때로 구분하시는거 같았습니다.
EntryPrice -> 진입가, ExitPrice - >청산가 이것을 구분하면 손실인지 수익인지 알수 있습니다.
시스템은 처음부터 수익이 나면 상관없지만 처음에 손실이 발생되면 진금금액을 관리해야 합니다.
위처럼 계산하지 않게 하려면 진입금액의 150정도를 예치하신다음 100만 시스템으로 구동시키는 방법이 제일 좋다고 봅니다. 그리고 신호가 발생되면 무조건 진입하도록 +-호가단위를 여유있게 넣어주시는게 좋습니다.
부족하지만, 몇자 적어드립니다. 돈버는 로봇 잘 만드세요
> HI_coco 님이 쓴 글입니다.
> 제목 : 자산관리에 관해 질문드린 사람입니다
>
답변이 자산관리(자금관리)에 관한 프로그램 기능이 없다는 내용인지
아니면 대신증권의 자산관리 수식을 예스랭귀지로 구현할 수 없다는 건지 궁금하고
시스템 트레이딩에서 자금관리에 대한 부분이 가장 중요한 걸로 알고 있는데
여기에 대한 부분이 어디에도 전혀 언급이 없는 것 같아 예스랭귀지를 이용한
자금관리 방법에 관한 공부를 하고 싶어도 방법이 없는 것 같습니다.
자금관리 이론에 관한 내용과 이에 따른 시스템에 적용할 수 있는 수식을 보유하고
계실 것 같은데 있으시면 자료를 요청 드립니다.
예스스탁 예스스탁 답변
2010-01-26 11:27:39
안녕하세요
예스스탁입니다.
해당부분에 대해 정리되어 있는 수식자료는 없습니다.
일반적으로 어느정도 수량으로 진입을 할것인가를 계산하기 위한 내용이 주를 이루고
대신의 책내용을 보셔서 아시겟지만 랭귀지에는 잔고관련 내용이 제공되지 않아 외부변수로 필요로 하는 내용을 직접입력하는 구조가 됩니다.
수식작성시에 참고만 하시기 바랍니다.
1. 마틴게일
input: faster(5), slower(20), size(1), factor(2.0),maxcont(10);
vars: mafast(0), maslow(0), ncontr(0),signal(0),XCommission(0),XSlippage(0);
mafast = average(close, faster);
maslow = average(close, slower);
XCommission = c*(ExitCommission/100); #%설정
XSlippage = ExitSlippage; #Pt설정
if mafast > maslow then {
if signal == -1 then {
exitshort();
signal = 0;
if (PositionProfit-(XCommission+XSlippage)*CurrentContracts) < 0 then
ncontr = intportion(ncontr*factor);
else
ncontr = size;
}
if signal < 1 then {
Buy("B", onclose,def,min(ncontr,maxcont));
signal = 1;
}
}
if mafast < maslow then {
if signal == 1 then {
exitlong();
signal = 0;
if (PositionProfit-(XCommission+XSlippage)*CurrentContracts) < 0 then
ncontr = intportion(ncontr*factor);
else
ncontr = size;
}
if signal > -1 then {
Sell("S", onclose,def, min(ncontr,maxcont) );
signal = -1;
}
}
2. 역마틴게일
input: faster(5), slower(20), size(1), factor(2.0),maxcont(10);
vars: mafast(0), maslow(0), ncontr(0),signal(0),XCommission(0),XSlippage(0);
mafast = average(close, faster);
maslow = average(close, slower);
XCommission = c*(ExitCommission/100); #%설정
XSlippage = ExitSlippage; #Pt설정
if mafast > maslow then {
if signal == -1 then {
exitshort();
signal = 0;
if (PositionProfit-(XCommission+XSlippage)*CurrentContracts) > 0 then
ncontr = intportion(ncontr*factor);
else
ncontr = size;
}
if signal < 1 then {
Buy("B", onclose,def,min(ncontr,maxcont));
signal = 1;
}
}
if mafast < maslow then {
if signal == 1 then {
exitlong();
signal = 0;
if (PositionProfit-(XCommission+XSlippage)*CurrentContracts) > 0 then
ncontr = intportion(ncontr*factor);
else
ncontr = size;
}
if signal > -1 then {
Sell("S", onclose,def, min(ncontr,maxcont) );
signal = -1;
}
}
3. volatility model
input : atrlen(20), len1(2.7),capital(50000000),Fraction(0.014),maxcont(10);
var : cont(0),i_CloseEquity(0);
i_CloseEquity = NetProfit*BigPointValue;
cont = int(((capital+i_closeequity)*fraction)/(ATR(ATRlen)*len1*BigPointValue));
if cont > maxcont or cont > int((Capital+i_CloseEquity)/(c*BigPointValue*0.15)) Then
cont = maxcont;
Else
cont = cont;
if cont < 1 or Capital+i_CloseEquity < 15000000 Then
cont = 0;
if crossup(c,ma(C,20)) Then
buy("b",OnClose,def,cont);
SetStopEndofday(150000);
4. 증거금 이용 수량산정
input : capital(50000000),margin(0.15),Fraction(0.19),maxcont(10);
var : cont(0),i_CloseEquity(0);
i_CloseEquity = (NetProfit+OpenPositionProfit)*BigPointValue;
cont = int(((Capital+i_CloseEquity)*Fraction)/(c*BigPointValue*margin));
if cont > maxcont or cont > int((Capital+i_CloseEquity)/(c*BigPointValue*0.15)) Then
cont = maxcont;
Else
cont = cont;
if cont < 1 or Capital+i_CloseEquity < 15000000 Then
cont = 0;
if crossup(c,ma(C,20)) Then
buy("b",OnClose,def,cont);
SetStopEndofday(150000);
5. 일정금액이용 수량산정
input : len(0.37), atrlen(20), len1(2.7),capital(50000000),riskamount(1200000),Fraction(0.19),maxcont(10);
var : cont(0),i_CloseEquity(0),Cond1(false),Cond2(false);
i_CloseEquity = (NetProfit+OpenPositionProfit)*BigPointValue;
cont= int(((capital+i_closeequity)*fraction)/riskamount);
If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then
cont=maxcont;
Else
cont=cont;
If cont<1 Or capital+i_closeequity < 15000000 Then
cont=0;
Var1=highd(1)-lowd(1);# '전일고저차
Cond1= sdate==exitdate(1) And MarketPosition(1)==1 ;#'최근청산날짜가 금일이고 직전이 매수
Cond2= sdate==exitdate(1) And MarketPosition(1)==-1;#'최근청산날짜가 금일이고 직전이 매도
If stime<150000 Then{
If Cond1==False Then
buy("매수",Atstop,DayOpen+var1*len,cont);#지정가 상향돌파시 매수
If Cond2==False Then
sell("매도",Atstop,DayOpen-var1*len,cont);#'지정가 하향돌파시 매도
}
#'청산
If MarketPosition<>0 Then{
exitlong("매수추적스탑", Atstop, Highest(high, BarsSinceEntry+1)-atr(atrlen)*len1);
exitshort("매도추적스탑", Atstop, Lowest(low,BarsSinceEntry+1)+atr(atrlen)*len1);
}
6. kelly 공식이용
input : len(0.37), atrlen(20), len1(2.7),capital(50000000),margin(0.15),Fraction(0.19);
input : maxcont(200),method(1),kelly(0.2);
var : cont(0),i_CloseEquity(0),cond1(false),cond2(false);
i_CloseEquity = (NetProfit+OpenPositionProfit)*BigPointValue;
if method == 1 Then
cont = int(((Capital+i_CloseEquity)*kelly)/(c*BigPointValue*margin));
Else
cont = int(((capital+i_closeequity)*kelly*fraction)/1200000);
if cont > maxcont or cont > int((Capital+i_CloseEquity)/(c*BigPointValue*0.15)) Then
cont = maxcont;
Else
cont = cont;
if cont < 1 or Capital+i_CloseEquity < 15000000 Then
cont = 0;
Var1=highd(1)-lowd(1);# '전일고저차
Cond1= sdate==exitdate(1) And MarketPosition(1)==1 ;#'최근청산날짜가 금일이고 직전이 매수
Cond2= sdate==exitdate(1) And MarketPosition(1)==-1;#'최근청산날짜가 금일이고 직전이 매도
If stime<150000 Then{
If Cond1==False Then
buy("매수",Atstop,DayOpen+var1*len,cont);#지정가 상향돌파시 매수
If Cond2==False Then
sell("매도",Atstop,DayOpen-var1*len,cont);#'지정가 하향돌파시 매도
}
#'청산
If MarketPosition<>0 Then{
exitlong("매수추적스탑", Atstop, Highest(high, BarsSinceEntry+1)-atr(atrlen)*len1);
exitshort("매도추적스탑", Atstop, Lowest(low,BarsSinceEntry+1)+atr(atrlen)*len1);
}
7.%risk model 전략
input : len(0.37), atrlen(20), len1(2.7),capital(50000000),Fraction(0.19),maxcont(200);
var : cont(0),i_CloseEquity(0),cond1(false),cond2(false);
i_CloseEquity = (NetProfit+OpenPositionProfit)*BigPointValue;
cont= int(((capital+i_closeequity)*fraction)/((close*len1)*500000));
If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then
cont=maxcont;
Else
cont=cont;
If cont<1 Or capital+i_closeequity <15000000 Then
cont=0;
Var1= highd(1)-lowd(1);# #전일고저차
##청산명은 #매수추적스탑#이고 청산일은 오늘이고 청산가가 지정가보다 크다면
Cond1= isexitname("매수추적스탑",1) And sdate==exitdate(1) And exitprice(1)>DayOpen+var1*len;
#청산명은 #매도추적스탑#이고 청산일은 오늘이고 청산가가 지정가보다 작다면
Cond2= IsExitName("매도추적스탑",1) And sdate==exitdate(1) And exitprice(1)<DayOpen-var1*len;
If stime<150000 Then {
If Cond1==False Then # cond1 이 거짓이면
buy("매수",Atstop,cont,DayOpen+var1*len);#지정가 상향돌파시 매수
If Cond2==False Then # cond2가 거짓이면
sell("매도",Atstop,cont,DayOpen-var1*len);#지정가 하향돌파시 매도
}
##청산
If MarketPosition<>0 Then{
exitlong("매수추적스탑", Atstop, Highest(high, BarsSinceEntry+1)*(1-len1));
exitshort("매도추적스탑", Atstop, Lowest(low,BarsSinceEntry+1)*(1+len1));
}
즐거운 하루되세요
> HI_coco 님이 쓴 글입니다.
> 제목 : 자산관리에 관해 질문드린 사람입니다
>
답변이 자산관리(자금관리)에 관한 프로그램 기능이 없다는 내용인지
아니면 대신증권의 자산관리 수식을 예스랭귀지로 구현할 수 없다는 건지 궁금하고
시스템 트레이딩에서 자금관리에 대한 부분이 가장 중요한 걸로 알고 있는데
여기에 대한 부분이 어디에도 전혀 언급이 없는 것 같아 예스랭귀지를 이용한
자금관리 방법에 관한 공부를 하고 싶어도 방법이 없는 것 같습니다.
자금관리 이론에 관한 내용과 이에 따른 시스템에 적용할 수 있는 수식을 보유하고
계실 것 같은데 있으시면 자료를 요청 드립니다.
회원
2012-04-07 23:55:05
관리자님에 의해 삭제된 답변입니다.
다음글