답변완료
수정부탁드려요.
안녕하세요. 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
1619
글번호 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
1730
글번호 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
1707
글번호 223488
답변완료
미완성신호 주문
안녕하세요~
다음 내용과 같이 수식 변경 부탁드립니다.
--------------------
< 현재 수식 내용 >
1) 09:00~09:00:52 시간에 미완성신호가 발생할 경우
2) 매수신호시 : 현재가격이 시초가-0.3 의 가격에 도달하면 5호가 매수
매도신호시 : 현재가격이 시초가+0.3 의 가격에 도달하면 5호가 매도
3) 변수 incompleteN, BuyID, BuyFill, SellID, SellFill
function Main_OnStart()
{
Main.MessageLog("시작");
incompleteN = 0;
}
function Chart1_OnRiseIncompleteSignal(IncompleteSignal)
{
//09시52초 이전
if (MarketData1.time >= 0900000000 && MarketData1.time < 0900520000)
{
if (incompleteN == 0 && IncompleteSignal.signalKind == 1 &&
MarketData1.current <= MarketData1.open-0.3) //시초가대비 0.3이상 하락하면 5호가 매수
{
BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Vol,MarketData1.Ask(5),0);
incompleteN = 1; // 체결이 되면 1 --> 현재5호가 주문 100% 체결되어 1로 설정
BuyFill = 0;
}
if (incompleteN == 0 && IncompleteSignal.signalKind == 3 &&
MarketData1.current >= MarketData1.open+0.3) //시초가대비 0.3이상 상승하면 5호가 매도
{
SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Vol,MarketData1.Bid(5),0);
incompleteN = 1; // 체결이 되면 1 --> 현재5호가 주문 100% 체결되어 1로 설정
SellFill = 0;
}
}
< 변경요청 내용 >
1) 09:00~09:00:52 시간에 미완성신호가 발생할 경우
2) 위의 방식은 atlimit의 개념이어서 다음과 같이 선주문 방식으로 변경
--> 미완성신호가 발생하는 즉시
매수신호시 : 시초가-0.3 에 주문
매도신호시 : 시초가+0.3 에 주문
--> 주문체결이 되면 incompleteN = 1; (체결이 안되면 0 유지)
3) 주어진 09:00:52 까지 2)의 주문이 미체결시, 09:00:54 해당주문 5호가로 정정
(즉, incompleteN = 1 이 아니면 5호가 정정주문)
4) 기존 변수는 다른 수식과 연관되어 있어 그대로 사용
//미완성신호 선주문
.....
...
.......
//09시54초 --> 09시52초까지 미체결시
if (MarketData1.time >= 0900540000 && 미완성신호 Buy주문 미체결시)
{
해당 매수주문 5호가 정정
}
if (MarketData1.time >= 0900540000 && 미완성신호 Sell주문 미체결시)
{
해당 매도주문 5호가 정정
}
-------------------------
이상입니다.
그럼 활기찬 시간되시기를 바라며,
감사합니다 !!
2015-06-03
1569
글번호 223485