답변완료
차트신호시 특정가격 옵션 현재가 매수
답변 수식 고맙습니다.
아래수식은
특정시간대, 특정조건에서 주문이 나가는 수식입니다.
이 수식을
특정시간, 특정조건은 사용하지 않고
차트신호로 진입하고 차트신호로 청산하는 것으로 교체하고 싶습니다.
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
OrderBuy
}
}
if (Signal.signalKind == 2)
{
OrderSell
}
차트에서 진입신호 발생 후
실시간으로 0.05 체결이 발생한 행사가를 찾아 주문을 내고
익절하는 내용까지는 spot 수식 그대로 보존해 주십시오.
다만, 차트신호에 포함되는 내용인
재진입 건 내용과 142500 시간대 청산주문 내용은 삭제해 주십시요.
그리고 진입주문과 청산주문에 시장가 주문을 주석으로 병행하여 주시기 바랍니다.
시세가 빠르게 갈 때는 지정가로는 체결이 안되더군요.
항상 고맙습니다.
***********************************************************************************
안녕하세요
예스스탁입니다.
스팟수식은 가이드입니다.
아래 가이드 내용 참고하시기 바랍니다.
1
스크립트 객체설정
옵션객체 추가 --> 객체명 Option1, 월물선택
종목객체 추가 --> 객체명 MarketData1, 연결선물로 지정
계좌객체 추가 --> 객체명 Account1, 주문낼 계좌번호 지정
2
영문 업데이트가 게시판 금침어라 중간에 *이 삽입되어 있습니다.
* 제거하시고 적용하셔야 합니다.
3
var BuyPrice = 0.05, ExitPrice = 0.5;
var StartTime = 103000, EndTime = 142500;
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 - 2.5 &&
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] = 0;
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
587
글번호 225996
답변완료
보완 부탁드립니다...^^
다음 조건에 보유종목 수를 원하는 대로 수정하여 사용 할 수 있게 보완하여 주십시요?
예를 들어 10개로 제한할 경우, 10개 종목이 매수되어 잔고로 남아 있을 경우에는 더 이상 매수되지 않게 하고, 만약 2종목이 매도되어 8종목 남아 있다면, 2종목이 추가로
매수되어 10종목을 유지할 수 있게 할 수 있을까요? 가능하다면 보완 부탁드립니다. 감사합니다...
-다음-
var 타이머간격 = 5; // 5초
var 매수금 = 100000
var OrderList = [];
var MKList = [];
var req;
function Main_OnStart()
{
// 1번 타이머, 5초
Main.SetTimer(1, 타이머간격*1000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500)
{
// 종목검색 실행
Main.ReqPowerSearch("00. 예스스팟_Rsi 다이버전스");
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >= 1)
{
if (MKList.length == 0)
{
OrderList = aItemList;
}
else
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MKList.length; b++)
{
if (aItemList[a] == MKList[b].code)
{
Add = false;
}
}
if (Add == true)
{
OrderList.push(aItemList[a]);
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, 타이머간격*1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
Account1.OrderBuy(MarketData.code,1,0,1); // 1주를 시장가 주문
// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // 10만원 시장가 주문
// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); // 10만원 지정가 주문
// 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다.
req = req+1;
if (req < OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, 타이머간격*1000);
}
}
}
2024-04-16
609
글번호 225987
답변완료
문의드립니다.
안녕하세요.
만약 옵션을 매수 중인 상황(1종목)에서, 계좌평가손익이 -30%인 경우 보유 옵션을 매도하라는 로직을 하고 싶은데,
다음과 같이 수식을 작성해 보았는데, 괜찮은지 확인 부탁드립니다.
감사합니다.
if ( A1.Balance.count > 0 && A1.Balance.position == 2 )
{
if ( A1.Balance.current <= A1.Balance.avgUnitCost*0.7 )
{
A1.OrderSell(A1.Balance.code, A1.Balance.count, 0, 1);
}
}
2024-03-29
576
글번호 225978