커뮤니티
시스템 수식 수정 부탁드립니다.
2015-07-07 20:08:05
121
글번호 88134
아래의 수식을 수정부탁드립니다.
기준봉(통상적으로 장대양봉)의 종가 아래 부분은 매수 구간이므로
전일 저가를 깨더라도 매도가 되어서는 안되는데 매수와 동시에 매도가 됩니다.
손절 규정은 기준봉의 저가 -1%를 이탈시에 매도가 되어야 하구요.
정상적인 매도는 기준봉의 종가보다 높은 구간에서만 매도가 되어야 합니다.
즉, 정리를 하면 기준봉의 시가와 종가 사이에서 매수하여 기준봉의 종가 위에
구간으로 상승한 후에 매도가 되어야 합니다.
부탁드릴께요.~~~
- 아 래 -
input : 기준봉날짜 (20150701);
var : 하한가(0), DnLimit(0);
var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0);
var : 상한가(0), UpLimit(0);
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
DnLimit = (BP * 0.12);
Else if date >= 20050328 and date < 20150615 Then
DnLimit = (BP * 0.15);
Else
DnLimit = (BP * 0.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
dn1 = int(DnLimit/100)*100;
dn2 = int(DnLimit/100)*100;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/10)*10;
dn7 = int(DnLimit/1)*1;
}
}
Else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
if CodeCategory() == 1 or CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn6;
}
else{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn7;
}
}
else if CodeCategory() == 8 or CodeCategory() == 9 then {
하한가 = BP-dn6;
}
}
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
UpLimit = (BP[0] * 1.12);
Else if date >= 20050328 and date < 20150615 Then
UpLimit = (BP[0] * 1.15);
Else
UpLimit = (BP[0] * 1.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
up1 = int(UpLimit/100+0.00001)*100;
up2 = int(UpLimit/100+0.00001)*100;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/10+0.00001)*10;
up7 = int(UpLimit/1+0.00001)*1;
}
}
Else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up6);
}
Else{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
상한가 = up6;
}
}
if sdate == 기준봉날짜 Then{
value1 = abs(DayClose-dayopen);
value2 = max(DayClose,dayopen);
value3 = DayOpen;
value4 = DayClose;
if DayClose > DayOpen Then{
var1 = dayopen+value1*0.75;
var2 = dayopen+value1*0.50;
var3 = dayopen+value1*0.25;
}
Else{
var1 = dayopen-value1*0.75;
var2 = dayopen-value1*0.50;
var3 = dayopen-value1*0.25;
}
}
if sdate > 기준봉날짜 and value4 > value3 Then{
#var1(75%)터치시 매수
if Condition1 == false and H < var1 Then
Buy("매수11",AtStop,var1);
if Condition1 == false and L > var1 Then
Buy("매수12",Atlimit,var1);
#var2(50%)터치시 매수
if Condition2 == false and H < var2 Then
Buy("매수21",AtStop,var2);
if Condition2 == false and L > var2 Then
Buy("매수22",Atlimit,var2);
#var3(25%)터치시 매수
if Condition3 == false and H < var3 Then
Buy("매수31",AtStop,var3);
if Condition3 == false and L > var3 Then
Buy("매수32",Atlimit,var3);
}
if MarketPosition == 1 Then{
if LatestEntryName(0) == "매수11" or LatestEntryName(0) == "매수12" Then
Condition1 = true;
if LatestEntryName(0) == "매수21" or LatestEntryName(0) == "매수22" Then
Condition2 = true;
if LatestEntryName(0) == "매수31" or LatestEntryName(0) == "매수32" Then
Condition3 = true;
if stime < 150000 then
ExitLong("상한가매도",atlimit,상한가);
Exitlong("손절1",AtStop,daylow(1)*0.99);
Exitlong("손절2",AtStop,daylow(1)*0.99,"",Floor(CurrentContracts*0.5),1);
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
답변 1
예스스탁 예스스탁 답변
2015-07-08 09:33:30
안녕하세요
예스스탁입니다.
input : 기준봉날짜 (20150701);
var : 하한가(0), DnLimit(0);
var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0);
var : 상한가(0), UpLimit(0);
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
DnLimit = (BP * 0.12);
Else if date >= 20050328 and date < 20150615 Then
DnLimit = (BP * 0.15);
Else
DnLimit = (BP * 0.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
dn1 = int(DnLimit/100)*100;
dn2 = int(DnLimit/100)*100;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/10)*10;
dn7 = int(DnLimit/1)*1;
}
}
Else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
if CodeCategory() == 1 or CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn6;
}
else{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn7;
}
}
else if CodeCategory() == 8 or CodeCategory() == 9 then {
하한가 = BP-dn6;
}
}
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
UpLimit = (BP[0] * 1.12);
Else if date >= 20050328 and date < 20150615 Then
UpLimit = (BP[0] * 1.15);
Else
UpLimit = (BP[0] * 1.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
up1 = int(UpLimit/100+0.00001)*100;
up2 = int(UpLimit/100+0.00001)*100;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/10+0.00001)*10;
up7 = int(UpLimit/1+0.00001)*1;
}
}
Else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up6);
}
Else{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
상한가 = up6;
}
}
if sdate == 기준봉날짜 Then{
value1 = abs(DayClose-dayopen);
value2 = max(DayClose,dayopen);
value3 = DayOpen;
value4 = DayClose;
if DayClose > DayOpen Then{
var1 = dayopen+value1*0.75;
var2 = dayopen+value1*0.50;
var3 = dayopen+value1*0.25;
}
Else{
var1 = dayopen-value1*0.75;
var2 = dayopen-value1*0.50;
var3 = dayopen-value1*0.25;
}
}
if sdate > 기준봉날짜 and value4 > value3 Then{
#var1(75%)터치시 매수
if Condition1 == false and H < var1 Then
Buy("매수11",AtStop,var1);
if Condition1 == false and L > var1 Then
Buy("매수12",Atlimit,var1);
#var2(50%)터치시 매수
if Condition2 == false and H < var2 Then
Buy("매수21",AtStop,var2);
if Condition2 == false and L > var2 Then
Buy("매수22",Atlimit,var2);
#var3(25%)터치시 매수
if Condition3 == false and H < var3 Then
Buy("매수31",AtStop,var3);
if Condition3 == false and L > var3 Then
Buy("매수32",Atlimit,var3);
}
if MarketPosition == 1 Then{
if LatestEntryName(0) == "매수11" or LatestEntryName(0) == "매수12" Then
Condition1 = true;
if LatestEntryName(0) == "매수21" or LatestEntryName(0) == "매수22" Then
Condition2 = true;
if LatestEntryName(0) == "매수31" or LatestEntryName(0) == "매수32" Then
Condition3 = true;
if stime < 150000 then
ExitLong("상한가매도",atlimit,상한가);
if daylow*0.99 > value4 Then{
Exitlong("손절1",AtStop,daylow(1)*0.99);
Exitlong("손절2",AtStop,daylow(1)*0.99,"",Floor(CurrentContracts*0.5),1);
}
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
즐거운 하루되세요
> 승부사1 님이 쓴 글입니다.
> 제목 : 시스템 수식 수정 부탁드립니다.
> 아래의 수식을 수정부탁드립니다.
기준봉(통상적으로 장대양봉)의 종가 아래 부분은 매수 구간이므로
전일 저가를 깨더라도 매도가 되어서는 안되는데 매수와 동시에 매도가 됩니다.
손절 규정은 기준봉의 저가 -1%를 이탈시에 매도가 되어야 하구요.
정상적인 매도는 기준봉의 종가보다 높은 구간에서만 매도가 되어야 합니다.
즉, 정리를 하면 기준봉의 시가와 종가 사이에서 매수하여 기준봉의 종가 위에
구간으로 상승한 후에 매도가 되어야 합니다.
부탁드릴께요.~~~
- 아 래 -
input : 기준봉날짜 (20150701);
var : 하한가(0), DnLimit(0);
var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0);
var : 상한가(0), UpLimit(0);
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
DnLimit = (BP * 0.12);
Else if date >= 20050328 and date < 20150615 Then
DnLimit = (BP * 0.15);
Else
DnLimit = (BP * 0.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
dn1 = int(DnLimit/100)*100;
dn2 = int(DnLimit/100)*100;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/10)*10;
dn7 = int(DnLimit/1)*1;
}
}
Else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
if CodeCategory() == 1 or CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn6;
}
else{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn7;
}
}
else if CodeCategory() == 8 or CodeCategory() == 9 then {
하한가 = BP-dn6;
}
}
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
UpLimit = (BP[0] * 1.12);
Else if date >= 20050328 and date < 20150615 Then
UpLimit = (BP[0] * 1.15);
Else
UpLimit = (BP[0] * 1.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
up1 = int(UpLimit/100+0.00001)*100;
up2 = int(UpLimit/100+0.00001)*100;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/10+0.00001)*10;
up7 = int(UpLimit/1+0.00001)*1;
}
}
Else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up6);
}
Else{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
상한가 = up6;
}
}
if sdate == 기준봉날짜 Then{
value1 = abs(DayClose-dayopen);
value2 = max(DayClose,dayopen);
value3 = DayOpen;
value4 = DayClose;
if DayClose > DayOpen Then{
var1 = dayopen+value1*0.75;
var2 = dayopen+value1*0.50;
var3 = dayopen+value1*0.25;
}
Else{
var1 = dayopen-value1*0.75;
var2 = dayopen-value1*0.50;
var3 = dayopen-value1*0.25;
}
}
if sdate > 기준봉날짜 and value4 > value3 Then{
#var1(75%)터치시 매수
if Condition1 == false and H < var1 Then
Buy("매수11",AtStop,var1);
if Condition1 == false and L > var1 Then
Buy("매수12",Atlimit,var1);
#var2(50%)터치시 매수
if Condition2 == false and H < var2 Then
Buy("매수21",AtStop,var2);
if Condition2 == false and L > var2 Then
Buy("매수22",Atlimit,var2);
#var3(25%)터치시 매수
if Condition3 == false and H < var3 Then
Buy("매수31",AtStop,var3);
if Condition3 == false and L > var3 Then
Buy("매수32",Atlimit,var3);
}
if MarketPosition == 1 Then{
if LatestEntryName(0) == "매수11" or LatestEntryName(0) == "매수12" Then
Condition1 = true;
if LatestEntryName(0) == "매수21" or LatestEntryName(0) == "매수22" Then
Condition2 = true;
if LatestEntryName(0) == "매수31" or LatestEntryName(0) == "매수32" Then
Condition3 = true;
if stime < 150000 then
ExitLong("상한가매도",atlimit,상한가);
Exitlong("손절1",AtStop,daylow(1)*0.99);
Exitlong("손절2",AtStop,daylow(1)*0.99,"",Floor(CurrentContracts*0.5),1);
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}