첨부 이미지
그림1
안녕하세요 개발자님.
아래 수식은 간단한 변동성 돌파 전략입니다.
문제가 아래와 같은 atstop수식으로 하면 가끔 다음날 시초가에 매수되는 경우가 있습니다. 기본 변동성 돌파 전략 그대로 항상 시가+dayrange 에 매수되고, 시가-dayrange에 매도되게 만들 수 있을까요..? (atstop 주문으로 부탁드립니다!)
항상 도움주셔서 감사합니다.
Var : dayrange(0),cnt(0);
/////////////////////////////////////////
dayrange=(DayHigh(1) - DayLow(1)) * 0.5;
///////////////////////////////////////////////////////////////////
Var1=0;
For cnt = 0 to 10
{
If EntryDate(cnt)==sDate Then
Var1=Var1 + 1;
}
/////////////////////////////////////////////////////////////////////////
If MarketPosition==0 and Var1<1 Then
Buy("매수",AtStop,DayOpen+dayrange);
If MarketPosition == 1 and NextBarSdate!=sDate Then
ExitLong("매수청산",AtMarket);
If MarketPosition==0 and Var1<1 Then
Sell("매도",AtStop,DayOpen-dayrange);
If MarketPosition == -1 and sTime==152000 Then
ExitShort("매도청산");
답변 1
예스스탁
예스스탁 답변
2022-09-28 09:51:49
안녕하세요
예스스탁입니다.
신호타입 중 atstop이나 atlimit은
봉완성시 값이 셋팅이 되고 다음봉 시세와 셋팅된 값을 비교해 신호가 발생합니다.
당일 마지막봉에 셋팅이 되면 다음날 첫봉의 시세와 비교하게 됩니다.
진입식에 NextBarSdate == sDate 조건을 추가하시면 당일 마지막봉에서는 셋팅이 되지 않습니다.
Var : dayrange(0),cnt(0);
/////////////////////////////////////////
dayrange=(DayHigh(1) - DayLow(1)) * 0.5;
///////////////////////////////////////////////////////////////////
Var1=0;
For cnt = 0 to 10
{
If EntryDate(cnt)==sDate Then
Var1=Var1 + 1;
}
/////////////////////////////////////////////////////////////////////////
If MarketPosition==0 and Var1<1 and NextBarSdate == sDate Then
Buy("매수",AtStop,DayOpen+dayrange);
If MarketPosition == 1 and NextBarSdate!=sDate Then
ExitLong("매수청산",AtMarket);
If MarketPosition==0 and Var1<1 and NextBarSdate == sDate Then
Sell("매도",AtStop,DayOpen-dayrange);
If MarketPosition == -1 and sTime==152000 Then
ExitShort("매도청산");
즐거운 하루되세요
> 히익 님이 쓴 글입니다.
> 제목 : 전략 오류
> 안녕하세요 개발자님.
아래 수식은 간단한 변동성 돌파 전략입니다.
문제가 아래와 같은 atstop수식으로 하면 가끔 다음날 시초가에 매수되는 경우가 있습니다. 기본 변동성 돌파 전략 그대로 항상 시가+dayrange 에 매수되고, 시가-dayrange에 매도되게 만들 수 있을까요..? (atstop 주문으로 부탁드립니다!)
항상 도움주셔서 감사합니다.
Var : dayrange(0),cnt(0);
/////////////////////////////////////////
dayrange=(DayHigh(1) - DayLow(1)) * 0.5;
///////////////////////////////////////////////////////////////////
Var1=0;
For cnt = 0 to 10
{
If EntryDate(cnt)==sDate Then
Var1=Var1 + 1;
}
/////////////////////////////////////////////////////////////////////////
If MarketPosition==0 and Var1<1 Then
Buy("매수",AtStop,DayOpen+dayrange);
If MarketPosition == 1 and NextBarSdate!=sDate Then
ExitLong("매수청산",AtMarket);
If MarketPosition==0 and Var1<1 Then
Sell("매도",AtStop,DayOpen-dayrange);
If MarketPosition == -1 and sTime==152000 Then
ExitShort("매도청산");