답변완료
체결확인을 하고싶습니다.
예를 들어 선물 신호기준 콜옵션 1.0에 가장 가까운 종목을 매수했을때. 가격이 올라 만약 2.5 가 되었을때 청산 신호가 뜬다면 예스스탁님이 올려주신 아래식을 적용한다면 매수는 a라는 종목에 나가고 청산은 b라는 종목에 나갈꺼 같습니다... 맞는지요..
그래서 아래처럼.OnNotifyFill 을 사용해서 체결유무를 확인하고 체결되었다면 checkbuycallcode 변수에 CallOrderCode 를 넣은후...청산 신호가 발생시 ...
Main.OrderSell(a1.number, CallOrderCode, 1, Option.GetAskByCode(checkbuycallcode, 2), 0);
이렇게 청산되게 했습니다... 근데 메시지 로그에 checkbuycallcode 값이 안나오네요
수정 및 설명부탁드립니다.
var CPrice = new Array(101);
var CCode = new Array(101);
var PPrice = new Array(101);
var PCode = new Array(101);
var MaxCall;
var MaxCallCode;
var MaxPut;
var MaxPutCode;
var checkbuycallcode;
function c1_OnRiseSignal(Signal)
{
//ATM 위 행사가 갯수
UNum = Option.uppersATM;
//ATM 위 행사가 갯수
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);
//3.0이하의 가격을 가지는 콜종목은 해당 값과 종목코드 저장
//3.0을 초과하는 콜종목은 가격과 종목코드를 모두 -1 처리
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= money)
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
Main.MessageLog(i+"콜종목코드:"+CallCode[i+LNum]+"/가격:"+CallPrice[i+LNum]);
}
//3.0이하의 가격을 가지는 풋종목은 해당 값과 종목코드 저장
//3.0을 초과하는 풋종목은 가격과 종목코드를 모두 -1 처리
for (var ii = -UNum; ii <= LNum; ii++)
{
if (Option.GetCurrent(1, ii) <= 1.0 )
{
PutPrice[ii+UNum] = Option.GetCurrent(1, ii);
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
else
{
PutPrice[ii+UNum] = -1;
PutCode[ii+UNum] = -1;
}
// Main.MessageLog(ii+"풋종목코드:"+PutCode[ii+UNum]+"/가격:"+PutPrice[ii+UNum]);
}
//각 배열에 저장된 값중 가장 큰 값을 찾음
var CC = -1;
var CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
var PP = -1;
var PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
Main.MessageLog("--------------------------------------------");
Main.MessageLog("콜주문종목코드:"+CallOrderCode+"/가격:"+CC);
// Main.MessageLog("풋주문종목코드:"+PutOrderCode+"/가격:"+PP);
if (Signal.signalKind == 1)// ----------->A 여기서부터 수정했습니다.
{
Main.OrderBuy(a1.number, CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 0);
}
if (Signal.signalKind == 2)
{
Main.OrderSell(a1.number, CallOrderCode, 1, Option.GetBidByCode(CallOrderCode, 2), 0);
}
}
//그래서 A 에서 아래와 같이 수정했지만 메시지로그 에서는값이 나오지 않네요.
if (Signal.signalKind == 1)// -------> 이렇게요.
{
Main.OrderBuy(a1.number, CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 0);
function Main_OnNotifyFill(NotifyFill)
{
if (NotifyFill == 2)
{
checkbuycallcode = CallOrderCode;
}
}
}
Main.MessageLog("call주문종목코드:"+checkbuycallcode);
if (Signal.signalKind == 2)
{
Main.OrderSell(a1.number, checkbuycallcode, 1, Option.GetAskByCode(checkbuycallcode, 2), 0);
2013-01-07
2512
글번호 221923