답변완료
수식 부탁합니다
수정해 주신 식은 매도는 되나 청산(매수)이 전혀되지 않습니다.
다음식은 수정해 주신 2253 입니다.
var EntryTime = 103000;
var ExitTime = 144500;
var MaxEnryVol = 10;
var Entry,Exit,CurrentVol;
var CSV,PSV,CSX,PSX;
var CallOrderCode,PutOrderCode;
function Main_OnStart()
{
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList(HHMMSS,"Start");
Entry = true;
if (HHMMSS >= EntryTime)
{
Entry = false;
}
Exit = true;
if (HHMMSS >= ExitTime)
{
Exit = false;
}
if (Entry == true || Exit == true)
{
Main.MessageList(HHMMSS,"1번 타이머동작");
Main.SetTimer(1, 5000);
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1)
{
if (Entry == true && HHMMSS >= EntryTime)
{
//양매도종목
CallOrderCode = Option.GetATMCallRecent(0);
PutOrderCode = Option.GetATMPutRecent(0);
Main.SetUserValue("SellDate",YYYYMMDD);
Main.SetUserValue("CallOrderCode",CallOrderCode);
Main.SetUserValue("PutOrderCode",PutOrderCode);
Entry = false;
if (ExitTime > EntryTime)
Main.KillTimer(1);
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
CurrentVol = 1;
Main.SetTimer(2, 5000);
}
if (Exit == true && HHMMSS >= ExitTime)
{
Exit = false;
if (ExitTime > EntryTime)
Main.KillTimer(1);
var SellDate = Main.GetUserValue("SellDate")
if (YYYYMMDD == SellDate)
{
CallOrderCode = Main.GetUserValue("CallOrderCode");
PutOrderCode = Main.GetUserValue("PutOrderCode");
if (CallOrderCode != "")
{
Account1.SetBalance(CallOrderCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
CSV = Account1.Balance.count;
else
CSV = 0;
if (PSV > 0)
{
Main.SetTimer(3, 5000);
CSX = 1;
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
}
if (PutOrderCode != "")
{
Account1.SetBalance(PutOrderCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
PSV = Account1.Balance.count;
else
PSV = 0;
if (PSV > 0)
{
Main.SetTimer(4, 5000);
PSX = 1;
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
}
}
}
}
if (nEventID == 2)
{
CurrentVol = CurrentVol+1;
if (CurrentVol <= MaxEnryVol)
{
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
Account1.OrderSell(PutCode, 1, Option.GetBid(PutCode, 2), 0);
}
else
{
Main.KillTimer(2);
}
}
if (nEventID == 3)
{
CSX = CSX+1;
if (CSX <= CSV)
{
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
else
{
Main.KillTimer(3);
}
}
if (nEventID == 4)
{
PSX = PSX+1;
if (PSX <= PSV)
{
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
else
{
Main.KillTimer(4);
}
}
}
2021-07-07
2612
글번호 225513
답변완료
지표값을 Tick Size 단위로 변환시 이상현상 문의합니다.
문의에 항상 빠른 답변에 감사드립니다.
제가 하고자 하는 것은 지표값을 구하여 그 지표값을 주문 가격에 이용하고자 틱 사이즈 단위로 변환하여 수치을 구하고자 합니다.
GetTickSize 함수로 마이크로 골드 종목을 구하면 0.1000000...
소수점 이하 많은 양이 나오네요.
그래서 0.1로 조정을 했습니다.
그런데 TickSize 값은 0.1로 잘 나오는데, BBC1, BBU1, BBD1 등 값은 0.1단위로
나올때도 있고 수수점 이하 많은 자리가 나올때도 있는 등 들쑥날쑥이네요.
제가 무엇을 잘못 했나요?!
아래 식은 제가 일부분을 발췌하였습니다.
var TickSize = F1.GetTickSize();//: 호가단위 : NH 실제:소수점 이하 10이상 존재
TickSize = Math.floor(TickSize*1000000)/1000000; // 종목 적용시 소수점 이하 6자리까지 적용가능
var BBC1 = C1.GetIndicatorData("Bollinger Bands", 1,0); //BB지표
var BBU1 = C1.GetIndicatorData("Bollinger Bands", 2,0);
var BBD1 = C1.GetIndicatorData("Bollinger Bands", 3,0);
Main.MessageList("상단 : " + BBU1 +
", 하단 : "+ BBD1 +
", 중심선 : "+ BBC1
);
//TickSize로 Price 변경 Math.floor(A / TickSize)*TickSize
Main.MessageList("틱 사이즈 : " + TickSize);
BBC1 = Math.floor(BBC1 / TickSize)*TickSize; //TickSize 단위로 내림
BBU1 = Math.floor(BBU1 / TickSize)*TickSize;
BBD1 = Math.floor(BBD1 / TickSize)*TickSize;
Main.MessageList("1분봉 틱 조정 상단 : " + BBU1 +
", 하단 : "+ BBD1 +
", 중심선 : "+ BBC1
);
갑사합니다.
2021-06-30
2557
글번호 225509