커뮤니티
Entryname 반환값에 대해서 다시 올립니다.
2014-06-20 07:22:20
212
글번호 75985
처음 올린 글에 대한 답변이 너무 무성의하고 해결책이 아니기에 다시 질문 드립니다.
먼저 관리자님께 심한 용어좀 사용하겠습니다. 이해해 주시기 바랍니다.
아니 이걸 답변이라고 한 겁니까?
Entry명을 모르면, 진입가격도 알 수 없지요.
또한 청산조건은 진입가격대비 트레일링스탑을 하는 것인데,
어떻게 청산을 한단 말입니까?
관리자님이 상상하시는 청산조건은 어떤 것인지 심히 궁금하네요.
예를 들어 스토캐스틱이나, 이평이 변하면 무조건 청산하는 방식인가요?
어이가 없습니다.
또한 EntryPrice도 (N)을 사용할 수 없게 뒤죽박죽으로 리턴됩니다.
Entryname이 첫번째 것만 나온다고요?
그렇게라도 규칙성이 있다면 정말 좋겠는데, 아무런 규칙성이 없습니다.
이런 Bug를 가진 툴로서는 절대 피라미딩을 해서는 안 되는 거지요.
피라미딩을 하지 말라고 해야지, 어떻게 피라미딩을 허용하고서 이런 Bug를 방치한단 말입니까?
Bug가 있다고 질문을 했더니, 원래 그런게 정상인 것처럼 답변을 한대서야 말이 됩니까?
Bug를 언제까지 고칠 것인지, 아니면 피라미딩을 하지 말라고 해야 하는 것 아닌가요?
Bug라고 하는 이유는 사용자 설명서("예스 트레이더 구문) 148페이지에 나와 있는 아래 내용입니다.
=========================================================================
EntryName
설명: 진입명 리턴 함수
※ N은 진입 위치. 진입위치는 현재를 기준으로 역순으로 지정.
※ 최근 진입은 0, 직전 진입 1,……
※ (0)은 생략가능
※ 피라미딩 상황에서는 포지션이 시작되는 첫 진입의 이름
함수: EntryName(N) == “진입명” or EntryName(N) != “진입명”
예제: 일반적으로 진입별로 청산을 달리하고자 할 때와 같이
진입명칭을 확인해야 할 때 사용된다.
==================================================================================
제가 작성한 프로그램은 아래와 같습니다.
===================================================================================
If MarketPosition==1 Then
For JJ=0 to CurrentContracts-1 Begin
If EntryName(JJ)=="L-Pv1" Then KK=1;
Else If EntryName(JJ)=="L-Pv2" Then KK=2;
Else KK==99;
Max_Profit= Highest(H, BarsSinceEntry(JJ)) - EntryPrice(JJ);
Max_Loss = EntryPrice(JJ) - Lowest(L, BarsSinceEntry(JJ));
If CrossDown(StoK,StoD) Then Begin
TS_Point= A_Long_TrStPoint_M(DATR, JJ, L1_T1[KK], L1_R1[KK]);
If TS_Point >0 Then
If KK==1 Then ExitLong("수톱11", atstop, TS_Point, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수톱12", atstop, TS_Point, "L-PV2", 1);
End
If (DIM-DIP)>(DIM[BarsSinceEntry(JJ)]-DIP[BarsSinceEntry(JJ)]) + DIGAP Then Begin
TS_Point= A_Long_TrStPoint_M(DATR, JJ, L2_T1[KK], L2_R1[KK]);
If TS_Point >0 Then
If KK==1 Then ExitLong("수톱21", atstop, TS_Point, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수톱22", atstop, TS_Point, "L-PV2", 1);
End
If CrossDown(MACDv, MACDsig) Then Begin
TS_Point= A_Long_TrStPoint_M(DATR, JJ, L3_T1[KK], L3_R1[KK]);
If TS_Point >0 Then
If KK==1 Then ExitLong("수톱31", atstop, TS_Point, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수톱32", atstop, TS_Point, "L-PV2", 1);
End
If Max_Profit < LSMinPft[KK]*DATR and CrossDown(StoK, StoD) Then
If KK==1 Then ExitLong("수절11", Atstop, EntryPrice(JJ)-LSLCPnt[KK]*DATR, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수절12", Atstop, EntryPrice(JJ)-LSLCPnt[KK]*DATR, "L-PV2", 1);
If Max_Profit < LDMinPft[KK]*DATR and (DIM-DIP)>(DIM[BarsSinceEntry(JJ)]-DIP[BarsSinceEntry(JJ)]) + LLC_DIGAP[KK] Then
If KK==1 Then ExitLong("수절21", Atstop, EntryPrice(JJ)-LDLCPnt[KK]*DATR, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수절22", Atstop, EntryPrice(JJ)-LDLCPnt[KK]*DATR, "L-PV2", 1);
End
이 로직을 엔트리명에 무관하게 처리할 수 있는 방법을 구체적으로 알려 주세요.
부탁드립니다.
==============================================================================
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : Entryname
> 안녕하세요
예스스탁입니다.
entryname은 해당 포지션의 첫번째 진입명만 리턴합니다.
그러므로 피라미딩 상태에서
진입명별로 청산을 하고자 하시면
청산함수에 매개변수 중 진입명을 지정하는 부분이 있습니다.
이름을 지정하시면 해당 이름으로 진입이 있을때만 발생하고
해당 이름으로 들어간 수량만큼만 청산을 합니다.
if 매수청산조건1 then
exitlong("bx1",onclose,def,"매수1");
if 매수청산조건2 then
exitlong("bx1",onclose,def,"매수2");
즐거운 하루되세요
> 좋은선물 님이 쓴 글입니다.
> 제목 : Entryname
> 피라미딩으로 들어가서 진입명으로 구분하여 청산하고자 하는데,
진입명이 이상하게 나오네요.
간단한 프로그램 예제를 쓰자면,
If Close>Dayopen+0.5 Then Buy("매수1");
If Close>Ma(C,5) Then Buy("매수2");
If sdate==20140602 Then
messagelog("%s %s", entryname(0), Entryname(1));
이렇게 해서 보면
위의 그림과 같이 나옵니다.
해결 방법 부탁드립니다.
답변 1
예스스탁 예스스탁 답변
2014-06-20 11:12:46
> 좋은선물 님이 쓴 글입니다.
> 제목 : Entryname 반환값에 대해서 다시 올립니다.
> 처음 올린 글에 대한 답변이 너무 무성의하고 해결책이 아니기에 다시 질문 드립니다.
먼저 관리자님께 심한 용어좀 사용하겠습니다. 이해해 주시기 바랍니다.
아니 이걸 답변이라고 한 겁니까?
Entry명을 모르면, 진입가격도 알 수 없지요.
또한 청산조건은 진입가격대비 트레일링스탑을 하는 것인데,
어떻게 청산을 한단 말입니까?
관리자님이 상상하시는 청산조건은 어떤 것인지 심히 궁금하네요.
예를 들어 스토캐스틱이나, 이평이 변하면 무조건 청산하는 방식인가요?
어이가 없습니다.
또한 EntryPrice도 (N)을 사용할 수 없게 뒤죽박죽으로 리턴됩니다.
Entryname이 첫번째 것만 나온다고요?
그렇게라도 규칙성이 있다면 정말 좋겠는데, 아무런 규칙성이 없습니다.
이런 Bug를 가진 툴로서는 절대 피라미딩을 해서는 안 되는 거지요.
피라미딩을 하지 말라고 해야지, 어떻게 피라미딩을 허용하고서 이런 Bug를 방치한단 말입니까?
Bug가 있다고 질문을 했더니, 원래 그런게 정상인 것처럼 답변을 한대서야 말이 됩니까?
Bug를 언제까지 고칠 것인지, 아니면 피라미딩을 하지 말라고 해야 하는 것 아닌가요?
Bug라고 하는 이유는 사용자 설명서("예스 트레이더 구문) 148페이지에 나와 있는 아래 내용입니다.
=========================================================================
EntryName
설명: 진입명 리턴 함수
※ N은 진입 위치. 진입위치는 현재를 기준으로 역순으로 지정.
※ 최근 진입은 0, 직전 진입 1,……
※ (0)은 생략가능
※ 피라미딩 상황에서는 포지션이 시작되는 첫 진입의 이름
함수: EntryName(N) == “진입명” or EntryName(N) != “진입명”
예제: 일반적으로 진입별로 청산을 달리하고자 할 때와 같이
진입명칭을 확인해야 할 때 사용된다.
==================================================================================
제가 작성한 프로그램은 아래와 같습니다.
===================================================================================
If MarketPosition==1 Then
For JJ=0 to CurrentContracts-1 Begin
If EntryName(JJ)=="L-Pv1" Then KK=1;
Else If EntryName(JJ)=="L-Pv2" Then KK=2;
Else KK==99;
Max_Profit= Highest(H, BarsSinceEntry(JJ)) - EntryPrice(JJ);
Max_Loss = EntryPrice(JJ) - Lowest(L, BarsSinceEntry(JJ));
If CrossDown(StoK,StoD) Then Begin
TS_Point= A_Long_TrStPoint_M(DATR, JJ, L1_T1[KK], L1_R1[KK]);
If TS_Point >0 Then
If KK==1 Then ExitLong("수톱11", atstop, TS_Point, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수톱12", atstop, TS_Point, "L-PV2", 1);
End
If (DIM-DIP)>(DIM[BarsSinceEntry(JJ)]-DIP[BarsSinceEntry(JJ)]) + DIGAP Then Begin
TS_Point= A_Long_TrStPoint_M(DATR, JJ, L2_T1[KK], L2_R1[KK]);
If TS_Point >0 Then
If KK==1 Then ExitLong("수톱21", atstop, TS_Point, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수톱22", atstop, TS_Point, "L-PV2", 1);
End
If CrossDown(MACDv, MACDsig) Then Begin
TS_Point= A_Long_TrStPoint_M(DATR, JJ, L3_T1[KK], L3_R1[KK]);
If TS_Point >0 Then
If KK==1 Then ExitLong("수톱31", atstop, TS_Point, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수톱32", atstop, TS_Point, "L-PV2", 1);
End
If Max_Profit < LSMinPft[KK]*DATR and CrossDown(StoK, StoD) Then
If KK==1 Then ExitLong("수절11", Atstop, EntryPrice(JJ)-LSLCPnt[KK]*DATR, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수절12", Atstop, EntryPrice(JJ)-LSLCPnt[KK]*DATR, "L-PV2", 1);
If Max_Profit < LDMinPft[KK]*DATR and (DIM-DIP)>(DIM[BarsSinceEntry(JJ)]-DIP[BarsSinceEntry(JJ)]) + LLC_DIGAP[KK] Then
If KK==1 Then ExitLong("수절21", Atstop, EntryPrice(JJ)-LDLCPnt[KK]*DATR, "L-Pv1", 1);
Else If KK==2 Then ExitLong("수절22", Atstop, EntryPrice(JJ)-LDLCPnt[KK]*DATR, "L-PV2", 1);
End
이 로직을 엔트리명에 무관하게 처리할 수 있는 방법을 구체적으로 알려 주세요.
부탁드립니다.
==============================================================================
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : Entryname
> 안녕하세요
예스스탁입니다.
entryname은 해당 포지션의 첫번째 진입명만 리턴합니다.
그러므로 피라미딩 상태에서
진입명별로 청산을 하고자 하시면
청산함수에 매개변수 중 진입명을 지정하는 부분이 있습니다.
이름을 지정하시면 해당 이름으로 진입이 있을때만 발생하고
해당 이름으로 들어간 수량만큼만 청산을 합니다.
if 매수청산조건1 then
exitlong("bx1",onclose,def,"매수1");
if 매수청산조건2 then
exitlong("bx1",onclose,def,"매수2");
즐거운 하루되세요
> 좋은선물 님이 쓴 글입니다.
> 제목 : Entryname
> 피라미딩으로 들어가서 진입명으로 구분하여 청산하고자 하는데,
진입명이 이상하게 나오네요.
간단한 프로그램 예제를 쓰자면,
If Close>Dayopen+0.5 Then Buy("매수1");
If Close>Ma(C,5) Then Buy("매수2");
If sdate==20140602 Then
messagelog("%s %s", entryname(0), Entryname(1));
이렇게 해서 보면
위의 그림과 같이 나옵니다.
해결 방법 부탁드립니다.