예스스탁
예스스탁 답변
2014-06-16 18:15:44
안녕하세요
예스스탁입니다,.
답변이 늦어져 죄송합니다.
내일 편하신 시간에 02-3453-1060으로 전화주시기 바랍니다.
확인할 내용이 있습니다.
즐거운 하루되세요
> 파문일기 님이 쓴 글입니다.
> 제목 : 오버잔고가 있을시 확장챠트 구성
> 안녕하세요
콜옵션과 대항 풋옵션 255-255
풋옵션과 대항 콜옵션..
으로 확장챠트 구성.
잔고가 없을때는 위의 구성으로
오버잔고가 있을시는
잔고의 구분에 따라 오버 옵션의 콜풋으로 주종목을 구성하고 싶습니다
감사합니다.
var Start;
var S1, S2;
var OrderCode1; var OrderCode2;
var P1; var AvgCost; var PLsum;
var Nth = 0;
var ItemCode = new Array(100);//갯수
var ItemObject = new Array(100);//갯수
var ItemHigh = new Array(100);//갯수
var ItemLow = new Array(100);//갯수
var Balnum;
var UNum; var LNum;
var CallCode; var CallPrice; var CallATM; var PutATM;
var PutCode; var PutPrice; var CoCall; var CoPut;
var CC; var PP;
var vol1; var vol3; var vol4; var vol5;
var vol2; var vol6; var vol7;
var CaBuyID, CaSellID;
var CBcond, CScond;
var CaBuyNum, CaSellNum;
var PuBuyID, PuSellID;
var PBcond, PScond;
var PuBuyNum, PuSellNum;
var BFill,SFill;
var CallStart;
var PutStart;
var ChartEx11 ;//= null;
var ChartEx12 ;//= null;
function Main_OnStart()
{
Start = 0;
Main.MessageList("시 작:");
Nth = 0;
Balnum = Account1.GetTheNumberOfBalances()
Main.MessageList("잔고종목수",Balnum);
if (Balnum > 0)
{
//계좌의 잔고리스트에서 첫번째 잔고 셋팅
Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//1번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 20,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목요청",Account1.Balance.code);
}
if (Account1.Balance.categoryEx == 31 )
CallOrderCode = Account1.Balance.code;
if (Account1.Balance.categoryEx == 32 )
PutOrderCode = Account1.Balance.code;
}
//코스피200선물에 가장 가까운 콜/풋 종목 선정
var var1 = MarketData1.open;//current;//expectedPrice
var var2 = parseInt(var1/10)*10;
var var3 = var1%10;
var ATM = -1;
if (var3 >= 8.75)
ATM = var2+10;
else if (var3 < 8.75 && var3 >= 6.25)
ATM = var2+7.5;
else if (var3 < 6.25 && var3 >= 3.75)
ATM = var2+5.0;
else if (var3 < 3.75 && var3 >= 1.25)
ATM = var2+2.5;
else
ATM = var2+0.0;
CallATM = Option.GetCodeByExercisePrice(0, ATM);
PutATM = Option.GetCodeByExercisePrice(1, ATM);
Main.MessageList("선물시가 :",MarketData1.open,"ATM",ATM,"콜ATM :",CallATM ,"풋ATM :",PutATM);
//2.0에 가장 가까운 콜/풋 종목
UNum = Option.uppersATM;
LNum = Option.lowersATM;
CallCode = new Array(UNum+LNum+1);
PutCode = new Array(UNum+LNum+1);
CallPrice = new Array(UNum+LNum+1);
PutPrice = new Array(UNum+LNum+1);
if (Balnum == 0 || Account1.Balance.categoryEx != 31)
{
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
CC = 99999999;
CallOrderCode = -1;
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum];
}
if (CallOrderCode == CallCode[i+LNum])
{
CallOrderCode1 = CallCode[i+LNum-1];
CallOrderCode2 = CallCode[i+LNum+1];
CallOrderCode3 = CallCode[i+LNum+2];
}
}
}
if (Balnum == 0 || Account1.Balance.categoryEx != 32)
{
for (var ii = -UNum; ii <= LNum; ii++)
{
PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.0);
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
PP = 99999999;
PutOrderCode = -1;
for (var ii = -UNum; ii < LNum; ii++)
{
if (PutPrice[ii+UNum] <= PP)
{
PP = PutPrice[ii+UNum];
PutOrderCode = PutCode[ii+UNum];
}
if (PutOrderCode == PutCode[ii+UNum])
{
PutOrderCode1 = PutCode[ii+UNum-1];
PutOrderCode2 = PutCode[ii+UNum+1];
PutOrderCode3 = PutCode[ii+UNum+2];
PutOrderCode4 = PutCode[ii+UNum+3];
}
}
}
//2.0과 가장 가까운 콜의 반대 옵션종목
CoPut = Option.GetCodeByExercisePrice(1,Option.GetExercisePrice(CallOrderCode));
CoCall = Option.GetCodeByExercisePrice(0,Option.GetExercisePrice(PutOrderCode));
Main.MessageList("2.0근접콜",CallOrderCode,"콜반대",CoPut,"2.0근접풋",PutOrderCode,"풋반대",CoCall);
//확장 차트객체 요청
//주종목 시가기준 콜
var ChartSet4 = new ReqChartItem(CallOrderCode,3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
var ChartSet5 = new ReqChartItem(PutOrderCode,3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//시스템 설정
var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산
0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료
0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
50, //1000, // 최대진입수량
10); // 최대진입횟수
var SystemSet4 = new SystemInfo("Opover",YL_TYPE_NORMAL,null,TradeSet4,null);
//지표 설정
I1 = new IndicatorInfo("중심", YL_TYPE_NORMAL,new Array(new YLInputVar(null,null)));
var IndicatorSet4 = new Array(I1);
//참조데이터 추가
//data2 2.0 근접콜
var R31 = new ReqChartItem(CallOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//data3 2.0 근접콜 반대종목
var R32 = new ReqChartItem(CoPut, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//data4 3.0 근접풋
var R33 = new ReqChartItem(PutOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//data4 3.0 근접풋 반대종목
var R34 = new ReqChartItem(CoCall, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
var ReferDataSet4 = new Array(R32);
var ReferDataSet5 = new Array(R34);
//지정한 설정으로 챠트 생성을 요청
Main.ReqChartEx(ChartSet4, SystemSet4, IndicatorSet4, ReferDataSet4);
Main.ReqChartEx(ChartSet5, SystemSet4, IndicatorSet4, ReferDataSet5);
}
function Main_OnU*pdateAccount(sAccntNum, sItemCode, lU*pdateID)
{
//계좌에 변동이 생기면
if (sAccntNum == Account1.number && (lU*pdateID == 30001 ))
{
Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작
//Nth번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code,20,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목요청",Account1.Balance.code);
}
}
//요청한 종목객체 수신되면
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목객체수신",MarketData.code);
//수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에
if (MarketData.code == ItemCode[Nth])
{
Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemCode[Nth]);
ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장
ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수)
ItemLow[Nth] = 99999; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최저값 계산해 저장할 변수)
Nth = Nth+1;
//종목객체 수신완료되면 다음 종목 종목객체 요청
if (Balnum > 0)
{
//계좌의 잔고리스트에서 다음 순번 잔고 셋팅
Account1.SetBalanceIndex(Nth);
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//Nth번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목요청",Account1.Balance.code);
}
}
}
}
//요청한 차트객체 생성이 완료되면
function Main_OnRcvChartEx(ChartEx)
{
if ( ChartEx.GetCode(1) == CallOrderCode)
{
ChartEx4 = ChartEx;
OrderCode1 = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때
Main.MessageList("Cx코드 :",ChartEx4.GetCode(1));
}
if ( ChartEx.GetCode(1) == PutOrderCode)
{
ChartEx5 = ChartEx;
OrderCode2 = Main.GetOrderCode(ChartEx5.GetCode(1));//ATM단위로 사용할때
Main.MessageList("Px코드 :",ChartEx5.GetCode(1));
}
Start = 1;
}