커뮤니티
수식부탁드립니다.
2009-06-04 09:57:48
807
글번호 22567
안녕하세요.
혹시나해서 다시 글을 올려봅니다.
항상 수고가 많으십니다.
아래의 식에서 분할진입을 적용해보고 싶습니다.
제가 수식을 작성해보려고 하는데 잘 안되서 도움을 부탁드립니다.
input : 자본금(50000000);
var : 매매당손절금액(0),진입시점의변동성(0),주문가능계약수(0);
매매당손절금액 = int(자본금*0.02);
진입시점의변동성 = var8*500000;
주문가능계약수 = int(매매당손절금액/진입시점의변동성);
var : cond(false,data2);
var1 = data2(c);
var2 = data2(h);
var3 = data2(L);
Var4 = Lowest(close,100)[1];
Var5 = Lowest(close,100)[1];
Var6 = Highest(close,100)[1];
Var7 = Highest(close,100)[1];
Var8 = atr(60);
if stime > 100000 and stime < 140000 Then{
if data2(date) != data2(date[3]) Then
cond = False;
if data2(c)>data2(o) and data2(c)>data2(dayhigh[1]) Then{
cond = True;
if cond == True and data2(c) > data2(o) and data2(C[1]) > data2(o[1]) and data2(c[2]) > data2(o[2]) and data2(c[3]) > data2(o[3]) then{
buy("매수",OnClose,def,주문가능계약수);
cond = False;
}}}
if stime > 100000 and stime < 140000 Then{
if data2(c)<data2(o) and data2(c)<data2(daylow[1]) then sell("매도",OnClose,def,주문가능계약수);
}
if MarketPosition == 1 Then{
Exitlong("매수손절",AtStop,EntryPrice-var8[BarsSinceEntry]);
if stime > 100500 and stime < 143000 then {
If CrossDown(close,Var4) Then ExitLong("매수반대청산1",Onclose);
SetStopEndofday(150400);
}
}
if MarketPosition == -1 Then{
ExitShort("매도손절",AtStop,EntryPrice+var8[BarsSinceEntry]);
if Lowest(var3,BarsSinceEntry) <= var1[BarsSinceEntry]*0.990 and
var1 >= Lowest(var3,BarsSinceEntry)+(var1[BarsSinceEntry]-Lowest(var3,BarsSinceEntry))*0.8 Then ExitShort("매도되돌림");
if stime > 100500 and stime < 140000 then {
If Crossup(close,Var6) Then ExitShort("매도반대청산1",Onclose);
SetStopEndofday(150400);
}
}
위의 식에서
추가진입은 균등한 계약수로
매수진입후 Var8 = atr(60)만큼 가격이 상승할때마다 추가진입 4회까지
매도진입후 Var8 = atr(60)만큼 가격이 하락할때마다 추가진입 4회까지
청산은
두가지 경우로 작성 부탁드립니다.
어느 것이 더 나은지 알아보고자 합니다.
1)일괄청산
매수의 경우 추가 진입할 때마다 Var8 = atr(60)만큼 청산가격을 올리는 방식
매도의 경우 추가 진입할 때마다 Var8 = atr(60)만큼 청산가격을 내리는 방식
2)분할청산
각각의 진입에 대한 손절은 각각의 진입가격대비 Var8 = atr(60)만큼 손실이 날 때
위의 1),2)청산조건을 제외하고는
원래의 식에서 설정한 조건에 맞으면 일괄청산되게 적용하고자 합니다.
추가질문입니다.
아래 조건에서 바로 진입하지 않고,
if data2(c)<data2(o) and data2(c)<data2(daylow[1]) then sell("매도",OnClose,def,주문가능계약수);
위와같은 조건 만족된 후,
그 시점에서의 주종목의 가격이 Var8 = atr(60) 만큼 추가 하락하면
그때 매도진입하는 진입식을 부탁드립니다.
감사합니다...
답변 1
예스스탁 예스스탁 답변
2009-06-04 15:27:53
안녕하세요
예스스탁입니다.
1.
input : 자본금(50000000);
var : 매매당손절금액(0),진입시점의변동성(0),주문가능계약수(0);
var : cond(false,data2);
var : BEP(0),SEP(0);
var1 = data2(c);
var2 = data2(h);
var3 = data2(L);
Var4 = Lowest(close,100)[1];
Var5 = Lowest(close,100)[1];
Var6 = Highest(close,100)[1];
Var7 = Highest(close,100)[1];
Var8 = atr(60);
매매당손절금액 = int(자본금*0.02);
진입시점의변동성 = var8*500000;
주문가능계약수 = int(매매당손절금액/진입시점의변동성);
if stime > 100000 and stime < 140000 Then{
if MarketPosition == 0 and data2(c)>data2(o) and data2(c)>data2(dayhigh[1]) and data2(c) > data2(o) and
data2(C[1]) > data2(o[1]) and data2(c[2]) > data2(o[2]) and data2(c[3]) > data2(o[3]) then{
buy("매수",OnClose,def,주문가능계약수);
}
}
if stime > 100000 and stime < 140000 Then{
if MarketPosition == 0 and data2(c)<data2(o) and data2(c)<data2(daylow[1]) then
sell("매도",OnClose,def,주문가능계약수);
}
if MarketPosition == 1 and CurrentEntries < 4 and CountIF(CurrentEntries< CurrentEntries[1],BarsSinceEntry) < 1 Then{
buy("추가매수",AtStop,EntryPrice+var8[BarsSinceEntry]*CurrentEntries,주문가능계약수[BarsSinceEntry]);
}
if MarketPosition == -1 and CurrentEntries < 4 and CountIF(CurrentEntries< CurrentEntries[1],BarsSinceEntry) < 1 Then{
Sell("추가매도",AtStop,EntryPrice-var8[BarsSinceEntry]*CurrentEntries,주문가능계약수[BarsSinceEntry]);
}
if MarketPosition == 1 Then{
if CurrentEntries > CurrentEntries[1] Then
BEP = C;
if CurrentEntries == 1 Then{
Exitlong("매수손절1",AtStop,EntryPrice-var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익1",AtLimit,BEP+var8);
}
if CurrentEntries == 2 Then{
Exitlong("매수손절2",AtStop,EntryPrice,"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익2",AtLimit,BEP+var8);
}
if CurrentEntries == 3 Then{
Exitlong("매수손절3",AtStop,EntryPrice+var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익3",AtLimit,BEP+var8);
}
if CurrentEntries == 4 Then{
Exitlong("매수손절4",AtStop,EntryPrice+var8[BarsSinceEntry]*2,"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익4",AtLimit,BEP+var8);
}
if stime > 100500 and stime < 143000 then {
If CrossDown(close,Var4) Then
ExitLong("매수반대청산1",Onclose);
}
}
if MarketPosition == -1 Then{
if CurrentEntries > CurrentEntries[1] Then
SEP = C;
if CurrentEntries == 1 Then{
ExitShort("매도손절1",AtStop,EntryPrice+var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익1",atlimit,SEP-var8);
}
if CurrentEntries == 2 Then{
ExitShort("매도손절2",AtStop,EntryPrice,"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익2",atlimit,SEP-var8);
}
if CurrentEntries == 3 Then{
ExitShort("매도손절3",AtStop,EntryPrice-var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익3",atlimit,SEP-var8);
}
if CurrentEntries == 4 Then{
ExitShort("매도손절4",AtStop,EntryPrice-var8[BarsSinceEntry]*2,"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익4",atlimit,SEP-var8);
}
if Lowest(var3,BarsSinceEntry) <= var1[BarsSinceEntry]*0.990 and
var1 >= Lowest(var3,BarsSinceEntry)+(var1[BarsSinceEntry]-Lowest(var3,BarsSinceEntry))*0.8 Then
ExitShort("매도되돌림");
if stime > 100500 and stime < 140000 then {
If Crossup(close,Var6) Then
ExitShort("매도반대청산1",Onclose);
}
}
SetStopEndofday(150400);
2.
input : 자본금(50000000);
var : 매매당손절금액(0),진입시점의변동성(0),주문가능계약수(0);
var : cond(false,data2);
var : BEP(0),SEP(0);
var1 = data2(c);
var2 = data2(h);
var3 = data2(L);
Var4 = Lowest(close,100)[1];
Var5 = Lowest(close,100)[1];
Var6 = Highest(close,100)[1];
Var7 = Highest(close,100)[1];
Var8 = atr(60);
매매당손절금액 = int(자본금*0.02);
진입시점의변동성 = var8*500000;
주문가능계약수 = int(매매당손절금액/진입시점의변동성);
if stime > 100000 and stime < 140000 Then{
if MarketPosition == 0 and data2(c)>data2(o) and data2(c)>data2(dayhigh[1]) and data2(c) > data2(o) and
data2(C[1]) > data2(o[1]) and data2(c[2]) > data2(o[2]) and data2(c[3]) > data2(o[3]) then{
buy("매수",OnClose,def,주문가능계약수);
}
}
if stime > 100000 and stime < 140000 Then{
if MarketPosition == 0 and data2(c)<data2(o) and data2(c)<data2(daylow[1]) then
sell("매도",AtStop,C-var8,주문가능계약수);
}
if MarketPosition == 1 and CurrentEntries < 4 and CountIF(CurrentEntries< CurrentEntries[1],BarsSinceEntry) < 1 Then{
buy("추가매수",AtStop,EntryPrice+var8[BarsSinceEntry]*CurrentEntries,주문가능계약수[BarsSinceEntry]);
}
if MarketPosition == -1 and CurrentEntries < 4 and CountIF(CurrentEntries< CurrentEntries[1],BarsSinceEntry) < 1 Then{
Sell("추가매도",AtStop,EntryPrice-var8[BarsSinceEntry]*CurrentEntries,주문가능계약수[BarsSinceEntry]);
}
if MarketPosition == 1 Then{
if CurrentEntries > CurrentEntries[1] Then
BEP = C;
if CurrentEntries == 1 Then{
Exitlong("매수손절1",AtStop,EntryPrice-var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익1",AtLimit,BEP+var8);
}
if CurrentEntries == 2 Then{
Exitlong("매수손절2",AtStop,EntryPrice,"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익2",AtLimit,BEP+var8);
}
if CurrentEntries == 3 Then{
Exitlong("매수손절3",AtStop,EntryPrice+var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익3",AtLimit,BEP+var8);
}
if CurrentEntries == 4 Then{
Exitlong("매수손절4",AtStop,EntryPrice+var8[BarsSinceEntry]*2,"",주문가능계약수[BarsSinceEntry],1);
Exitlong("매수수익4",AtLimit,BEP+var8);
}
if stime > 100500 and stime < 143000 then {
If CrossDown(close,Var4) Then
ExitLong("매수반대청산1",Onclose);
}
}
if MarketPosition == -1 Then{
if CurrentEntries > CurrentEntries[1] Then
SEP = C;
if CurrentEntries == 1 Then{
ExitShort("매도손절1",AtStop,EntryPrice+var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익1",atlimit,SEP-var8);
}
if CurrentEntries == 2 Then{
ExitShort("매도손절2",AtStop,EntryPrice,"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익2",atlimit,SEP-var8);
}
if CurrentEntries == 3 Then{
ExitShort("매도손절3",AtStop,EntryPrice-var8[BarsSinceEntry],"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익3",atlimit,SEP-var8);
}
if CurrentEntries == 4 Then{
ExitShort("매도손절4",AtStop,EntryPrice-var8[BarsSinceEntry]*2,"",주문가능계약수[BarsSinceEntry],1);
ExitShort("매도수익4",atlimit,SEP-var8);
}
if Lowest(var3,BarsSinceEntry) <= var1[BarsSinceEntry]*0.990 and
var1 >= Lowest(var3,BarsSinceEntry)+(var1[BarsSinceEntry]-Lowest(var3,BarsSinceEntry))*0.8 Then
ExitShort("매도되돌림");
if stime > 100500 and stime < 140000 then {
If Crossup(close,Var6) Then
ExitShort("매도반대청산1",Onclose);
}
}
SetStopEndofday(150400);
즐거운 하루되세요
> 아로마 님이 쓴 글입니다.
> 제목 : 수식부탁드립니다.
> 안녕하세요.
혹시나해서 다시 글을 올려봅니다.
항상 수고가 많으십니다.
아래의 식에서 분할진입을 적용해보고 싶습니다.
제가 수식을 작성해보려고 하는데 잘 안되서 도움을 부탁드립니다.
input : 자본금(50000000);
var : 매매당손절금액(0),진입시점의변동성(0),주문가능계약수(0);
매매당손절금액 = int(자본금*0.02);
진입시점의변동성 = var8*500000;
주문가능계약수 = int(매매당손절금액/진입시점의변동성);
var : cond(false,data2);
var1 = data2(c);
var2 = data2(h);
var3 = data2(L);
Var4 = Lowest(close,100)[1];
Var5 = Lowest(close,100)[1];
Var6 = Highest(close,100)[1];
Var7 = Highest(close,100)[1];
Var8 = atr(60);
if stime > 100000 and stime < 140000 Then{
if data2(date) != data2(date[3]) Then
cond = False;
if data2(c)>data2(o) and data2(c)>data2(dayhigh[1]) Then{
cond = True;
if cond == True and data2(c) > data2(o) and data2(C[1]) > data2(o[1]) and data2(c[2]) > data2(o[2]) and data2(c[3]) > data2(o[3]) then{
buy("매수",OnClose,def,주문가능계약수);
cond = False;
}}}
if stime > 100000 and stime < 140000 Then{
if data2(c)<data2(o) and data2(c)<data2(daylow[1]) then sell("매도",OnClose,def,주문가능계약수);
}
if MarketPosition == 1 Then{
Exitlong("매수손절",AtStop,EntryPrice-var8[BarsSinceEntry]);
if stime > 100500 and stime < 143000 then {
If CrossDown(close,Var4) Then ExitLong("매수반대청산1",Onclose);
SetStopEndofday(150400);
}
}
if MarketPosition == -1 Then{
ExitShort("매도손절",AtStop,EntryPrice+var8[BarsSinceEntry]);
if Lowest(var3,BarsSinceEntry) <= var1[BarsSinceEntry]*0.990 and
var1 >= Lowest(var3,BarsSinceEntry)+(var1[BarsSinceEntry]-Lowest(var3,BarsSinceEntry))*0.8 Then ExitShort("매도되돌림");
if stime > 100500 and stime < 140000 then {
If Crossup(close,Var6) Then ExitShort("매도반대청산1",Onclose);
SetStopEndofday(150400);
}
}
위의 식에서
추가진입은 균등한 계약수로
매수진입후 Var8 = atr(60)만큼 가격이 상승할때마다 추가진입 4회까지
매도진입후 Var8 = atr(60)만큼 가격이 하락할때마다 추가진입 4회까지
청산은
두가지 경우로 작성 부탁드립니다.
어느 것이 더 나은지 알아보고자 합니다.
1)일괄청산
매수의 경우 추가 진입할 때마다 Var8 = atr(60)만큼 청산가격을 올리는 방식
매도의 경우 추가 진입할 때마다 Var8 = atr(60)만큼 청산가격을 내리는 방식
2)분할청산
각각의 진입에 대한 손절은 각각의 진입가격대비 Var8 = atr(60)만큼 손실이 날 때
위의 1),2)청산조건을 제외하고는
원래의 식에서 설정한 조건에 맞으면 일괄청산되게 적용하고자 합니다.
추가질문입니다.
아래 조건에서 바로 진입하지 않고,
if data2(c)<data2(o) and data2(c)<data2(daylow[1]) then sell("매도",OnClose,def,주문가능계약수);
위와같은 조건 만족된 후,
그 시점에서의 주종목의 가격이 Var8 = atr(60) 만큼 추가 하락하면
그때 매도진입하는 진입식을 부탁드립니다.
감사합니다...