답변완료
orerExit관 문의
현대선물에서 FX거래를 예스스팟을 이용하여 거래를 하려고 시스템을 만들어 테스트 중입니다.
포지션이 있는 상태에서 반대 포지션이 안되어 OrderExit 함수를 활용하여
먼저 포지션을 청산하고 반대로 청산이 완료되는 것을 OnNotifyFill이벤트에서 주문번호를 확인하고 신규로 진입하는 것으로 구현했습니다.
그런데...
1. 포지션이 없음을 확인하고 진입(매수,매도)을 시도해도 "매수포지션에서 신규매도, 매도포시션에서 신규매수 불가능합니다"라는 Error가 발생합니다.
또는 포지션번호를 찾을 수 없다고 나오기도 합니다.
account1.Balance.postionNum을 로깅하면 Null입니다.
그래서
Fx매매 화면을 통해 수동으로 진입이후 포지션을 점검해서 Main_Start에서
위와 같은 작업을 해 봤습니다.
경우에 따라 위와 같은 현상이 나타나기도 하고, 정상적으로 청산이 되기도 합니다.
2. OrderExit이후 포지션이 없다는 것을 시스템이 인식하지 못하는 것 같은데
혹시 코딩을 잘못한 것이지, 아니면 다른 것이 있어서 그런 것이지 확인 부탁드립니다.
3. OnNotifyFill 이벤트는 매매 수량이 한개 임에도 2번, 3번 나타 나는데 정상적인 현상인지요?
2015-02-13
1513
글번호 223330
답변완료
스팟식 문의드립니다.
안녕하세요~
예스트레이드 이용중인 직장인입니다.
현재는 차트별 매수식만 짜서 피라미딩매수 스팟식으로 운영중이고
매도는 수동으로 청산하고 있습니다.
앞으로는 종목을 점점 추가시키고 매수매도가 하나의 전략식에서 되게할려고합니다.
번거러우시더라도 조언 부탁드립니다.
계좌객체 : A1
차트객체 : C1, C2,,,,C9
종목객체 : M1, M2,,,,M9
시스템전략식 : 골든크로스 매수, 데드크로스 매도
매수 : 미완성매수신호시 1봉당 한번씩만 피라미딩 매수
매도 : 미완성매도신호시 종목별평단가 -5%이하 손절, +5%이상 익절
행복한 하루하루 되십시요~~
2015-02-07
1643
글번호 223315
답변완료
질문 3 : 옵션 종목의 수익률에 따른 자동 청산 주문
( 콜옵션평가금액 / 콜잔고 + 풋옵션평가금액 / 풋잔고 ) < -2% 이면 자동 잔고 청산
=> 콜옵션 수익율 + 풋옵션 수익율 < -2%
=> 콜옵션과 풋옵션을 양매수 한 상태일 때 횡보로 인하여 각 수익율 절대값 기준으로 합이 -2% (예를 들어 콜 +5% 풋 -7% 일때 청산) 일 때 청산하고자 함.
if ( lU*pdateID == 20001 && sItemCode == M1.code )
{
if( (A1.GetTotalAvgCost(4, 2)/Option.GetCurrent(0, 2) + A1.GetTotalAvgCost(5, 2)/Option.GetCurrent(0, 2)) < HairCutRate && BuyCond == 5)
{
A1.OrderSell(Callcode, 10, Option.GetBidByCode(Callcode, 3), 0);
A1.OrderSell(Putcode, 5, Option.GetBidByCode(Putcode, 3), 0);
}
}
2015-02-05
1836
글번호 223308
답변완료
질문 2 : 옵션 거래 종목 자동 설정과 관련 수식 문의
옵션 가격 중에 외가격 중에 1.5이하 중 가장 큰 종목에 대해서 매수를 하기 위해서 아래와 같이 수식을 만들었습니다.
보통 외가격 3~0 이내에서 해당 종목 가격이 나타나는 관계로 가장 가격이 낮은 종목부터 체크하여 1.5 보다 높은 가격의 옵션 종목을 찾는 수식입니다.
문제가 있나요? 해당 로직이 반응을 하지 않고 처음에 설정된 외가격 3에서만 반응을 하네요
var CallOTM; /*콜외가격호가*/
var PutOTM; /*풋외가격호가*/
function Main_OnStart()
{
CallOTM = 3;
PutOTM = 3;
}
if ( 매수 조건 충족시 )
{
if( Option.GetCurrent(0, 3) >= 1.50 )
{
CallOTM = 2;
}
if( Option.GetCurrent(0, 2) >= 1.50 )
{
CallOTM = 1;
}
if( Option.GetCurrent(0, 1) >= 1.50 )
{
CallOTM = 0;
}
Callcode = Option.GetATMCallRecent(CallOTM, 0);
A1.OrderBuy(Callcode, 10, Option.GetAskByCode(Callcode, 3), 0);
2015-02-04
1741
글번호 223307
답변완료
질문 1 : 거래 시간 정보에 따른 거래 수식 오류
예전에 아래와 같이 답변을 주셔서 수식을 작성하여 확인을 하고 있습니다.
기존 답변을 기준으로 수식을 작성하였는데, 해당 로직에 반응을 하지 않습니다.
원인을 알고 싶습니다. 무엇이 잘못되었는지요
전체 로직을 복사한 사항이 아니어서 아래 복사 내용에 {} 등이 맞지 않을 수 있습니다.
일부 수식을 요약했는데, 확인하시기 힘드시다면 해당 로직을 이메일로 보내드리도록 하겠습니다.
답변으로 메일주소 주시면 보내도록 하겠습니다.
function Main_OnU*pdateMarket(sItemCode, lU*pdateID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (M1.code == sItemCode)
{
if (매수 조건 충족시 )
{
(매수주문);
}
/*시간에 따른 청산*?
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
var d = new Date();
if (BuyCond == 6)
{
A1.SetBalanceItem(Callcode,0);
if (A1.Balance.count > 0 && A1.Balance.position == 2)
{
if( Amount < Bottom-400 && M1.current < BP-0.2 && Buytime > 0 && d.getTime() == Buytime+60000 && Timechk1 == 0)
{
A1.OrderSell(Callcode, Bvol-Math.floor(Bvol*0.1)*1, Option.GetBidByCode(Callcode, 3), 0);
Exvol = Exvol+1;
Timechk1 = 1;
}
if( Amount < Bottom-300 && M1.current < BP-0.15 && Buytime > 0 && d.getTime() == Buytime+180000 && Timechk2 == 0)
{
A1.OrderSell(Callcode, Bvol-Math.floor(Bvol*0.1)*1, Option.GetBidByCode(Callcode, 3), 0);
Exvol = Exvol+1;
Timechk2 = 1;
}
if( Amount < Bottom-200 && M1.current < BP-0.1 && Buytime > 0 && d.getTime() == Buytime+300000 && Timechk3 == 0)
{
A1.OrderSell(Callcode, Bvol-Math.floor(Bvol*0.1)*1, Option.GetBidByCode(Callcode, 3), 0);
Exvol = Exvol+1;
Timechk3 = 1;
}
}
}
===============================================================================
안녕하세요
예스스탁입니다.
091007는 단순 숫자입니다.
만약 시간이 95717 이라면 이 숫자에 500을 더하면
96217이 됩니다. 시간으로 되지는 않습니다.
자바스크립트에 기본제공되는 시간함수들 중에 getTime이라는 함수가 있습니다.
현재의 시간을 1970년1월1일0시0분1초 부터 경과된 초수로 시간을 리턴해 주는 함수입니다.
1초는 1000입니다.
시간을 비교하신 다면 해당 함수를 이용해 비교하셔야 합니다.
var BuyTime;
function Main_OnStart()
{
Main.SetTimer(1, 1000);
Buytime = 0;
}
#매수주문 이벤트에서 시간저장
function 이벤트
{
if (조건)
{
var d = new Date();
Buytime = d.getTime();
Account1.OrderBuy(sItemCode, nCount, dPrice, nPriceKind)
}
}
#1초 단위로 시간을 판단해 매수후 5분 이후에 매도조건 만족하면 매도주문
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
var d = new Date();
if (매도조건 && Buytime > 0 and d.getTime() >= Buytime+300000 &&)//300초(1초가 1000)
{
Account1.OrderSell(sItemCode, nCount, dPrice, nPriceKind)
}
}
}
즐거운 하루되세요
> 최강투자 님이 쓴 글입니다.
> 제목 : 거래시간에 대한 정보를 기억할 수 있나요?
>
시간 변수로
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
로 정의를 한 뒤 거래 시간 등을
HHMMSS >= 090001 이런 식으로 제약하고 있습니다.
만약 청산 조건을 Case별로 구분하기 위해서
해당 매수 시간(체결 시간)을 기억하고 싶다면
A1.OrderBuy 매수 조건시 해당 HHMMSS 를 기억할 방법이 있나요?
BuyTime 이란 변수를 새로 넣는 다면
해당 매수 시간에 (ex 09시 10분 7초에 체결이 됐다면..)
BuyTime = HHMMSS 으로 정의했을 경우
BuyTime = 091007 으로 기억되는 것이 맞는지요?
만약 매수 시간 후 5분 뒤 매도 조건을 만들고 싶다면
HHMMSS = BuyTime + 000500 이란 수식으로 해당 조건이 충족될 때 매도 주문을 넣는 것이
가능한가요.
답변 부탁드립니다.
2015-02-04
1902
글번호 223306