커뮤니티
예스스팟 Q&A
답변완료
종목검색한 결과에서..
안녕하세요,
1분에 한번씩 종목검색한 결과를 엑셀로 업데이트 할수 있을까요?
1분에 한번씩 자동으로 종목검색을 하고
그 결과를 엑셀로 업데이트 하도록 구현할 수 있을까요?
표시하는것 뿐 아니라 그전 결과와 비교하여 색강조 까지 생각하고 있습니다.
예스스팟으로 구현가능한지, 간단한 예시를 주시면 도움이 많이 될것 같습니다.
감사합니다.
2020-10-19
2821
글번호 225341
답변완료
피라미딩 진입 수정 부탁드립니다.
첫 진입이후 3% 하락시 추가 피라미딩 진입하는 식인데, 작동을 안하네요.
수정 부탁드립니다.
var BL = [],req=0,step;
var CT = [];
function Main_OnStart()
{
//처음 시작시 step은 0
step = 0;
//시작시점의 보유종목수
var num1 = Account1.GetTheNumberOfBalances();
//보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장
if (num1 > 0)
{
step = 1;
for(var i = 0 ; i < num1 ; i++)
{
Account1.SetBalance(i);
BL[i] = Account1.Balance.code;
}
if (BL.length >= 1)
{
req = 0;
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2); // 최대진입횟수
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
}
else //보유종목이 없으면 바로 1분 타이머 시작
{
step = 2;
Main.MessageList("보유종목없음");
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
}
function Main_OnRcvChartEx(ChartEx)
{
if (step == 1 && ChartEx.GetCode(1) == BL[req])
{
step = 1;
CT[req] = ChartEx;
req = req+1;
if (req < BL.length)
{
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2);
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
else
{
step = 2;
Main.SetTimer(1, 100000);//1번 타이머, 60초
Main.MessageList("보유종목차트생성완료");
}
}
if (step == 2 && ChartEx.GetCode(1) == BL[req])
{
CT[req] = ChartEx;
req = req+1;
if (req < BL.length)
{
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2);
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
else
{
Main.MessageList("종목검색후차트생성완료");
//차트생성 완료하면 타이머 다시 셋팅
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
//타이머 종료
Main.KillTimer(1);
Main.ReqPowerSearch("종목검색")
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
//검색된 종목이 없으면
if (nCount == 0)
{
//타이머 다시 셋팅
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
//검색된 종목이 있으면
if (nCount >= 1)
{
//검색된 종목과 기존 만든 차트들의 종목코드를 비교해
//차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가
var cnt = 0;
for(var i = 0 ; i < aItemList.length ; i++)
{
var add = true;
for(var z = 0 ; z < CT.length ; z++)
{
if (aItemList[i] == CT[z].GetCode(1))
{
add = false;
break;
}
}
if (add == true)
{
cnt = cnt+1;
BL.push(aItemList[i]);
}
}
Main.MessageList("BL : ",req,BL);
//차트 생성해야할 종목이 있으면 차트요청
if (cnt >= 1)
{
//차트 요청
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2);
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
else //없으면 타이머 다시 셋팅
{
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
}
}
//생성된 차트들에서 신호가 발생하면
function Main_OnRiseSignal(ChartEx, Signal)
{
//매수신호 발생
if (Signal.signalKind == 1)
{
//잔고셋팅
Account1.SetBalance(Signal.code,0);
//보유수량이 없으면
if (Account1.Balance.count == 0)
{
//EntryVol주 시장가 매수
Account1.OrderBuy(Signal.code, EntryVol,Signal.price,1);
}
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅
Account1.SetBalance(Signal.code,0);
//보유수량이 있으면
if (Account1.Balance.count > 0)
{
//전량 시장가 매도
Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1);
}
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)
{
//체결데이터 수신 업데이트
if (lUp*dateID == 20001)
{
//루프를 돌아 생성된 종목중 어떤 종목인지 파악
for (i = 0; i < Math.min(itemcnt,100); i++)
{
//어떤 배열방의 종목인지 찾았으면
if (sItemCode == BL[i])
{
//해당 종목 잔고셋팅
Account1.SetBalance(BL[i].code, 0);
//잔고 수량이 있을때만
if (Account1.Balance.count > 0)
{
//하락시 매수할 가격이하 3% 하락이면 추가매수
if (BL[i].current <= Signal.Price[i]*0.97)
{
Account1.OrderBuy(BL[i].code,EntryVol,Signal.Price[i]*0.97, 0);
}
}
}
}
}
}
2020-10-17
2882
글번호 225340
답변완료
유진예스스탁 옵션 가격 조회
해외옵션에서 가격 조회시 정상적으로 조회되지 않아 질문드립니다.
2020-10-17
2799
글번호 225339
답변완료
유진예스스탁 Option 시세 관련
국내 옵션과 해외 옵션의 함수 파라미터가 다르네요.
그에 따른 Option 시세표를 한번 만들어보는 중에 오류가 있어 질문 드립니다.
2020-10-17
2811
글번호 225338
답변완료
유진예스스탁 잔고 내역 관련 문의.
구동프로그램 : 유진 예스트레이더 해외선물
전략 실행과 동시에 for문을 돌면서 주문을 넣었는데,, 잔고 수량이 이상하게 잡히네요.
2020-10-17
2772
글번호 225337
관리자에 의해 프로그램 사용법 QnA로 이동되었습니다
2020-10-13
11
글번호 225336
답변완료
Option 월물 기초자산 설정관련 질문드립니다.
수고가 많으십니다.
첨부파일의 캡처화면 이미지의
Option의 속성창에서 월물에 대한 기초자산을 만기일에 맞추어 매번 재설정을 해야 하는지요
만기일이 지나면 자동으로 다음 월물로 설정을 변경할 수 있는 방법은 없는 걸까요?
2020-10-04
2815
글번호 225324
답변완료
주문 취소시 미체결 내역이 제대로 처리되지 않는 문제
안녕하세요.
예스스팟을 이용하여 전략을 구성하던 도중 주문 취소가 필요하여 사용중입니다.
취소는 아래와 같이 진행합니다.
var num = Account.GetTheNumberOfUnfills();
for(var i = 0; i < num; i++)
{
Account.SetUnfillIndex(i);
if(Account.Unfill.count > 0 )
{
Account.OrderCancel(Account.Unfill.orderNum)
}
}
그냥 미체결된 내용을 조회하여 전체를 취소하는 것이고 취소자체는 잘 됩니다.
하지만 취소 후 미체결이 1에서 0으로 되었음에도 첨부파일과 같이 미체결내역이 계속 남아있습니다.
Account.Refresh() 를 통해서 동기화를 해보아도 이 문제는 그대로더라구요.
또한 이렇게 미체결 내역이 많이 쌓이게 되면 어느순간 전략이 강제로 중지 상태가 됩니다.
수동으로 미체결 내역 재조회를 하면 전체가 갱신되면서 정상 동작으로 돌아옵니다.
이러한 문제를 해결할 수 있는 방법이 있을까요?
2020-10-02
2817
글번호 225323
회원 님에 의해서 삭제되었습니다.
2020-10-15
95
글번호 225322
답변완료
미완성 신호 최초발생시 진입주문
예스뤵기지에서 발생하는 매매신호(미완성신호) 최초 발생시 진입주문을 할수 있는 수식 부탁드립니다.
에스렝기지 코딩문에서 아래와 같이 작성하면 미완성신호가 발생하면서 분봉 등 1개의 봉이 완성되는 시점에 주문이 나가는 상황인데요....미완성 신호 최초발생시 진입주문을 할수 있는 예스스팟에서 구현할수 있는 수식부탁드립니다.
BUY("매수",OnClose, def,1 ) ;
Sell("매도",OnClose, def,1 );
2020-09-20
2877
글번호 225321