양합이 제일 낮은 행사가와 값 구하기
주신 답변 늘 응용해서 잘 사용하고 있습니다. 감사합니다.아래와 같은 양합을 구하는 수식을 스팟으로 만들고 싶습니다.등가를 이용해도 되겠지만 수동으로 계산하는 수식이 필요합니다.=========================================================1. 장시작후 9시가되면 10초마다 행사가가 같은 콜옵션과 풋옵션의 합 중 가장 낮은 합의 콜과 풋의 종목을 구함2. 당일 행사가 변경과 관계없이 양합이 가장 낮은 양합값, 가장 높은 양합값 구함3. Main.MessageList 명령어를 사용해서 최근메시지 창에 표시 //메시지 예시 Main.MessageList("현재콜종목", 000, "현재풋종목", 000, "현재양합:", 000, "개장후최소양합:", 000, "개장후최대양합:", 000); 답변 미리 감사드립니다.(참고) 1월물 만기일 가장 낮은 양합 변화 그래프입니다.
DB(D1) 객체를 활용한 외부 python 시스템과의 연동 및 SQL 문법 관련 문의.
문의 내용: 현재 해외 선물(MYM)을 예스스팟의 Database(D1) 객체를 사용하여 외부 Python 시스템(SQLite DB 매개)과 매매 신호를 주고받는 브릿지 시스템을 구축 중입니다. 작업 중 다음과 같은 기술적 문제에 대해 확인 부탁드립니다. 1. 연동 구조의 적정성: 예스스팟이 32비트 SQLite ODBC 드라이버를 통해 특정 DB 파일(database.db)에 연결하고, Python 시스템이 동일한 DB 파일에 데이터를 INSERT하면, 예스스팟의 D1.Select() 메서드로 이를 실시간 감지하여 주문을 내는 방식이 권장되는 연동 구조인지 궁금합니다. 2. `D1.Select()` 메서드의 SQL 자동 생성 여부: D1.Select("SELECT * FROM table", "name") 호출 시, `near "SELECT": syntax error (1)` 오류가 발생합니다. * 예스스팟 엔진이 내부적으로 SELECT * FROM [설정된_테이블] WHERE를 자동으로 생성하여 사용자 쿼리 앞에 붙이는 방식인가요? * 만약 그렇다면, 사용자는 D1.Select() 인자로 오직 'WHERE 조건절'만 입력해야 하는 것인지 확인 부탁드립니다. 3. 예약어 충돌 문제: orders, action, status 등 SQL 예약어가 포함된 테이블명이나 컬럼명을 D1.Select에서 조회할 때, 예스트레이더 엔진에서 이를 회피하기 위한 별도의 식별자(예: [orders] 또는 "orders") 사용 규칙이 있는지 궁금합니다.현재 NH선물 YesGlobal 을 이용 중입니다. 4. DB 를 사용 하여 외부시스템간 통신이 되었던 사례가 있으면 올려 주시면 감사 하겠습니다.
답변완료
수식 수정 부탁합니다
아래 식은 매수하여 잔고의 합이 -5만원을 넘었는데 청산되지 않습니다.function Main_OnStart(){ Main.MessageList("시작"); Main.SetTimer(99,0010);}//타이머 동작function Main_OnTimer(nEventID){ if (nEventID == 99) { // 옵션매수포지션 전체 손익계산 var num = A1.GetTheNumberOfBalances(); var PLsum = 0; for(var i = 0; i < num; i++) { //잔고셋팅 A1.SetBalanceIndex(i); //매수포지션이고 옵션종목이고 if (A1.Balance.position == 2 && (A1.Balance.code.substring(0,1) == "2" || A1.Balance.code.substring(0,1) == "3")) { //각 옵션매수종목의 (평균단가-현재가)*수량*5만원을 누적 PLsum = PLsum + ((A1.Balance.current - A1.Balance.avgUnitCost)*A1.Balance.count)*250000; } } //손익이 +5만원이상이거나 -5만원 이하이면 if (PLsum >= 50000 || PLsum <= -50000) { for(var i = 0; i < num; i++) { //잔고셋팅 A1.SetBalanceIndex(i); //매수포지션이고 옵션종목이고 if (A1.Balance.position == 2 && (A1.Balance.code.substring(0,1) == "2" || A1.Balance.code.substring(0,1) == "3")) { A1.OrderSell(A1.Balance.code, A1.Balance.count, 0,1); } } } }}