커뮤니티
문의드립니다.
2018-11-12 08:02:59
178
글번호 123522
도와주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
매번 진입 필터링으로 아래 수식쓰고 있는데요. 이거 답변해주신 것처럼 atstop, atlimit일 때도 진입횟수 제한 필터링하려면 어떻게 해야 하나요?
input : entryCount(1);
var : count(0) ;
#진입회수제한
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then {
}
// 답변
3
자동주문은 차트에서 신호가 발생하면 무조건 주문이 발생합니다.
실전에 적용하시면 모두 주문이 집행됩니다.
신호발생위치로 보아 buy와 sell에 atstop이나 atlimit을 사용해 신호를 발생한 것입니다.
해당타입은 봉완성시 조건이 만족하면 다음봉에 신호가 발생합니다.
진입횟수제한은 if문(완성봉기준)으로 판단하는 것입니다.
모두 전봉에 진입1회 필터링조건이 만족했기에 동시 셋팅되어 신호가 발생한것입니다.
봉미완성시에 if문으로 지정한 조건을 체크하지는 않습니다.
즉 진입이 1회이면 한봉에 동시에 셋팅되지 않게 사용자분이 전략상황에 맞게 코딩하셔야 합니다.
2. 기타
피라미딩 관련해서 질문드립니다.
피라미딩하면 봉 하나에서 신호가 여러개 나온다고 하셨습니다. 그럼 피라미딩하면 그 청산신호도 여러개가 봉 하나에서 나오나요.(예전에 만들어주신 수식 돌려보면 그런 거 같기는 한데요.) 그리고 봉 하나에서 여러개 진입, 여러개 청산 이렇게도 된다는 이야긴가요?
가령 5틱마다 재진입, 고가 -5틱 떨어질 때마다 하나하나 청산 이렇게 해놓으면 5틱마다 계속 진입하고, 같은 봉에서 고가 대비 5틱씩 떨어지면 5틱마다 청산하나요?
3. 이거 이전에 예스스탁님이 만들어주신 인트라데이 전략 해선용 제가 좀 고친 건데요. 백테스팅해보니 나스닥에선 아무 진입을 안하더라구요. 기본적인 인트라데이 전략인데 진입이 없을 것 같진 않은데요. 그리고 신호가 나오는 것도 국선 지수랑은 달라 보입니다. 수정좀 부탁드립니다.
inputs: InitMin(90),stopp(1),SS(90000),EE(150000);
Variables: SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False);
SessStartMin = TimeToMinutes(SS);
TradeTime = TimeToMinutes(sTime);
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
input : 진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if Count < 진입횟수 and Tcond == true then
{
If TradeTime <= SessStartMin + InitMin Then {
If Date <> Date[1] Then {
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
Else
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
}
Else
{
If sTime < EE Then {
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4. 3번 수식 수정한 내용 썸머타임에 따라 breakout시점을 다르게 하도록(썸머타임 뒤에는 한시간 뒤의 고가나 저가를 브레이크 하도록)하나 더 부탁드립니다. 저번 만들어주신 거 보고 수정하려 해도 잘 모르겠습니다.
답변 3
예스스탁 예스스탁 답변
2018-11-12 11:26:00
안녕하세요
예스스탁입니다.
1
해당부분은 진입횟수 카운트 하는 계산식 안에서 처리가 되지 않습니다.
한봉에서 매수와 매도가 동시에 셋팅되지 않게 하는 부분이므로
매수나 매도진입에 동시만족하지 않는 조건을 사용자분이 추가해 주셔야 합니다.
예를 들어 매수는 양봉조건, 매도는 음봉조건을 추가하면 한봉에 동시에 셋팅을 되지 않습니다.
해당 조건은 사용자분이 별도로 전략에 맞게 고려해 보아야 하는 부분입니다.
혹은 아래와 같이 작성하면 동시만족시 매수쪽만 셋팅되게 할수 있습니다.
input : entryCount(1);
var : count(0) ;
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then
{
Condition1 = false;
if 매수진입조건 and Condition1 == false then
{
Condition1 = true;
buy("b",AtStop,매수가격);
}
if 매도진입조건 and Condition1 == false then
{
Condition1 = true;
sell("s",AtStop,매도가격);
}
}
2
청산함수가 여러개 이면 한봉에 여러번 발생할수 있습니다.
즉 수식에서 작성한 신호함수당 한번씩 발생할수 있다고 생각하시면 됩니다.
3
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
Var : SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False),S1(0),D1(0),TM(0);
input : InitMin(90),stopp(1),진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
S1 = TimeToMinutes(stime);
D1 = sdate;
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
If TM <= InitMin Then
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
else
{
if Count < 진입횟수 and Tcond == true then
{
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
Var : SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False),S1(0),D1(0),TM(0);
input : InitMin(90),stopp(1);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
Var : Summer(False),Year(0);
var : StartTime(0),endTime(0),Xtime(0);
Year = Floor(sDate / 10000);
Value1 = (10000 * Year) + (100 * 3) + 1;
Value2 = 15 - dayofweek(value1);
value3 = (10000 * Year) + (100 * 11) + 1;
value4 = 8 - dayofweek(value3);
Summer = date > (10000 * Year) + (100 * 3) + value2
And date < (10000 * Year) + (100 * 11) + value4;
#썸머타임일때
If Summer == true Then
{
StartTime = 070000;
endtime = 050000;
Xtime = 053400;
}
Else #아닐때
{
StartTime = 080000;
endtime = 060000;
Xtime = 063400;
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) then
{
Tcond = true;
T1 = TotalTrades;
S1 = TimeToMinutes(stime);
D1 = sdate;
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
if (sdate != sdate[1] and stime >= endtime) or
(sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
If TM <= InitMin Then
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
else
{
if Count < 진입횟수 and Tcond == true then
{
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == Xtime or (stime > Xtime and stime < Xtime) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 도와주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
매번 진입 필터링으로 아래 수식쓰고 있는데요. 이거 답변해주신 것처럼 atstop, atlimit일 때도 진입횟수 제한 필터링하려면 어떻게 해야 하나요?
input : entryCount(1);
var : count(0) ;
#진입회수제한
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then {
}
// 답변
3
자동주문은 차트에서 신호가 발생하면 무조건 주문이 발생합니다.
실전에 적용하시면 모두 주문이 집행됩니다.
신호발생위치로 보아 buy와 sell에 atstop이나 atlimit을 사용해 신호를 발생한 것입니다.
해당타입은 봉완성시 조건이 만족하면 다음봉에 신호가 발생합니다.
진입횟수제한은 if문(완성봉기준)으로 판단하는 것입니다.
모두 전봉에 진입1회 필터링조건이 만족했기에 동시 셋팅되어 신호가 발생한것입니다.
봉미완성시에 if문으로 지정한 조건을 체크하지는 않습니다.
즉 진입이 1회이면 한봉에 동시에 셋팅되지 않게 사용자분이 전략상황에 맞게 코딩하셔야 합니다.
2. 기타
피라미딩 관련해서 질문드립니다.
피라미딩하면 봉 하나에서 신호가 여러개 나온다고 하셨습니다. 그럼 피라미딩하면 그 청산신호도 여러개가 봉 하나에서 나오나요.(예전에 만들어주신 수식 돌려보면 그런 거 같기는 한데요.) 그리고 봉 하나에서 여러개 진입, 여러개 청산 이렇게도 된다는 이야긴가요?
가령 5틱마다 재진입, 고가 -5틱 떨어질 때마다 하나하나 청산 이렇게 해놓으면 5틱마다 계속 진입하고, 같은 봉에서 고가 대비 5틱씩 떨어지면 5틱마다 청산하나요?
3. 이거 이전에 예스스탁님이 만들어주신 인트라데이 전략 해선용 제가 좀 고친 건데요. 백테스팅해보니 나스닥에선 아무 진입을 안하더라구요. 기본적인 인트라데이 전략인데 진입이 없을 것 같진 않은데요. 그리고 신호가 나오는 것도 국선 지수랑은 달라 보입니다. 수정좀 부탁드립니다.
inputs: InitMin(90),stopp(1),SS(90000),EE(150000);
Variables: SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False);
SessStartMin = TimeToMinutes(SS);
TradeTime = TimeToMinutes(sTime);
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
input : 진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if Count < 진입횟수 and Tcond == true then
{
If TradeTime <= SessStartMin + InitMin Then {
If Date <> Date[1] Then {
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
Else
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
}
Else
{
If sTime < EE Then {
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4. 3번 수식 수정한 내용 썸머타임에 따라 breakout시점을 다르게 하도록(썸머타임 뒤에는 한시간 뒤의 고가나 저가를 브레이크 하도록)하나 더 부탁드립니다. 저번 만들어주신 거 보고 수정하려 해도 잘 모르겠습니다.
잡다백수
2018-11-12 12:07:52
1 재질문
코딩 감사합니다. 그런데 만들어주신 조건 보면 condition이 없는데요. 어떻게 매수만 진입하게 할 수 있는지 잘 이해가지 않습니다.
condition == C > O;
이렇게 컨티션을 추가하면 된다는 이야긴가요? 그런데 수식을 보면 Condition1이 둘다 false이고 둘다 true인데요.
input : entryCount(1);
var : count(0) ;
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then
{
Condition1 = false;
if 매수진입조건 and Condition1 == false then
{
Condition1 = true;
buy("b",AtStop,매수가격);
}
if 매도진입조건 and Condition1 == false then
{
Condition1 = true;
sell("s",AtStop,매도가격);
}
}
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다.
>
안녕하세요
예스스탁입니다.
1
해당부분은 진입횟수 카운트 하는 계산식 안에서 처리가 되지 않습니다.
한봉에서 매수와 매도가 동시에 셋팅되지 않게 하는 부분이므로
매수나 매도진입에 동시만족하지 않는 조건을 사용자분이 추가해 주셔야 합니다.
예를 들어 매수는 양봉조건, 매도는 음봉조건을 추가하면 한봉에 동시에 셋팅을 되지 않습니다.
해당 조건은 사용자분이 별도로 전략에 맞게 고려해 보아야 하는 부분입니다.
혹은 아래와 같이 작성하면 동시만족시 매수쪽만 셋팅되게 할수 있습니다.
input : entryCount(1);
var : count(0) ;
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then
{
Condition1 = false;
if 매수진입조건 and Condition1 == false then
{
Condition1 = true;
buy("b",AtStop,매수가격);
}
if 매도진입조건 and Condition1 == false then
{
Condition1 = true;
sell("s",AtStop,매도가격);
}
}
2
청산함수가 여러개 이면 한봉에 여러번 발생할수 있습니다.
즉 수식에서 작성한 신호함수당 한번씩 발생할수 있다고 생각하시면 됩니다.
3
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
Var : SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False),S1(0),D1(0),TM(0);
input : InitMin(90),stopp(1),진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
S1 = TimeToMinutes(stime);
D1 = sdate;
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
If TM <= InitMin Then
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
else
{
if Count < 진입횟수 and Tcond == true then
{
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
Var : SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False),S1(0),D1(0),TM(0);
input : InitMin(90),stopp(1);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
Var : Summer(False),Year(0);
var : StartTime(0),endTime(0),Xtime(0);
Year = Floor(sDate / 10000);
Value1 = (10000 * Year) + (100 * 3) + 1;
Value2 = 15 - dayofweek(value1);
value3 = (10000 * Year) + (100 * 11) + 1;
value4 = 8 - dayofweek(value3);
Summer = date > (10000 * Year) + (100 * 3) + value2
And date < (10000 * Year) + (100 * 11) + value4;
#썸머타임일때
If Summer == true Then
{
StartTime = 070000;
endtime = 050000;
Xtime = 053400;
}
Else #아닐때
{
StartTime = 080000;
endtime = 060000;
Xtime = 063400;
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) then
{
Tcond = true;
T1 = TotalTrades;
S1 = TimeToMinutes(stime);
D1 = sdate;
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
if (sdate != sdate[1] and stime >= endtime) or
(sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
If TM <= InitMin Then
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
else
{
if Count < 진입횟수 and Tcond == true then
{
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == Xtime or (stime > Xtime and stime < Xtime) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 도와주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
매번 진입 필터링으로 아래 수식쓰고 있는데요. 이거 답변해주신 것처럼 atstop, atlimit일 때도 진입횟수 제한 필터링하려면 어떻게 해야 하나요?
input : entryCount(1);
var : count(0) ;
#진입회수제한
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then {
}
// 답변
3
자동주문은 차트에서 신호가 발생하면 무조건 주문이 발생합니다.
실전에 적용하시면 모두 주문이 집행됩니다.
신호발생위치로 보아 buy와 sell에 atstop이나 atlimit을 사용해 신호를 발생한 것입니다.
해당타입은 봉완성시 조건이 만족하면 다음봉에 신호가 발생합니다.
진입횟수제한은 if문(완성봉기준)으로 판단하는 것입니다.
모두 전봉에 진입1회 필터링조건이 만족했기에 동시 셋팅되어 신호가 발생한것입니다.
봉미완성시에 if문으로 지정한 조건을 체크하지는 않습니다.
즉 진입이 1회이면 한봉에 동시에 셋팅되지 않게 사용자분이 전략상황에 맞게 코딩하셔야 합니다.
2. 기타
피라미딩 관련해서 질문드립니다.
피라미딩하면 봉 하나에서 신호가 여러개 나온다고 하셨습니다. 그럼 피라미딩하면 그 청산신호도 여러개가 봉 하나에서 나오나요.(예전에 만들어주신 수식 돌려보면 그런 거 같기는 한데요.) 그리고 봉 하나에서 여러개 진입, 여러개 청산 이렇게도 된다는 이야긴가요?
가령 5틱마다 재진입, 고가 -5틱 떨어질 때마다 하나하나 청산 이렇게 해놓으면 5틱마다 계속 진입하고, 같은 봉에서 고가 대비 5틱씩 떨어지면 5틱마다 청산하나요?
3. 이거 이전에 예스스탁님이 만들어주신 인트라데이 전략 해선용 제가 좀 고친 건데요. 백테스팅해보니 나스닥에선 아무 진입을 안하더라구요. 기본적인 인트라데이 전략인데 진입이 없을 것 같진 않은데요. 그리고 신호가 나오는 것도 국선 지수랑은 달라 보입니다. 수정좀 부탁드립니다.
inputs: InitMin(90),stopp(1),SS(90000),EE(150000);
Variables: SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False);
SessStartMin = TimeToMinutes(SS);
TradeTime = TimeToMinutes(sTime);
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
input : 진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if Count < 진입횟수 and Tcond == true then
{
If TradeTime <= SessStartMin + InitMin Then {
If Date <> Date[1] Then {
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
Else
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
}
Else
{
If sTime < EE Then {
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4. 3번 수식 수정한 내용 썸머타임에 따라 breakout시점을 다르게 하도록(썸머타임 뒤에는 한시간 뒤의 고가나 저가를 브레이크 하도록)하나 더 부탁드립니다. 저번 만들어주신 거 보고 수정하려 해도 잘 모르겠습니다.
예스스탁 예스스탁 답변
2018-11-12 13:17:48
안녕하세요
예스스탁입니다.
이전 답변내용을 정확히 확인하시기 바랍니다.
양봉과 음봉과 같이 개별조건을 주는 것은
사용자분이 고려하셔서 추가해 주시면 됩니다.
적어드린 내용은 특별히 조건을 따로 지정하는 것이 아닙니다.
매수진입과 매도진입조건이 동시에 만족하면
매수만 셋팅되게 하는것 일뿐입니다.
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : Re : Re : 문의드립니다.
> 1 재질문
코딩 감사합니다. 그런데 만들어주신 조건 보면 condition이 없는데요. 어떻게 매수만 진입하게 할 수 있는지 잘 이해가지 않습니다.
condition == C > O;
이렇게 컨티션을 추가하면 된다는 이야긴가요? 그런데 수식을 보면 Condition1이 둘다 false이고 둘다 true인데요.
input : entryCount(1);
var : count(0) ;
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then
{
Condition1 = false;
if 매수진입조건 and Condition1 == false then
{
Condition1 = true;
buy("b",AtStop,매수가격);
}
if 매도진입조건 and Condition1 == false then
{
Condition1 = true;
sell("s",AtStop,매도가격);
}
}
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다.
>
안녕하세요
예스스탁입니다.
1
해당부분은 진입횟수 카운트 하는 계산식 안에서 처리가 되지 않습니다.
한봉에서 매수와 매도가 동시에 셋팅되지 않게 하는 부분이므로
매수나 매도진입에 동시만족하지 않는 조건을 사용자분이 추가해 주셔야 합니다.
예를 들어 매수는 양봉조건, 매도는 음봉조건을 추가하면 한봉에 동시에 셋팅을 되지 않습니다.
해당 조건은 사용자분이 별도로 전략에 맞게 고려해 보아야 하는 부분입니다.
혹은 아래와 같이 작성하면 동시만족시 매수쪽만 셋팅되게 할수 있습니다.
input : entryCount(1);
var : count(0) ;
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then
{
Condition1 = false;
if 매수진입조건 and Condition1 == false then
{
Condition1 = true;
buy("b",AtStop,매수가격);
}
if 매도진입조건 and Condition1 == false then
{
Condition1 = true;
sell("s",AtStop,매도가격);
}
}
2
청산함수가 여러개 이면 한봉에 여러번 발생할수 있습니다.
즉 수식에서 작성한 신호함수당 한번씩 발생할수 있다고 생각하시면 됩니다.
3
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
Var : SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False),S1(0),D1(0),TM(0);
input : InitMin(90),stopp(1),진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
S1 = TimeToMinutes(stime);
D1 = sdate;
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
If TM <= InitMin Then
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
else
{
if Count < 진입횟수 and Tcond == true then
{
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
Var : SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False),S1(0),D1(0),TM(0);
input : InitMin(90),stopp(1);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
Var : Summer(False),Year(0);
var : StartTime(0),endTime(0),Xtime(0);
Year = Floor(sDate / 10000);
Value1 = (10000 * Year) + (100 * 3) + 1;
Value2 = 15 - dayofweek(value1);
value3 = (10000 * Year) + (100 * 11) + 1;
value4 = 8 - dayofweek(value3);
Summer = date > (10000 * Year) + (100 * 3) + value2
And date < (10000 * Year) + (100 * 11) + value4;
#썸머타임일때
If Summer == true Then
{
StartTime = 070000;
endtime = 050000;
Xtime = 053400;
}
Else #아닐때
{
StartTime = 080000;
endtime = 060000;
Xtime = 063400;
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) then
{
Tcond = true;
T1 = TotalTrades;
S1 = TimeToMinutes(stime);
D1 = sdate;
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
if (sdate != sdate[1] and stime >= endtime) or
(sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
If TM <= InitMin Then
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
else
{
if Count < 진입횟수 and Tcond == true then
{
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == Xtime or (stime > Xtime and stime < Xtime) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 도와주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
매번 진입 필터링으로 아래 수식쓰고 있는데요. 이거 답변해주신 것처럼 atstop, atlimit일 때도 진입횟수 제한 필터링하려면 어떻게 해야 하나요?
input : entryCount(1);
var : count(0) ;
#진입회수제한
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then {
}
// 답변
3
자동주문은 차트에서 신호가 발생하면 무조건 주문이 발생합니다.
실전에 적용하시면 모두 주문이 집행됩니다.
신호발생위치로 보아 buy와 sell에 atstop이나 atlimit을 사용해 신호를 발생한 것입니다.
해당타입은 봉완성시 조건이 만족하면 다음봉에 신호가 발생합니다.
진입횟수제한은 if문(완성봉기준)으로 판단하는 것입니다.
모두 전봉에 진입1회 필터링조건이 만족했기에 동시 셋팅되어 신호가 발생한것입니다.
봉미완성시에 if문으로 지정한 조건을 체크하지는 않습니다.
즉 진입이 1회이면 한봉에 동시에 셋팅되지 않게 사용자분이 전략상황에 맞게 코딩하셔야 합니다.
2. 기타
피라미딩 관련해서 질문드립니다.
피라미딩하면 봉 하나에서 신호가 여러개 나온다고 하셨습니다. 그럼 피라미딩하면 그 청산신호도 여러개가 봉 하나에서 나오나요.(예전에 만들어주신 수식 돌려보면 그런 거 같기는 한데요.) 그리고 봉 하나에서 여러개 진입, 여러개 청산 이렇게도 된다는 이야긴가요?
가령 5틱마다 재진입, 고가 -5틱 떨어질 때마다 하나하나 청산 이렇게 해놓으면 5틱마다 계속 진입하고, 같은 봉에서 고가 대비 5틱씩 떨어지면 5틱마다 청산하나요?
3. 이거 이전에 예스스탁님이 만들어주신 인트라데이 전략 해선용 제가 좀 고친 건데요. 백테스팅해보니 나스닥에선 아무 진입을 안하더라구요. 기본적인 인트라데이 전략인데 진입이 없을 것 같진 않은데요. 그리고 신호가 나오는 것도 국선 지수랑은 달라 보입니다. 수정좀 부탁드립니다.
inputs: InitMin(90),stopp(1),SS(90000),EE(150000);
Variables: SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False);
SessStartMin = TimeToMinutes(SS);
TradeTime = TimeToMinutes(sTime);
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
input : 진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if Count < 진입횟수 and Tcond == true then
{
If TradeTime <= SessStartMin + InitMin Then {
If Date <> Date[1] Then {
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
Else
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
}
Else
{
If sTime < EE Then {
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4. 3번 수식 수정한 내용 썸머타임에 따라 breakout시점을 다르게 하도록(썸머타임 뒤에는 한시간 뒤의 고가나 저가를 브레이크 하도록)하나 더 부탁드립니다. 저번 만들어주신 거 보고 수정하려 해도 잘 모르겠습니다.