수고많으세요. 궁금한게 있어 질문드립니다.
먼저 수식을 적용하고, 매매를 해보고,
매매를 한 상태에서 수식을 적용해보았습니다.
청산이 되지 않는 경우가 있는데 왜 그런지 궁금합니다.
(수식)
var tEnable = true, BID,SID,Bnum,Snum;
function Main_OnStart()
{
Main.MessageLog("청산식 시작");
}
function Main_OnU*dateMarket(sItemCode, lU*dateID)
{
if (sItemCode == M1.code && lU*dateID == 20001 && tEnable == true) {
A1.SetBalanceItem(M1.code,0);
if (A1.Balance.profit > tProfit || A1.Balance.profit < tLoss) {
if (A1.Balance.position == 1 && tEnable == true) {
BID = A1.OrderBuy(A1.Balance.code, A1.Balance.count, 0, 1);
tEnable = false;
}
else if (A1.Balance.postion == 2 && tEnable == true) {
SID = A1.OrderSell(A1.Balance.code, A1.Balance.count, 0, 1);
tEnable = false;
}
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
Bnum = OrderResponse.orderNum;
else if(OrderResponse.orderID == SID)
Snum = OrderResponse.orderNum;
}
function Main_OnNotifyFill(NotifyFill)
{
if (NotifyFill.orderNum == Bnum) {
Main.MessageList("매도청산");
tEnable = true;
}
else if (NotifyFill.orderNum == Snum) {
Main.MessageList("매수청산");
tEnable = true;
}
}
답변 1
예스스탁
예스스탁 답변
2019-06-14 11:27:26
안녕하세요
예스스탁입니다.
올려주신 수식에 A1.Balance.profit이 사용되었는데
잔고객체(Balance)에는 profit이라는 함수나 프로퍼티가 없습니다.
잔고에서 현재가와 평단가 수량을 가져와 직접 계산해서 사용하셔야 합니다.
function Main_OnU*dateMarket(sItemCode, lU*dateID)
{
if (sItemCode == M1.code && lU*dateID == 20001 && tEnable == true)
{
A1.SetBalanceItem(M1.code,0);
var pl = 0;
if (A1.Balance.position == 1)
{
pl = (A1.Balance.avgUnitCost-A1.Balance.current)*Account1.Balance.count;
}
if (A1.Balance.position == 2)
{
pl = (A1.Balance.current - A1.Balance.avgUnitCost)*Account1.Balance.count;
}
if (pl > tProfit || pl < tLoss) {
if (A1.Balance.position == 1 && tEnable == true) {
BID = A1.OrderBuy(A1.Balance.code, A1.Balance.count, 0, 1);
tEnable = false;
}
else if (A1.Balance.postion == 2 && tEnable == true) {
SID = A1.OrderSell(A1.Balance.code, A1.Balance.count, 0, 1);
tEnable = false;
}
}
}
}
즐거운 하루되세요
> 망고주스 님이 쓴 글입니다.
> 제목 : 수식작성 문의드립니다.
> 수고많으세요. 궁금한게 있어 질문드립니다.
먼저 수식을 적용하고, 매매를 해보고,
매매를 한 상태에서 수식을 적용해보았습니다.
청산이 되지 않는 경우가 있는데 왜 그런지 궁금합니다.
(수식)
var tEnable = true, BID,SID,Bnum,Snum;
function Main_OnStart()
{
Main.MessageLog("청산식 시작");
}
function Main_OnU*dateMarket(sItemCode, lU*dateID)
{
if (sItemCode == M1.code && lU*dateID == 20001 && tEnable == true) {
A1.SetBalanceItem(M1.code,0);
if (A1.Balance.profit > tProfit || A1.Balance.profit < tLoss) {
if (A1.Balance.position == 1 && tEnable == true) {
BID = A1.OrderBuy(A1.Balance.code, A1.Balance.count, 0, 1);
tEnable = false;
}
else if (A1.Balance.postion == 2 && tEnable == true) {
SID = A1.OrderSell(A1.Balance.code, A1.Balance.count, 0, 1);
tEnable = false;
}
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
Bnum = OrderResponse.orderNum;
else if(OrderResponse.orderID == SID)
Snum = OrderResponse.orderNum;
}
function Main_OnNotifyFill(NotifyFill)
{
if (NotifyFill.orderNum == Bnum) {
Main.MessageList("매도청산");
tEnable = true;
}
else if (NotifyFill.orderNum == Snum) {
Main.MessageList("매수청산");
tEnable = true;
}
}