첨부 이미지
그림1
질문 좀 할께요.
1. 시초가로 시스템 신호를 스팟에서 받아서 옵션을 주문 내는 것이 가능한가요?
예)
if stime == 150000 then
{
sell("sel-001",atstop,nextbaropen);
}
setstopendofday(150000);
이 시초가 매도진입신호를 스팟에서 받아서 옵션중에 2.0이하 call과 put옵션을
양매도 주문을 내고,15시에 양매도 신호를 정리할 수 잇는 건가요?
위에것이 안되면, 구현할 수 있는 시초가 양매도 방법이 있으면 알려주시면
감사하겠습니다.
var CC,CallOrderCode;
var PP,PutOrderCode;
function Main_OnStart()
{
EntryStart = 0;
}
//차트에서 신호 발생
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 3) //Sell신호 발생
{
Main.MessageList("매도신호발생:",Signal.signalKind);
var UNum = Option.uppersATM;//ATM기준 위아래 행사 갯수
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);//풋 종목 찾기//////////////////////////////////////////
var PutPrice = new Array(UNum+LNum+1);//전 행사가 갯수만큼 배열변수 만듬
for (var j = -UNum; j <= LNum; j++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장
{
if (Option.GetCurrent(1, j) <= 1.5)//2.5이하이면 해당종목의 현재가와 종목코드를 저장하고
{
PutPrice[j+UNum] = Option.GetCurrent(1, j);
PutCode[j+UNum] = Option.GetATMPutRecent(j);
}
else
{
PutPrice[j+UNum] = -1;//2.0보다 크면 모두 -1를 저장
PutCode[j+UNum] = -1;
}
}
PP = -1;
PutOrderCode = -1; // PutPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장
for (var jj = -UNum; jj <= LNum; jj++)// 동일 방번호의 PutCode를 PutOrderCode에 저장
{
if (PutPrice[jj+UNum] > PP)
{
PP = PutPrice[jj+UNum];
PutOrderCode = PutCode[jj+UNum];
}
}
if (PP > 0)
{
EntryStart = 1;
Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 5), 0);//풋매도(1계약,매수5호가)
Main.MessageList("풋매도",PutOrderCode);
}
var UNum = Option.uppersATM; //ATM기준 위아래 행사 갯수
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1); //콜 종목 찾기//////////////////////////////////////////
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장
{
if (Option.GetCurrent(0, i) <= 1.5)
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1; //2.0보다 크면 모두 -1를 저장
CallCode[i+LNum] = -1;
}
}
CC = -1;
CallOrderCode = -1;
for (var ii = -LNum; ii <= UNum; ii++)
{
if (CallPrice[ii+LNum] > CC) // CallPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장
{
CC = CallPrice[ii+LNum];
CallOrderCode = CallCode[ii+LNum]; // 동일 방번호의 CallCode를 CallOrderCode에 저장
}
}
if (CC > 0)
{
EntryStart = 1;
Account1.OrderSell(CallOrderCode, 1, Option.GetBidByCode(CallOrderCode, 5), 0); //콜매도(1계약, 매수5호가)
Main.MessageList("콜매도",CallOrderCode);
}
}
if (EntryStart == 1 && Signal.signalKind == 4) //ExitShort신호 발생
{
Main.MessageList("매도청산 신호발생:",Signal.signalKind);
Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 5), 0); //콜 매도청산(매수주문, 1계약, 매도5호가)
Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 5), 0); //풋 매도청산(매수주문, 1계약, 매도5호가)
Main.MessageList("전체청산",CallOrderCode);
}
}
function Main_OnStart()
{
Main.SetTimer(3, 1000);
Main.MessageList("스팟시작 - 타이머셋팅(1초)")
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS >= 90000)
{
//잔고갯수
var num = Account1.GetTheNumberOfBalances();
for (var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.code.charAt(0) == "2" &&
Account1.Balance.position == 1 &&
Account1.Balance.current >= Account1.Balance.avgUnitCost*2.5)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
if (Account1.Balance.code.charAt(0) == "3" &&
Account1.Balance.position == 1 &&
Account1.Balance.current >= Account1.Balance.avgUnitCost*2.0)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
}
답변 1
예스스탁
예스스탁 답변
2014-06-02 17:42:55
> 먼지의추억 님이 쓴 글입니다.
> 제목 : 시초가 주문에 대해 질문드립니다.
> 질문 좀 할께요.
1. 시초가로 시스템 신호를 스팟에서 받아서 옵션을 주문 내는 것이 가능한가요?
예)
if stime == 150000 then
{
sell("sel-001",atstop,nextbaropen);
}
setstopendofday(150000);
이 시초가 매도진입신호를 스팟에서 받아서 옵션중에 2.0이하 call과 put옵션을
양매도 주문을 내고,15시에 양매도 신호를 정리할 수 잇는 건가요?
위에것이 안되면, 구현할 수 있는 시초가 양매도 방법이 있으면 알려주시면
감사하겠습니다.
var CC,CallOrderCode;
var PP,PutOrderCode;
function Main_OnStart()
{
EntryStart = 0;
}
//차트에서 신호 발생
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 3) //Sell신호 발생
{
Main.MessageList("매도신호발생:",Signal.signalKind);
var UNum = Option.uppersATM;//ATM기준 위아래 행사 갯수
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);//풋 종목 찾기//////////////////////////////////////////
var PutPrice = new Array(UNum+LNum+1);//전 행사가 갯수만큼 배열변수 만듬
for (var j = -UNum; j <= LNum; j++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장
{
if (Option.GetCurrent(1, j) <= 1.5)//2.5이하이면 해당종목의 현재가와 종목코드를 저장하고
{
PutPrice[j+UNum] = Option.GetCurrent(1, j);
PutCode[j+UNum] = Option.GetATMPutRecent(j);
}
else
{
PutPrice[j+UNum] = -1;//2.0보다 크면 모두 -1를 저장
PutCode[j+UNum] = -1;
}
}
PP = -1;
PutOrderCode = -1; // PutPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장
for (var jj = -UNum; jj <= LNum; jj++)// 동일 방번호의 PutCode를 PutOrderCode에 저장
{
if (PutPrice[jj+UNum] > PP)
{
PP = PutPrice[jj+UNum];
PutOrderCode = PutCode[jj+UNum];
}
}
if (PP > 0)
{
EntryStart = 1;
Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 5), 0);//풋매도(1계약,매수5호가)
Main.MessageList("풋매도",PutOrderCode);
}
var UNum = Option.uppersATM; //ATM기준 위아래 행사 갯수
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1); //콜 종목 찾기//////////////////////////////////////////
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장
{
if (Option.GetCurrent(0, i) <= 1.5)
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1; //2.0보다 크면 모두 -1를 저장
CallCode[i+LNum] = -1;
}
}
CC = -1;
CallOrderCode = -1;
for (var ii = -LNum; ii <= UNum; ii++)
{
if (CallPrice[ii+LNum] > CC) // CallPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장
{
CC = CallPrice[ii+LNum];
CallOrderCode = CallCode[ii+LNum]; // 동일 방번호의 CallCode를 CallOrderCode에 저장
}
}
if (CC > 0)
{
EntryStart = 1;
Account1.OrderSell(CallOrderCode, 1, Option.GetBidByCode(CallOrderCode, 5), 0); //콜매도(1계약, 매수5호가)
Main.MessageList("콜매도",CallOrderCode);
}
}
if (EntryStart == 1 && Signal.signalKind == 4) //ExitShort신호 발생
{
Main.MessageList("매도청산 신호발생:",Signal.signalKind);
Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 5), 0); //콜 매도청산(매수주문, 1계약, 매도5호가)
Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 5), 0); //풋 매도청산(매수주문, 1계약, 매도5호가)
Main.MessageList("전체청산",CallOrderCode);
}
}
function Main_OnStart()
{
Main.SetTimer(3, 1000);
Main.MessageList("스팟시작 - 타이머셋팅(1초)")
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS >= 90000)
{
//잔고갯수
var num = Account1.GetTheNumberOfBalances();
for (var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.code.charAt(0) == "2" &&
Account1.Balance.position == 1 &&
Account1.Balance.current >= Account1.Balance.avgUnitCost*2.5)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
if (Account1.Balance.code.charAt(0) == "3" &&
Account1.Balance.position == 1 &&
Account1.Balance.current >= Account1.Balance.avgUnitCost*2.0)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
}