답변완료
수정부탁드려요.
안녕하세요. 2가지 질문드립니다.
1. 아래는 3.0이하의 델타가 0.5근접하는 콜, 풋 종목입니다.
만기주가 아니라면 근월물, 만기주에는 차월물(가격 3.0 이하, 델타0.5)을 주문할 수 있도록
GetRemainDays 또는 GetRemainDaysByCode 함수를 이용하여 수식을 수정 부탁드립니다.
//3.0 이하의 콜옵션종목 찾기
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) > 1.0 && Option.GetCurrent(0, i) < 3.0 && Option.GetDelta(0,i) != 0)
{
CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i)));
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = 999999;
CallCode[i+LNum] = 999999;
}
}
//3.0 이하의 콜옵션종목중 델타가 0.5에 근접하는 종목 찾기
CC = 999999;
CallOrderCode = 999999;
for (var ii = -LNum; ii <= UNum; ii++)
{
if (CallPrice[ii+LNum] < CC)
{
CC = CallPrice[ii+LNum];
CallOrderCode = CallCode[ii+LNum]
}
}
//3.0 이하의 풋옵션종목 찾기
for (var iii = -UNum; iii <= LNum; iii++)
{
if (Option.GetCurrent(1, iii) > 1.0 && Option.GetCurrent(1, iii) < 3.0 && Option.GetDelta(1,iii) != 0 )
{
PutPrice[iii+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,iii)));
PutCode[iii+UNum] = Option.GetATMPutRecent(iii);
}
else
{
PutPrice[iii+UNum] = 999999;
PutCode[iii+UNum] = 999999;
}
}
//3.0 이하의 풋옵션종목중 델타가 0.5에 근접하는 종목 찾기
PP = 999999;
PutOrderCode = 999999;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] < PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
2. 체결을 보장하기위해, 보통은 매도시 매수5호가, 매수시 매도5호가로 주문하고 있는데,
양매도 전략에서는 콜풋 동시에 매도진입시 각각 매도1호가에 지정가 주문후 둘 중 하나가 전량체결되면 나머지 주문은 시장가(또는 상대5호가)로 수정주문.
환매수시에도 마찬가지로 각각 매수1호가에 지정가 주문후 둘 중 하나가 전량체결되면 시장가(또는 상대5호가)로 수정주문할 수 있도록 아래의 수식을 수정부탁드립니다.
Account1.OrderSell(SellCallCode, SellCallCount, Option.GetBidByCode(SellCallCode, 5), 0);
Account1.OrderSell(SellPutCode, SellPutCount, Option.GetBidByCode(SellPutCode, 5), 0);
Account1.OrderBuy(SellCallCode, SellCallCount, Option.GetAskByCode(SellCallCode, 5), 0);
Account1.OrderBuy(SellPutCode, SellPutCount, Option.GetAskByCode(SellPutCode, 5), 0);
2015-05-29
1609
글번호 223492
답변완료
수식 부탁드립니다.
아래 스팟식은 검색종목이 잔고에 없으면 매수주문하는 식입니다. 아래 스팟식을 날이 바뀌거나 주가 바뀌거나(선택가능하게 부탁) 재차 검색되면 5번까지 피라미딩 진입되도록 수식 업그레이드 부탁드립니다.
이게 어렵다면 날이 바뀌거나 주가 바뀌거나(선택가능하게 부탁) 재차 검색되면 검색종목 잔고가 500000이 될때까지 진입되게 부탁드려요.
var EntryMoney;
var ItemList,Count;
//스팟시작
function Main_OnStart()
{
//타이머설정
Main.SetTimer(1, 600000);//간격(3600초 60분)
EntryMoney = 100000;
}
function Main_OnTimer(nEventID)
{
//타이머동작하면 사용자검색조건 실행
if (nEventID == 1)
{
Main.ReqPowerSearch("Box-30");
Req = 0;
}
if (nEventID == 2 && Req < Count)
{
Main.ReqMarketData(ItemList[Req], 0, 0);
Req = Req+1;
Main.MessageList(ItemList[Req-1],Req);
}
}
//종목검색이 완료
function Main_OnRcvItemList(aItemList, nCount)
{
//검색종목수가 1개 이상이면
if (nCount >= 1)
{
ItemList = aItemList;
Count = nCount;
//잔고셋팅해서 보유종목이 아니면
Account1.SetBalanceItem(ItemList[0],0);
Main.MessageList(Count,ItemList,Account1.Balance.count);
if (Account1.Balance.count == 0)
{
//종목객체 생성 요청
Req = 1;
Main.ReqMarketData(ItemList[0], 0, 0);
Main.SetTimer(2, 1000);//간격(1초)
}
}
}
//요청한 종목객체가 생성되면
function Main_OnRcvMarketData(MarketData)
{
var Ob = MarketData;
var EntryVol = 0;
//현재가가 EntryMoney 미만이면 수량계산 이상이면 1주
if (Ob.current < EntryMoney)
EntryVol = Math.floor(EntryMoney/Ob.current);
else
EntryVol = 1;
if (EntryVol > 0)
{
Account1.OrderBuy(Ob.code,EntryVol,Ob.Ask(5),0);
Main.RemoveMarketData(Ob);
}
}
2015-05-29
1720
글번호 223489
답변완료
수식 수정 부탁드립니다.
아래는 종목검색 후 검색된 종목이 잔고에 있으면 해당 종목을
시장가로 청산하는 스팟식을 작성해 주셨습니다. 아래 점선 아래부분은 매수주문식 같은데 필요 없는것 아닌가요?
검색된 종목이 잔고에 있으면 해당 종목을 시장가로 청산하는 스팟식으로만 간단하게 줄여주시기 바랍니다.
var EntryMoney;
var ItemList,Count;
//스팟시작
function Main_OnStart()
{
//타이머설정
Main.SetTimer(1, 300000);//간격(300초 5분)
EntryMoney = Math.floor(Account1.GetBalanceETCinfo(0)*10);
}
function Main_OnTimer(nEventID)
{
//타이머동작하면 사용자검색조건 실행
if (nEventID == 1)
{
Main.ReqPowerSearch("Stest");
Req = 0;
}
if (nEventID == 2 && Req < Count)
{
Main.ReqMarketData(ItemList[Req], 0, 0);
Req = Req+1;
Main.MessageList(ItemList[Req-1],Req);
}
}
//종목검색이 완료
function Main_OnRcvItemList(aItemList, nCount)
{
//검색종목수가 1개 이상이면
if (nCount >= 1)
{
ItemList = aItemList;
Count = nCount;
//잔고종목이 검색종목에 있으면 시장가로 전량 매도
var num = Account1.GetTheNumberOfBalances();
for(var i = 0; i < num; i++)
{
//잔고종목셋팅
Account1.SetBalance(i);
//검색종목들과 잔고종목의 종목코드 비교
//같은 종목코드 있으면 true 아니면 false
var cond = false;
for(var j = 0; j < Count; i++)
{
if (Account1.Balance.code == ItemList[j])
{
cond = true;
}
}
//true이면 매도
if (cond == true)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1);
}
}
----------------------------------------------------------------------------------------------------> 이 부분부터는 필요없는것 아닌가요?
//잔고셋팅해서 보유종목이 아니면
Account1.SetBalanceItem(ItemList[0],0);
Main.MessageList(ItemList,Count,Account1.Balance.count);
if (Account1.Balance.count == 0)
{
//종목객체 생성 요청
Req = 1;
Main.ReqMarketData(ItemList[0], 0, 0);
Main.SetTimer(2, 1000);//간격(1초)
}
}
}
//요청한 종목객체가 생성되면
function Main_OnRcvMarketData(MarketData)
{
var Ob = MarketData;
var EntryVol = 0;
EntryVol = Math.floor(EntryMoney/Ob.current);
if (EntryVol > 0)
{
Account1.OrderBuy(Ob.code,EntryVol,Ob.Ask(5),0);
Main.RemoveMarketData(Ob);
}
}
2015-05-28
1697
글번호 223488