커뮤니티

예스스팟 Q&A

답변완료

확장차트에 시스템전략 적용시 문제

아래와 같은 조건의 확장차트에 시스템전략을 적용하였습니다 차트주기 : 300틱 600틱 등 다양 참조데이터 : 선물30분봉 2000개 그런데 확장차트 외에 예스트레이더 차트에 동일한 전략(차트주기, 참조데이터 적용 동일)을 적용해놓고 실시간 신호를 관찰해보면 확장차트에서 발생하는 신호와 예스트레이더 차트에서 발생하는 신호가 10회중 2~3회 정도 신호 발생 시점 차이가 납니다 1~2분 정도 시차가 아닌 30분 이상 신호 차이가 발생합니다 이런 현상의 원인이 뭔지 문의드립니다
프로필 이미지
훈sys
2018-02-02
2892
글번호 224327

Main.GetUserValue로 불러온 값이 정확한 숫자가 되도록 부탁드립니다..

아래수식에서 Main.GetUserValue("매수가격"); 불러온 값이 1900 이라면 숫자1900으로 인식 못하고 있습니다. var 매수가격; //스팟시작 function Main_OnStart() { Main.SetTimer(1, 5000)//5초, 1000이 1초 //내부파일에 변수 매수가격에 적어놓은 값을 가져와 다시 변수 aa에 저장 var aa = Main.GetUserValue("매수가격"); if (aa == "" ) {매수가격 = 0;} else {매수가격 = aa; } } 중략 ~~~~~ Main.SetUserValue("매수가격",매수가격); } ~ ~~~ 아래 함수수식 중에서 var 매수가격1= (매수가격 + 20) ; 일 때 실제 매수가격이 1900 이라면 매수가격1 =1900 + 20 =1920 이 나오지 않고 190020 이라는 값으로 나옵니다. 어떻게 해야 1920 으로 나올 수 있는지 알려 주시면 고맙겠습니다.
프로필 이미지
종호
2018-02-03
3067
글번호 224323

엑셀데이터 끌어오기관련

안녕하세요? 예스스팟 이제막 매뉴얼보기 시작했습니다. 어느 곳에 질문을 해야할지 모르겠는데요 파이썬등으로 계산된 결과를, 엑셀의 특정셀에 시계열이 아닌, 0,1,2 등 한개의 단순수치로 저장할때에, 저장되는 그 시점에 , 그 한개의 수치를 예스스팟이나,데이터매니저로 즉시 자동적으로 끌어와서, 예스랭귀지로 미리 만들어 놓은 전략에, 중요변수로 즉시 입력시켜 해당봉의 1분봉종가에 그 수치에 따라 매수,매도주문을 내는 방법이 있을까요? 예스스팟의 엑셀객체가 그 역할을 하는 것 같은데, 자바스크립트를 모르고, 예스스팟이 처음이다 보니,어떻게 스팟전략을 짜야할지 모르겠습니다. Q&A 찾아보니, 비슷한 예제를 찾을 수가 없어, 질문을 올렸습니다. 예제나 방법을 알려주시면 감사하겠습니다.
프로필 이미지
친구
2018-01-31
3195
글번호 224322
답변완료

스팟 수식 수정 부탁드립니다

