커뮤니티
문의 (EX)
2013-11-18 11:19:58
146
글번호 69556
1. 아래 전체식 검증부탁드립니다. EL[#2]가 제대로 작동을 안하는듯 합니다.
if (MarketPosition == 1) then
{
if ( CrossDown(M1, M2 - PriceSclae * 5) ) then
{
MTS.xELReady = TRUE;
MTS.xELClose = C;
}
}
.................
.................
if (MarketPosition == 1) then
{
if ( (최종 매수청산조건 ) then
{
if (MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30) AND (MTX == M1 OR CROSSUP(MTX, M1)) ) then
{
ExitLong("EL[#1]", ONCLOSE, DEF);
}
if ( (MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30) ) then
{
ExitLong("EL[#2]", ATSTOP, MTS.xELClose - PriceScale * 3);
}
}
}
2. 아래 1번케이스와 2번 케이스가 있는데, 2개의 목적은 동일합니다.
근데 1번은 2번을 단순히 풀어쓴 것으로밖에 보이질 않는데, 제가 의도한대로 작동을 하지 않더군요. YT가 내부적으로 디코딩하는 것이 달라서가 아닐까 하는 추측뿐입니다.
자세히 설명해주시면 감사하겠습니다.
1번 케이스
if ( (MTAxTS.xELCheck == 0) AND (MTA > MTS) AND (DayIndex > 0) ) then { MTAxTS.xELCheck = 1; }
if ( (MTAxTS.xELCheck == 1) AND (CrossDown(MTA, MTS)) ) then { MTAxTS.xELCheck = 2; MTAxTS.xELClose = d1CLOSE; }
if ( (MTAxTS.xELCheck == 2) AND (MTA < MTS) ) then { MTAxTS.xELCheck = 3; MTAxTS.xELReady = TRUE; }
if ( (MTAxTS.xELCheck == 3) AND (CrossUp(MTA, MTS)) ) then { MTAxTS.xELCheck = 4; }
if ( (MTAxTS.xELCheck == 4) AND (CrossDown(MTA, MTL)) ) then { MTAxTS.xELCheck = 5; }
if ( (MTAxTS.xELCheck == 5) AND (d1CLOSE > MTAxTS.xELClose) ) then { MTAxTS.xELCheck = 6; }
if ( (MTAxTS.xELCheck == 6) AND (MTA < MTL) ) then { MTAxTS.LT.xELReady = TRUE; }
if ( (MTAxTS.xELReady == TRUE) AND (CrossUp(MTA, MTS + PriceScale)) ) then { MTAxTS.xELReady = FALSE; MTAxTS.xELCheck = 0; MTAxTS.xELClose = 0; }
2번 케이스
if ( (MTAxTS.xELCheck == 0) AND (MTA > MTS) AND (DayIndex > 0) ) then { MTAxTS.xELCheck = 1; }
if ( (MTAxTS.xELCheck == 1) AND (CrossDown(MTA, MTS)) AND (MTA < MTS) ) then { MTAxTS.xELCheck = 2; MTAxTS.xELReady = TRUE; MTAxTS.xELClose = d1CLOSE; }
if ( (MTAxTS.xELCheck == 2) AND (CrossUp(MTA, MTS)) AND (MTA > MTS) ) then { MTAxTS.xELCheck = 3; }
if ( (MTAxTS.xELCheck == 3) AND (CrossDown(MTA, MTL)) AND (d1CLOSE > MTAxTS.xELClose) ) then { MTAxTS.xELCheck = 4; }
if ( (MTAxTS.xELCheck == 4) AND (MTA < MTL) ) then { MTAxTS.LT.xELReady = TRUE; }
if ( (MTAxTS.xELReady == TRUE) AND (CrossUp(MTA, MTS + PriceScale)) ) then { MTAxTS.xELReady = FALSE; MTAxTS.xELCheck = 0; MTAxTS.xELClose = 0; }
3. 아래 진입식과 청산식이 있는데, 명칭 이후에 붙을 수 있는 모든 옵션에 대해 나열해주시고 간단히 설명해주시면 감사하겠습니다.
Buy("BUY[A]");
ExitLong("EL[A]", ONCLOSE, DEF);
4. 장의 성격에 따라 진입을 다르게 해주고 싶습니다. 급등하는 장에서는 시장가라도 따라붙어서 진입하고, 횡보장에서는 다소 느긋하게 싸게 진입을 원합니다. 시스템트레이딩 설정창에서 보면 여러가지(현재가, 시장가, 상대1호가 2호가) 등을 정해줄 수 있던데 시스템 식에서는 이를 어떻게 표현가능한지요??
5.
VARS: 시작시간(0), 연장시간(0);
시작시간 = 090000;
라고 할때
연장시간 = 시작시간 + TimeToMinutes(30); 라고 단순하게 해주면 되는가요??
시간 연산은 어떠한 룰이 있는지요??
늘 감사드립니다.
답변 1
예스스탁 예스스탁 답변
2013-11-18 16:00:57
안녕하세요
예스스탁입니다.
1.
ExitLong("EL[#2]", ATSTOP, MTS.xELClose - PriceScale * 3);
은 if조건 만족하고 다음봉에서 MTS.xELClose - PriceScale * 3 이하의 시세가 발생해면
신호가 발생합니다.
식상에 문제가 될만한 부분은 없습니다.
해당 부분은 조건만족여부를 직접 체크하셔야 합니다.
EL[#2]발생하기 위해서는 3가지 조건이 만족하고 다음봉의 시세조건도 만족을 해야 합니다
아래와 같이 메세지로그로 조건만족여부 체크해서
하나의 봉에서 조건1,조건2,조건3이 모두 만족하고
다음봉에서 MTS.xELClose - PriceScale * 3이하의 시세가 있는지 체크하셔야 합니다.
if (MarketPosition == 1) then
{
MessageLog("조건1 %s",(MarketPosition == 1));
if ( (최종매수청산조건 ) then
{
MessageLog("조건2 %s",최종매수청산조건;
if (MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30) AND (MTX == M1 OR CROSSUP(MTX, M1)) ) then
{
MessageLog("EL[#1]청산발생");
ExitLong("EL[#1]", ONCLOSE, DEF);
}
if ( (MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30) ) then
{
MessageLog("조건3 %s",(MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30), MTS.xELClose - PriceScale * 3);
ExitLong("EL[#2]", ATSTOP, MTS.xELClose - PriceScale * 3);
}
}
}
2.
올려주신 2개의 케이스는 모두 같은 내용입니다.
아래2개의 식을 검색식으로 작성해서 차트에 적용해 보시기 바랍니다.
같은봉에 고가와 저가에 모두 점을 찍고 다른봉에 따로 찍히는 부분이 없습니다.
즉 모두 같은 봉에서 모두 조건에 만족합니다.
MTA,MTS,MTL은 이평으로 대체했습니다.
1번 검색식
var : MTA(0),MTS(0),MTAxTS.xELCheck(0),MTAxTS.xELReady(false),MTAxTS.xELClose(0);
var : d1CLOSE(0),MTL(0),MTAxTS.LT.xELReady(false);
MTA = ma(C,5);
MTS = ma(C,20);
MTL = ma(C,60);
d1CLOSE = c;
if ((MTAxTS.xELCheck == 0) AND (MTA > MTS) AND (DayIndex > 0) ) then
{ MTAxTS.xELCheck = 1;}
if ( (MTAxTS.xELCheck == 1) AND (CrossDown(MTA, MTS)) ) then
{ MTAxTS.xELCheck = 2;
MTAxTS.xELClose = d1CLOSE; }
if ( (MTAxTS.xELCheck == 2) AND (MTA < MTS) ) then
{ MTAxTS.xELCheck = 3;
MTAxTS.xELReady = TRUE; }
if ( (MTAxTS.xELCheck == 3) AND (CrossUp(MTA, MTS)) ) then
{ MTAxTS.xELCheck = 4; }
if ( (MTAxTS.xELCheck == 4) AND (CrossDown(MTA, MTL)) ) then
{ MTAxTS.xELCheck = 5; }
if ( (MTAxTS.xELCheck == 5) AND (d1CLOSE > MTAxTS.xELClose) ) then
{ MTAxTS.xELCheck = 6; }
if ( (MTAxTS.xELCheck == 6) AND (MTA < MTL) ) then
{ MTAxTS.LT.xELReady = TRUE; }
if ( (MTAxTS.xELReady == TRUE) AND (CrossUp(MTA, MTS + PriceScale)) ) then
{
plot1(H+PriceScale,"1",RED);
MTAxTS.xELReady = FALSE;
MTAxTS.xELCheck = 0;
MTAxTS.xELClose = 0; }
2번 검색식
var : MTA(0),MTS(0),MTAxTS.xELCheck(0),MTAxTS.xELReady(false),MTAxTS.xELClose(0);
var : d1CLOSE(0),MTL(0),MTAxTS.LT.xELReady(false);
MTA = ma(C,5);
MTS = ma(C,20);
MTL = ma(C,60);
d1CLOSE = c;
if ((MTAxTS.xELCheck == 0) AND (MTA > MTS) AND (DayIndex > 0) ) then
{ MTAxTS.xELCheck = 1; }
if ( (MTAxTS.xELCheck == 1) AND (CrossDown(MTA, MTS)) AND (MTA < MTS) ) then
{ MTAxTS.xELCheck = 2;
MTAxTS.xELReady = TRUE;
MTAxTS.xELClose = d1CLOSE; }
if ( (MTAxTS.xELCheck == 2) AND (CrossUp(MTA, MTS)) AND (MTA > MTS) ) then
{ MTAxTS.xELCheck = 3; }
if ( (MTAxTS.xELCheck == 3) AND (CrossDown(MTA, MTL)) AND (d1CLOSE > MTAxTS.xELClose) ) then
{ MTAxTS.xELCheck = 4; }
if ( (MTAxTS.xELCheck == 4) AND (MTA < MTL) ) then
{ MTAxTS.LT.xELReady = TRUE; }
if ( (MTAxTS.xELReady == TRUE) AND (CrossUp(MTA, MTS + PriceScale)) ) then
{
plot1(L-PriceScale,"2",BLUE);
MTAxTS.xELReady = FALSE;
MTAxTS.xELCheck = 0;
MTAxTS.xELClose = 0; }
3.
문의하신 내용은 도움말 참고하시기 바랍니다.
각 주문함수 부분에 보시면 매개변수에 대한 설명이 있습니다.
4.
시스템 수식안에서는 주문가격을 지정하는 부분이 없습니다.
랭귀지는 신호발생까지만 담당하고 신호가 발생하면
시스템 트레이딩 설정창의 매매탭의 매매가격으로 주문이 나가는 구조입니다.
5.
수식에서는 봉의 데이터를 쓰고 시간도 봉에서 리턴이 됩니다.
장의 시작시간은 9시 일수도 있고 년중 첫날이나 수능일의 경우 10시입니다.
그러므로 아래와 같이 첫봉에서 첫봉 시간으로 TimeToMinutes을 구하신 후에
해당 값에 30을 더해 연장시간을 구하셔야 합니다.
VARS: 시작시간(0), 연장시간(0);
if dayindex == 0 Then{
시작시간 = TimeToMinutes(stime);
연장시간 = 시작시간+30;
}
#현재 분단위 시간이 연장시간 이후일때
if TimeToMinutes(stime) >= 연장시간 Then
#TimeToMinutes은 밤 0시이후 경과된 분수로 환산하는 함수입니다.
#이용에 참고하시기 바랍니다.
즐거운 하루되세요
> TRF 님이 쓴 글입니다.
> 제목 : 문의 (EX)
> 1. 아래 전체식 검증부탁드립니다. EL[#2]가 제대로 작동을 안하는듯 합니다.
if (MarketPosition == 1) then
{
if ( CrossDown(M1, M2 - PriceSclae * 5) ) then
{
MTS.xELReady = TRUE;
MTS.xELClose = C;
}
}
.................
.................
if (MarketPosition == 1) then
{
if ( (최종 매수청산조건 ) then
{
if (MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30) AND (MTX == M1 OR CROSSUP(MTX, M1)) ) then
{
ExitLong("EL[#1]", ONCLOSE, DEF);
}
if ( (MTS.xELReady == TRUE) AND (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30) ) then
{
ExitLong("EL[#2]", ATSTOP, MTS.xELClose - PriceScale * 3);
}
}
}
2. 아래 1번케이스와 2번 케이스가 있는데, 2개의 목적은 동일합니다.
근데 1번은 2번을 단순히 풀어쓴 것으로밖에 보이질 않는데, 제가 의도한대로 작동을 하지 않더군요. YT가 내부적으로 디코딩하는 것이 달라서가 아닐까 하는 추측뿐입니다.
자세히 설명해주시면 감사하겠습니다.
1번 케이스
if ( (MTAxTS.xELCheck == 0) AND (MTA > MTS) AND (DayIndex > 0) ) then { MTAxTS.xELCheck = 1; }
if ( (MTAxTS.xELCheck == 1) AND (CrossDown(MTA, MTS)) ) then { MTAxTS.xELCheck = 2; MTAxTS.xELClose = d1CLOSE; }
if ( (MTAxTS.xELCheck == 2) AND (MTA < MTS) ) then { MTAxTS.xELCheck = 3; MTAxTS.xELReady = TRUE; }
if ( (MTAxTS.xELCheck == 3) AND (CrossUp(MTA, MTS)) ) then { MTAxTS.xELCheck = 4; }
if ( (MTAxTS.xELCheck == 4) AND (CrossDown(MTA, MTL)) ) then { MTAxTS.xELCheck = 5; }
if ( (MTAxTS.xELCheck == 5) AND (d1CLOSE > MTAxTS.xELClose) ) then { MTAxTS.xELCheck = 6; }
if ( (MTAxTS.xELCheck == 6) AND (MTA < MTL) ) then { MTAxTS.LT.xELReady = TRUE; }
if ( (MTAxTS.xELReady == TRUE) AND (CrossUp(MTA, MTS + PriceScale)) ) then { MTAxTS.xELReady = FALSE; MTAxTS.xELCheck = 0; MTAxTS.xELClose = 0; }
2번 케이스
if ( (MTAxTS.xELCheck == 0) AND (MTA > MTS) AND (DayIndex > 0) ) then { MTAxTS.xELCheck = 1; }
if ( (MTAxTS.xELCheck == 1) AND (CrossDown(MTA, MTS)) AND (MTA < MTS) ) then { MTAxTS.xELCheck = 2; MTAxTS.xELReady = TRUE; MTAxTS.xELClose = d1CLOSE; }
if ( (MTAxTS.xELCheck == 2) AND (CrossUp(MTA, MTS)) AND (MTA > MTS) ) then { MTAxTS.xELCheck = 3; }
if ( (MTAxTS.xELCheck == 3) AND (CrossDown(MTA, MTL)) AND (d1CLOSE > MTAxTS.xELClose) ) then { MTAxTS.xELCheck = 4; }
if ( (MTAxTS.xELCheck == 4) AND (MTA < MTL) ) then { MTAxTS.LT.xELReady = TRUE; }
if ( (MTAxTS.xELReady == TRUE) AND (CrossUp(MTA, MTS + PriceScale)) ) then { MTAxTS.xELReady = FALSE; MTAxTS.xELCheck = 0; MTAxTS.xELClose = 0; }
3. 아래 진입식과 청산식이 있는데, 명칭 이후에 붙을 수 있는 모든 옵션에 대해 나열해주시고 간단히 설명해주시면 감사하겠습니다.
Buy("BUY[A]");
ExitLong("EL[A]", ONCLOSE, DEF);
4. 장의 성격에 따라 진입을 다르게 해주고 싶습니다. 급등하는 장에서는 시장가라도 따라붙어서 진입하고, 횡보장에서는 다소 느긋하게 싸게 진입을 원합니다. 시스템트레이딩 설정창에서 보면 여러가지(현재가, 시장가, 상대1호가 2호가) 등을 정해줄 수 있던데 시스템 식에서는 이를 어떻게 표현가능한지요??
5.
VARS: 시작시간(0), 연장시간(0);
시작시간 = 090000;
라고 할때
연장시간 = 시작시간 + TimeToMinutes(30); 라고 단순하게 해주면 되는가요??
시간 연산은 어떠한 룰이 있는지요??
늘 감사드립니다.
다음글
이전글