답변완료
청산 후 최고점/최저점 진입
거래원칙
1.데이트레이딩
2.당일 max 2회거래(buy,sell 각 l번)
3.sell 청산 후 buy 진입. 두번째 buy 진입은 당일 최고점을 n회 갱신하는 최고점에서 진입
4.buy 청산 후 sell 진입. 두번째 sell 진입은 당일 최저점을 n회 갱신하는 최저점에서 진입
아래 수식을 만들어 시뮬레이션을 해보니 오류가 발생합니다.
첨부파일1은
첫번째 s1 진입후 청산된 다음 b2가 진입하는 내역입니다.
다른 날들은 고가들을 갱신 후 최고점에 진입하는데
2018년12월5일에는 최고점에서 내려온 지점에서 b2가 진입하는데 이런 진입은 원하지 않습니다.
첨부파일2는
첫번째 b1 진입후 청산된 다음 s2가 진입하는 내역입니다.
다른 날들은 저가들을 갱신 후 최저점에 진입하는데
2018년4월10일에는 최저점에서 올라온 지점에서 s2가 진입하는데 이런 진입은 원하지 않습니다.
최고점이나 최저점으로 진입하는 수식이 되게 살펴주세요.
*****************************************************************************
input : up진입수(1), dn진입수(1);
input : 고가갱신수(24), 저가갱신수(18);
input : up강제손절(0.62);
input : dn강제손절(0.66);
var : S1(0),S2(0),ST(0),E1(0),E2(0),ET(0),second(0);
var : T1(0),entry(0);
if bdate != Bdate[1] Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
S1 = TimeToMinutes(stime)*60;
S2 = FracPortion(stime/100)*100;
ST = S1+S2;
E1 = TimeToMinutes(time)*60;
E2 = FracPortion(time/100)*100;
ET = E1+E2;
if sdate == date Then
Second = ET-ST;
Else
Second = 86400-ST+ET;
if entry < up진입수 and second < second[1] and C > O Then
buy("b1");
if entry < dn진입수 and second < second[1] and C < O Then
sell("s1");
if MarketPosition == 0 and #현재무포지션이고
EntryDate(1) == sdate and #직전거래가 오늘 발생한 거래이고
MarketPosition(1) == -1 and #직전거래가 매도거래이고
countif(DayHigh(0) != DayHigh(0)[1],BarsSinceExit(1)) >= 고가갱신수 and #청산이후 당일고가 갱신이 n회이상 있었으면
second < second[1] and C > O Then
buy("b2");
if MarketPosition == 0 and #현재무포지션이고
EntryDate(1) == sdate and #직전거래가 오늘 발생한 거래이고
MarketPosition(1) == 1 and #직전거래가 매수거래이고
countif(DayLow(0) != DayLow(0)[1],BarsSinceExit(1)) >= 저가갱신수 and #청산이후 당일저가 갱신이 n회이상 있었으면
second < second[1] and C < O Then
sell("s2");
if MarketPosition == 1 Then
{
SetStopLoss(up강제손절,pointstop);
}
if MarketPosition == -1 Then
{
SetStopLoss(dn강제손절,pointstop);
}
2019-11-11
219
글번호 133496
시스템
답변완료
이평선이 특정 라인을 뚫고 지나가는 종목 검색
안녕하세요. 이전에 64492글에 이평선이 특정 선을 뚫고 지나가면 그 종목을검색해주는 코딩을 부탁하였는데요,
다름이아니라 (var1 > 0 and n일전종가_20 < var1)) 이 부분들의 해석이 안되어서그런데
주석으로 아래의 코딩 설명좀 부탁해도 될까요?
Input : period1(20);
var : maLine(0), n일전종가_20(0), n일전종가_10(0),n일전종가10(0), n일전종가20(0), n일전종가30(0);
maLine = ma(c,period1);
n일전종가_20 = c[1] - c[1]/20; # 어제 종가의 -20%
n일전종가_10 = c[1] - c[1]/10; # 어제 종가의 -10%
n일전종가10 = c[1] + c[1]/10; # 어제 종가의 +10%
n일전종가20 = c[1] + c[1]/20; # 어제 종가의 +20%
n일전종가30 = c[1] + c[1]/30; # 어제 종가의 +30%
var1 = 0;
if n일전종가_20 > maLine and (var1 == 0 or (var1 > 0 and n일전종가_20 < var1)) Then
{
var1 = n일전종가_20;
}
if n일전종가_10 > maLine and (var1 == 0 or (var1 > 0 and n일전종가_10 < var1)) Then
{
var1 = n일전종가_10;
}
if n일전종가10 > maLine and (var1 == 0 or (var1 > 0 and n일전종가10 < var1)) Then
{
var1 = n일전종가10;
}
if n일전종가20 > maLine and (var1 == 0 or (var1 > 0 and n일전종가20 < var1)) Then
{
var1 = n일전종가20;
}
if n일전종가30 > maLine and (var1 == 0 or (var1 > 0 and n일전종가30 < var1)) Then
{
var1 = n일전종가30;
}
if crossup(C,var1) Then
find(1);
2019-11-07
150
글번호 133485
종목검색
답변완료
수식 요청 드립니다.
* 전일 데이타 확인 해보니 데이타 차이가 있어 안되었습니다.
* 요청 사항1 : 아래 수식에서 매매로직 요청 좀 드립니다.
무포지션 상태에서
매수 : VAR1 이 VAR2 를 3번째 상향돌파 하면 매수
매도 : VAR1 이 VAR2 를 3번째 하향돌파 하면 매도 입니다.
→수시로 반복되도 괺찮습니다.
var : TL1(0),TL2(0),tx1(0),tx2(0);
VAR1 = MA(C,2) ;
VAR2 = MA(C,5) ;
Plot1(VAR1,"1",RED,DEF,1) ;
Plot2(VAR2,"1",BLUE,DEF,1) ;
* 요청 사항2 : 아래 수식 에서 최대수익, 최대손실 표현좀 부탁 드립니다.
var : TL(0),TX(0);
if MarketPosition != 0 Then
{
if MarketPosition != MarketPosition[1] Then
{
TL = TL_New(sdate[1],stime[1],EntryPrice,sdate,stime,EntryPrice);
tx = Text_New(sdate,stime,EntryPrice,NumToStr(PositionProfit(0),2));
}
Else
{
TL_SetEnd(TL,sdate,stime,EntryPrice);
Text_SetString(tx,NumToStr(PositionProfit(0),2));
Text_SetLocation(tx,sdate,stime,EntryPrice);
}
TL_SetSize(TL,1);
if PositionProfit(0) > 0 Then
{
TL_SetColor(TL,RED);
text_SetColor(Tx,RED);
}
else if PositionProfit(0) < 0 Then
{
TL_SetColor(TL,BLUE);
text_SetColor(Tx,BLUE);
}
else
{
TL_SetColor(TL,BLACK);
text_SetColor(Tx,BLACK);
}
}
* 매번 많은 도움에 고맙습니다.
2019-11-07
173
글번호 133484
시스템
답변완료
도움을 부탁드리겠습니다. 그림첨부
늘 도와주셔서 감사드립니다.
자력으로 해보려고 했는데...하아..아직 먼거 같습니다..
한번만 더 도와주세요..
수식은 전번에 도움을 얻은 부분입니다.
타주기로 , 몸통이 긴 양봉을 찾아서, 그 중심가격을 표시하고
몸통이 더 긴 양봉이 나오기 전에는 중심가격이 계속 표시되게 하려는
의도였습니다.
1.
<최대몸통길이를 가진 양봉의 중심가격>을
첨부한 그림 파일에서는 24900원 정도가 직선으로 계속 표시되게 하고 싶었습니다.
이거보다 더 긴 몸통길이를 가진 양봉이 나오기 전까지는요..
근데 분홍색값을 보시면 계속 증감이 있고
값도 몸통의 중심가라고 하기에는 표시된 값이 너무 낮습니다..
며칠째 고민했는데 뭐가 문제인지 도저히 못찾겠습니다.
2. 타주기를 현재 시간으로 나눈 나머지를 구할때요,
// 요부분 의미를 잘 모르겠습니다.
날짜가 바뀌는지점에서는 sTime 값이 0이 되는 것인가요 1440이 되는 것인가요
else 의미도요...대충 작동하는 방향은 느낌이 오는데 ..제대로 알고 싶습니다..
설명좀 부탁드려도 될까요..
input : ntime(15),P(5);
var : S1(0),D1(0),TM(0),TF(0),j(0),HR(0),HP(0),HM(0);
Array : MinOpen[100](0),MinHigh[100](0),MinLow[100](0),MinClose[100](0), 몸통길이[100](0),몸통중심가격[100](0) ;
var1 = ma(C,P);
if bDate!= bDate[1] Then
{
S1 = TimeToMinutes(sTime);
D1 = sDate;
}
if D1 > 0 then{
if sDate == D1 Then
TM = TimeToMinutes(sTime)-S1; // 요부분 의미를 잘 모르겠습니다.
Else // 요부분 의미를 잘 모르겠습니다.
TM = TimeToMinutes(sTime)+1440-S1; // 요부분 의미를 잘 모르겠습니다.
// TF = TimeToMinutes(stime)%ntime; // 요기는 TM%ntime이 되야 하는거죠??
TF = TM%ntime; // 이렇게 바꿔봤습니다..
if bDate != bDate[1] or (bDate == bdate[1] and TF < TF[1])Then
{
For j = 98 DownTo 0
{
MinOpen[j+1] = MinOpen[j];
MinHigh[j+1] = MinHigh[j];
MinLow[j+1] = MinLow[j];
MinClose[j+1] = MinClose[j];
몸통길이[j+1] = 몸통길이[j];
몸통중심가격[j+1] = 몸통중심가격[j];
}
MinOpen[0] = O;
MinHigh[0] = H;
MinLow[0] = L;
}
If MinHigh[0] > 0 and MinHigh[0] < H Then
MinHigh[0] = H ;
If MinLow[0] > 0 and MinLow[0] < L Then
MinLow[0] = L ;
MinClose[0] = C ;
몸통길이[0] = MinClose[0]-MinOpen[0] ;
몸통중심가격[0] = (MinClose[0]+MinOpen[0])/2;
HR = 몸통길이[0];
HP = 몸통중심가격[0];
HM = var1;
For j = 1 to 60
{
if 몸통길이[j] > HR Then
{
HR = 몸통길이[j];
HP = 몸통중심가격[j];
HM = var1[j];
}
}
plot1(HR,"최대몸통길이");
plot2(HP,"최대몸통중심가");
plot3(HM,"최대몸통이평");
}
2019-11-06
247
글번호 133483
지표
답변완료
부탁드립니다.
매번 감사드립니다.
수식 수정좀 부탁드립니다.
아래식은 지정한 날짜,시간 이후 tt==0 가 되면 매매가 정지되는 수식입니다.
예)
진입(B1■,B1) --> 청산(심볼0) 이면 매매 정지
이 수식을 진입이 B1■, B2■, S1■, S2■인 경우 BB(-40)보다 크면 (청산심볼-40) 이면
매매가 정지하는 식으로 수정하고 싶습니다.
BB(-100): 진입이 B1■, B2■, S1■, S2■인 경우 BB(-100)보다 크면(청산심볼-100) 이면
매매 정지
예)
BB(-40)
진입(B1■) --> 청산(심볼-40) 이면 매매 정지
진입(B1) --> 청산(심볼-40) 이면 매매 지속
BB(-100)
진입(B1■) --> 청산(심볼-100) 이면 매매 정지
진입(B1) --> 청산(심볼-100) 이면 매매 지속
input : 시작날짜(20191001), 시작시간(170000);
Input: AA(-120), BB(-40);
Input : 손절(10),익절(10),익절하락(3);
input : P1(30), P2(120), p3(240);
input : StartTime(090000),EndTime(050000);
var : tx(0),X(false),Tcond(false),tt(0);
var : Tcond1(false);
var1 = ma(C, P1);
var2 = ma(C, P2);
var3 = ma(C, P3);
######## 진입제한
if sdate >= 시작날짜 and stime >= 시작시간 Then
Tcond1 = true;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime)Then
{
Tcond = true;
}
if (sdate != sdate[1] and stime >= Endtime) or
(sdate == sdate[1] and stime >= Endtime and stime[1] < Endtime)Then
{
Tcond = false;
}
## 진입
if Tcond1 == true and Tcond == true and X == false then
{
if Tcond == true and marketposition == 0
and crossup(var1,var2) Then
{
if Condition1 == true and tt <= BB then
buy("B1■");
Else
buy("B1");
}
if Tcond == true and marketposition == 0
and crossdown(var1,var2) Then
{
if Condition1 == true and tt <= BB then
sell("S1■");
Else
sell("S1");
}
if Tcond == true and marketposition == 0
and crossup(var2,var3) and var3[1] < var3 Then
{
if Condition1 == true and tt <= BB then
buy("B2■");
Else
buy("B2");
}
if Tcond == true and marketposition == 0
and crossdown(var3,var4) and var3[1] > var3 Then
{
if Condition1 == true and tt <= BB then
sell("S2■");
Else
sell("S2");
}
## 청산
if MarketPosition == 1 then
{
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
if MarketPosition == -1 Then
{
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
if ((sdate != sdate[1] and stime >= Endtime) or
(sdate == sdate[1] and stime >= Endtime and stime[1] < Endtime)) Then
{
if MarketPosition == 1 Then
{
ExitLong("BE6");
}
if MarketPosition == -1 Then
{
ExitShort("SE6");
}
}
if TotalTrades > TotalTrades[1] then
{
if IsExitName("StopLoss",1) == true then
{
tt = tt - 40;
if tt >= 0 Then
{
tt = 0;
Condition1 = false;
}
if tt > AA then
{
tx = Text_New(ExitDate(1),ExitTime(1),h[BarsSinceExit(1)],NumToStr(tt,0));
Text_SetSize(tx,20);
}
else
{
Condition1 = true;
tx = Text_New(ExitDate(1),ExitTime(1),h[BarsSinceExit(1)],NumToStr(tt,0)+"★");
Text_SetSize(tx,20);
}
}
if IsExitName("StopTrailing",1) == true then
{
tt = tt + 30;
if tt >= 0 Then
{
tt = 0;
X = true;
Condition1 = false;
}
if Condition1 == true and tt >= BB then
Condition1 = false;
tx = Text_New(ExitDate(1),ExitTime(1),h[BarsSinceExit(1)],NumToStr(tt,0));
Text_SetSize(tx,20);
Text_Setstyle(tx,2,2);
//Text_SetSize 폰트 사이즈
//Text_Setstyle 좌우상하 정렬
}
}
}
2019-11-06
171
글번호 133481
시스템
답변완료
수식 문의
안녕하세요.
아래 기존의 조건식에 일부 수식을 변경하고자 문의드립니다.
var1 = (highest(H,5)+lowest(L,5))/2;
var2 = (highest(H,10)+lowest(L,10))/2;
var3 = (highest(H,20)+lowest(L,20))/2;
if C >= 5000 and C <= 30000 And
countif(C > O and H >= O*1.05,15) >= 1 and
ma(v,5)[1] >= 100000 and
(var1 == var2 or var2 == var3 or var1 == var3) Then
find(1);
변경 사항
1. ((var1 == var2) AND (주가가 var1 보다 크고 주가가 var1 값에 5% 이내 접근) AND
(5% 이내 접근이 당일은 1번째 혹은 2번째 접근 and 일봉상 7봉이내에서 1번째, 2번
째, 3번째 접근인 경우만))
2. ((var2 == var3) AND (주가가 var2 보다 크고 주가가 var2 값에 5% 이내 접근) AND
(5% 이내 접근이 당일은 1번째 혹은 2번째 접근 and 일봉상 7봉이내에서 1번째, 2번
째, 3번째 접근인 경우만))
3. ((var3 == var1) AND (주가가 var3 보다 크고 주가가 var3 값에 5% 이내 접근) AND
(5% 이내 접근이 당일은 1번째 혹은 2번째 접근 and 일봉상 7봉이내에서 1번째, 2번
째, 3번째 접근인 경우만))
위 기존의 수식에서 마지막 부분 (var1 == var2 or var2 == var3 or var1 == var3) 대신
변경 사항 (1 OR 2 OR 3)으로 바꾸고 싶습니다.
첨언 : 1. 당일 5%이내 접근이 여러 번 있을 수 있으므로 3번째 이후의 접근은
제외.
2. "일봉상 7봉이내에서 1번째, 2번째, 3번째 접근인 경우"란 일봉상 7봉 이내의
누적 접근이 3회이하인 경우만 검색하고 4회 이상은 제외.
3. 수식화가 불가능한 것이 있으면 제외하고 가능한 것만 해주세요 ^^
부탁드립니다.
감사합니다.
2019-11-07
146
글번호 133479
검색