/* 아래는 게시판에 올라와 있는 종목검색후 자동주문하는 스팟식입니다. 아래와 같은 내용을 업그레이드 부탁드립니다. 1. 매수 및 손절은 파워 검색 종목이용 2. 청산은 보유 종목 중 'BollingerBandUP 하향 이탈'시 시장가로 자동청산(파워종목 검색 이용하지 않음) 3. Stoptrailing을 수익감소 3%로 설정 해주시면 감사드리겠습니다 */ var EntryMoney; var ItemList,Count; var MObj; var Scode = [], Blist = [], Slist = []; var Blistcount, Slistcount; var Req = 0; var con; function array_diff(a, b) { var tmp = {}, res = []; for(var i =0; i < a.length; i++) tmp[a[i]]=1; for(var i =0; i < b.length; i++) {if(tmp[b[i]]) delete tmp[b[i]];} for(var k in tmp) res.push(k); return res; } //스팟시작 function Main_OnStart() { //타이머설정 Main.MessageList("시작"); Main.ReqPowerSearch("수익률상위BBand") Main.SetTimer(1, 300000);//간격(300초 5분) EntryMoney = Math.floor(Account1.GetBalanceETCinfo(0)/10); } function Main_OnTimer(nEventID) { //타이머동작하면 사용자검색조건 실행 if (nEventID == 1) { Main.MessageList("종목검색시작"); Main.ReqPowerSearch("Stest"); EntryMoney = Math.floor(Account1.GetBalanceETCinfo(0)/10); Req = 0; } if (nEventID == 2 && Req < Blistcount) { if(Req <Blistcount) { Main.ReqMarketData(Blist[Req], 0, 0); Req = Req+1; Main.MessageList(Blist[Req-1], Req, Blistcount, "매수"); } if(Req == Blistcount) { Main.KillTimer(2); Req = 0; Slist = array_diff(Scode, ItemList); Slistcount = Slist.length; Main.MessageList(Slistcount); Main.SetTimer(3, 250); //간격(1초) } } if(nEventID == 3 && Req < Slistcount) { if(Req <Slistcount) { con = 2; Main.ReqMarketData(Slist[Req], 0, 0); Req = Req+1; Main.MessageList(Slist[Req-1], Req, "매도"); } if(Req == Slistcount) { Main.KillTimer(3); } } } //종목검색이 완료 function Main_OnRcvItemList(aItemList, nCount) { //검색종목수가 1개 이상이면 if (nCount >= 1) { ItemList = aItemList; Bcode = []; var num = Account1.GetTheNumberOfBalances(); //잔고셋팅해서 보유종목이 아니면 for(var i = 0; i < num; i ++) { Account1.SetBalance(i); Scode.push(Account1.Balance.code); } Blist = array_diff(ItemList, Scode); Req = 0; Blistcount = Blist.length; Main.MessageList(Blistcount, "매수수량") ; con = 1 ; Main.SetTimer(2, 250); //간격(1초) } } //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { var EntryVol = 0; MObj = MarketData; //1주 단위일 경우 if (con == 1) { if(MObj.Ask(2) > 100000) { EntryVol = 1; } else { EntryVol = Math.floor(EntryMoney / MObj.Ask(2)); } if(EntreVol > 0) { Account1.OrderBuy(MObj.code, EntryVol, MObj.Ask(2), 0); } } //10주 단위일 경우 if (con == 2) { Account1.SetBalanceItem(MObj.code, 0); Account1.OrderSell(MObj.code, Account1.Balance.count, MObj.Bid(2), 0) } Main.RemoveMarketData(MObj); }
프로필 이미지
mirror05
2018-01-29
3261
글번호 224320

데이터베이스 객체 문의드립니다.

데이터베이스 객체를 사용해서 스팟 작성을 하는 도중 오류가 떠서 어떤게 문제인지 알 수 있을까요? 오류 내용은 "지정된 DSN은 드라이버와 응용 프로그램 간 아키텍처 불일치를 포함합니다." 라고 뜨네요...
프로필 이미지
도비
2018-01-25
3020
글번호 224317
답변완료

스팟 문의드립니다.

