커뮤니티
기초적인 수식 질문입니다.
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주문과 같이 서버에 보내 두는 것도 가능한가요?
(아니면 거래가 발생하면 계속 시스템이 모니터링을 하면서 익절이나 손절 혹은 당일청산을 기다리게 해야 하는지요)
감사합니다.
다음글
이전글