답변완료
수식 좀 부탁드립니다.
엑셀에서 데이타 5개를 받아서 쓰는데,
사진상에서 sell no1 , buy no1 하나씩만 발생하는데
첫번째 sellno1 , sellno2 , sellno3 가 동시에 발생하고
두번째 buyno1 , buyno2 , buyno3 도 동시에 발생하게 가능할까요?
var : C2(0,Data2);
var : C3(0,Data3);
var : C4(0,Data4);
var : C5(0,Data5);
var : C6(0,Data6);
C2 = Data2(c);
C3 = Data3(c);
C4 = Data4(c);
C5 = Data5(c);
C6 = Data6(c);
if crossup(C2,0) then Buy();
if crossdown(C2,0) then Sell();
if crossup(C3,0) then Buy();
if crossdown(C3,0) then Sell();
if crossup(C4,0) then Buy();
if crossdown(C4,0) then Sell();
if crossup(C5,0) then Buy();
if crossdown(C5,0) then Sell();
if crossup(C6,0) then Buy();
if crossdown(C6,0) then Sell();
2021-01-28
983
글번호 145917
시스템
답변완료
참조데이터를 고려한 함수 작성?
참조데이터를 고려한 함수를 작성하면 기존함수가 작동을 하지 않습니다.
#여기서 기본데이터는 일봉이고, 참조데이터는 60분봉입니다.#
아래는 그림1의 수식입니다.
var : line(0),i(1),cnt(1),break(False);
i = 1;
cnt = 1;
break = False;
If Index == 1 Then
line = TL_New(sDate[1],sTime[1],L[1]-1,sDate,sTime,L[1]);
Else if Index != 0 Then
{
While break == False
{
If IsNaN(line[i]) == True Then
{
cnt = cnt + 1;
i = i + 1;
}
Else
break = True;
}
If H[cnt]<H[0] and L[cnt]<=L[0] Then
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]);
Else If H[cnt]>=H[0] and L[cnt]>L[0] Then
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]);
Else
line = NaN();
}
아래는 그림2의 수식입니다.
var : line(0),i(1),cnt(1),break(False);
var : HT2(0,Data2),LT2(0,Data2);
i = 1;
cnt = 1;
break = False;
If Index == 1 Then
line = TL_New(sDate[1],sTime[1],L[1]-1,sDate,sTime,L[1]);
Else if Index != 0 Then
{
While break == False
{
If IsNaN(line[i]) == True Then
{
cnt = cnt + 1;
i = i + 1;
}
Else
break = True;
}
If H[cnt]<H[0] and L[cnt]<=L[0] Then
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]);
Else If H[cnt]>=H[0] and L[cnt]>L[0] Then
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]);
Else If H[cnt]<H[0] and L[cnt]>L[0] Then
{
If Data2(H == HighD(0)) Then
HT2 = Data2(sTime);
If Data2(L == LowD(0)) Then
LT2 = Data2(sTime);
If HT2<LT2 Then
{
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]);
line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,L[0]);
}
If LT2<HT2 Then
{
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]);
line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,H[0]);
}
}
Else
line = NaN();
}
그림1의 수식과 그림2의 수식의 차이는
분봉데이터를 고려하지 않음(그림1) 분봉데이터를 고려함(그림2)
입니다.
그림1이 제 함수의 기본 골격인데, 여기에
Else If H[cnt]<H[0] and L[cnt]>L[0] Then
{
If Data2(H == HighD(0)) Then
HT2 = Data2(sTime);
If Data2(L == LowD(0)) Then
LT2 = Data2(sTime);
If HT2<LT2 Then
{
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]);
line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,L[0]);
}
If LT2<HT2 Then
{
line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]);
line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,H[0]);
}
}
이 부분을 추가한 것이 그림 2입니다. 위 수식의 의미는 무엇이냐면,
현재 일봉으로부터 비교되는 특정 시점의 과거 봉의 저점과 고점이 현재 봉에 포함된다면,
일봉을 관통하는 수직선을 고점부터 저점 또는 저점부터 고점으로 즉, 궤적을 그려라 뭐 이런 것인데요.
근데 일봉의 고점부터 저점, 저점부터 고점을 결정하는 방식으로 "분봉데이터"에서
일봉 고점 형성시간이 저점보다 시간상으로 앞서면 고점에서 저점으로 그리고
일봉 저점 형성시간이 고점보다 시간상으로 앞서면 저점에서 고점으로 그리는 것입니다.
즉, 분봉데이터를 고려하도록 설계를 했는데, 그 때부터 원래 함수조차 작동을 하지 않습니다.
질문
기존함수(그림1)에 분봉데이터를 참조하는 조건식하나를 추가했는데(그림2), 기존 추세선이 모조리 안나타납니다. 해결방법이 있을까요?
질문참고(1번 내용을 해결하려고 디버그를 돌리다가 알게된 사실이나 추측을 도움되실까하여 적어놓습니다)
1) 분봉데이터를 참조하면서부터 계산횟수가 기존의 8배로 증가했습니다. 60분봉 7개와 일봉1개 총 8번인 듯 합니다.
2) 동일 코드의 추세선 생성 명령이 2번이상 실행되는 경우 추세선 표현이 안되는 듯 합니다. 2)에서 언급된 하루당 8번의 계산이 실행되는 것과 영향이 있을 듯 합니다.
3) 2)내용이 사실이라면 하루 중 마지막 봉을 계산할 때만 추세선 생성 명령이 작동되야할텐데요.. barindex값을 무작정 8로나눈 나머지가 7일 때가 하루 중 마지막 봉의 계산이라고 하면 수능이나 새해날 때문에 뒤로 1칸 또는 2칸이 밀려서 꼬이네요...이 방법은 너무 수식이 좀 더 복잡해질 것 같아 다른 좋은 방법이 있으면 좋겠네요..
항상 친절히 답변해주셔서 감사합니다. 답변 잘 부탁드려요
2021-01-29
1090
글번호 145905
지표
답변완료
수식문의합니다~~
1. <<<신호타입 중 atlimit은 Buy에 사용되면
if조건이 만족하면 특정값(var1-매수포인트)을 셋팅하고
다음봉에서 현재가가 특정값(Buy에 사용되면) 이하이면 즉시 진입>>>
onclose가 더 빠른데 왜 atlimit를 사용하죠?
2. -buy()- 는 어떤 신호타잎인지요?
3. <<<시간은 십만단위 숫자일 뿐입니다.
HH:MM:SS와 같은 시간값이 아닙니다
시간값이 70000으로 리턴되지만 7:00:00과 같은 시간이 아닙니다>>>
그러면 아래 시작시간과 종료시간을 9시와 15시30분으로 보내 안되나요?
아니면 입력 값은 시간인데 변수로 리턴되는 값은 시간이 아니라는 것인지요?
input : ntime(090000),Xtime(153000)
4. <<< L < var1-매수포인트
위와 같이 작성되면 이미 봉이 var1-매수포인트보다 아래인 상태에서
다음봉에서 다시 해당 가격이하이면 진입하게 됩니다.>>>
어차피 하루 1번 진입으로 카운팅되기때문에 필요 없지 않나요?
5. 나스닥에서 상식적인 손절 범위를 벗어나게 십만포인트를 설정햬는데도 손절이 발생하는데 공식에 어떤문제가 있는지요?
if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then
Buy("b",AtLimit,DayOpen-10);
SetStopLoss(100000,PointStop);
ExitLong("bp",AtLimit,DayOpen+10);
아래는 정상으로 나옵니다
if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then
Buy("b",AtLimit,DayOpen-10);
SetStopLoss(100000,PointStop);
SetStopProfittarget(20,PointStop);
6. 아래 수식에서 저가가 DayOpen-10 보다 커야 buy가 수행되는 전제조건인데 buy는 DayOpen-10 이하가 되어야 수행이 되니 어케 체결이 되는지요?
if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then
Buy("b",AtLimit,DayOpen-10);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 다시 확인 요청드립니다
> 안녕하세요
예스스탁입니다.
1.2
var1~var99, value1~value99
위 변수는 선언없이 사용가능한 내부저장변수입니다.
내부적으로 미리 0으로 모두 선언이 된 상태입니다.
해당 수식에서는 ntime봉의 시가를 저장하게 작성이 되어 있습니다.
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
Tcond = true;
var1 = O;
}
4
if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then
Buy("b",AtLimit,var1-매수포인트);
신호타입 중 atlimit은 Buy에 사용되면
if조건이 만족하면 특정값(var1-매수포인트)을 셋팅하고
다음봉에서 현재가가 특정값(Buy에 사용되면) 이하이면 즉시 진입입니다.
봉이 지정한 가격보다 위에 형성되어 있다가 하락해서
var1-매수포인트를 처음 터치할때 진입하게 작성된 내용입니다.
L > var1-매수포인트가 없으면 손절등 청산뒤에
계속 해당 가격아래 있으면 바로 또 매수가 발생하게 됩니다.
5
L < var1-매수포인트
위와 같이 작성되면 이미 봉이 var1-매수포인트보다 아래인 상태에서
다음봉에서 다시 해당 가격이하이면 진입하게 됩니다.
6
시간은 십만단위 숫자일 뿐입니다.
HH:MM:SS와 같은 시간값이 아닙니다
시간값이 70000으로 리턴되지만 7:00:00과 같은 시간이 아닙니다.
시간을 최적화해 보고자 하시면
아래와 같이 시간을 특별한 단위로 변경해서 사용하셔야 합니다.
TimeToMinutes은 시간을 0시이후 경과된 분으로 리턴해 주는 함수입니다.
7시면 420분으로 리턴됩니다.
최적화에서 36단위로 최적화 하시면 됩니다.
input : ntime(420),Xtime(0),매수포인트(10),손절포인트(30),익절포인트(30);
var : Tcond(False),entry(0);
var : T1(0),TM(0);
TM = TimeToMinutes(stime);
T1 = TimeToMinutes(ntime);
if (sdate != sdate[1] and stime >= Xtime) or
(sdate == sdate[1] and stime >= Xtime and stime[1] < Xtime) Then
{
Tcond = false;
}
if Bdate != Bdate[1] Then
{
Tcond = False;
entry = 0;
if Xtime < ntime Then
SetStopEndofday(0);
}
if (sdate != sdate[1] and TM >= T1) or
(sdate == sdate[1] and TM >= T1 and TM[1] < T1) Then
{
Tcond = true;
var1 = O;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then
Buy("b",AtLimit,var1-매수포인트);
즐거운 하루되세요
> 코퍼 님이 쓴 글입니다.
> 제목 : 다시 확인 요청드립니다
> 안녕하세요~~
전에 만들어주신 식중 일부입니다 (시초가가 매수포인트(변수) 만큼 하락시 매수하라)
input : ntime(70000),Xtime(0),매수포인트(10),손절포인트(30),익절포인트(30);
var : Tcond(False),entry(0);
if (sdate != sdate[1] and stime >= Xtime) or
(sdate == sdate[1] and stime >= Xtime and stime[1] < Xtime) Then
{
Tcond = false;
}
if Bdate != Bdate[1] Then
{
Tcond = False;
entry = 0;
if Xtime < ntime Then
SetStopEndofday(0);
}
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
Tcond = true;
var1 = O;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then
Buy("b",AtLimit,var1-매수포인트);
1. 내부(겸 내장)변수 var1은 초기값이 0 인데 내부변수 선언은 왜 없는지요?
2. 상기식에서-messagelog("%.f",var1)-하면 var1 값이 초기값 0으로 나오고 실행은 시초가로 작동하는것 같은데 어떻게 할당이 된건지요?
4. 어차피 시초가 대비 무조건 진입인데 상기식중 -AND L > var1-매수포인트- 가 왜 필요한지요?
5. -L < var1-매수포인트- 로 변경하면 어케 다른지요?
6. ntime을 070000~090000 (증가단위 3600 최적화) 돌리면 77200 이나 88000 같은 값이 나오는데 몇시로 봐야하는지요?
2021-01-28
984
글번호 145895
지표
답변완료
문의드립니다!
항상 수고해주심에 너무 감사드립니다
아래"수식1"을 적용시 4개의 선이 발생되는데요
아침에 장이 시작되면 캔들의 움직임에 따라서 이 선들이 위아래로 이동을 합니다
* 그림에서 캔들 위아래의 빨간선을 기준으로 문의 드립니다 (Plot1, Plot2 선입니다)
캔들의 하방이동에 의거 그림의 1과 2사이의 구간에서는 선도 같이 하방으로 이동을 합니다
* 이런 패턴이 반복되며 이선이 계속 하방이동되는 경우도 자주 있습니다
헌데 이후 3번 캔들이 완성시에는 이선을 그대로 하방 돌파하고 이후 이선은 장이 끝날때까지 캔들의 움직임과 상관없이 이 가격선을 그대로 유지합니다
즉, 2번자리에서 이선이 고정되었다는것을 알수있습니다
1, 이렇게 선이 캔들의 이동에의거 같이 이동하는 경우와 돌파하는 경우로 나뉘는것은 어떤 원리에의한것인지요?
2, 이 2번자리가 선의 고정자리라는것을 2번캔들이나 그다음 캔들이 완성시 알수있는 방법은 없을까요?
3, 만약 위 2번 내용이 가능하다면 이자리에 세로선과 알람신호가 발생되는 수식도 가능할런지요?
* 물론 위아래 2개의 빨간선이 모두 해당이 되겠죠
가능한 알기쉽게 자세한 설명 부탁드립니다
4, 아래 "수식2"에서 음성신호가 발생되도록 수정 부탁드립니다
매번 도움주심에 항상 감사드립니다!!!
-------------------------------------------------------------------------------
( 수식 1)
if sTime < 93000 Then
{
var1 = DayHigh;
Var2 = DayLow;
Var3 = (var1-Var2);
}
Plot1(var1);
Plot2(var2);
Plot3(var1+Var3);
Plot4(var2-Var3);
(수식 2)
var : tl1(0,data1),tl24(0,data1);
if CrossDown(data1(L),data2(H)) or
Crossup(data1(h),data2(L)) Then
{
tl1 = TL_New(sdate,stime,9999999,sdate,stime,0);
TL_SetColor(tl1,YELLOw);
TL_SetSize(tl1,4);
}
2021-01-28
993
글번호 145885
지표