커뮤니티

예스스팟 Q&A

답변완료

분할 매수 수식

안녕하세요? 항상 친절한 답변 감사드립니다. 다음 로직의 수식 부탁드립니다. 0. 선물데이트레이딩의 경우입니다. 1. 총 자금 10억원에서 출발하여 첫 번째 매매에서 자금의 17%를 베팅합니다. 2. 첫 번째 베팅에서 수익이 나면 초기 자금에 수익금을 더하고, 손실이 나면 초기자금에서 손실금을 뺍니다. 이것을 수정 총 자금으로 합니다. 3. 다음 베팅은 2.의 계산 결과에서 시작하여 재차 수정 총자금의 17%를 베팅합니다. 4. 다시 수익이 나면 수정 총자금에 수익금을 더하고, 손실이 나면 수정 총 자금에서 손실금을 뺍니다. 이것을 재 수정 총 자금으로 합니다. 5. 이 과정을 반복하여 수행합니다. 총자금이나 수정 총 자금은 별도의 항목으로 관리되거나 아니면 계좌의 정산금액으로 해도 좋을 것 같습니다. 감사합니다.
프로필 이미지
소총부대
2020-03-07
4050
글번호 225172
답변완료

잔고와 차트신호 간 연동

안녕하세요. 실거래 중에 발생한 경우때문에 요청드립니다. 미니나스닥 기준으로 2계약 증거금을 맞추고 나서 실거래 진행 중 유독 손실이 컸던 날에 매수 포지션에서 매도로 스위칭하는 신호가 떴음에도 달랑 몇 만원 차이로 주문금액이 부족하다는 아래와 같은 주문메시지가 뜨면서 매도 진입은 못하고 익절 청산신호에서 매수진입을 하는 바람에 손실이 더 커졌습니다. [전송오류] [G50306] 주문가능금액이 부족합니다. 실매매 중 증거금 부족으로 초래된 문제였으나 결국은 차트신호와 잔고 원장과의 연동이 되지 않은 상태에서 발생한 이슈이기도 합니다. 예스스팟에서 이 부분을 매꿔줘야 하는데 자바스크립트를 다뤄본 적이 없어 어떻게 연동을 시켜줘야 하는지 막막합니다. 차트신호와 잔고를 연동하는 스크립트가 필요한 상황이오니 작성을 해주시면 감사하겠습니다.
프로필 이미지
gap
2020-03-06
4043
글번호 225170
답변완료

예스스팟은 시뮬레이션이 안되나요?

예스트레이더에서는 전략을 과거 데이터로 백테스트하고, 결과를 분석할 수 있는데, 예스스팟은 안되는 건가요?
프로필 이미지
리버모어71
2020-03-05
3863
글번호 225169
답변완료

예수금조회가 잘 되지 않습니다.

YS이 시작되면.. function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageLog(HHMMSS+": Main_OnStart 이벤트입니다"); Position = 0; // 포지션 없는 상태 // 잔고조회 하기 Ymoney = 0; // 자본금 초기화 Account1.Refresh(); // 계좌 가원장 동기화 완료후, Main_OnU*dateAccount 호출 위 Refresh가 시작되고 function Main_OnU*dateAccount(sAccntNum, sItemCode, lU*dateID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageLog(HHMMSS+": Main_OnU*dateAccount 이벤트입니다."); // 계좌잔고 조회, 첫 시작할때 if (lU*dateID == 30000 && Ymoney == 0) { Ymoney = Account1.GetBalanceETCinfo(0); // 계좌 예수금 저장 Main.MessageLog("예수금:"+Ymoney.toString().replace(/₩B(?=(₩d{3})+(?!₩d))/g, ",")); } } 계좌잔고 예수금을 찍게 되어있습니다. YS실행시 계좌잔고 표시까지 될때가 있고 되지 않을을때는 YS를 종류후 여러번 다시 시작해야 잔고조회가 정상적으로 됩니다. 해당 부분의 문제점을 확인 부탁드립니다.
프로필 이미지
2ndbus
2020-03-05
3785
글번호 225168

자동매매 주문오류에 대한 구분이 있을까요?

BuyID = Account1.OrderBuy(OrderCode, EntryCount,KQ150선물연결.Ask(3), 0); 로 금일 진입시 "주문상태"에 "오류발생" 이라고 표기되고 어떤 오류인지? 파악이 되지 않습니다. 이러한 경우 어떠한 오류인지 구분할수있는 방법이 있을까요?
프로필 이미지
2ndbus
2020-03-02
3746
글번호 225167
답변완료

오류 검토 부탁드립니다.

