답변완료
문의드림니다
문의드림니다
문1)
아래 주문수식을 매도5호가로 매수주문하는 수식으로 변경 부탁드림니다
OrderBuy(minifuture.code, EntryVol, minifuture.current + 1, 0);
아래 주문수식을 매수5호가로 매도주문하는 수식으로 변경 부탁드림니다
OrderSell(minifuture.code, EntryVol, minifuture.current - 1, 0);
문2)
아래 스팟수식에서 매수청산 하면 예스스팟 적용시
매수청산 되었다는 메시지가 뜨지 않는데요
매수청산 메시지 볼수 있게 수정좀 부탁드림니다
if(Signal.signalKind == 2)
{
Main.MessageList("ExitLong_Signal");
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0)
if (Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),
Account1.Balance.count,MarketData1.Bid(5), 0);
}
}
2024-09-11
403
글번호 226123
답변완료
특정조건 특정시간 특정가격 옵션 매수 진입횟수 조절
아래수식은 1번만 사고 파는 수식입니다.
그런데 처음 매수 후 추가 매수는 없어야 하는데
장이 움직여서 다른 행사가에서도 감시가격 0.05의 체결이 발생하면 매수를 또 냅니다.
장이 크게 움직이면 계속 행사가를 바꾸면서 0.05 체결이 발생합니다.
결과적으로 행사가별로 피라미딩하는 수식이 되었는데 거래횟수를 지정하여 사용하고 싶습니다.
요청사항1)
매수횟수를 세팅해 주십시요.
매수횟수 1이면 1회
매수횟수 2이면 2회
매수횟수를 2로 하면 중복되는 행사가 없이 총 2번의 매수를 합니다.(누적 2개)
- 진입조건을 만족할 때 0.05 체결이 350 행사가에서 발생했다고 한다면
ex) 콜350.00 0.05 매수 (선물 상승시 콜352.50 0.05 매수)
콜350.00 0.05 매수 (선물 하락시 콜347.50 0.05 매수)
변수선언
var BuyPrice1 = 0.05, ExitPrice1 = 1.48;
var BuyPrice2 = 0.05, ExitPrice2 = 0.98;
청산할 때 잔고에 있는 다른 전략의 포지션에 영향이 없어야 합니다.
항상 고맙습니다.
******************************************************************************
var BuyPrice = 0.05, ExitPrice = 999;
var StartTime = 084500, EndTime = 144500;
var List = [],MK = [],OD = [];
var req, Exit, ReqCom;
function Main_OnStart()
{
List = [];
for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
List.push(Option1.GetATMCallRecent(i));
}
Main.MessageList("콜옵션종목수:",List.length);
req = 0;
if (List.length > 0)
{
Main.MessageList("종목객체요청:",req,List.length);
Main.ReqMarketData(List[req]);
}
Exit = false;
ReqCom = false;
}
function Main_OnRcvMarketData(MarketData)
{
if (List[req] == MarketData.code)
{
Main.MessageList("종목객체생성:",req,MarketData.code);
MK.push(MarketData);
OD.push(0);
req = req+1;
if (req < List.length)
{
Main.MessageList("종목객체요청:",req,List[req]);
var S = Main.ReqMarketData(List[req]);
if (S == -1)
{
Main.SetTimer(1, 15000);
Main.MessageList("종목객체생성 제한 --> 15초 뒤 다시 요청:");
}
}
else
{
Main.MessageList("종목객체생성완료");
ReqCom = true;
}
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Main.MessageList("종목객체 재요청:",req,List[req]);
Main.ReqMarketData(List[req]);
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS >= StartTime && HHMMSS < EndTime &&
MarketData1.current >= MarketData1.open + 0.01 && //시가에서 0.01 상승
ReqCom == true && Exit == false &&
lUp*dateID == 20001 )//*제거
{
Main.MessageList(HHMMSS,Exit);
for (var i = 0; i < MK.length; i++)
{
if (OD[i] == 0)
{
if (MK[i].current == BuyPrice)
{
OD[i] = 1;
Account1.OrderBuy(MK[i].code, 1,MK[i].current,0);
}
}
else
{
if (MK[i].current == ExitPrice)
{
OD[i] = 2;
Account1.SetBalance(MK[i].code,0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(MK[i].code, 1,MK[i].current,0);
}
}
}
}
}
if (HHMMSS >= EndTime && Exit == false)
{
Main.MessageList(HHMMSS,Exit);
Exit = true;
//미체결주문수
var UF = Account1.GetTheNumberOfUnfills();
Main.MessageList(HHMMSS,"미체결수",UF);
if (UF > 0)
{
//모든 옵션 미체결 취소
for (var i = 0; i < UF; i++)
{
Account1.SetUnfill(i)
if (Account1.Unfill.code != MarketData1.code && Account1.Unfill.count > 0)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
Main.MessageList(HHMMSS,"OrderCancel",Account1.Unfill.orderNum);
}
}
}
//보유종목수
var BB = Account1.GetTheNumberOfBalances()
Main.MessageList(HHMMSS,"보유종목수",BB);
if (BB > 0)
{
//잔고의 모든 옵션매수청산
for (var i = 0; i < BB; i++)
{
Account1.SetBalance(i);
if (Account1.Balance.code != MarketData1.code && Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
//매수3호가로 잔고잔량 매수청산(매도주문)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,Option1.GetBid(Account1.Balance.code, 5) ,0);
Main.MessageList(HHMMSS,"OrderSell",Account1.Balance.code);
}
}
}
}
}
2024-11-15
458
글번호 226122
답변완료
잔고 조회시 자정 이후 오류 (수정 및 파일첨부)
다음은 특정 시간마다 계좌의 미결제잔고 종목 개수를 조회하는 YesSpot 수식입니다.
var RF1 = 0;
function Main_OnTimer(nEventID)
{
if(nEventID == 1)
{
RF1 = 1;
Account1.Refresh()
}
}
function Main_OnUpdat*Account(sAccntNum, sItemCode, IUpdat*ID)
{
if(RF1 == 1)
{
RF1 = 0;
Count1 = Account1.GetTheNumberOfBalances();
Main.MessageList("Updat*: ", Count1)
}
}
이렇게 적용을 할 시 계좌의 미결제잔고 종목 개수 (포지션 있는 잔고 개수)를 실시간으로 확인할 수 있습니다.
하지만 자정 +10분 (00:10) 이 지나가면서 미결제잔고 종목이 있음에도 불구하고 미결제잔고 종목 개수가 0으로 인식이 됩니다.
스크립트 메시지를 확인해보니 장이 종료된 이후인 06:23에는 다시 제대로 인식이 됩니다
스크립트 내용 중 어디서 문제가 발생하나요? 해결될 수 있는건가요?
('업데이트'가 '금지어'라 Updat*로 통일했습니다.)
2024-09-12
429
글번호 226121