예스스탁
예스스탁 답변
2014-02-12 18:07:43
안녕하세요
예스스탁입니다.
아래 내용 참고하시기 바랍니다.
1.
매수/매도 진입주문 발생하면 그 이후 해당 종목의 최고가/최저가를 계산하고
최고가/최저가 대비 20% 반대로 움직이면 청산주문 발생합니다
영문 업데이트가 Up*date로 작성이 되어 있으므로 *제거 하셔야 합니다.
스크립트 객체
차트객체 --> 속성에서 객체명 Chart1, 차트아이디 지정
계좌객체 --> 속성에서 객체명 Account1, 계좌번호 지정
종목객체 --> 속성에서 객체명 MarketData1, 차트와 동일종목지정
var pst;
var hh;
var ll;
function Main_OnStart()
{
pst = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if ( pst == 0 && Signal.signalKind == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
pst = 1;
hh = MarketData1.current;
}
if (pst == 1 && Signal.signalKind == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
pst = 0;
}
if ( pst == 0 && Signal.signalKind == 3)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
pst = -1;
ll = MarketData1.current;
}
if (pst == -1 && Signal.signalKind == 4)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
pst = 0;
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거
{
if (sItemCode == MarketData1.code && lUp*dateID == 20001)//*제거
{
if (pst == 1)
{
if (MarketData1.current > hh)
{
hh = MarketData1.current;
}
if (MarketData1.current <= hh*0.80)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
pst = 0;
}
}
if (pst == -1)
{
if (MarketData1.current < ll)
{
ll = MarketData1.current;
}
if (MarketData1.current >= ll*0.80)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
pst = 0;
}
}
}
}
2.
스크립트 객체
차트객체 --> 속성에서 객체명 Chart1, 차트아이디 지정
계좌객체 --> 속성에서 객체명 Account1, 계좌번호 지정
옵션객체
var pst;
var sigtime;
function Main_OnStart()
{
pst = 0;
Main.SetTimer(1, 1000);
sigtime = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if ( pst == 0 && Signal.signalKind == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
pst = 1;
sigtime = signal.time;
}
if (pst == 1 && Signal.signalKind == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
pst = 0;
}
if ( pst == 0 && Signal.signalKind == 3)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
pst = -1;
sigtime = signal.time;
}
if (pst == -1 && Signal.signalKind == 4)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
pst = 0;
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 93000)
{
Main.KillTimer(1);
if (sigtime == 0)
{
Account1.OrderSell(Option.GetATMCallRecent(1,0),1,0,1);
Account1.OrderSell(Option.GetATMPutRecent(1, 0),1,0,1);
}
}
}
즐거운 하루되세요
> 착한이 님이 쓴 글입니다.
> 제목 : 질문드립니다.
> 도와주신 덕분에 실전에 사용할 수 있게 되었습니다.
간단한 질문 2가지만 더 드립니다.
1. 최대수익대비 20%하락시 Trailing Stop(매수매도경우 2가지)
2. 9시 30분까지 차트에서 신호 없을 경우 1외가 옵션 양매도
감사합니다.