답변완료
옵션 양매도
안녕하세요
다음 수식 부탁드립니다.
YT 시스템수식 없이, SPOT으로 옵션 양매도를 하려고 합니다.
단, SPOT의 진입 청산 시점은 YT 주데이타에 의하여 결정됩니다.
1) YT 연결선물 1분봉 기준으로, startN번째 봉이 완성되는 시점에서 (예를들어 5번째봉)
2) startN봉째 기준으로
해당시점의 연결선물 가격에 가장 근접한 콜풋 행사가 선택 --> 콜 풋 동일 행사가
3) 여기서 정해진 행사가 양합의 가격이 PP 이하일 때 (예를들어 양합가격이 8.00 이하일 때)
4) 해당 행사가의 콜풋 각각 최대 200 만원이하로 '5호가-0.1' 매도 (매도금액 변수처리 요망)
5) 1)에 의해 매일 1회 양매도 진입
6) 1분봉기준 endN봉째 봉이 완성되면 '5호가+0.1' 전량청산 (예를들어 장개시후 60번째봉)
7) 옵션 월물 변경시 자동 변경
startN, endN, PP, 매도금액 등은 모두 변수처리 부탁드립니다.
## 만약 가능하다면 다음 내용을 위의 수식에 추가 부탁드립니다 ##
endN봉-1봉 이전에, 연결선물 startN봉의 가격과 현재 완성봉의 가격차가
XX point 이상일 경우 전량 '5호가+0.1' 청산
---> 즉, 완성봉기준으로 endN봉 한봉전까지 진입봉 종가와 현재 완성봉 종가의 가격차가
XX point 이상이면 그 시점에서 청산하고, 그렇지 않으면 endN봉에서 청산
이상입니다.
감사합니다 !!
2018-10-24
3209
글번호 224626
답변완료
해외선물에서 거래량 많은 월물의 종목코드를 조회할 수 있나요?
안녕하세요.
해외선물 시스템 트레이딩 시 연속월물로 차트를 셋팅하지 않고, 예를 들면 오일이라는 종목에서 거래량 많은 월물을 예스스팟에서 조회해서 차트를 셋팅하려고 합니다.
가능하다면 어떻게 코딩을 해야 하나요?
그리고 해외선물 종목의 만기일을 코딩으로 조회할 수 있는 방법이 있나요?
다음과 같이 코드를 짜 봤습니다.
저는 한국투자증권 eFriend Global YesTrader를 사용 중인데, YesStock 홈페이지에서 한국투자증권 YesSpot 매뉴얼을 다운로드 받아보았는데, 매뉴얼에는 종목객체의 속성에 expirationDate 가 있습니다.
그러나 YesSpot 프로그램에서는 이 속성이 보이지 않고 다음 코드로 출력해봐도 undefined로 나옵니다. 만기일을 조회해 볼 수 있는 방법이 없나요?
function Main_OnStart()
{
var reqChartItem = new ReqChartItem('CLX18',5,CHART_PERIOD_MINUTE,300,CHART_REQCOUNT_BAR,false,false)
var chartEx = Main.ReqChartEx(reqChartItem)
var marketData = Main.ReqMarketData(reqChartItem.code, reqChartItem.count)
}
function Main_OnRcvMarketData(MarketData)
{
var code = MarketData.code;
Main.MessageList("code: " + code);
var expirationDate = MarketData.expirationDate;
Main.MessageList("expirationDate: " + expirationDate);
}
2018-10-07
3270
글번호 224624
답변완료
DDE 로 데이터 수신 시 한 글자만 전송되는 현상
안녕하세요. YesSpot 에 있는 DDE 객체를 이용해서
python 에서 데이터를 전송하는 프로그램을 만들었는데,
한 글자 밖에 전송이 안되는 현상이 발생하고 있습니다.
참고 예제: https://booja.blogspot.com/2017/05/dde.html
실행환경:
Windows 10
Anaconda 64비트 설치
Python 3.6.4
Python 소스는 다음과 같습니다.
ABC 를 전송했는데 예스스팟에서 첫 글자인 A 밖에 받지 못합니다. 해결책이 뭘까요?
import time
import win32ui, dde
from pywin.mfc import object
class DDETopic(object.Object):
def __init__(self, topicName):
self.topic = dde.CreateTopic(topicName)
object.Object.__init__(self, self.topic)
self.items = {}
def setData(self, itemName, value):
try:
self.items[itemName].SetData(value)
except KeyError:
if itemName not in self.items:
self.items[itemName] = dde.CreateStringItem(itemName)
self.topic.AddItem(self.items[itemName])
self.items[itemName].SetData(value)
ddeServer = dde.CreateServer()
ddeServer.Create('PYTHON')
ddeTopic = DDETopic('hello')
ddeServer.AddTopic(ddeTopic)
while 1:
ddeTopic.setData('item1', 'ABC')
win32ui.PumpWaitingMessages(0, -1)
time.sleep(1)
2018-10-03
3308
글번호 224612
답변완료
일정시간 매수, 청산 수식
100분봉을 사용하면 몇일만에 신호가 발생되어 매수한 옵션종목이 바뀌게 되어 청산이 안됩니다.최초 매수한 종목이 저장되어 몇일 후에도 같은종목이 청산되는 수식 원합니다.
아래와 같이 만약 5계약을 매수 한다면 5초간격으로 1계약씩 매수되고 청산도 5초간격으로 청산하는 수식 원합니다.
var Start, BE, SE;
var CallCode, PutCode;
function Main_OnStart()
{
Main.MessageList("시작");
//내부파일에 Start로 저장된 값 호출해 V에 저장
var V = Main.GetUserValue("Start");
//0이면 Start는 0
if (V == 0)
Start = 0;
//1이면
if (V == 1)
{
//Start는 1
Start = 1;
//CallCode에 내부파일 Code에 저장된 값 호출해 저장
CallCode = Main.GetUserValue("Code");
}
if (V == -1)
{ Start = 0;
//Start는 -1
Start = 1;
//PutCode에 내부파일 Code에 저장된 값 호출해 저장
PutCode = Main.GetUserValue("Code");
Main.SetTimer(1, 5000);//5초간격 타이머 셋팅
}
}
function C1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1 )
{
Main.MessageList("매수신호발생");
Start = 1;
CallCode = Option.GetATMCallRecent(0);
var CallPrice = Option.GetAskByCode(CallCode,2);
A1.OrderBuy(CallCode, Vo, CallPrice, 0);
BE = 1;
Main.SetTimer(1,5000);
//Start와 종목코드 저장
Main.SetUserValue("Start", Start);
Main.SetUserValue("Code", CallCode);
}
if (Start == 1 && Signal.signalKind == 2 )
{
Start = 0;
Main.MessageList("매수청산발생");
var BxPrice = Option.GetBidByCode(CallCode, 2);
A1.OrderSell(CallCode, Vo, BxPrice, 0);
Main.KillTimer(1);
//저장값 초기화
Main.SetUserValue("Start", 0);
Main.SetUserValue("Code", " ");
}
if (Signal.signalKind == 3 )
{
Main.MessageList("매도신호발생");
Start = -1;
PutCode = Option.GetATMPutRecent(0);
var PutPrice = Option.GetAskByCode(PutCode, 2);
A1.OrderBuy(PutCode, Vo, PutPrice, 0);
SE = 1;
Main.SetTimer(1,5000);
//Start와 종목코드 저장
Main.SetUserValue("Start", Start);
Main.SetUserValue("Code", PutCode);
}
if (Start == -1 && Signal.signalKind == 4 )
{
Start = 0;
Main.MessageList("매도청산발생");
var SxPrice = Option.GetAskByCode(PutCode, 2);
A1.OrderSell(PutCode, Vo, SxPrice, 0);
Main.KillTimer(2);
//저장값 초기화
Main.SetUserValue("Start", 0);
Main.SetUserValue("Code", " ");
}
}
//5초단위로 잔고 체크
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && Start == 1)
{
BE = BE+1;
if (BE < 5)
{
A1.OrderBuy(CallCode, 1, 0, 1);
}
if (BE == 5)
{
Main.KillTimer(1);
Main.SetTimer(2,1000);
}
}
if (nEventID == 1 && Start == -1)
{
SE = SE+1;
if (SE < 5)
{
A1.OrderBuy(PutCode, 1, 0, 1);
}
if (SE == 5)
{
Main.KillTimer(1);
Main.SetTimer(2,1000);
}
}
}
}
}
2018-09-29
2793
글번호 224609
답변완료
피라미딩 청산 수식관련
첨부사진처럼 피라미딩 진입이 있을때 청산신호가 2개라서 이전진입계약수가 2계약이라 총 4개가 청산되는데 2계약만 청산하고 싶은데 어떻게 해야할지 모르겠습니다.
아래수식에다 적용을 하려면 어떻게 수정해야하는지 알고 싶은데 도움부탁드리겠습니다.
//스팟 시작시
function Main_OnStart()
{
Main.MessageList("스팟 시작");
}
//-------------------------------------------------------------------------------------
//차트에서 신호나오면 MarketData1 종목에 대해 주문
function Chart1_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,매수주문가격,주문종류);
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J1매수청산");
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
BXID = Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,매도주문가격,주문종류);
}
}
//매도진입신호 발생
if (Signal.signalKind == 3)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,매도주문가격,주문종류);
}
//매도청산신호 발생
if (Signal.signalKind == 4)
{
//잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J1매도청산");
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
SXID = Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,매수주문가격,주문종류);
}
}
}
2018-09-28
2758
글번호 224607