예스스탁
예스스탁 답변
2023-06-23 09:59:47
안녕하세요
예스스탁입니다.
1
현재 작성하신 내용이 진입과 청산이 하나봉에서 동시에 충족될 수 있습니다.
청산발생시 진입이 동시에 발생하면 청산이 해당 진입까지 다시 청산합니다.
신호 및에 0은 남은 수량입니다.
해당 봉에서 모두 청산되수 수량이 0이 되었다는 의미입니다.
2
진입과 청산이 동시 충족할수 있는 경우에
청산이 발생하면 진입이 나오지 않게 코딩하셔야 합니다.
청산 중 "매도"는 봉 미완성시에 나오는 청산이므로 관계가 없고
나머지 청산은 모두 봉완성시 청산으로 진입과 같이 만족할 수 있습니다.
봉완성시 청산 조건에 만족하면 진입이 발생하지 않게 변수등으로 제어하시면 됩니다.
input : nDate(20200101), 보유기간(14);
var : hh(0), MID(0), varl(0), vol(0);
#첫 매수조건
if MarketPosition == 0
and sDate >= nDate
and V > 4 * V[1]
and C >= O
and Average(C, 120)[1] < Average(C,120)
and L <= Average(C,5)
and C >= Average(C, 120)
Then Buy("첫 매수", OnClose,Def,1);
if MarketPosition ==1 and LatestEntryName(0) == "첫 매수" Then
MID = (C[BarsSinceEntry] + O[BarsSinceEntry])/2;
#추가매수조건
if MarketPosition ==1 Then
{
varl = (L-C[1])/C[1]*100;
vol = floor(abs(varl));
if CurrentContracts > CurrentContracts[1] Then
hh = h;
if h > hh Then hh = h;
#매도(익절,청산 조건)
Condition1 = False;
if DateToJulian(sDate) >= DateToJulian(EntryDate) + 보유기간 Then
{
Condition1 = true;
ExitLong("기간이탈", OnClose);
}
if C <= Average(C,120) Then
{
Condition1 = true;
ExitLong("이평이탈", OnClose);
}
if C < MID or O < MID Then
{
Condition1 = true;
ExitLong("중심봉이탈",OnClose);
}
if L <= 0.98 * Average(C, 5) Then
{
Condition1 = true;
ExitLong("강제청산",OnClose);
}
if hh >= AvgEntryPrice * 1.06 Then ExitLong("매도",AtStop,hh*0.97);
if Condition1 == False and
vol > 1 and DateToJulian(sDate) < DateToJulian(EntryDate) + 보유기간 Then
Buy("추가매수",OnClose,Def,vol);
}
즐거운 하루되세요
> 현우르곳 님이 쓴 글입니다.
> 제목 : 잘 부탁드립니다
> 안녕하세요.
코드 실행결과 강제청산과 추가매수가 한봉에 같이 나옵니다.
1. 매도가 추가매수보다 먼저 작동해서 추가매수를 진행하지 못하게 하고 싶습니다. 캔들 하나에 매도와 매수는 한번만 이루어지게 부탁드려요
2. 그리고 코드상에서 추가매수는 0이 나올 수 없는데 0이 나오네요.. 왜그런가요?
감사합니다
input : nDate(20200101), 보유기간(14);
var : hh(0), MID(0), varl(0), vol(0);
#첫 매수조건
if MarketPosition == 0
and sDate >= nDate
and V > 4 * V[1]
and C >= O
and Average(C, 120)[1] < Average(C,120)
and L <= Average(C,5)
and C >= Average(C, 120)
Then Buy("첫 매수", OnClose,Def,1);
if MarketPosition ==1 and LatestEntryName(0) == "첫 매수" Then
MID = (C[BarsSinceEntry] + O[BarsSinceEntry])/2;
#추가매수조건
if MarketPosition ==1 Then{
varl = (L-C[1])/C[1]*100;
vol = floor(abs(varl));
if vol > 1 and DateToJulian(sDate) < DateToJulian(EntryDate) + 보유기간 Then
Buy("추가매수",OnClose,Def,vol);
if CurrentContracts > CurrentContracts[1] Then hh = h;
if h > hh Then hh = h;
#매도(익절,청산 조건)
if DateToJulian(sDate) >= DateToJulian(EntryDate) + 보유기간 Then ExitLong("기간이탈", OnClose);
if C <= Average(C,120) Then ExitLong("이평이탈", OnClose);
if C < MID or O < MID Then ExitLong("중심봉이탈",OnClose);
if L <= 0.98 * Average(C, 5) Then ExitLong("강제청산",OnClose);
if hh >= AvgEntryPrice * 1.06 Then ExitLong("매도",AtStop,hh*0.97);
}