아래식을 이용해서 수정하고 싶습니다. 한 계좌에서 해외선물 여러종목을 동시에 매매할껀데요 계좌의 감시를 하다가 여려 종목들의 합산 수익이 20만원이 되면 모든종목청산 합산손실이 -20만원이면 모든종목청산을 하고 싶습니다. 아래식을 이용해서 위 전략을 작성할수 있나요 아래식을 이용하면 종목당 틱가치나 틱단위가 서로 달라서 문제가 있을것 같은데요... 도움 부탁드리겠습니다. function Main_OnStart() { Main.MessageList("계좌감시 시작"); //타이머 셋팅 Main.SetTimer(1, 5000); //스팟시작시 잔고가 있으면 true if (Account1.GetTheNumberOfBalances() >= 1) Exit = true; else// 아니면 false Exit = false; } function Main_OnTimer(nEventID) { var num = Account1.GetTheNumberOfBalances(); //Exit은 true이고 계좌에 1종목이상 있음 if (Exit == true && num >= 1) { var sum1 = 0; var sum2 = 0; var PL = 0; for (var i = 0; i < num; i++) { Account1.SetBalance(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { sum1 = sum1 + Account1.Balance.avgUnitCost * Account1.Balance.count; //평단가 곱하기 수량 sum2 = sum2 + Account1.Balance.current * Account1.Balance.count; //현재가 곱하기 수량 PL = PL + (sum2-sum1); //손익 } if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { sum1 = sum1 + Account1.Balance.avgUnitCost * Account1.Balance.count; sum2 = sum2 + Account1.Balance.current * Account1.Balance.count; PL = PL + (sum1-sum2); } } //전체종목의 손익이 -이고 평단가기준 총평가금액의 10% 이상이면 전체종목 청산 //Exit은 false로 if (PL < 0 && Math.abs(PL) >= sum1*0.10) { Exit = false; for (var i = 0; i < num; i++) { Account1.SetBalance(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*제거 { //잔고에 새로운 종목이 추가되면 true로 변경하고 타이머 셋팅 if (Exit == false && sAccntNum == Account1.number && lUp*dateID == 30001)//*제거 { Exit = true; } }
프로필 이미지
수다리
2018-01-21
2958
글번호 224316

베스트시스템 님에 의해서 삭제되었습니다.

프로필 이미지
베스트시스템
2018-01-21
3
글번호 224315

베스트시스템 님에 의해서 삭제되었습니다.

프로필 이미지
베스트시스템
2018-01-18
2
글번호 224314

데이터베이스에서 리턴 받은 데이터의 데이터형식 문제...

고생이 많으십니다~~ <CODE> var ItemCode var ItemVol var ItemAvg var ItemCrt var ItemBPL var ItemSPL var c var d var cond = false; var cond2 = false; var arr = new Array; var arr2 = new Array; var i // 변수들을 지정하고 function Main_OnStart() { Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); ItemCode = Account1.Balance.code; ItemVol = Account1.Balance.count; ItemAvg = Account1.Balance.avgUnitCost; ItemCrt = MarketData1.current; ItemSPL = (ItemAvg - ItemCrt - 0.0003)*100000/1375; d = ItemSPL var cond = DataBase1.Selec*t("* FROM [NKD] ", "idx" ); if (cond == true) { DataBase1.MoveFirst(); while (DataBase1.IsEOF() == false) { arr.push(DataBase1.GetFieldValue(0)); DataBase1.MoveNext(); } } c = arr.length Main.MessageList(c+1,d) DataBase1.Inser*t("[NKD] VALUES("+(c+1)+","+d+")") // 이번거래에서 얻어진 수익률을 데이터베이스에 반영(Inser*t)한 후 var cond2 = false; var cond2 = DataBase1.Selec*t(" Test_column FROM [NKD] WHERE idx ="+i+"", "Test_column" ); //이전 수익률값까지 모두 받아서 if (cond2 == true) { DataBase1.MoveFirst(); while (DataBase1.IsEOF() == false) { arr2.push(DataBase1.GetFieldValue(0)); DataBase1.MoveNext(); } } for(i=0; i <= (c-1); i++) {arr2[i] = parseFloat(arr2[i])} Main.MessageList(arr2) sum = function(x,y) { return x+y; }; mean = arr2.reduce(sum)/(c+1); Main.MessageList(mean) } // 구해진 수익률을 업데이트 한 새로운 평균을 내는 코드를 작성하는데 성공하였습니다만... 문제가 있습니다. arr2 의 배열의 요소들을 숫자로 인식하지 않습니다. 데이터형이 object 로 나오는데요... parseFloat, Number 로도 안되고 1.어떤방법으로 arr2 배열의 요소를 숫자(실수형)으로 변환 가능할까요? 2.처음부터 SQL에서 컬럼을 만들당시에 실수형(Float)으로 지정하였음에도 불구하고 데이터를 받아오는 과정에서 테이터 변환이 일어났는데 데이터 변환이 일어나지 않도록 데이터를 받아올 수는 없을까요? 구력이 얼마 안되고 코딩 센스도 부족하여 기초적이고 허접한 질문을 드려 죄송합니당^^ 지도편달 부탁드려요~
프로필 이미지
검시관덱스터
2018-01-28
2839
글번호 224311

YesSpot 에서 MS SQL 직접연결문제...

수고가 많으십니다.^^ <YesSpot JavaScript Code> var ItemCode var ItemVol var ItemAvg var ItemCrt var ItemBPL var ItemSPL var d function Main_OnStart() { Account1.Refresh(); Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); ItemCode = Account1.Balance.code; ItemVol = Account1.Balance.count; ItemAvg = Account1.Balance.avgUnitCost; ItemCrt = MarketData1.current; ItemSPL = (ItemAvg - ItemCrt - 0.0003)*100000/1375; var d = ItemSPL Main.MessageList(typeof d) Main.MessageList(d) DataBase1.Inser*t("[NKD] VALUES(d)") --------------------------------------------------------------------------------------- 예스스팟에서 수익 또는 손실이 생기면(ItemSPL) 그것을 데이터베이스(MS SQL)에 삽입(Inser*t)하여 데이터를 갱신하는 코드를 작성하였습니다만... 예스스팟상에서 DataBase1.Inser*t("[NKD] VALUES(1)")와 같이 코드를 작성하면 1을 MS SQL에 삽입하나... DataBase1.Inser*t("[NKD] VALUES(d)")를 실행하는경우 변수 d의 값을 MS SQL에 삽입하지 못합니다. 이것이 단순한 변수 d의 JavaScript(데이터 형식: number) 와 MS SQL (데이터 형식:decimal) 사이의 데이터 형식의 차이에 의한 것이라고도 생각해 보았으나 그것이 문제가 아닐수도 있겠다는 생각이 들었습니다. 1.결국은 예스스팟상에서 미들웨어( 다른 환경이지만 예를들어 PHP같은)를 통해 서버 사이드 데이터베이스에 접근을 하여야합니까? 2.아니면 위의 코드에서 자바스크립트상의 var d(변수)를 데이터베이스(MS SQL)에 바로 인식시켜 Inser*t 하고 Selec*t 하는 방법이 따로 있는것입니까? 3.위의 코드에서 var d를 MS SQL에 삽입하는 방법이 있으면 지도 부탁드립니다...
프로필 이미지
검시관덱스터
2018-01-16
2903
글번호 224308