확장챠트에서 시스템 설정에 문제가 있는지...
수고하십니다.
1. 지난번의 답변 감사합니다
3.시험가동에선 주문가격이 1.-2147483648 으로 이상하게 나오고 체결가격은 실체결에서만
나오는 건지 궁금합니다.
5. 예스랭기지 시스템에서의 한두종류의 신호와 수량을 스팟에서 이용하고 싶은데,
가능한 방법은 있는지요?
점검좀 부탁드립니다
감사합니다
var Start;
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var vol1;var vol3;
var vol2;var vol4;
var CallStart;
var PutStart;
var ChartEx1 = null;
var ChartEx2 = null;
function Main_OnStart()
{
Start = 0;
vol1 = 0;
vol2 = 0;
CallStart = 0;
PutStart = 0;
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//9시 5분에
if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030
{
Start = 1;
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);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetExpectedPrice(0, i)-2.3);
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];
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
PutPrice[ii+UNum] = Math.abs(Option.GetExpectedPrice(1, ii)-2.3);
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];
}
}
Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode);
//확장 차트객체 요청
var ChartSet1 = new ReqChartItem(CallOrderCode,60, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false);
var ChartSet2 = new ReqChartItem(PutOrderCode,60, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false);
//시스템 설정
var TradeSet = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산
0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료
0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, //1000, // 최대진입수량
10); // 최대진입횟수
var StopSet = new SystemStopInfo(new StopEndOfDay(150300));
var SystemSet1 = new SystemInfo("OpCall",YL_TYPE_NORMAL,null,TradeSet,null);
//참조데이터 추가
var R11 = new ReqChartItem(PutOrderCode, 60, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
var R12 = new ReqChartItem(PutOrderCode1, 20, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false);
var R13 = new ReqChartItem(PutOrderCode2, 60, CHART_PERIOD_TICK, 800, CHART_REQCOUNT_BAR, false, false);
var R14 = new ReqChartItem(CallOrderCode1, 20, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
var R15 = new ReqChartItem(CallOrderCode2, 60, CHART_PERIOD_TICK, 800, CHART_REQCOUNT_BAR, false, false);
var R16 = new ReqChartItem("00000000", 60, CHART_PERIOD_TICK, 1500, CHART_REQCOUNT_BAR, false, false);
var R17 = new ReqChartItem(PutOrderCode3, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false);
var R18 = new ReqChartItem(PutOrderCode4, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false);
var R19 = new ReqChartItem(CallOrderCode3, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false);
//var R20 = new ReqChartItem("EI735", 60, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
var ReferDataSet1 = new Array(R11,R12,R13,R14,R15,R16,R17,R18,R19);
//지정한 설정으로 챠트 생성을 요청
Main.ReqChartEx(ChartSet1,SystemSet1,null,ReferDataSet1);
}
}
//요청한 차트객체 생성이 완료되면
function Main_OnRcvChartEx(ChartEx)
{
if ( ChartEx.GetCode(1) == CallOrderCode)
{
ChartEx1 = ChartEx;
CallStart = 1;
Main.MessageList("C코드",ChartEx1.GetCode(1));
}
}
//확장차트에서 신호나오면 주문
function Main_OnRiseSignal(ChartEx1, Signal)
{
//콜차트
if (CallStart == 1 && ChartEx1.GetCode(1) == CallOrderCode)
{
if (Signal.signalKind == 1)
{
vol1 = Math.abs(Signal.count);
Account1.OrderBuy(Signal.code,vol1,Option.GetAskByCode(Signal.code,0),0);
Main.MessageList("콜매수 : ", CallOrderCode);
}
if (Signal.signalKind == 2)
{
vol2 = Math.abs(Signal.count);
//PutOrderCode 종목 잔고 셋팅
Account1.SetBalanceItem(Main.GetOrderCode(CallOrderCode), 0);
//잔고수량이 0이상이고 매수포지션이면
if(Account1.Balance.count >= vol2 && Account1.Balance.code == Main.GetOrderCode(CallOrderCode)
&& Account1.Balance.position == 2)
{
//잔고수량과 진입수량 중 작은 값으로 청산실행
// Account1.OrderSell(Main.GetOrderCode(CallOrderCode), Math.max(Account1.Balance.count,vol2),Option.GetBidByCode(Main.GetOrderCode(CallOrderCode), 0), 0);
Account1.OrderSell(Signal.code,vol2,Option.GetBidByCode(Signal.code,0),0);
}
if(Account1.Balance.count < vol2 && Account1.Balance.position == 2)
{
//잔고수량과 진입수량 중 작은 값으로 청산실행
Account1.OrderSell(Main.GetOrderCode(CallOrderCode), Math.min(Account1.Balance.count,vol2),Option.GetBidByCode(CallOrderCode, 0), 0);
}
}
}
}
2014-04-05
710
글번호 222901