답변완료
확장차트 시그널 관련 문의
안녕하세요
Spot에서 확장차트를 불러 매수 시그널을 받을 때
차트에 지정된 시스템 전략식의 매수, 매도량을
받아서 처리할수는 없을까요?
현재는 아래와 같이 되어 있습니다.
<Yes Language 시스템 식>
#capitals 는 자본, highband_price는 임의로 설정한 기준가격
# highband_price 값에 따라 수량이 바뀜
qnt = Round((capitals/highband_price),0);
buy("Long1", onClose,DEF,qnt);
# 이외 다양한 분할 손절/익절 조건 존재
<Yes Spot 수식>
function Main_OnRiseSignal(ChartEx, Signal)
{
//신호발생 종목에 대해 잔고셋팅
Account1.SetBalance(Main.GetOrderCode(Signal.code),0);
//매수신호이고 잔고가 없을때만 매수
if (Signal.signalKind == 1)
{
//Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(500000/ChartEx.current),0,1);
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(500000/ChartEx.GetClose(1,0)),0,1);
Main.MessageLog("매수주문 수량 "+Math.floor(500000/ChartEx.GetClose(1,0)));
}
//알단 여기 QnA 계시판 보고 확장차트 시그널 받아서 처리하는 부분을 저렇게 처리를 했는데.. 아무래도 저렇게 하면 수량이 50만원 자본, 현재가 기준 매수 수량으로 고정이 되는거 같은데요.
위의 예스 랭귀지 시스템에서 발생한 매수 시그널의 매수 수량을 그대로 가져와서 매수가 되게끔 처리할수 없을지 문의드립니다.
감사합니다.
답변완료
파워종목검색후 자동매매 문의드립니다.
예스스탁에서 매일 파워종목검색하여 시스템 조건식으로 아래와 같이 예스스팟에서 자동매매식 문의드립니다
1. 코스닥,코스피에서 종목검색
2. 종목검색식은 [3202]파워종목검색에서 사용자 검색조건식 사용
- 파워종목검색명(①)
①[전일 동시간대비 거래급등종목] 거래량조건[1만주이상]and[순위검색]설정조건에서[거래량][상위]
순으로[100]검색
3. 파워종목검색 후 매수 → 매수 신호 발생 종목당 각1주씩 시장가 매수[미체결주문 발생시 제외]
4. 매수 / 매도 조건
- 오전 9시 ~ 11시까지만 매수 주문하며, 오후 15시 20분 당일 모든 종목 전량매도
(단, 매수종목이 매수금액 4%이하로 떨어져도 매도)
- 매수종목 주문체결시 문자발송되는지
감사합니다.
관리자에 의해 수식작성 QnA로 이동되었습니다
항상 친절한 안내와 지도에 감사를 드립니다.
키움에서는 실제투자하는 것과 같이 거래관계가 나타나도록 모의투자를 하는데
이베스트의 챠트에서 제휴컨텐츠를 통해 들어가서 시험적용하는 것이 모의투자의
전부인지요?
시험적용의 방식이 아닌 다른 키움증권사와 같은 방법을 증권사가 있다면 알려주시면
고맙겠습니다.
답변완료
차트신호시 특정가격 옵션 현재가 매수
답변 수식 고맙습니다.
아래수식은
특정시간대, 특정조건에서 주문이 나가는 수식입니다.
이 수식을
특정시간, 특정조건은 사용하지 않고
차트신호로 진입하고 차트신호로 청산하는 것으로 교체하고 싶습니다.
//차트에서 신호가 발생하면
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);
}
}
}
}
}
즐거운 하루되세요
답변완료
보완 부탁드립니다...^^
다음 조건에 보유종목 수를 원하는 대로 수정하여 사용 할 수 있게 보완하여 주십시요?
예를 들어 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);
}
}
}