커뮤니티
문의드립니다.
2014-01-14 21:10:06
158
글번호 71401
항상 수고 많으십니다.
도움 주신 로직 이것저것 조합해서 시스템을 짜보았는데 오류가 발생해서 제대로 수식을 작성했는지 확인좀 부탁드립니다. 혹시 잘못된 사항 있으면 수정도 해주시면 감사하겠습니다.
--1. 하루 허용 매매횟수 제한 ( 수식처럼 동일 포지션으로 재진입을 하게되면 이 진입횟수에 포함되는것입니까? 만약 포함된다면 하루 8회로 매매횟수를 한정하려면 어떻게 해야되는지요?)
--2. 매매당 손절 0.40 익절 0.60 한정
--3. 진입 후 0.20 P 밀리면 동일 포지션으로 재진입(물타기)
--4. 진입 후 0.20 P 밀리지 않으면 한개 수량만
--4. 재진입 했을 경우 평균단가보다 0.40 밀리면 2개 수량 모두 청산
--5. 재진입 했을 경우 평균단가보다 0.60 먹으면 2개 수량 모두 청산
--6. 익절을 걸지 않으면 다음 신호 발생시까지 쭉 포지션 유지(다음 신호 발생시 청산)
--7. 당일 누적손실 -2.00 P 도달시 바로 청산 후 당일 매매종료
--8. 신호 발생 시 매수면 신호보다 한틱 아래에 진입, 매도면 신호보다 한틱 위에 진입
--9. 15시 매매 종료
-10. 반대 신호 발생시 바로 청산하고 진입
-11. 시장가가 아닌 지정가로 진입을 하도록 할 수 있습니까? 만약 신호 발생한 후 H번째 캔들까지 체결이 안되었을 시, 바로 취소주문 들어가도록이요
제가 시스템 돌려봤을 때, 가장 큰 문제점이 예를들어 진입포인트보다 0.20 P 손실나면 재진입을 하도록 설정해놨을 때, 255.20에 매수를 쳤다면 255.30에 청산을 하고 다음 매도 포지션이 진입을 했다고 하더라도 0.20 P 손실난 255.20 포인트가 오면 매도가 청산되고 매수추가주문이 들어간다는 것입니다.
아 그리고 손익절을 걸고 매매를 시작했을 경우, 재진입을 하면 다음 신호가 발생해도 청산하지않고 손익절이 될 때까지 포지션을 유지하기도 하더라고요..
한번 봐보시고 수정부탁드립니다.
항상 감사합니다.
input : dayentry(8),loss(0.4),Profit(0.6),당일손실(-2),진입수량(1),추가진입수량(1),하락포인트(1),체결후상승(1),체결후하락(1);
var : NP(0),PreNP(0),dayPL(0),S2(0),S3(0);
input : N(2);
var : count(0);
input : Onetick(0.05);
Var : a(0);
a=close;
Count = 0 ;
for Value1 = 0 to 20 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
var : cnt(0);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
}
NP = NetProfit;
if date != date[1] Then{
Condition1 = False;
PreNP = NP[1];
}
dayPL = (NP-PreNP)+PositionProfit;
if crossup(S2,S3) and count < N and dayPL > 당일손실 Then
Buy("매수",atlimit,a-Onetick);
if crossdown(S2,S3) and count < N and dayPL > 당일손실 Then
Sell("매도",atlimit,a+Onetick);
if MarketPosition==1 and MaxEntries==1 Then
buy("매수추가진입",atlimit,Entryprice-하락포인트,추가진입수량);
if MarketPosition==-1 and MaxEntries==1 Then
sell("매도추가진입",atlimit,Entryprice+하락포인트,추가진입수량);
SetStopEndofday(150000);
if MarketPosition == 1 and MaxEntries==2 and crossdown(S2,S3) Then{
ExitLong("매수청산1",Atlimit,AvgEntryPrice+체결후상승);
ExitLong("매수청산2",Atstop,AvgEntryPrice+체결후하락);
}
if crossdown(S2,S3) Then{
ExitLong("매수청산0");
}
if MarketPosition == -1 and MaxEntries==2 and crossup(S2,S3) Then{
ExitShort("매도청산1",Atlimit,AvgEntryPrice+체결후상승);
ExitShort("매도청산2",Atstop,AvgEntryPrice+체결후하락);
}
if crossup(S2,S3) Then{
ExitShort("매도청산0");
}
답변 1
예스스탁 예스스탁 답변
2014-01-15 13:58:52
안녕하세요
예스스탁입니다.
1.
시스템에서 거래횟수는
포지션에서 진입시작을 해서 전량청산되는 것을 하나의 거래로 봅니다.
매수진입-전량청산
매수진입-추가매수진입-전량청산
모두 한번의 거래입니다.
위 관점으로 매매횟수 지정하시면 됩니다.
2.
수식에서는 주문가격을 지정할수 없습니다.
주문가격은 시스템 트레이딩 설정창의 매매탭에서
매매가격으로 지정한 가격으로 주문이 나가게 됩니다.
수식은 신호 발생 조건을 지정하는 부분입니다.
atlimit,atstop모두 신호발생 조건입니다.
그러므로 올리신 내용중 주문가격에 관한 부분은 수식에서
모두 처리되지 않습니다.
3.
if MarketPosition == 1 and MaxEntries==2 and crossdown(S2,S3) Then{
ExitLong("매수청산1",Atlimit,AvgEntryPrice+체결후상승);
ExitLong("매수청산2",Atstop,AvgEntryPrice+체결후하락);
}
if MarketPosition == -1 and MaxEntries==2 and crossup(S2,S3) Then{
ExitShort("매도청산1",Atlimit,AvgEntryPrice+체결후상승);
ExitShort("매도청산2",Atstop,AvgEntryPrice+체결후하락);
}
작성하신 위 내용은
청산이 발동전에 이미 매수와 매도로 서로 리버스가 되게 되므로
큰 의미가 없습니다.
위식은 크로스가 발생하면 다음봉에서 지정한 가격대 까지 시세가
도달해야 신호가 발생하는데
이미 봉완성시 크로스가 발생하면 반대포지션으로 가게 됩니다.
위 내용은 제거 하셔야 합니다.
아래 내용만 남겨서 지정한 횟수까지 진입후에
반대신호로 청산만 되게 하셔야 합니다.
if crossdown(S2,S3) Then{
ExitLong("매수청산0");
}
if crossup(S2,S3) Then{
ExitShort("매도청산0");
}
4. 수정한 식입니다.
input : dayentry(8),loss(0.4),Profit(0.6),당일손실(-2),진입수량(1),추가진입수량(1),하락포인트(1),체결후상승(1),체결후하락(1);
var : NP(0),PreNP(0),dayPL(0),dayPL1(0),S2(0),S3(0);
input : N(2);
var : count(0);
input : Onetick(0.05);
Var : a(0);
var : cnt(0);
a=close;
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
}
NP = NetProfit;
if date != date[1] Then{
Condition1 = False;
PreNP = NP[1];
}
#현재 진입 중이면 해당 포지션의 손익 반영
dayPL = (NP-PreNP)+PositionProfit;
#현재 진입중 포지션 미반영 당일손익
dayPL1 = NP-PreNP;
#본진입(반대포지션시 청산하고 진입)
if crossup(S2,S3) and count < N and dayPL > 당일손실 Then
Buy("매수");
if crossdown(S2,S3) and count < N and dayPL > 당일손실 Then
Sell("매도");
#추가진입
if MarketPosition==1 and MaxEntries==1 Then
buy("매수추가진입",atlimit,Entryprice-하락포인트,추가진입수량);
if MarketPosition==-1 and MaxEntries==1 Then
sell("매도추가진입",atlimit,Entryprice+하락포인트,추가진입수량);
if crossdown(S2,S3) Then{
ExitLong("매수청산0");
}
if crossup(S2,S3) Then{
ExitShort("매도청산0");
}
#평균단가에서 0.4 손실시 청산, 0.6 수익시 청산
if MarketPosition == 1 Then{
ExitLong("매수손절",AtStop,AvgEntryPrice-0.4);
ExitLong("매수익절",Atlimit,AvgEntryPrice+0.6);
}
if MarketPosition == -1 Then{
ExitShort("매도손절",AtStop,AvgEntryPrice+0.4);
ExitShort("매도익절",AtLimit,AvgEntryPrice-0.6);
}
#하루2포인트 손실발생하면 즉시청산
if MarketPosition == 1 Then
ExitLong("bx1",AtStop,EntryPrice+(-(당일손실)-(dayPL1)));
if MarketPosition == -1 Then
ExitShort("sx1",AtStop,EntryPrice+((당일손실)+(dayPL1)));
SetStopEndofday(150000);
즐거운 하루되세요
> 마코 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 항상 수고 많으십니다.
도움 주신 로직 이것저것 조합해서 시스템을 짜보았는데 오류가 발생해서 제대로 수식을 작성했는지 확인좀 부탁드립니다. 혹시 잘못된 사항 있으면 수정도 해주시면 감사하겠습니다.
--1. 하루 허용 매매횟수 제한 ( 수식처럼 동일 포지션으로 재진입을 하게되면 이 진입횟수에 포함되는것입니까? 만약 포함된다면 하루 8회로 매매횟수를 한정하려면 어떻게 해야되는지요?)
--2. 매매당 손절 0.40 익절 0.60 한정
--3. 진입 후 0.20 P 밀리면 동일 포지션으로 재진입(물타기)
--4. 진입 후 0.20 P 밀리지 않으면 한개 수량만
--4. 재진입 했을 경우 평균단가보다 0.40 밀리면 2개 수량 모두 청산
--5. 재진입 했을 경우 평균단가보다 0.60 먹으면 2개 수량 모두 청산
--6. 익절을 걸지 않으면 다음 신호 발생시까지 쭉 포지션 유지(다음 신호 발생시 청산)
--7. 당일 누적손실 -2.00 P 도달시 바로 청산 후 당일 매매종료
--8. 신호 발생 시 매수면 신호보다 한틱 아래에 진입, 매도면 신호보다 한틱 위에 진입
--9. 15시 매매 종료
-10. 반대 신호 발생시 바로 청산하고 진입
-11. 시장가가 아닌 지정가로 진입을 하도록 할 수 있습니까? 만약 신호 발생한 후 H번째 캔들까지 체결이 안되었을 시, 바로 취소주문 들어가도록이요
제가 시스템 돌려봤을 때, 가장 큰 문제점이 예를들어 진입포인트보다 0.20 P 손실나면 재진입을 하도록 설정해놨을 때, 255.20에 매수를 쳤다면 255.30에 청산을 하고 다음 매도 포지션이 진입을 했다고 하더라도 0.20 P 손실난 255.20 포인트가 오면 매도가 청산되고 매수추가주문이 들어간다는 것입니다.
아 그리고 손익절을 걸고 매매를 시작했을 경우, 재진입을 하면 다음 신호가 발생해도 청산하지않고 손익절이 될 때까지 포지션을 유지하기도 하더라고요..
한번 봐보시고 수정부탁드립니다.
항상 감사합니다.
input : dayentry(8),loss(0.4),Profit(0.6),당일손실(-2),진입수량(1),추가진입수량(1),하락포인트(1),체결후상승(1),체결후하락(1);
var : NP(0),PreNP(0),dayPL(0),S2(0),S3(0);
input : N(2);
var : count(0);
input : Onetick(0.05);
Var : a(0);
a=close;
Count = 0 ;
for Value1 = 0 to 20 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
var : cnt(0);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
}
NP = NetProfit;
if date != date[1] Then{
Condition1 = False;
PreNP = NP[1];
}
dayPL = (NP-PreNP)+PositionProfit;
if crossup(S2,S3) and count < N and dayPL > 당일손실 Then
Buy("매수",atlimit,a-Onetick);
if crossdown(S2,S3) and count < N and dayPL > 당일손실 Then
Sell("매도",atlimit,a+Onetick);
if MarketPosition==1 and MaxEntries==1 Then
buy("매수추가진입",atlimit,Entryprice-하락포인트,추가진입수량);
if MarketPosition==-1 and MaxEntries==1 Then
sell("매도추가진입",atlimit,Entryprice+하락포인트,추가진입수량);
SetStopEndofday(150000);
if MarketPosition == 1 and MaxEntries==2 and crossdown(S2,S3) Then{
ExitLong("매수청산1",Atlimit,AvgEntryPrice+체결후상승);
ExitLong("매수청산2",Atstop,AvgEntryPrice+체결후하락);
}
if crossdown(S2,S3) Then{
ExitLong("매수청산0");
}
if MarketPosition == -1 and MaxEntries==2 and crossup(S2,S3) Then{
ExitShort("매도청산1",Atlimit,AvgEntryPrice+체결후상승);
ExitShort("매도청산2",Atstop,AvgEntryPrice+체결후하락);
}
if crossup(S2,S3) Then{
ExitShort("매도청산0");
}
다음글
이전글