안녕하세요?
죄송하지만 다음 로직의 예스스팟 수식좀 보여주십시오.
날짜나 시간 경과 상관없이 종전의 최종적인 체결가를 직전체결가로 보존하고 있다가
(만일 직전체결가가 없거나 고치고 싶을 때는 사용자가 입력하거나 고치는데, 그게 아니라면 자동으로 직전체결가를 계속 갱신하면서 보존)
현재가가 직전체결가보다 1000원 오르면
잔고를 체크해서 매도포지션이 한 개라도 있으면 2계약 매수
매도포지션이 한개도 없으면 1계약 매수
그렇게 매수하고 나면 그 가격이 직전체결가로 보존되고
거기서 다시 1000원이 오르면 같은 동작 반복.
하지만 거기서 다시 1000원이 떨어지면 아래 떨어질 때의 동작으로.
반대로 현재가가 직전체결가보다 1000원 떨어지면
잔고를 체크패서 매수포지션이 한 개라도 있으면 2계약 매도
매수포지션이 한 개도 없으면 1계약 매도
그렇게 매도하고 나면 그 가격이 직전체결가로 보존되고
거기서 다시 1000원이 떨어지면 같은 동작 반복.
하지만 거기서 다시 1000원이 오르면 위 올라갈 때의 동작으로.
감사합니다.
답변 1
예스스탁
예스스탁 답변
2015-02-11 13:55:29
안녕하세요
예스스탁입니다.
스팟수식의 답변은 가이드라인 정도의 수식만 작성해 드립니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
스크립트 객체화면 설정
계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호지정
종목객체 추가 --> 속성에서 객체명은 MarketData1,종목지정
수식에 게시판 금지어가 있습니다.
영문 업데이트가 Up*date로 중가에 *이 있습니다. 제거하시기 바랍니다.
var fill;
//스팟시작시에
function Main_OnStart()
{
//내부파일에 fill로 저장된 값 리턴
fill = Main.GetUserValue("fill");
//그값이 0이상이면 1(저장이 되어 있음)
//아니면 0(저장된 값이 없음)
if (fill > 0)
Start = 1;
else
Start = 0;
}
//시세수신시
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거
{
//MarketData1종목의 시세 수신시
if (Start == 1 && sItemCode == MarketData1.code && lUp*dateID == 20001 )//*제거
{
//현재가격이 fill에 저장된 값보다 1000원이상이면
if (MarketData1.current >= fill+1000)
{
//MarketData1.code 종목 잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//수량이 1개 이상이고 매도포지션이면 2계약 매수
if (Account1.Balance.count >= 1 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 2, MarketData1.Ask(3), 0);
Start = 0;
}
//수량이 0이면 1계약 매수
if (Account1.Balance.count == 0)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
Start = 0;
}
}
//현재가격이 fill에 저장된 값보다 1000원이상 작으면
if (MarketData1.current >= fill+1000)
{
//MarketData1.code 종목 잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//수량이 1개 이상이고 매수포지션이면 2계약 매도
if (Account1.Balance.count >= 1 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 2, MarketData1.Bid(3), 0);
Start = 0;
}
//수량이 0이면 1계약 매도
if (Account1.Balance.count == 0)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
Start = 0;
}
}
}
}
//체결통보수신
function Main_OnNotifyFill(NotifyFill)
{
//체결종목이 MarketData1 종목과 같으면 체결가 저장
if (NotifyFill.code == MarketData1.code)
{
fill = NotifyFill.fillPrice;
Start = 1;
}
}
//스팟종료시에 fill에 저장된값 내부파일에 저장
function Main_OnClose(){
Main.SetUserValue("fill", fill)
}
즐거운 하루되세요
> 궁금 님이 쓴 글입니다.
> 제목 : 예스스팟수식문의
> 안녕하세요?
죄송하지만 다음 로직의 예스스팟 수식좀 보여주십시오.
날짜나 시간 경과 상관없이 종전의 최종적인 체결가를 직전체결가로 보존하고 있다가
(만일 직전체결가가 없거나 고치고 싶을 때는 사용자가 입력하거나 고치는데, 그게 아니라면 자동으로 직전체결가를 계속 갱신하면서 보존)
현재가가 직전체결가보다 1000원 오르면
잔고를 체크해서 매도포지션이 한 개라도 있으면 2계약 매수
매도포지션이 한개도 없으면 1계약 매수
그렇게 매수하고 나면 그 가격이 직전체결가로 보존되고
거기서 다시 1000원이 오르면 같은 동작 반복.
하지만 거기서 다시 1000원이 떨어지면 아래 떨어질 때의 동작으로.
반대로 현재가가 직전체결가보다 1000원 떨어지면
잔고를 체크패서 매수포지션이 한 개라도 있으면 2계약 매도
매수포지션이 한 개도 없으면 1계약 매도
그렇게 매도하고 나면 그 가격이 직전체결가로 보존되고
거기서 다시 1000원이 떨어지면 같은 동작 반복.
하지만 거기서 다시 1000원이 오르면 위 올라갈 때의 동작으로.
감사합니다.