예스스탁
예스스탁 답변
2024-08-26 16:44:58.0
안녕하세요
예스스탁입니다.
1
예 맞습니다.
낮은 가격의 종목을 매수하게 작성되었습니다.
2
code변수에 저장되는 값만
Option1.GetATMCallRecent(1),Option1.GetATMPutRecent(1)로 변경하시면 됩니다.
// 진입 조건
if (Entry == 0 && sum <= 5.00 && diff <= 2.50)
{
if (absCall <= absPut)
{
Entry = CallPrice;
Code = Option1.GetATMCallRecent(1);
ID = Account1.OrderBuy(Code, 1, CallAsk, 0);
Xvol = 1;
}
else
{
Entry = PutPrice;
Code = Option1.GetATMPutRecent(1);
ID = Account1.OrderBuy(Code, 1, PutAsk, 0);
Xvol = 1;
}
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 외가격 옵션 매수
> 1. 검토사항 (아래 수식)
진입조건(등가격의 합과 차)을 만족했을 때
등가콜과 등가풋 중 절대값이 작은 쪽의 등가격 옵션을 매수하는 수식을 작성해보았습니다.
코딩내용이 맞는지 봐주셨으면 합니다.
2. 요청수식
검토요청한 수식과 진입조건은 똑같습니다. 다만 매수는 등가격이 아니고 1행사가 아래인 외가격1 입니다.
등가콜과 등가풋 중 절대값이 작은 쪽의 외가격1 옵션을 매수합니다.
(판단은 등가격의 합과 차로, 액션은 외가격으로)
익절과 손절과 시간청산은 외가격1옵션으로 처리될 수 있도록 부탁드립니다.
포지션 청산은 다른 전략 미결제가 있으니 case by case 청산입니다.
****************************************************************************
var ID, num;
var Entry, Code;
var Xvol;
var HasExited; // 청산 후 재진입을 방지하는 변수
function Main_OnStart() {
Main.MessageList("Start");
Main.SetTimer(1, 5000); // 기존 타이머 설정 (5초 간격)
Main.SetTimer(2, 1000); // 15시 청산을 위한 타이머 설정 (1초 간격)
Entry = 0; // 초기 Entry 값 설정
HasExited = false; // 초기 재진입 가능 상태
}
function Main_OnTimer(nEventID) {
var d = new Date();
var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (nEventID == 1) {
if (!HasExited) { // 재진입 방지 조건 추가
if (HHMMSS >= 84500) {
var CallPrice = Option1.GetCurrent(0, 0);
var PutPrice = Option1.GetCurrent(1, 0);
var CallAsk = Option1.GetAsk(Option1.GetATMCallRecent(0), 5);
var PutAsk = Option1.GetAsk(Option1.GetATMPutRecent(0), 5);
var absCall = Math.abs(CallPrice);
var absPut = Math.abs(PutPrice);
var sum = absCall + absPut;
var diff = Math.abs(absCall - absPut);
// 진입 조건
if (Entry == 0 && sum <= 5.00 && diff <= 2.50) {
if (absCall <= absPut) {
Entry = CallPrice;
Code = Option1.GetATMCallRecent(0);
ID = Account1.OrderBuy(Code, 1, CallAsk, 0);
Xvol = 1;
} else {
Entry = PutPrice;
Code = Option1.GetATMPutRecent(0);
ID = Account1.OrderBuy(Code, 1, PutAsk, 0);
Xvol = 1;
}
}
// 익절/손절 조건
if (Entry > 0 && Xvol > 0) {
var currentPrice = Option1.GetCurrent(Code);
if (currentPrice >= Entry + 0.50 || currentPrice <= Entry - 0.50) {
closePosition();
// 청산 후 매수 재진입 방지
HasExited = true; // 청산 후 재진입 방지
Main.KillTimer(1); // 타이머 1 종료
}
}
}
}
}
if (nEventID == 2) {
// 15시 청산 조건
if (HHMMSS >= 151000 && HHMMSS < 151500) { // 15시 15분에 청산
closePosition();
Main.KillTimer(2); // 타이머 2 종료
}
}
}
function closePosition() {
// 포지션 청산
if (Xvol > 0) {
if (Code) {
Account1.OrderSell(Code, Xvol, Option1.GetBid(Code, 5), 0);
}
}
Entry = 0; // Entry 값 초기화
Code = null; // Code 초기화
Xvol = 0; // 수량 초기화
// HasExited = true; // 청산 후 재진입 방지
}
function Main_OnOrderResponse(OrderResponse) {
// 주문 응답 처리
if (OrderResponse.orderID == ID) {
num = OrderResponse.orderNum;
}
}
좌오비우오비
2024-08-29 14:16:21.0
답변 고맙습니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 외가격 옵션 매수
>
안녕하세요
예스스탁입니다.
1
예 맞습니다.
낮은 가격의 종목을 매수하게 작성되었습니다.
2
code변수에 저장되는 값만
Option1.GetATMCallRecent(1),Option1.GetATMPutRecent(1)로 변경하시면 됩니다.
// 진입 조건
if (Entry == 0 && sum <= 5.00 && diff <= 2.50)
{
if (absCall <= absPut)
{
Entry = CallPrice;
Code = Option1.GetATMCallRecent(1);
ID = Account1.OrderBuy(Code, 1, CallAsk, 0);
Xvol = 1;
}
else
{
Entry = PutPrice;
Code = Option1.GetATMPutRecent(1);
ID = Account1.OrderBuy(Code, 1, PutAsk, 0);
Xvol = 1;
}
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 외가격 옵션 매수
> 1. 검토사항 (아래 수식)
진입조건(등가격의 합과 차)을 만족했을 때
등가콜과 등가풋 중 절대값이 작은 쪽의 등가격 옵션을 매수하는 수식을 작성해보았습니다.
코딩내용이 맞는지 봐주셨으면 합니다.
2. 요청수식
검토요청한 수식과 진입조건은 똑같습니다. 다만 매수는 등가격이 아니고 1행사가 아래인 외가격1 입니다.
등가콜과 등가풋 중 절대값이 작은 쪽의 외가격1 옵션을 매수합니다.
(판단은 등가격의 합과 차로, 액션은 외가격으로)
익절과 손절과 시간청산은 외가격1옵션으로 처리될 수 있도록 부탁드립니다.
포지션 청산은 다른 전략 미결제가 있으니 case by case 청산입니다.
****************************************************************************
var ID, num;
var Entry, Code;
var Xvol;
var HasExited; // 청산 후 재진입을 방지하는 변수
function Main_OnStart() {
Main.MessageList("Start");
Main.SetTimer(1, 5000); // 기존 타이머 설정 (5초 간격)
Main.SetTimer(2, 1000); // 15시 청산을 위한 타이머 설정 (1초 간격)
Entry = 0; // 초기 Entry 값 설정
HasExited = false; // 초기 재진입 가능 상태
}
function Main_OnTimer(nEventID) {
var d = new Date();
var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (nEventID == 1) {
if (!HasExited) { // 재진입 방지 조건 추가
if (HHMMSS >= 84500) {
var CallPrice = Option1.GetCurrent(0, 0);
var PutPrice = Option1.GetCurrent(1, 0);
var CallAsk = Option1.GetAsk(Option1.GetATMCallRecent(0), 5);
var PutAsk = Option1.GetAsk(Option1.GetATMPutRecent(0), 5);
var absCall = Math.abs(CallPrice);
var absPut = Math.abs(PutPrice);
var sum = absCall + absPut;
var diff = Math.abs(absCall - absPut);
// 진입 조건
if (Entry == 0 && sum <= 5.00 && diff <= 2.50) {
if (absCall <= absPut) {
Entry = CallPrice;
Code = Option1.GetATMCallRecent(0);
ID = Account1.OrderBuy(Code, 1, CallAsk, 0);
Xvol = 1;
} else {
Entry = PutPrice;
Code = Option1.GetATMPutRecent(0);
ID = Account1.OrderBuy(Code, 1, PutAsk, 0);
Xvol = 1;
}
}
// 익절/손절 조건
if (Entry > 0 && Xvol > 0) {
var currentPrice = Option1.GetCurrent(Code);
if (currentPrice >= Entry + 0.50 || currentPrice <= Entry - 0.50) {
closePosition();
// 청산 후 매수 재진입 방지
HasExited = true; // 청산 후 재진입 방지
Main.KillTimer(1); // 타이머 1 종료
}
}
}
}
}
if (nEventID == 2) {
// 15시 청산 조건
if (HHMMSS >= 151000 && HHMMSS < 151500) { // 15시 15분에 청산
closePosition();
Main.KillTimer(2); // 타이머 2 종료
}
}
}
function closePosition() {
// 포지션 청산
if (Xvol > 0) {
if (Code) {
Account1.OrderSell(Code, Xvol, Option1.GetBid(Code, 5), 0);
}
}
Entry = 0; // Entry 값 초기화
Code = null; // Code 초기화
Xvol = 0; // 수량 초기화
// HasExited = true; // 청산 후 재진입 방지
}
function Main_OnOrderResponse(OrderResponse) {
// 주문 응답 처리
if (OrderResponse.orderID == ID) {
num = OrderResponse.orderNum;
}
}
예스스탁
예스스탁 답변
2024-08-29 14:31:51.0
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : Re : Re : 외가격 옵션 매수
> 답변 고맙습니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 외가격 옵션 매수
>
안녕하세요
예스스탁입니다.
1
예 맞습니다.
낮은 가격의 종목을 매수하게 작성되었습니다.
2
code변수에 저장되는 값만
Option1.GetATMCallRecent(1),Option1.GetATMPutRecent(1)로 변경하시면 됩니다.
// 진입 조건
if (Entry == 0 && sum <= 5.00 && diff <= 2.50)
{
if (absCall <= absPut)
{
Entry = CallPrice;
Code = Option1.GetATMCallRecent(1);
ID = Account1.OrderBuy(Code, 1, CallAsk, 0);
Xvol = 1;
}
else
{
Entry = PutPrice;
Code = Option1.GetATMPutRecent(1);
ID = Account1.OrderBuy(Code, 1, PutAsk, 0);
Xvol = 1;
}
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 외가격 옵션 매수
> 1. 검토사항 (아래 수식)
진입조건(등가격의 합과 차)을 만족했을 때
등가콜과 등가풋 중 절대값이 작은 쪽의 등가격 옵션을 매수하는 수식을 작성해보았습니다.
코딩내용이 맞는지 봐주셨으면 합니다.
2. 요청수식
검토요청한 수식과 진입조건은 똑같습니다. 다만 매수는 등가격이 아니고 1행사가 아래인 외가격1 입니다.
등가콜과 등가풋 중 절대값이 작은 쪽의 외가격1 옵션을 매수합니다.
(판단은 등가격의 합과 차로, 액션은 외가격으로)
익절과 손절과 시간청산은 외가격1옵션으로 처리될 수 있도록 부탁드립니다.
포지션 청산은 다른 전략 미결제가 있으니 case by case 청산입니다.
****************************************************************************
var ID, num;
var Entry, Code;
var Xvol;
var HasExited; // 청산 후 재진입을 방지하는 변수
function Main_OnStart() {
Main.MessageList("Start");
Main.SetTimer(1, 5000); // 기존 타이머 설정 (5초 간격)
Main.SetTimer(2, 1000); // 15시 청산을 위한 타이머 설정 (1초 간격)
Entry = 0; // 초기 Entry 값 설정
HasExited = false; // 초기 재진입 가능 상태
}
function Main_OnTimer(nEventID) {
var d = new Date();
var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (nEventID == 1) {
if (!HasExited) { // 재진입 방지 조건 추가
if (HHMMSS >= 84500) {
var CallPrice = Option1.GetCurrent(0, 0);
var PutPrice = Option1.GetCurrent(1, 0);
var CallAsk = Option1.GetAsk(Option1.GetATMCallRecent(0), 5);
var PutAsk = Option1.GetAsk(Option1.GetATMPutRecent(0), 5);
var absCall = Math.abs(CallPrice);
var absPut = Math.abs(PutPrice);
var sum = absCall + absPut;
var diff = Math.abs(absCall - absPut);
// 진입 조건
if (Entry == 0 && sum <= 5.00 && diff <= 2.50) {
if (absCall <= absPut) {
Entry = CallPrice;
Code = Option1.GetATMCallRecent(0);
ID = Account1.OrderBuy(Code, 1, CallAsk, 0);
Xvol = 1;
} else {
Entry = PutPrice;
Code = Option1.GetATMPutRecent(0);
ID = Account1.OrderBuy(Code, 1, PutAsk, 0);
Xvol = 1;
}
}
// 익절/손절 조건
if (Entry > 0 && Xvol > 0) {
var currentPrice = Option1.GetCurrent(Code);
if (currentPrice >= Entry + 0.50 || currentPrice <= Entry - 0.50) {
closePosition();
// 청산 후 매수 재진입 방지
HasExited = true; // 청산 후 재진입 방지
Main.KillTimer(1); // 타이머 1 종료
}
}
}
}
}
if (nEventID == 2) {
// 15시 청산 조건
if (HHMMSS >= 151000 && HHMMSS < 151500) { // 15시 15분에 청산
closePosition();
Main.KillTimer(2); // 타이머 2 종료
}
}
}
function closePosition() {
// 포지션 청산
if (Xvol > 0) {
if (Code) {
Account1.OrderSell(Code, Xvol, Option1.GetBid(Code, 5), 0);
}
}
Entry = 0; // Entry 값 초기화
Code = null; // Code 초기화
Xvol = 0; // 수량 초기화
// HasExited = true; // 청산 후 재진입 방지
}
function Main_OnOrderResponse(OrderResponse) {
// 주문 응답 처리
if (OrderResponse.orderID == ID) {
num = OrderResponse.orderNum;
}
}