수고가 많으십니다. 우선 작성된 것은 1. 미완성 시그널 진입(1계약) 2. 진입 후 피라미딩 5계약 3. 미완성 시그널 청산 1계약에 대한 미완성 시그널 진입 및 청산은 오류없이 잘 됩니다. 피라미딩(매수분까지 코딩완료)했으나, 루프가 생겼는지 프로그램이 튕겨나갑니다. 제가 접근을 잘못한 것 같습니다. 바쁘실텐데 번거롭게 해서 죄송스럽습니다!!! 아래는 작성 코드입니다. var T; var BID1,BID2,BID3,BID4,BID5,BXID, SID1,SID2,SID3,SID4,SID5, SXID; var BNum1,BNum2,BNum3,BNum4,BNum5,BXNum, SNum1,SNum2,SNum3,SNum4,SNum5,SXNum; var Stone, Step; var EntrypriceB,EntrypriceS; var Scnt; function Main_OnStart() { T = 0; Stone = 3; Step = 2; Main.MessageLog("시작"); var OrderCode=Main.GetOrderCode(MarketData2.code); } function Main_OnRiseIncompleteSignal(ChartEx3, IncompleteSignal) { //Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind); Account1.SetBalance(Main.GetOrderCode(IncompleteSignal.code)); if (T <= 0 && (Account1.Balance.position == 1 || Account1.Balance.position == 0) && IncompleteSignal.signalKind == 1)// { T = 1; if(Account1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(1,5000); } if (T >= 0 && Account1.Balance.position == 1 && IncompleteSignal.signalKind == 3)//매도포지션을 갖고 매도시그널이면 { T = 0; Main.KillTimer(1); Main.SetTimer(2,5000); } if (T >= 0 && (Account1.Balance.position == 2 || Account1.Balance.position == 0) && IncompleteSignal.signalKind == 3) { T = -1; if(Account1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(2,5000); } if (T <= 0 && Account1.Balance.position == 2 && IncompleteSignal.signalKind == 1)// 매수포지션인데 매수시그널이 나오면 { T = 0; Main.KillTimer(2); Main.SetTimer(1,5000); } } function Main_OnOrderResponse(OrderResponse) { //해당 주문응답이 Long신호에 대한 주문응답이라면, if (OrderResponse.orderID == BID1) { //BNum1에 주문응답객체의 주문번호를 저장하고, BNum1 = OrderResponse.orderNum; //11번 타이머 실행(5초 간격). Main.SetTimer(11, 5000); } //해당 주문응답이 Long신호에 대한 주문응답이라면, if (OrderResponse.orderID == BID2) { //BNum2에 주문응답객체의 주문번호를 저장하고, BNum2 = OrderResponse.orderNum; //12번 타이머 실행(5초 간격). Main.SetTimer(12, 5000); } //해당 주문응답이 Long신호에 대한 주문응답이라면, if (OrderResponse.orderID == BID3) { //BNum3에 주문응답객체의 주문번호를 저장하고, BNum3 = OrderResponse.orderNum; //13번 타이머 실행(5초 간격). Main.SetTimer(13, 5000); } //해당 주문응답이 ExitLong신호에 대한 주문응답이라면, if (OrderResponse.orderID == BXID) { //BXNum에 주문응답객체의 주문번호를 저장하고, BXNum = OrderResponse.orderNum; //2번 타이머 실행(5초 간격). Main.SetTimer(22, 5000); } //해당 주문응답이 Short신호에 대한 주문응답이라면, if (OrderResponse.orderID == SID1) { //SNum1에 주문응답객체의 주문번호를 저장하고, SNum1 = OrderResponse.orderNum; //31번 타이머 실행(5초 간격). Main.SetTimer(31, 5000); } if (OrderResponse.orderID == SID2) { //SNum2에 주문응답객체의 주문번호를 저장하고, SNum2 = OrderResponse.orderNum; //32번 타이머 실행(5초 간격). Main.SetTimer(32, 5000); } if (OrderResponse.orderID == SID3) { //SNum3에 주문응답객체의 주문번호를 저장하고, SNum3 = OrderResponse.orderNum; //33번 타이머 실행(5초 간격). Main.SetTimer(33, 5000); } //해당 주문응답이 ExitShort신호에 대한 주문응답이라면, if (OrderResponse.orderID == SXID) { //SXNum에 주문응답객체의 주문번호를 저장하고, SXNum = OrderResponse.orderNum; //4번 타이머 실행(5초 간격). Main.SetTimer(4, 5000); } } function Main_OnTimer(nEventID) { //마지막봉 미완성 신호정보 셋팅 var Incom = ChartEx3.GetIncompleteSignal(); if (nEventID == 1 && T == 1 && Incom[0].signalKind == 1) { Main.KillTimer(1); BID1 = Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), 1,MarketData2.current, 2); Scnt=1; Main.MessageLog("매수진입"); //차트가 매도포지션 상태이면 청산 후 한 번더 진입 if (ChartEx3.GetOpenContracts() < 0) { Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), Account1.Balance.count,MarketData2.current, 2);// 매도잔고 확인해야 } } if ( T==1 && Incom[0].signalKind == 2) { //매수진입 미체결 있으면 취소 Account1.SetUnfill(BNum1); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNum1); Main.MessageLog("미체결 취소"); } //잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //매수포지션 잔고 평단가 저장 BuyAvg = Account1.Balance.avgUnitCost; BxID = Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MarketData2.current, 2); } } if (nEventID == 1 && T == 0 ) { Main.KillTimer(1); Main.MessageLog("중복매수진입금지"); } if (nEventID == 2 && T == -1 && Incom[0].signalKind == 3) { Main.KillTimer(2); SID1 = Account1.OrderSell(Main.GetOrderCode(MarketData2.code), 1,MarketData2.current, 2); Main.MessageLog("매도진입"); //차트가 매수포지션 상태이면 if (ChartEx3.GetOpenContracts() > 0) { Account1.OrderSell(Main.GetOrderCode(MarketData2.code), Account1.Balance.count, MarketData2.current, 2);//vol 확인필요 } } //매도청산신호 발생 if ( T==-1 && Incom[0].signalKind == 4) { //매수진입 미체결 있으면 취소 Account1.SetUnfill(SNum1); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SNum1); Main.MessageLog("미체결 취소"); } //잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //매도포지션 잔고 평단가 저장 SellAvg = Account1.Balance.avgUnitCost; SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), Account1.Balance.count,MarketData2.current, 2); } } if (nEventID == 2 && T == 0) { Main.KillTimer(2); Main.MessageLog("중복매도진입금지"); } //11번 타이머 실행. if (nEventID == 11) { //11번 타이머 종료. Main.KillTimer(11); //BNum1 주문번호의 미체결객체 셋팅. Account1.SetUnfillOrderNumber(BNum1); //현재가 저장 var CC = MarketData2.current; //미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != CC) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 BNum1 새로 갱신하고 타이머 재셋팅. BID1 = Account1.OrderReplacePrice(BNum1, CC); } //미체결수량이 존재하나, 미체결가격과 현재가격이 같다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price == CC) { //정정주문이 없으므로 1번 타이머 재셋팅. Main.SetTimer(11, 5000); } } //12번 타이머 실행. if (nEventID == 12) { //12번 타이머 종료. Main.KillTimer(12); //BNum2 주문번호의 미체결객체 셋팅. Account1.SetUnfillOrderNumber(BNum2); //현재가 저장 var CC = MarketData2.current; Scnt=Scnt+1; //현재가가 일정이상이면 if (Scnt == 2 && Account1.Balance.position == 2 && CC >= (EntrypriceB + Step * 1)) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 BNum2 새로 갱신하고 타이머 재셋팅. BID2 = Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), 1,EntrypriceB + Step * 1, 2); } } //13번 타이머 실행. if (nEventID == 13) { //13번 타이머 종료. Main.KillTimer(13); //BNum2 주문번호의 미체결객체 셋팅. Account1.SetUnfillOrderNumber(BNum3); //현재가 저장 var CC = MarketData2.current; Scnt=Scnt+1; if (Scnt == 3 && Account1.Balance.position == 2 && CC >= (EntrypriceB + Step * 2)) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 BNum2 새로 갱신하고 타이머 재셋팅. BID3 = Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), 1,EntrypriceB + Step * 2, 2); } } //13번 타이머 실행. if (nEventID == 14) { //13번 타이머 종료. Main.KillTimer(14); //BNum2 주문번호의 미체결객체 셋팅. Account1.SetUnfillOrderNumber(BNum3); //현재가 저장 var CC = MarketData2.current; Scnt=Scnt+1; if (Scnt == 4 && Account1.Balance.position == 2 && CC >= (EntrypriceB + Step * 3)) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 BNum2 새로 갱신하고 타이머 재셋팅. BID4 = Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), 1,EntrypriceB + Step * 3, 2); } } //13번 타이머 실행. if (nEventID == 15) { //13번 타이머 종료. Main.KillTimer(13); //BNum2 주문번호의 미체결객체 셋팅. Account1.SetUnfillOrderNumber(BNum3); //현재가 저장 var CC = MarketData2.current; Scnt=Scnt+1; if (Scnt == 5 && Account1.Balance.position == 2 && CC >= (EntrypriceB + Step * 4)) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 BNum2 새로 갱신하고 타이머 재셋팅. BID5 = Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), 1,EntrypriceB + Step * 4, 2); } } //2번 타이머 실행. if (nEventID == 22) { //2번 타이머 종료. Main.KillTimer(22); //BXNum 주문번호의 미체결객체 셋팅 Account1.SetUnfillOrderNumber(BXNum); //현재가 저장 var CC = MarketData2.current; //미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != CC) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 BXNum새로 갱신하고 타이머 재셋팅. BXID = Account1.OrderReplacePrice(BXNum, MarketData2.current); } //미체결수량이 존재하나, 미체결가격과 현재가격이 같다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price == CC) { //정정주문이 없으므로 2번 타이머 재셋팅. Main.SetTimer(22, 5000); } } //31번 타이머 실행 if (nEventID == 31) { //31번 타이머 종료 Main.KillTimer(31); //SNum 주문번호의 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum1); //현재가 저장 var CC = MarketData2.current; //미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != CC) { //가격을 현재가로 정정하여 정정주문. 정정주문후 주문응답시 SNum1새로 갱신하고 타이머 재셋팅. SID2 = Account1.OrderReplacePrice(SNum2, MarketData2.current); } //미체결수량이 존재하나, 미체결가격과 현재가격이 같다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price == CC) { //정정주문이 없으므로 31번 타이머 재셋팅. Main.SetTimer(31, 5000); } } //32번 타이머 실행 if (nEventID == 32) { //32번 타이머 종료 Main.KillTimer(32); //SNum 주문번호의 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum2); //현재가 저장 var CC = MarketData2.current; //미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != CC) { //가격을 현재가로 정정하여 정정주문. 정정주문후 주문응답시 SNum2새로 갱신하고 타이머 재셋팅. SID3 = Account1.OrderReplacePrice(SNum3, MarketData2.current); } //미체결수량이 존재하나, 미체결가격과 현재가격이 같다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price == CC) { //정정주문이 없으므로 32번 타이머 재셋팅. Main.SetTimer(32, 5000); } } //33번 타이머 실행 if (nEventID == 33) { //33번 타이머 종료 Main.KillTimer(33); //SNum 주문번호의 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum3); //현재가 저장 var CC = MarketData2.current; //미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != CC) { //가격을 현재가로 정정하여 정정주문. 정정주문후 주문응답시 SNum3새로 갱신하고 타이머 재셋팅. SID4 = Account1.OrderReplacePrice(SNum4, MarketData2.current); } //미체결수량이 존재하나, 미체결가격과 현재가격이 같다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price == CC) { //정정주문이 없으므로 33번 타이머 재셋팅. Main.SetTimer(33, 5000); } } //4번 타이머 실행 if (nEventID == 4) { //4번 타이머 종료 Main.KillTimer(4); //SXNum 주문번호의 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SXNum); //현재가 저장 var CC = MarketData2.current; //미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != CC) { //가격을 현재가로 정정하여 정정주문. 정정주문 후 주문응답시 SXNum새로 갱신하고 타이머 재셋팅. SXID = Account1.OrderReplacePrice(SXNum, MarketData2.current); } //미체결수량이 존재하나, 미체결가격과 현재가격이 같다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price == CC) { //정정주문이 없으므로 4번 타이머 재셋팅. Main.SetTimer(4, 10000); } } } function Main_OnNotifyFill(NotifyFill) { //"NotifyFill" 출력. //Main.MessageLog("NotifyFill"); //BNum1 주문 체결되면, if (NotifyFill.orderNum == BNum1) { //11번 타이머 종료. Main.KillTimer(11); //BNum1 미체결객체 셋팅 Account1.SetUnfillOrderNumber(BNum1); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify Long" 출력. Main.MessageLog("N.Long1"); } // 매수진입가 입려 EntrypriceB = NotifyFill.fillPrice; // } //BNum2 주문 체결되면, if (NotifyFill.orderNum == BNum2) { //12번 타이머 종료. Main.KillTimer(12); //BNum2 미체결객체 셋팅 Account1.SetUnfillOrderNumber(BNum2); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify Long" 출력. Main.MessageLog("N.Long2"); } } //BNum3 주문 체결되면, if (NotifyFill.orderNum == BNum3) { //13번 타이머 종료. Main.KillTimer(13); //BNum3 미체결객체 셋팅 Account1.SetUnfillOrderNumber(BNum3); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify Long" 출력. Main.MessageLog("N.Long3"); } } //BXNum 주문 체결되면, if (NotifyFill.orderNum == BXNum) { //2번 타이머 종료. Main.KillTimer(2); //BXNum 미체결객체 셋팅 Account1.SetUnfillOrderNumber(BXNum); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify ExitLong" 출력. Main.MessageLog("N.ExitLong"); } } //SNum1 주문 체결되면, if (NotifyFill.orderNum == SNum1) { //31번 타이머 종료. Main.KillTimer(31); //SNum 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum1); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify Short1" 출력. Main.MessageLog("N.Short1"); } } //SNum2 주문 체결되면, if (NotifyFill.orderNum == SNum2) { //32번 타이머 종료. Main.KillTimer(32); //SNum2 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum2); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify Short2" 출력. Main.MessageLog("N.Short2"); } } //SNum3 주문 체결되면, if (NotifyFill.orderNum == SNum3) { //33번 타이머 종료. Main.KillTimer(33); //SNum3 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum3); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify Short3" 출력. Main.MessageLog("N.Short3"); } } //SXNum 주문 체결되면, if (NotifyFill.orderNum == SXNum) { //4번 타이머 종료. Main.KillTimer(4); //SXNum 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SXNum); //미체결 수량이 없으면 if (Account1.Unfill.count == 0) { //"Notify ExitShort" 출력. Main.MessageLog("N.ExitShort"); } } }
프로필 이미지
심심00
2020-02-25
3835
글번호 225160

관리자에 의해 수식작성 QnA로 이동되었습니다

첨부파일 이미지를 보면 기술적지표 그래프에 오버레이 되어있는 하늘색 시그널 그래프가 있습니다. 이 두가지를 바탕으로 매매하는 수식을 작성하려고 합니다. "cci"나 "band %b"등 기술적지표의 계산식은 쉽게 찾을 수 있었습니다만 하늘색의 시그널 지표는 계산식을 찾을수가 없었습니다. 하늘색의 시그널 지표에 대해 알려주시기를 요청드립니다. 감사합니다.
프로필 이미지
flextone
2020-02-19
5
글번호 225159
0
답변완료

Gap 판단 오류

안녕하세요. 한국투자증권 해외선물 예스트레이더 HTS, 예스스팟의 시스템 식 안에서 Gap 이 있는지 유무를 아래와 같은 if 문으로 판단하고 있습니다. 그런데, 오늘(2/18) 아침 8시에 장 시작할때 10틱 이상 Gap이 있다고 판단하는데, 이유를 모르겠습니다. // 10틱 초과의 Gap이 발생했는지 확인한다. if( Math.abs(vChartEx.GetOpen(1,0) - vChartEx.GetClose(1,1)) > 0.10 ) 현재봉의 시가: vChartEx.GetOpen(1,0) 1봉 전의 종가: vChartEx.GetClose(1,1) 이상해서 값을 출력해보니 해외선물 크루드 오일 2/18 오전 8시 현재봉의 시가는 52.4 그 한 봉전의 종가는 52.59 로 나왔습니다. (첨부파일 참조) 그래프 상으로는 1봉 전의 종가는 52.33 입니다. 왜 52.59 라는 값이 출력되는건지 알 수 있을까요?
프로필 이미지
브라이언7
2020-02-18
3883
글번호 225158

cs아빠 님에 의해서 삭제되었습니다.

프로필 이미지
cs아빠
2020-02-14
4
글번호 225157
답변완료

스팟 공부중 문의 드립니다.

예스스팟에서 A. 장시작후 사용자 종목검색"gumsek" B. 검색된 종목중 전일 종가 대비 -5% ~ +10% 사이의 종목중에서 전일대비 오름차순으로 10개만 선별한다. C. 계좌에 보유종목과 선별 10개의 종목을 비교하여 중첩(미보유)없는 종목을 확장차트 1분봉 800바 차트에(거래없는구간 봉그리기 체크) 시스템식"lotto"를 적용한다. C. 위 과정을 14시까지, 4분 간격으로 반복하고, B에서 미검색된 종목과 계좌를 비교하여 신규 종목(미보유)만 확장차트 생성 및 시스템을 추가적으로 적용한다. 총 시스템적용은 20개로 제한 참고로 가능하다면 종목검색중, 확장차트 적용중, 당일 검색되었던 종목들 리스트(중첩은 제외) 표기가 되었으면 합니다. 그럼 좋은 하루 되세요~ Ps. 답변 대기중에 공부하면서 질문을 수정하였습니다. 혹 기존 질문과 차이가 있을수 있으니 확인 요망 드립니다.
프로필 이미지
느와르
2020-02-26
3857
글번호 225156