커뮤니티
다시 수식 문의드립니다.
2018-06-28 16:15:13
196
글번호 120141
친절하게 답변 주셔서 감사합니다.
그럼 예스랭귀지에서 가능한 수식만 작성해주실수 없을까요?
혼자 아무리 매뉴얼 보고 수식을 짜보아도 검증을 해보면 실제 주문이 나가지 않아서요.
한 번 수식 예를 작성해주시면 그 걸 기반으로 해서 매뉴얼 보면서 공부해 나가면 좀 낫지 않을까 생각이 들어서요.
1. 당일 일중거래에 적용하고자 합니다.
당일 차트의 시봉을 1번봉으로 해서
3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다.
(1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면
가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다.
매도해주었는데 세 봉의 고가+1틱에 도달하면 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다.
손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다.
나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다.
(2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면
현재가가 세 봉의 고가 –1틱에 도달하면 매도주문을 넣어주고
현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주고 싶습니다.
매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 매수청산해주고 다시 매도로 진입해줍니다.
(3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면
/ 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다.
중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다.
그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 –1틱 가격에 도달해도 청산해주지 않습니다.
(4) 오후 1시까지 세 봉의 고가를 돌파한 신고가가 발생하고 세 봉의 저가를 돌파하는 신저가가 발생하지 않은 경우 방향을 매수로 결정하고 오후 1시에 보유한 진입이 매도이면 모두 청산해주고자 합니다.
세 봉의 고가를 돌파한 신고가가 발생하고 다시 세 봉의 저가를 돌파한 신저가가 발생한 경우 방향을 매도로 결정해주고 오후 1시에 보유한 진입이 매수이면 모두 청산해주고자 합니다.
(5) 신고가 신저가가 연속해서 발생할 때 마지막에 발생한 게 신고가이면 방향을 매수로 결정해주고 마지막에 발생한 게 신저가이면 방향을 매도로 결정해주고 싶습니다.
(6) 오후 1시까지 세 봉의 저가로 매도한 진입이 진입가 기준 0.3프로 익절가에 도달했는데 다시 오후 1시까지 세 봉의 중위값으로 돌아온 경우 기존 매도진입을 모두 청산해주고 매수진입해주고 싶습니다.
(7) 매도 진입의 손절을 설정해줄 때
오전 1100까지의 고가를 계산한 후
매도의 손절은 오전 1100까지의 고가를 돌파하는 신고가가 발생한 경우 신고가보다 5틱 아래 가격에 0.3프로를 더한 가격으로 손절가를 설정해주고 싶습니다.
(8) 그 날 진입의 손실의 합이 2.5이상이면 모든 보유 진입을 청산해주고자 합니다.
(9) 그 날 진입의 수익의 합이 3.5이상이면 모든 보유 진입을 청산해주고자 합니다.
(10) 보유한 모든 진입은 종가에 청산해주고 싶습니다.
질문이 많아 죄송합니다. 감사합니다.
답변 1
예스스탁 예스스탁 답변
2018-06-28 18:09:21
안녕하세요
예스스탁입니다.
1.
var : idx(0),head(0),tail(0),sumHead(0),sumTail(0);
var : HH(0),LL(0),MM(0);
head = H-max(C,O);
tail = min(C,O)-L;
sumHead = AccumN(head,3);
sumTail = AccumN(head,3);
HH = highest(H,3);
LL = lowest(L,3);
mm = (HH+LL)/2;
if bdate != bdate[1] Then
{
idx = 0;
}
idx = idx+1;
if idx == 5 Then
{
if (sumHead > sumTail) or (sumHead == sumTail and C < O) Then
sell("s");
}
if idx > 5 Then
{
if MarketPosition == -1 Then
{
if (ExitDate(1) != sdate or (ExitDate(1) == sdate and PositionProfit(1) >= 0)) then
buy("sb",AtStop,HH+PriceScale*1);
Else
ExitShort("sx",AtStop,HH+PriceScale*1);
ExitShort("sl",AtStop,mm*1.002);
ExitShort("sp",AtStop,mm*0.996);
}
if MarketPosition == 1 Then
{
if (ExitDate(1) != sdate or (ExitDate(1) == sdate and PositionProfit(1) >= 0)) then
sell("bs",AtStop,LL-PriceScale*1);
else
ExitLong("bx",AtStop,LL-PriceScale*1);
ExitLong("bl",AtStop,mm*0.998);
ExitLong("bp",AtStop,mm*1.004);
}
}
2
var : idx(0),head(0),tail(0),sumHead(0),sumTail(0);
var : HH(0),LL(0),MM(0);
head = H-max(C,O);
tail = min(C,O)-L;
sumHead = AccumN(head,3);
sumTail = AccumN(head,3);
HH = highest(H,3);
LL = lowest(L,3);
mm = (HH+LL)/2;
if bdate != bdate[1] Then
{
idx = 0;
}
idx = idx+1;
if idx == 5 Then
{
var1 = abs(c-mm);
}
if idx >= 5 Then
{
if MarketPosition <= 0 and var1 <= dayopen*0.001 Then
buy("b",AtLimit,ll+PriceScale*1);
if MarketPosition >= 0 and var1 <= dayopen*0.001 Then
sell("s",Atlimit,hh-PriceScale*1);
}
if MarketPosition == -1 Then
{
buy("sb",Atlimit,mm);
ExitShort("sl",AtStop,HH+PriceScale*1);
}
if MarketPosition == 1 Then
{
sell("bs",AtStop,mm);
ExitLong("bl",AtStop,LL-PriceScale*1);
}
SetStopProfittarget(0.4,PercentStop);
3
var : idx(0),HH(0),LL(0),MM(0),T1(0),entrycount(0);
HH = highest(H,3);
LL = lowest(L,3);
mm = (HH+LL)/2;
if bdate != bdate[1] Then
{
idx = 0;
T1 = TotalTrades;
}
idx = idx+1;
if MarketPosition == 0 Then
entrycount = TotalTrades-t1;
Else
entrycount = TotalTrades-t1+1;
if idx == 5 Then
{
var1 = c;
var2 = mm;
}
if idx >= 5 and entrycount == 0 Then
{
if MarketPosition <= 0 and abs(var1-var2) > dayopen*0.001 and C > var2 Then
buy("b",AtLimit,mm);
}
if MarketPosition == -1 Then
{
buy("sb",AtLimit,mm);
}
if MarketPosition == 1 and entrycount < 3 Then
{
sell("bs",Atlimit,HH-PriceScale*1);
}
4
var : idx(0),HH(0),LL(0),MM(0);
HH = highest(H,3);
LL = lowest(L,3);
mm = (HH+LL)/2;
if bdate != bdate[1] Then
{
Condition1 = false;
Condition2 = false;
}
if stime <= 130000 then
{
if H > HH[1] Then
Condition1 = false;
if L < LL[1] Then
Condition2 = false;
}
if MarketPosition ==1 and
stime >= 130000 and stime[1] < 130000 and
Condition1 == true and Condition2 == false Then
exitlong();
5
var : HH(0),LL(0),MM(0),T(0);
HH = highest(H,3);
LL = lowest(L,3);
mm = (HH+LL)/2;
if H > HH[1] Then
T = 1;
if L < LL[1] Then
T = -1;
if T == 1 and 매수조건 Then
buy();
if T == -1 and 매도조건 Then
sell();
6
var : HH(0),LL(0),MM(0),T(0);
HH = highest(H,3);
LL = lowest(L,3);
mm = (HH+LL)/2;
if MarketPosition >= 0 and stime < 130000 Then
sell("s",AtStop,LL);
if MarketPosition == -1 and
stime < 130000 and
Lowest(L,BarsSinceEntry) <= EntryPrice*0.997 Then
buy("b",AtStop,mm);
7.
if stime < 110000 Then
var1 = dayhigh;
if MarketPosition == 1 and highest(H,BarsSinceEntry) > var1 Then
ExitShort("sx",AtStop,(highest(H,BarsSinceEntry)-PriceScale*5)*1.003);
8,9
Input : 당일수익(3.5),당일손실(2.5);
Var : N1(0),dayPl(0),Xcond(false);
if Bdate != Bdate[1] Then
{
Xcond = false;
N1 = NetProfit;
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] and
(IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or
IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
if Xcond == false then
{
if /*매수진입조건*/ Then
{
buy("b");
}
if /*매도진입조건*/ Then
{
sell("s");
}
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then
{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
10
아래와 같이 당일청산함수에 정규장 이내 시간으로 시간을 지정해 셋팅하시면 됩니다.
SetStopEndofday(152000);
즐거운 하루되세요
> 만법귀일 님이 쓴 글입니다.
> 제목 : 다시 수식 문의드립니다.
> 친절하게 답변 주셔서 감사합니다.
그럼 예스랭귀지에서 가능한 수식만 작성해주실수 없을까요?
혼자 아무리 매뉴얼 보고 수식을 짜보아도 검증을 해보면 실제 주문이 나가지 않아서요.
한 번 수식 예를 작성해주시면 그 걸 기반으로 해서 매뉴얼 보면서 공부해 나가면 좀 낫지 않을까 생각이 들어서요.
1. 당일 일중거래에 적용하고자 합니다.
당일 차트의 시봉을 1번봉으로 해서
3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다.
(1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면
가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다.
매도해주었는데 세 봉의 고가+1틱에 도달하면 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다.
손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다.
나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다.
(2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면
현재가가 세 봉의 고가 –1틱에 도달하면 매도주문을 넣어주고
현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주고 싶습니다.
매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 매수청산해주고 다시 매도로 진입해줍니다.
(3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면
/ 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다.
중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다.
그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 –1틱 가격에 도달해도 청산해주지 않습니다.
(4) 오후 1시까지 세 봉의 고가를 돌파한 신고가가 발생하고 세 봉의 저가를 돌파하는 신저가가 발생하지 않은 경우 방향을 매수로 결정하고 오후 1시에 보유한 진입이 매도이면 모두 청산해주고자 합니다.
세 봉의 고가를 돌파한 신고가가 발생하고 다시 세 봉의 저가를 돌파한 신저가가 발생한 경우 방향을 매도로 결정해주고 오후 1시에 보유한 진입이 매수이면 모두 청산해주고자 합니다.
(5) 신고가 신저가가 연속해서 발생할 때 마지막에 발생한 게 신고가이면 방향을 매수로 결정해주고 마지막에 발생한 게 신저가이면 방향을 매도로 결정해주고 싶습니다.
(6) 오후 1시까지 세 봉의 저가로 매도한 진입이 진입가 기준 0.3프로 익절가에 도달했는데 다시 오후 1시까지 세 봉의 중위값으로 돌아온 경우 기존 매도진입을 모두 청산해주고 매수진입해주고 싶습니다.
(7) 매도 진입의 손절을 설정해줄 때
오전 1100까지의 고가를 계산한 후
매도의 손절은 오전 1100까지의 고가를 돌파하는 신고가가 발생한 경우 신고가보다 5틱 아래 가격에 0.3프로를 더한 가격으로 손절가를 설정해주고 싶습니다.
(8) 그 날 진입의 손실의 합이 2.5이상이면 모든 보유 진입을 청산해주고자 합니다.
(9) 그 날 진입의 수익의 합이 3.5이상이면 모든 보유 진입을 청산해주고자 합니다.
(10) 보유한 모든 진입은 종가에 청산해주고 싶습니다.
질문이 많아 죄송합니다. 감사합니다.