커뮤니티
예스스팟 Q&A
답변완료
Account1.GetBalanceETCinfo 값이 0으로 나옵니다.
var gIsNH = true;
var infoNum = gIsNH ? 16 : 5;
var d100 = Account1.GetBalanceETCinfo(infoNum); //NH D 100% 주문가능금액, 하이투자증권 : 5, 주문가능금액
var dplus2 = Account1.GetBalanceETCinfo(20); //NH D + 2 예수금
this.currency = gIsNH ? dplus2 : d100;
dplus2, ", currency = ", this.currency);
this.balance = Account1.GetTotalAmount(1, 2); //주식 잔고 평가금액
gInitialMoney = Math.min(초기투자금액, gInitialMoney);
var fakeCurrency = gInitialMoney - this.balance;
this.currency = this.currency > fakeCurrency ? fakeCurrency : this.currency;
if( this.currency <= 0 ) {
this.moneyPerStock = this.moneyToBuyStock = this.moneyToBuy = 0;
Log.msg("주문 가능 현금이 없습니다. currency = ", this.currency, ', balance = ', this.balance, ', balance = ', this.balance
, ', fakeCurrency = ', fakeCurrency, ', moneyForTrade = ', this.moneyForTrade, ', gInitialMoney = ', gInitialMoney);
return;
}
코드는 복잡해보이지만 Account1.GetBalanceETCinfo(20) 값이 가끔 0 으로 나오는 오류가 난다는 내용입니다.
찍히는 로그는 캡쳐해두었습니다.
평상시 잘 읽히다가 가끔 불특정 상황에서 일어나는 일이라서 스팟 적용에 당황스런 상황이 발생합니다.
추가)
this.balance = Account1.GetTotalAmount(1, 2);
이 값도 잘 안들어올 때가 있습니다.
예를 들어 매수체결 후 6초가 지난 후 읽었는데도 balance 값이 0으로 찍혔습니다.
2016-12-29
1921
글번호 224077
답변완료
확장차트에 주야간 복합 차트
예스스팟 내에서 생성하는 확장차트에 '주야간 복합' 선물 차트를 넣을 수 있는 방법이 있는지요?
2016-12-21
1936
글번호 224074
답변완료
장 중인지 판별 (장 시작 시간, 끝 시간...)
스팟에서 장 중인지를 어떻게 판별하죠?
또는 장 시작 시간과 끝 시간을 알 수 있었으면 좋겠는데요.
판별할 수 있는 코드를 알려주세요.
2016-12-20
1987
글번호 224073
답변완료
부탁드립니다.
1.아래 수식에서는 현재 1계약의 포지션이 있는경우 반대포지션으로의 1계약 진입을 위하여는,
청산과 진입을 위하여 2계약 (VV = 2;) 이 동시에 주문체결하게 됩니다.
이를 5초간의 시간차를 두고 1계약씩 주문체결 되도록 수식을 변경 하여 주시면 감사 하겠습니다.
2. 매수 미완성신호발생을 IncompleteSignal.signalKind == 1 로
매도 미완성신호발생을 IncompleteSignal.signalKind == 3 으로 하면
미완성신호가 없는 경우의 표기는 IncompleteSignal.signalKind == 0 으로 하면 되나요?
var T;
function Main_OnStart()
{
T = 0;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(KP.code);
}
function C1_OnRiseIncompleteSignal(IncompleteSignal)
{
Main.MessageLog("미완성신호발생/" + IncompleteSignal.signalKind);
A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code))
if ((A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1)
{
T = 1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(1,10000);
}
if ( A1.Balance.position == 1 && IncompleteSignal.signalKind == 3)
{
T = 0;
Main.KillTimer(1);
Main.SetTimer(2,10000);
}
if ((A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3)
{
T = -1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(2,10000);
}
if (A1.Balance.position == 2 && IncompleteSignal.signalKind == 1)
{
T = 0;
Main.KillTimer(2);
Main.SetTimer(1,10000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && T == 1)
{
Main.KillTimer(1);
A1.OrderBuy(KP.code, VV, KP.Ask(5),2);
Main.MessageLog("매수진입");
}
if (nEventID == 1 && T == 0)
{
Main.KillTimer(1);
Main.MessageLog("중복매수진입금지");
}
if (nEventID == 2 && T == -1)
{
Main.KillTimer(2);
A1.OrderSell(KP.code, VV, KP.Bid(5),2);
Main.MessageLog("매도진입");
}
if (nEventID == 2 && T == 0)
{
Main.KillTimer(2);
Main.MessageLog("중복매도진입금지");
}
}
2016-12-23
2069
글번호 224072
답변완료
스팟에 있었으면 하는 메소드
먼저 성심성의껏 알려주신 점에 깊이 감사드립니다.
전화상 말씀드린 스팟에 있었으면 하는 메소드를 정리해보았습니다.
귀찮다 생각지마시고 귀사의 프로그램에 대해 애정이 있고 지속적으로 사용하기를 원하기에 이런 글을 올린다는 것으로 이해해주셨으면 합니다.
1. 관심종목
Refresh(그룹명) - 관심종목의 해당그룹명을 재갱신 (현재 종목이 추가되면 조회버튼으로 일일이 누르고 있음)
Sort() - 이름순, 등락순, 거래량순 등으로 소팅
DeleteItem(그룹명, 종목명) - 해당 그룹의 종목삭제
DeleteGroup(그룹명) - 해당 그룹삭제
CreateGroup(그룹명) - 해당 그룹생성
2. 확장차트객체
DeleteChartEx(차트번호 or 종목명) - 확장차트제거
진입된 종목이 청산되면 더 이상 차트가 필요없을 수도 있기에....
ArrageChartEx(방식) - 만약 차트가 10개생성되면 쭈욱 나열이 되는데, 바둑판식 배열 등으로 정렬될 수 있도록 하는 기능
3. 엑셀객체
CreateSheet(생성시트번호, 시트이름) - 시트생성
DeleteSheet(시트번호) - 해당시트 제거
그외 좀 개선되었으면 하는 기능.
1. YS특징상 리얼타임에서 코딩 -> 검증 -> 디버깅하는 과정을 반복적으로 거치는데
6131화면에서 디버깅후 기존 올려진 전략을 X로 내리고, 다시 적용하고, 시험적용 or 자동주문 선택후 확인 누르는 작업을 수없이 하게 됩니다. 안정화되기까지 수도 없이 할 것입니다. 이를 좀 간단히 할 수 있게 개선이 꼭 되었으면 합니다. 가령 적용된 전략의 X 옆에 변경된 소스를 Reload 하는 버튼을 만들어서 바로 적용가능하게 하여 전략을 내리고 올리고 하는 반복적인 시간낭비를 없애면 어떨까합니다....
2. YS 스튜디오에서 옵션창이 있어서 편집창 글꼴 변경, 글꼴 크기 조절등이 되었으면 하네요.
UHD 모니터를 사용하다보니 글자크기가 너무 작아서..
3. YS를 처음 접하는 유저나 어떤 전략을 기술하기 위해 이곳을 찾는 유저들을 위해 이 게시판의 상단에 자주 쓰이는 코드의 프레임워크를 만들어 놓으면 어떨까요? 가령, 주식매매하는 사람들을 위해 종목 검색부터 확장차트 띄우고 주문내는 대략적인 코드...선물옵션하는 사람들도 마찬가지고... 모범 답안은 아니더라도 프로그램의 전체 흐름을 파악할 수 있는 PSEUDO 코드라든지...암튼 자주 질문하는 내용을 상단에 표기하는것이 목적입니다. 여기 게시판의 담당자도 많은 질문에 대한 답변으로 에너지를 줄여 다른 곳에 포커싱할 수 있다고 보여집니다.
여러가지 올렸는데 귀사의 적극적 검토를 부탁드립니다.
감사합니다.
2016-12-19
2143
글번호 224071
답변완료
수식문의드립니다
예전에 깔짝 프로그래밍 배운걸로는 아무리 봐도 모르겠네요
그당시도 아니고 10여년이 지나서..
20틱 차트에서 파라볼릭af0.1 maxAF0.1 상향돌파시
신호나오자마자 -3틱에 바로 주문신호들어가고
체결시 신호가에서+3틱에 바로 청산신호들어가게요
이게 예스랭귀지에서는 신호가 오면 그때 주문이 들어가는거라고하는데
-3틱으로 밀리는 신호가와야 그때서야 주문이 들어간다고하더라구요
반대로 매도 신호가 떠도 같은식으로
신호가 나온후에 5분간 체결이 안되면 취소가 되는함수도부탁드립니다
그외에는 자동으로 바뀌면 청산후 다시 매도도 가능하게요
나름 찾아보고 공부하려고했는데 너무 방대하네요
가이드좀 잘부탁드립니다
2016-12-15
2165
글번호 224064
idnotbe 님에 의해서 삭제되었습니다.
2016-12-15
14
글번호 224063
idnotbe 님에 의해서 삭제되었습니다.
2016-12-15
0
글번호 224062
답변완료
ELW 관련 수식문의("[01165] 주식워런트증권 지정가호가 매매만 가능합니다")
아래의 수식으로 현물거래를하다가 ELW 거래에 적용해보니 아래와 같은 에러 메시지가 뜹니다.
"[01165] 주식워런트증권 지정가호가 매매만 가능합니다"
그래서 가격 구분을 지정가로 바꾸고, 가격을 직접입력해서 해봤는데도 계속 주문 가격이 0으로 나가서 거래가 되질 않네요. 수식상의 어디를 수정하면 되는지요??
function Chart1_OnRiseSignal(Signal)
{
//buy신호발생
if (Signal.signalKind == 1)
{
//신호종목 잔고 셋팅
Account1.SetBalance(Main.GetOrderCode(Signal.code),0);
//보유수량이 없으면
if (Account1.Balance.count == 0)
{
//10주 시장가로 매수
Account1.OrderBuy(Main.GetOrderCode(Signal.code), 10, 0,1);
}
//보유수량이 있다면
else if (Account1.Balance.count > 0)
{
//현재가가 평균단가 대비 10% 하락시 보유수량+10주 시장가로 매수
if (Account1.Balance.current < Account1.Balance.avgUnitCost*0.9)
{ Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count +10, 0,1);
}
//현재가가 평균단가 대비 3% 이상 상승시 전량매도
if (Account1.Balance.current > Account1.Balance.avgUnitCost*1.03)
{ Account1.OrderSell(Main.GetOrderCode(Signal.code), Account1.Balance.count, Account1.Balance.current,0)
}
}
}
2016-12-13
2172
글번호 224061
답변완료
예스스팟에서 Grid 객체 활용시 그리드 보이게 하는 방법?
예스스팟 편집기에서 Grid 객체를 포함시킨후 예스스팟에서 실행시켜도 그리드 화면은 나타나지 않습니다.
그리드 보이게 하는 방법 설명 부탁드립니다.
2016-12-09
2312
글번호 224059