커뮤니티

수식부탁드립니다.

프로필 이미지
아로마
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) 만큼 추가 하락하면 그때 매도진입하는 진입식을 부탁드립니다. 감사합니다...