예스스탁
예스스탁 답변
2022-12-27 17:42:06.0
안녕하세요
예스스탁입니다.
var UNum;
var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var CallExit,PutExit;
function Main_OnStart()
{
CallExit = false;
PutExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호 발생");
//1.0이하 중 가장 큰 가격을 가지는 종목을 찾음
//ATM위 행사가 갯수
UNum = Option1.uppersATM;
//ATM아래 행사가 갯수
LNum = Option1.lowersATM;
//각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언
CallCode = new Array(UNum+LNum+1);
//각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언
CallPrice = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언
PutCode = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언
PutPrice = new Array(UNum+LNum+1);
//콜종목 찾기
//콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로
//for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함
for (var i = -LNum; i <= UNum; i++)
{
//값이 1.0이하이면
if (Option1.GetCurrent(0, i) <= 1.0)
{
//해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장
CallPrice[i+LNum] = Option1.GetCurrent(0, i);
//해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
//주의
//배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터
//저장하도록 작성해야 함
}
else//1.0보다 크면
{
//배열변수 CallPrice의 방번호 i+LNum에 -1 저장
CallPrice[i+LNum] = -1;
//배열변수 CallCode의 방번호 i+LNum에 -1 저장
CallCode[i+LNum] = -1;
}
}
//풋종목 찾기
//풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로
//for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함
for (var ii = -UNum; ii <= LNum; ii++)
{
//ii단계 풋종목이 1.0이하이면
if (Option1.GetCurrent(1, ii) <= 1.0 )
{
//해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장
PutPrice[ii+UNum] = Option1.GetCurrent(1, ii);
//해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장
PutCode[ii+UNum] = Option1.GetATMPutRecent(ii);
}
else //1.0보다 크면
{
//배열변수 PutPrice의 방번호 ii+LNum에 -1 저장
PutPrice[ii+UNum] = -1;
//배열변수 PutCode의 방번호 ii+LNum에 -1 저장
PutCode[ii+UNum] = -1;
}
}
//배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고
//CallCode의 동일 방번호의 값을 CallOrderCode에 저장
CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
//배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고
//PutCode의 동일 방번호의 값을 PutOrderCode에 저장
PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
Main.MessageList("--------------------------------------------");
Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC);
Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP);
//콜옵션종목 매수
if (CallExit == false)
{
//지정가
Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(CallOrderCode, 1, 0, 1);
}
//콜옵션종목 매수
if (PutExit == false)
{
//지정가
Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(PutOrderCode, 1, 0, 1);
}
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && CallExit == false && HHMMSS >= 143530)
{
CallExit = true;
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Main.MessageList(Account1.Balance.code,Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)));
Account1.SetBalance(i);
if (Account1.Balance.position == 2 &&
Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(매수2호가)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBidByCode(Account1.Balance.code, 2), 0);
//시장가
//Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
if (nEventID == 1 && PutExit == false && HHMMSS >= 151530)
{
PutExit = true;
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Main.MessageList(Account1.Balance.code,Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)));
Account1.SetBalance(i);
if (Account1.Balance.position == 2 &&
Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(매수2호가)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBidByCode(Account1.Balance.code, 2), 0);
//시장가
//Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
if (nEventID == 1 && (CallExit == false || PutExit == false))
{
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Account1.SetBalance(i);
var unum = Account1.GetTheNumberOfUnfills();
if (unum > 0)
{
var ExitO = true;
for (var z = 0; z < unum; z++)
{
Account1.SetUnfill(z);
if (Account1.Unfill.count > 0 && Account1.Unfill.code == Account1.Balance.code && Account1.Unfill.orderKind == 1)
{
ExitO = false;
}
}
}
if (ExitO == true && Account1.Balance.position == 2 && Account1.Balance.current == 0.01)
{
//지정가(0.01)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0.01, 0);
}
}
}
}
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 문의
> 아래 수식은 장종료 시점에 청산시간 조건으로만 exit 합니다.
콜매수 포지션 가격이 0.01 되면 콜포지션 청산
풋매수 포지션 가격이 0.01 되면 풋포지션 청산
위 조건을 추가해 주십시요.
만기일에 매수가격이 없는 경우가 발생하므로 그전에 청산하려고 합니다.
항상 고맙습니다.
******************************************************************************
안녕하세요
예스스타입니다.
1
Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 1);
주문함수의 마지막 옵션은 지정가나 시장가등을 지정하는 옵션입니다.
0이면 지정가, 1이면 시장가입니다.
시장가이면 가격을 지정할 필요가 없어 주문가격은 0으로 지정하시면 됩니다.
Account1.OrderBuy(CallOrderCode, 1, 0, 1);
만약 지정가로 주문한다면 아래와 같이 마지막옵션이 0으로 지정하시면 됩니다.
Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 0);
아래식에는 지정가로 작성해 드립니다.
시장가도 주석처리로 추가해 드립니다.
2
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var CallExit,PutExit;
function Main_OnStart()
{
CallExit = false;
PutExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호 발생");
//1.0이하 중 가장 큰 가격을 가지는 종목을 찾음
//ATM위 행사가 갯수
UNum = Option1.uppersATM;
//ATM아래 행사가 갯수
LNum = Option1.lowersATM;
//각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언
CallCode = new Array(UNum+LNum+1);
//각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언
CallPrice = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언
PutCode = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언
PutPrice = new Array(UNum+LNum+1);
//콜종목 찾기
//콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로
//for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함
for (var i = -LNum; i <= UNum; i++)
{
//값이 1.0이하이면
if (Option1.GetCurrent(0, i) <= 1.0)
{
//해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장
CallPrice[i+LNum] = Option1.GetCurrent(0, i);
//해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
//주의
//배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터
//저장하도록 작성해야 함
}
else//1.0보다 크면
{
//배열변수 CallPrice의 방번호 i+LNum에 -1 저장
CallPrice[i+LNum] = -1;
//배열변수 CallCode의 방번호 i+LNum에 -1 저장
CallCode[i+LNum] = -1;
}
}
//풋종목 찾기
//풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로
//for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함
for (var ii = -UNum; ii <= LNum; ii++)
{
//ii단계 풋종목이 1.0이하이면
if (Option1.GetCurrent(1, ii) <= 1.0 )
{
//해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장
PutPrice[ii+UNum] = Option1.GetCurrent(1, ii);
//해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장
PutCode[ii+UNum] = Option1.GetATMPutRecent(ii);
}
else //1.0보다 크면
{
//배열변수 PutPrice의 방번호 ii+LNum에 -1 저장
PutPrice[ii+UNum] = -1;
//배열변수 PutCode의 방번호 ii+LNum에 -1 저장
PutCode[ii+UNum] = -1;
}
}
//배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고
//CallCode의 동일 방번호의 값을 CallOrderCode에 저장
CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
//배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고
//PutCode의 동일 방번호의 값을 PutOrderCode에 저장
PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
Main.MessageList("--------------------------------------------");
Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC);
Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP);
//콜옵션종목 매수
if (CallExit == false)
{
//지정가
Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(CallOrderCode, 1, 0, 1);
}
//콜옵션종목 매수
if (PutExit == false)
{
//지정가
Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(PutOrderCode, 1, 0, 1);
}
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && CallExit == false && HHMMSS >= 143530)
{
CallExit = true;
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Main.MessageList(Account1.Balance.code,Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)));
Account1.SetBalance(i);
if (Account1.Balance.position == 2 &&
Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(매수2호가)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBidByCode(Account1.Balance.code, 2), 0);
//시장가
//Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
if (nEventID == 1 && PutExit == false && HHMMSS >= 151530)
{
PutExit = true;
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Main.MessageList(Account1.Balance.code,Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)));
Account1.SetBalance(i);
if (Account1.Balance.position == 2 &&
Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(매수2호가)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBidByCode(Account1.Balance.code, 2), 0);
//시장가
//Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
}
예스스탁
예스스탁 답변
2022-12-29 15:45:01.0
안녕하세요
예스스탁입니다.
var UNum;
var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var CallExit,PutExit;
function Main_OnStart()
{
CallExit = false;
PutExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호 발생");
//1.0이하 중 가장 큰 가격을 가지는 종목을 찾음
//ATM위 행사가 갯수
UNum = Option1.uppersATM;
//ATM아래 행사가 갯수
LNum = Option1.lowersATM;
//각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언
CallCode = new Array(UNum+LNum+1);
//각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언
CallPrice = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언
PutCode = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언
PutPrice = new Array(UNum+LNum+1);
//콜종목 찾기
//콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로
//for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함
for (var i = -LNum; i <= UNum; i++)
{
//값이 1.0이하이면
if (Option1.GetCurrent(0, i) <= 1.0)
{
//해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장
CallPrice[i+LNum] = Option1.GetCurrent(0, i);
//해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
//주의
//배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터
//저장하도록 작성해야 함
}
else//1.0보다 크면
{
//배열변수 CallPrice의 방번호 i+LNum에 -1 저장
CallPrice[i+LNum] = -1;
//배열변수 CallCode의 방번호 i+LNum에 -1 저장
CallCode[i+LNum] = -1;
}
}
//풋종목 찾기
//풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로
//for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함
for (var ii = -UNum; ii <= LNum; ii++)
{
//ii단계 풋종목이 1.0이하이면
if (Option1.GetCurrent(1, ii) <= 1.0 )
{
//해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장
PutPrice[ii+UNum] = Option1.GetCurrent(1, ii);
//해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장
PutCode[ii+UNum] = Option1.GetATMPutRecent(ii);
}
else //1.0보다 크면
{
//배열변수 PutPrice의 방번호 ii+LNum에 -1 저장
PutPrice[ii+UNum] = -1;
//배열변수 PutCode의 방번호 ii+LNum에 -1 저장
PutCode[ii+UNum] = -1;
}
}
//배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고
//CallCode의 동일 방번호의 값을 CallOrderCode에 저장
CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
//배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고
//PutCode의 동일 방번호의 값을 PutOrderCode에 저장
PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
Main.MessageList("--------------------------------------------");
Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC);
Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP);
//콜옵션종목 매수
if (CallExit == false)
{
//지정가
Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(CallOrderCode, 1, 0, 1);
}
//콜옵션종목 매수
if (PutExit == false)
{
//지정가
Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(PutOrderCode, 1, 0, 1);
}
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && CallExit == false && HHMMSS >= 143530)
{
CallExit = true;
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Main.MessageList(Account1.Balance.code,Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)));
Account1.SetBalance(i);
if (Account1.Balance.position == 2 &&
Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(매수2호가)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBidByCode(Account1.Balance.code, 2), 0);
//시장가
//Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
if (nEventID == 1 && PutExit == false && HHMMSS >= 151530)
{
PutExit = true;
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Main.MessageList(Account1.Balance.code,Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)));
Account1.SetBalance(i);
if (Account1.Balance.position == 2 &&
Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(매수2호가)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBidByCode(Account1.Balance.code, 2), 0);
//시장가
//Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
if (nEventID == 1 && (CallExit == false || PutExit == false))
{
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Account1.SetBalance(i);
var unum = Account1.GetTheNumberOfUnfills();
if (unum > 0)
{
var ExitO = true;
for (var z = 0; z < unum; z++)
{
Account1.SetUnfill(z);
if (Account1.Unfill.count > 0 && Account1.Unfill.code == Account1.Balance.code && Account1.Unfill.orderKind == 1)
{
ExitO = false;
}
}
}
if (ExitO == true && Account1.Balance.position == 2)
{
//콜
if (Account1.Balance.current == 0.01 &&
Option1.GetCodeByExercisePrice(0, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(0.01)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0.01, 0);
}
//풋
if (Account1.Balance.current == 0.02 &&
Option1.GetCodeByExercisePrice(1, Option1.GetExercisePrice(Account1.Balance.code)) == Account1.Balance.code)
{
//지정가(0.01)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0.02, 0);
}
}
}
}
}
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : Re : Re : 문의
> 답변 수식은 call,put 이 동일하게 0.01 일 때 청산하는 수식입니다.
call 0.01 일 때와 put 0.02 일 때 각각 분리되어 청산이 진행되도록 하는 수식 부탁 드립니다.
처음부터 이렇게 요청 드렸어야 했는데 번거롭게 해서 죄송합니다.
**********************************************************************************
if (nEventID == 1 && (CallExit == false || PutExit == false))
{
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
Account1.SetBalance(i);
var unum = Account1.GetTheNumberOfUnfills();
if (unum > 0)
{
var ExitO = true;
for (var z = 0; z < unum; z++)
{
Account1.SetUnfill(z);
if (Account1.Unfill.count > 0 && Account1.Unfill.code == Account1.Balance.code && Account1.Unfill.orderKind == 1)
{
ExitO = false;
}
}
}
if (ExitO == true && Account1.Balance.position == 2 && Account1.Balance.current == 0.01)
{
//지정가(0.01)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0.01, 0);
}
}
}
}
}