커뮤니티

기초적인 수식 질문입니다.

프로필 이미지
deepye
2013-10-02 11:28:10
135
글번호 68054
답변완료
막 예스랭귀지 공부를 시작하고 있는 초보입니다. 시초가에서 거래일 전날 (하루전날)의 ATR(14) x 2의 값만큼 올라가면 매수, 내려가면 매도하여 전날 ATR(14) x 10 의 값에서 익절 전날 ATR(14) x 2 만큼 손실이 되면 손절 오후 2시 30분이면 무조건 청산 하루에 한 번만 거래 이런 조건으로 수식을 짜고 싶습니다. 기본골격은 아래와 같이 잡았는데 1. 하루 한번만 거래하기(한 번 거래가 끝나면 더이상 거래 없슴)의 조건은 어떻게 넣어야 하는지.. 2. 거래일 전날의 ATR(14)수치를 저렇게 쓰면 맞는건지.. 3. ATR(14)의 값을 0.26~0.30은 0.3으로 0.31~0.35는 0.35로 등등 일정구간을 거래단위에 맞게 딱 떨어지게 가져오려면 어떻게 해야하는지 4. 아래의 기본식이 제가 표현하고 싶은 조건에 얼추 맞는건지.. 가 궁금합니다. Var : RefNum == ATR(14); If Marketposition == 0 and H>dayopen+RefNum*2 Then Buy() If Marketposition == 0 and L<dayopen-RefNum*2 Then Sell() SetStopProfitTarget (RefNum*10, Pointstop); SetStopLoss (RefNum*2, Pointstop); if stime == 143000 then { exitlong(); exitshort(); }
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2013-10-02 14:19:21

안녕하세요 예스스탁입니다. 문의하신 내용은 당일청산등이 있으므로 분봉에서 작성하셔야 합니다. 전날 ATR이 분봉에서 전일 마지막봉의 ATR값이면 1번식을 전일기준 일봉의 ATR이면 2번식과 같이 작성하셔야 합니다. 손절과 목표이익도 가변적이므로 풀어서 작성하셔야 합니다. 진입/청산 모두 지정한 값 터치하면 발생하게 작성했습니다. 1번 input : ATRP(14); Var : RefNum(0),PredayRefNum(0); RefNum = ATR(ATRP); if date != date[1] Then PredayRefNum = RefNum[1];#전일 마지막봉값 If Marketposition == 0 and stime < 143000 then{ buy("b",atstop,dayopen+PredayRefNum*2); Sell("s",atstop,dayopen-PredayRefNum*2); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,EntryPrice+PredayRefNum*10); ExitLong("매수손절",AtStop,EntryPrice-PredayRefNum*2); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,EntryPrice-PredayRefNum*10); ExitShort("매도손절",AtStop,EntryPrice+PredayRefNum*2); } SetStopEndofday(143000); 2번 input : ATRP(14); var : TH(0),TL(0),Sum(0),TR(0),DayATR(0),cnt(0); sum = 0; for cnt = 1 to ATRP{ If DayClose(cnt+1) > dayhigh(cnt) then TH = DayClose(cnt+1); else TH = dayhigh(cnt); If DayClose(cnt+1) < DayLow(cnt) then TL = DayClose(cnt+1); else TL = daylow(cnt); TR = TH-TL; Sum = Sum+TR; } DayATR = Sum/ATRP; If Marketposition == 0 and stime < 143000 then{ buy("b",atstop,dayopen+DayATR*2); Sell("s",atstop,dayopen-DayATR*2); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,EntryPrice+DayATR*10); ExitLong("매수손절",AtStop,EntryPrice-DayATR*2); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,EntryPrice-DayATR*10); ExitShort("매도손절",AtStop,EntryPrice+DayATR*2); } SetStopEndofday(143000); 즐거운 하루되세요 > deepye 님이 쓴 글입니다. > 제목 : 기초적인 수식 질문입니다. > 막 예스랭귀지 공부를 시작하고 있는 초보입니다. 시초가에서 거래일 전날 (하루전날)의 ATR(14) x 2의 값만큼 올라가면 매수, 내려가면 매도하여 전날 ATR(14) x 10 의 값에서 익절 전날 ATR(14) x 2 만큼 손실이 되면 손절 오후 2시 30분이면 무조건 청산 하루에 한 번만 거래 이런 조건으로 수식을 짜고 싶습니다. 기본골격은 아래와 같이 잡았는데 1. 하루 한번만 거래하기(한 번 거래가 끝나면 더이상 거래 없슴)의 조건은 어떻게 넣어야 하는지.. 2. 거래일 전날의 ATR(14)수치를 저렇게 쓰면 맞는건지.. 3. ATR(14)의 값을 0.26~0.30은 0.3으로 0.31~0.35는 0.35로 등등 일정구간을 거래단위에 맞게 딱 떨어지게 가져오려면 어떻게 해야하는지 4. 아래의 기본식이 제가 표현하고 싶은 조건에 얼추 맞는건지.. 가 궁금합니다. Var : RefNum == ATR(14); If Marketposition == 0 and H>dayopen+RefNum*2 Then Buy() If Marketposition == 0 and L<dayopen-RefNum*2 Then Sell() SetStopProfitTarget (RefNum*10, Pointstop); SetStopLoss (RefNum*2, Pointstop); if stime == 143000 then { exitlong(); exitshort(); }
프로필 이미지

