커뮤니티
수식 문의 드립니다.
2018-10-31 23:16:37
192
글번호 123250
수고가 많으십니다.
<질문1>
구현하려는 식의 조건은 다음과 같습니다.
1. 피라미딩의 모든진입신호 허용한 상태에서
2. 다음봉에서 (시가+1틱) 가격조건이 발생하면 "매수1"진입한다.
3. "매수1"이라는 이름이 이미 진입해 있거나 손절되었으면 같은 이름으로
재진입하지 않는다.
if(MarketPosition != 1 and LatestEntryName(0) != "매수1") Then
Buy("매수1", AtStop, NextBarOpen+(1*PriceScale));
SetStoploss(20*PriceScale,PointStop); //20틱 손절설정
이렇게 했더니 "진입한 봉이 완성되기 전에 손절이 발생하면"
봉 완성 이후에 LatestEntryName이 null값이 나와서 재진입이 발생합니다.
또, "매수1"이라는 이름이 손절되었는지 검사하는 조건도 if문 안에 추가되어야 합니다.
<질문2>
위 질문과 무관하게, 어떤 손절이 발생하여 IsExitName("stoploss", 1)==True 인지 체크해서
모든 변수를 초기화시키고 다시 진입조건을 기다리려고 할 경우
if(IsExitName("stoploss", 1)==True) Then {초기화}
이렇게 했더니 한번 손절이 발생하면 계속 초기화됩니다.
이를 해결하기 위해서
if(var1===0 and IsExitName("stoploss", 1)==True) Then {초기화; var1=1;}
이렇게 했더니 한번만 실행되고 다시 실행되지 않습니다.
var1=0;을 어디선가 해줘야 할 것 같은데요, 어떻게 해야하는지 궁금합니다.
또, IsExitName("stoploss", 1)의 리턴값이 언제까지 유지되는지도 궁금합니다.
다음진입 전까지 계속 유지되는지? 다음진입이 손절이 아닐때까지 유지되는지? 등이 궁금합니다.
바쁘시겠지만 부탁 드립니다.
감사합니다.
답변 1
예스스탁 예스스탁 답변
2018-11-01 14:54:54
안녕하세요
예스스탁입니다.
1
LatestEntryName(0)은 포지션 진입중에만 값이 리턴됩니다.
무포지션일때,반대(매도)포지션일때, 매수포지션일때로
세분화해서 지정해 조건 지정해 주시면 됩니다.
if (MarketPosition == 0 and (IsEntryName("매수1",1) == false or IsExitName("StopLoss",1) == false)) or
(MarketPosition == -1) or
(MarketPosition == 1 and LatestEntryName(0) != "매수1") Then
buy("매수1",AtStop,NextBarOpen+PriceScale*1);
2
청산발생봉에서만 동작하게 하셔야 합니다.
if TotalTrades > TotalTrades[1] and IsEntryName("StopLoss",1) == true Then
{
초기화내용
}
즐거운 하루되세요
> 투자 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 수고가 많으십니다.
<질문1>
구현하려는 식의 조건은 다음과 같습니다.
1. 피라미딩의 모든진입신호 허용한 상태에서
2. 다음봉에서 (시가+1틱) 가격조건이 발생하면 "매수1"진입한다.
3. "매수1"이라는 이름이 이미 진입해 있거나 손절되었으면 같은 이름으로
재진입하지 않는다.
if(MarketPosition != 1 and LatestEntryName(0) != "매수1") Then
Buy("매수1", AtStop, NextBarOpen+(1*PriceScale));
SetStoploss(20*PriceScale,PointStop); //20틱 손절설정
이렇게 했더니 "진입한 봉이 완성되기 전에 손절이 발생하면"
봉 완성 이후에 LatestEntryName이 null값이 나와서 재진입이 발생합니다.
또, "매수1"이라는 이름이 손절되었는지 검사하는 조건도 if문 안에 추가되어야 합니다.
<질문2>
위 질문과 무관하게, 어떤 손절이 발생하여 IsExitName("stoploss", 1)==True 인지 체크해서
모든 변수를 초기화시키고 다시 진입조건을 기다리려고 할 경우
if(IsExitName("stoploss", 1)==True) Then {초기화}
이렇게 했더니 한번 손절이 발생하면 계속 초기화됩니다.
이를 해결하기 위해서
if(var1===0 and IsExitName("stoploss", 1)==True) Then {초기화; var1=1;}
이렇게 했더니 한번만 실행되고 다시 실행되지 않습니다.
var1=0;을 어디선가 해줘야 할 것 같은데요, 어떻게 해야하는지 궁금합니다.
또, IsExitName("stoploss", 1)의 리턴값이 언제까지 유지되는지도 궁금합니다.
다음진입 전까지 계속 유지되는지? 다음진입이 손절이 아닐때까지 유지되는지? 등이 궁금합니다.
바쁘시겠지만 부탁 드립니다.
감사합니다.