http://i.imgur.com/wNDv7zE.png
10번째 포스팅에서는 1포인트 이상 수익을 기록했다가(해당봉 종가 기준) 반대 방향으로 1포인트 이상 손실(해당봉 종가기준)을 기록하면서 당일 최고점이나 최저점을 기록하게 되면 청산함으로서 위험을 관리하는 첫번째 청산 로직을 구성해 보았습니다.
이전에는 두번째 청산 로직을 구성해 보겠습니다.
이미 트레이딩 시장에 발을 들여논 분이라면 느끼고 계실 수도 있는 부분에 대한 위험 관리입니다. 시장의 흐름은 약 10%를 전후로 하여 소위 추세장이라고 불리는 흐름이 조성되곤 합니다. 추세장은 장을 시작함과 동시에 하락을 하던 상승을 하던 방향을 잡고나면 장이 끝날때까지 반대 방향으로의 움직임이 없이 지속적으로 오르거나 내리는 장을 말합니다.
트레이더 입장에서는 반가운 시장의 흐름이지만 반대 방향으로 진입했을 경우 손실이 무한히 커지는 시장 흐름이기도 합니다.
이런 추세장이 형성되었을 때 불행하게도 나의 진입방향이 반대 방향이라면 대처 방법은 두가지가 있습니다. 한가지는 이미 설정된 손절 포인트(2.1포인트)까지는 견뎌보는 것이고, 다른 하나는 진입 후 일정한 시간이 흐른뒤 진입 방향과 반대 방향으로 당일 최고점이나 최저점이 형성된다면 손실 처리하는 방법입니다.
저는 진입후 2시간 이상 흐르고 손절포인트의 50%를 넘는 손실을 기록하면서 당일 최저점이나 최고점을 형성하면 청산해 보고자 합니다.
코딩은 다음과 같습니다.
VAR : Value(0),Count(0),Cnt(0);
VAR : ddd101(0),ddd102(0),ddd103(0),ddd104(0),ddd105(0),ddd106(0),ddd107(0),ddd108(0),ddd109(0),ddd110(0);
VAR10 = Bids-Asks;
Count = 0 ;
For Value3 = 0 To 10 {
If EntryDate(Value3) == sdate Then
Count = Count + 1;
}
if dayindex==0 then {
ddd101 = 0; ddd102 = 0; ddd103 = 0; ddd104 = 0; ddd105 = 0; ddd106 = 0; ddd107 = 0; ddd108 = 0; ddd109 = 0; ddd110 = 0;}
# 1. 진입
if MarketPosition==0 then if count==0 then
if c>o+0.05 then if var10>1000 then
buy("buy",AtMarket);
if MarketPosition==0 then if count==0 then
if c<o-0.05 then if var10<-1000 then
sell("sell",AtMarket);
# 2. 손절
if MarketPosition == 0 then
{
ExitLong("b손절",atstop,NextBarOpen-2.1);
ExitShort("s손절",atstop,NextBarOpen+2.1);
}
if MarketPosition <>0 then
{
ExitLong("b손절*",atstop,EntryPrice-2.1);
ExitShort("s손절*",atstop,EntryPrice+2.1);
}
# 3. 익절
if MarketPosition == 1 then
{
if date<20150615 then
ExitLong("maxprofitb",atlimit,(int(bp*1.09/0.05+0.00001)*0.05));
if date>20150614 then
ExitLong("maxprofitb*",atlimit,(int(bp*1.19/0.05+0.00001)*0.05));
}
if MarketPosition ==-1 then
{
if date<20150615 then
ExitShort("maxprofits",AtLimit,(BP-int(BP*0.09/0.05)*0.05));
if date>20150614 then
ExitShort("maxprofits*",AtLimit,(BP-int(BP*0.19/0.05)*0.05));
}
# 4. 매수청산
if MarketPosition==1 then {
if ddd101==0 then if c>EntryPrice+1 then
ddd101=1;
if ddd101==1 Then if var10<1000 then if l==daylow then if c<EntryPrice-1 then
ExitLong("bc101",AtMarket);
if ddd102==0 then if BarsSinceEntry>120 then if var10<-1000 then if l==daylow then if c<EntryPrice-1 then
ExitLong("bc102",AtMarket);
}
# 5. 매도청산
if MarketPosition==-1 then {
if ddd101==0 then if c<EntryPrice-1 then
ddd101=1;
if ddd101==1 Then if var10>-1000 then if h==dayhigh then if c>EntryPrice+1 then
Exitshort("sc101",AtMarket);
if ddd102==0 then if BarsSinceEntry>120 then if var10>1000 then if h==dayhigh then if c>EntryPrice+1 then
Exitshort("sc102",AtMarket);
}
# 4. 당일청산
SetStopEndofday();
트레이딩 시뮬레이션 결과는 다음과 같습니다.
http://i.imgur.com/RxqQkuK.png
손익 그래프는 다음과 같습니다
http://i.imgur.com/qmDYQB1.png
승률은 조금더 내려가고 총손익은 조금 올라갔내요. 당일 청산 비율은 전체 1,634거래 중 513개가 당일 청산되어 31.39%입니다. 당일청산비율이 많이 줄어든 것이 마음에 걸리긴 합니다.
#SystemTrading
#kopasi