deepye

2013-10-02 15:31:03

답변 감사드립니다. 생각했던 것보다 훨씬 복잡하네요. 작성해주신 수식을 보니 많이 공부가 됩니다. 궁금한 점이 몇가지 있어 재질문 드립니다. 1. 작성해주신 식에 하루 한 번의 거래만 발생 (한번 거래가 완료되면 더이상 거래를 하지 않게)하게 하는 조건이 포함되어 있는건가요? 있다면 어느 부분인지 궁금합니다. 2. 익절 손절 주문을 넣는걸 매수/매도와 동시에 HTS상에서의 STOP이나 OCO주문과 같이 서버에 보내 두는 것도 가능한가요? (아니면 거래가 발생하면 계속 시스템이 모니터링을 하면서 익절이나 손절 혹은 당일청산을 기다리게 해야 하는지요) 감사합니다.
프로필 이미지

예스스탁 예스스탁 답변

2013-10-02 16:59:16

안녕하세요 예스스탁입니다. 죄송합니다. 하루에 1번진입이 빠져있었습니다. 아래식 추가한 식입니다. 당일진입횟수 카운트 하는 식도 많이 사용하는 식이니 참고하시기 바랍니다. 1. input : ATRP(14),N(1); Var : RefNum(0),PredayRefNum(0),cnt(0),count(0); #당일진입횟수 count = 0; for cnt = 0 to 20{ if sdate == EntryDate(cnt) Then count = count+1; } RefNum = ATR(ATRP); if date != date[1] Then PredayRefNum = RefNum[1];#전일 마지막봉값 If Marketposition == 0 and stime < 143000 and count < 1 then{ buy("b",atstop,dayopen+PredayRefNum*2); Sell("s",atstop,dayopen-PredayRefNum*2); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,EntryPrice+PredayRefNum*10); ExitLong("매수손절",AtStop,EntryPrice-PredayRefNum*2); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,EntryPrice-PredayRefNum*10); ExitShort("매도손절",AtStop,EntryPrice+PredayRefNum*2); } SetStopEndofday(143000); 2. input : ATRP(14),N(1); var : TH(0),TL(0),Sum(0),TR(0),DayATR(0),cnt(0),count(0); #당일진입횟수 count = 0; for cnt = 0 to 20{ if sdate == EntryDate(cnt) Then count = count+1; } sum = 0; for cnt = 1 to ATRP{ If DayClose(cnt+1) > dayhigh(cnt) then TH = DayClose(cnt+1); else TH = dayhigh(cnt); If DayClose(cnt+1) < DayLow(cnt) then TL = DayClose(cnt+1); else TL = daylow(cnt); TR = TH-TL; Sum = Sum+TR; } DayATR = Sum/ATRP; If Marketposition == 0 and stime < 143000 and count < N then{ buy("b",atstop,dayopen+DayATR*2); Sell("s",atstop,dayopen-DayATR*2); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,EntryPrice+DayATR*10); ExitLong("매수손절",AtStop,EntryPrice-DayATR*2); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,EntryPrice-DayATR*10); ExitShort("매도손절",AtStop,EntryPrice+DayATR*2); } SetStopEndofday(143000); 랭귀지에서 서버에 보내두것은 가능하지 않습니다. 수식에서는 진입신호가 발생하면 해당 목표수익이나 손절에 해당하는 시세가 발생하면 그때 신호가 표시되고 주문이 집행됩니다. 미리 특정가격에 주문을 내개 할수가 없습니다. 즐거운 하루되세요 > deepye 님이 쓴 글입니다. > 제목 : Re : Re : 기초적인 수식 질문입니다. > 답변 감사드립니다. 생각했던 것보다 훨씬 복잡하네요. 작성해주신 수식을 보니 많이 공부가 됩니다. 궁금한 점이 몇가지 있어 재질문 드립니다. 1. 작성해주신 식에 하루 한 번의 거래만 발생 (한번 거래가 완료되면 더이상 거래를 하지 않게)하게 하는 조건이 포함되어 있는건가요? 있다면 어느 부분인지 궁금합니다. 2. 익절 손절 주문을 넣는걸 매수/매도와 동시에 HTS상에서의 STOP이나 OCO주문과 같이 서버에 보내 두는 것도 가능한가요? (아니면 거래가 발생하면 계속 시스템이 모니터링을 하면서 익절이나 손절 혹은 당일청산을 기다리게 해야 하는지요) 감사합니다.