커뮤니티
문의 드립니다.
2014-05-09 02:27:33
221
글번호 74924
항상 친절하신 답변에 깊이 감사드립니다.
몇 가지 부탁드리고 싶습니다.
1.
제가 정하는 가격으로 진입하고, 청산은 샹들리에로 시스템이 처리하도록 하는 수식 부탁 드립니다.
즉, 가령 현재 Ibovespa 지수가 54650 이라고 할 때,
가격이 위로 가서 54740이 되면 한 틱 위인 54745에 매수주문이 나가도록 Stop-Limit 주문을 하게 하고,
가격이 아래로 가서 54575가 되면 한 틱 아래인 54570에 매도주문이 나가도록 Stop-Limit 주문을 하게 하고 싶습니다.
그렇게 해서 진입이 되고 나면, 샹들리에로 청산하게 하고자 합니다.
여기서, 제가 외부변수 값에 54740과 54575만 기입하면
(즉 시스템트레이딩 설정창에서, 변수 탭에서, 가령 제가
BuyP라는 외부변수값에 54740을 입력하고,
SellP라는 외부변수값에 54575를 입력하면)
나머지는 다 시스템이 처리해 주는 그런 수식을 부탁드립니다.
((샹들리에 청산 소스는 일반적이므로 그냥 "청산" 정도로만 표기해 주셔도 충분할 것 같습니다.
진입 부분을 어떻게 처리하면 좋을까가 우선적으로 궁금합니다))
2.
제가 일반주문창에서 시장가로 진입하면, 나머지는 시스템이 다 샹들리에 청산으로 처리해 주는 수식을 부탁드립니다.
즉 제가 차트에서 지표들을 모니터링 하고 있다가 매수 조건이 성립되면, 바로 일반주문 창에서 "매수주문"을 클릭해서 시장가로 매수진입하고, 그러면, 그 후에 나머지 부분(청산)은 시스템이 샹들리에 전략으로 해 주는 수식을 부탁드립니다.
(매도진입 ~ 청산도 마찬가지)
이 수식 전략 이름이 가령 수동진입&자동청산 전략이라고 할 때, 이 수동진입&자동청산 전략을 실행해 놓고 있다가, 저는 필요한 시점에서 바로 시장가 매수주문만 클릭하면, 시장가로 진입이 된 후, 나머지 청산은 시스템이 할 수 있도록 하는 수식이면 좋겠습니다.
이 경우, 예스랭귀지의 잔고함수들이 어떻게 사용될 수 있을지도 궁금합니다.
(잔고가 발생하면 이를 시스템이 인지해서 청산 모듈을 작동시킨다든지...)
또한 만일 이런 기능을 만드는 데에 스팟이 더 유용하다면 (가령 잔고 인식 등에서...) 스팟식으로 알려 주셔도 너무나 감사하겠습니다.
3.
추세선 함수를 이용하여 상승추세선 하락추세선을 그리는 경우,
맨 마지막 추세선만 굵기가 5로 되도록 하는 방법을 부탁드립니다.
가령, 화면에 최근의 상승추세선 하나, 최근의 하락추세선 하나 이렇게만 보이게 하는 경우,
그 둘 중에서
상승추세선이 더 나중에 생긴 것이라면
(즉 그 상승추세선의 오른 쪽 스윙로우가, 하락추세선의 오른 쪽 스윙하이보다 나중, 즉 더 최근에 생긴 경우)
이 상승추세선 굵기를 5로 하고
하락추세선은 굵기 1로 하고,
반대의 경우에는 반대로 하는 수식
부탁 드리겠습니다.
(야간 시장에서 24시를 지나가도 시간 전후가 잘 구분이 되도록 부탁드립니다)
(SLtime > SHtime, SLtime < SHtime 로 해 봤는데 잘 안 되었습니다)
대단히 감사합니다.
답변 1
예스스탁 예스스탁 답변
2014-05-09 09:38:18
안녕하세요
예스스탁입니다.
1.
시스템에서는 주문가격을 지정할수 없습니다.
주문가격은 시스템 트레이딩 설정창의 매매탭에서만 지정가능합니다.
매매가격에서 진입을 사용자가격설정으로 하시고
매수는 모든 타입을 신호가격+1틱, 매도는 모든타입을 신호가격-1틱으로 설정하고
적용하시면 됩니다.
input : BuyPrice(54740),SellPrice(54575),ATRP(10),ATRS(1.5);
if H < BuyPrice Then
buy("B",AtStop,BuyPrice);
if L > SellPrice Then
sell("S",AtStop,SellPrice);
if MarketPosition == 1 Then
ExitLong("bx",AtStop,highest(H,BarsSinceEntry)-ATR(ATRP)*ATRS);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,Lowest(L,BarsSinceEntry)+ATR(ATRP)*ATRS);
2.
아래식 참고하시기 바랍니다.
예스스팟은 사용자분이 식작성후 검증후에 사용하셔야 합니다.
스팟은 시뮬레이션이 되지 않고 모두 실제장에서 주문과 함께 테스트 되어야 하는 내용이 많습니다.
저희쪽에서 답변드리는 내용은 작성 가이드이므로 아래식 참고하셔서 수정보완해 사용하시기 바랍니다.
샹들리에와 같은 경우 ATR이라는 지표가 필요합니다. 차트의 기술적지표는 주기별로 값이 모두 다릅니다.
주기를 알수 없고 작성에 시간이 많이 투입되므로 해당부분은 사용자분이 직접 구현하셔야 합니다.
기본적으로 수동주문 후에 자동으로 손절,익절,트레일링스탑을 하는 식입니다,
스크립트 객체화면에서 객체는 계좌객체만 추가하시면 됩니다.
스크립트에 영문 업데이트가 게시판 금칙어라 Up*date로 중간에 *이 있으므로
제거하셔서 사용하셔야 합니다.
var Nth = 0;
var ItemCode = [];
var ItemObject = [];
var ItemHigh = [];
var Bnum;
function Main_OnStart()
{
Nth = 0;
Bnum = Account1.GetTheNumberOfBalances()
Main.MessageList("잔고종목수",Bnum);
if (Bnum > 0)
{
Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//1번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
}
//요청한 종목객체 수신되면
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목객체수신",MarketData.code);
//수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에
if (MarketData.code == ItemCode[Nth])
{
ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장
ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수)
Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemObject[Nth].code);
//순번은 1 증가
Nth = Nth+1;
//종목객체 수신완료되면 다음 종목 종목객체 요청
if (Bnum > 0)
{
//계좌의 잔고리스트에서 다음 순번 잔고 셋팅
Account1.SetBalanceIndex(Nth);
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//Nth번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
}
}
//종목객체 시세 업데이트
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*삭제
{
if (Nth == Bnum-1)
{
//편입된 종목수 만킄만 수행
for (var i = 0; i <= Nth; i++)
{
if (ItemObject[i].code == sItemCode && lUp*dateID == 20001)//*삭제
{
Main.MessageList("-----------------------------------------------");
Main.MessageList(ItemObject[i].code,"업데이트");
//잔고셋팅
Account1.SetBalanceItem(ItemObject[i].code,0);
//종목편입 이후의 최고가 계산
if (ItemObject[i].current > ItemHigh[i])
{
ItemHigh[i] = ItemObject[i].current;
}
//매수잔고
if (Account1.Balance.position == 2)
{
//현재가가 평균단가 대비 +1이상 수익나면 청산
if (ItemObject[i].current >= Account1.Balance.avgUnitCost+1)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제");
}
// 현재가가 평균단가 대비 1이상 손실나하면 청산
if (ItemObject[i].current <= Account1.Balance.avgUnitCost-1)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("손절청산 : ",ItemObject[i].code,"종목객체삭제");
}
//현재가가 평균단가 0.7포인트 이상 수익후 +0.5 수익 하락하면 청산
if (ItemHigh[i] >= Account1.Balance.avgUnitCost*1.08 &&
ItemObject[i].current <= Account1.Balance.avgUnitCost*1.05)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("TR청산 : ",ItemObject[i].code,"종목객체삭제");
}
}
//매도잔고
if (Account1.Balance.position == 1)
{
//현재가가 평균단가 대비1포인트이상 수익나면 청산
if (ItemObject[i].current <= Account1.Balance.avgUnitCost-1)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제");
}
// 현재가가 평균단가 대비 1이상 손실나면 청산
if (ItemObject[i].current >= Account1.Balance.avgUnitCost+1)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("손절청산 : ",ItemObject[i].code,"종목객체삭제");
}
//현재가가 평균단가 대비 0.7포인트 이상 수익 후 0.5까지 수익이 감소하면 청산
if (ItemHigh[i] <= Account1.Balance.avgUnitCost-0.7 &&
ItemObject[i].current <= Account1.Balance.avgUnitCost-0.5)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("TR청산 : ",ItemObject[i].code,"종목객체삭제");
}
}
}
}
}
}
3.
input : P(3);
var : TL1(0),TL2(0),tx1(0),tx2(0);
if SwingHigh(1,h,P,P,P*2+1) != -1 Then{
var1 = sdate[P];
var2 = sTime[P];
var3 = H[P];
var4 = var1[1];
var5 = var2[1];
var6 = var3[1];
if var6 > 0 Then{
TL_Delete(TL1);
#새로운 고점과 이전고점을 연결해 추세선 생성
TL1 = TL_New(var4,var5,var6,var1,var2,var3);
#추세선 우측 연장
TL_SetExtRight(TL1,true);
#추세선 색지정
TL_SetColor(TL1,CYAN);
#추세선 굵기지정
TL_SetSize(TL1,5);
TL_SetSize(TL2,1);
}
}
if SwingLow(1,L,P,P,P*2+1) != -1 Then{
var11 = sdate[P];
var12 = sTime[P];
var13 = L[P];
var14 = var11[1];
var15 = var12[1];
var16 = var13[1];
if var16 > 0 Then{
TL_Delete(TL2);
#새로운 저점과 이전저점을 연결해 추세선 생성
TL2 = TL_New(var14,var15,var16,var11,var12,var13);
#추세선 우측 연장
TL_SetExtRight(TL2,true);
#추세선 색지정
TL_SetColor(TL2,MAGENTA);
#추세선 굵기지정
TL_SetSize(TL2,5);
TL_SetSize(TL1,1);
}
}
즐거운 하루되세요
> 즐겁게 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 항상 친절하신 답변에 깊이 감사드립니다.
몇 가지 부탁드리고 싶습니다.
1.
제가 정하는 가격으로 진입하고, 청산은 샹들리에로 시스템이 처리하도록 하는 수식 부탁 드립니다.
즉, 가령 현재 Ibovespa 지수가 54650 이라고 할 때,
가격이 위로 가서 54740이 되면 한 틱 위인 54745에 매수주문이 나가도록 Stop-Limit 주문을 하게 하고,
가격이 아래로 가서 54575가 되면 한 틱 아래인 54570에 매도주문이 나가도록 Stop-Limit 주문을 하게 하고 싶습니다.
그렇게 해서 진입이 되고 나면, 샹들리에로 청산하게 하고자 합니다.
여기서, 제가 외부변수 값에 54740과 54575만 기입하면
(즉 시스템트레이딩 설정창에서, 변수 탭에서, 가령 제가
BuyP라는 외부변수값에 54740을 입력하고,
SellP라는 외부변수값에 54575를 입력하면)
나머지는 다 시스템이 처리해 주는 그런 수식을 부탁드립니다.
((샹들리에 청산 소스는 일반적이므로 그냥 "청산" 정도로만 표기해 주셔도 충분할 것 같습니다.
진입 부분을 어떻게 처리하면 좋을까가 우선적으로 궁금합니다))
2.
제가 일반주문창에서 시장가로 진입하면, 나머지는 시스템이 다 샹들리에 청산으로 처리해 주는 수식을 부탁드립니다.
즉 제가 차트에서 지표들을 모니터링 하고 있다가 매수 조건이 성립되면, 바로 일반주문 창에서 "매수주문"을 클릭해서 시장가로 매수진입하고, 그러면, 그 후에 나머지 부분(청산)은 시스템이 샹들리에 전략으로 해 주는 수식을 부탁드립니다.
(매도진입 ~ 청산도 마찬가지)
이 수식 전략 이름이 가령 수동진입&자동청산 전략이라고 할 때, 이 수동진입&자동청산 전략을 실행해 놓고 있다가, 저는 필요한 시점에서 바로 시장가 매수주문만 클릭하면, 시장가로 진입이 된 후, 나머지 청산은 시스템이 할 수 있도록 하는 수식이면 좋겠습니다.
이 경우, 예스랭귀지의 잔고함수들이 어떻게 사용될 수 있을지도 궁금합니다.
(잔고가 발생하면 이를 시스템이 인지해서 청산 모듈을 작동시킨다든지...)
또한 만일 이런 기능을 만드는 데에 스팟이 더 유용하다면 (가령 잔고 인식 등에서...) 스팟식으로 알려 주셔도 너무나 감사하겠습니다.
3.
추세선 함수를 이용하여 상승추세선 하락추세선을 그리는 경우,
맨 마지막 추세선만 굵기가 5로 되도록 하는 방법을 부탁드립니다.
가령, 화면에 최근의 상승추세선 하나, 최근의 하락추세선 하나 이렇게만 보이게 하는 경우,
그 둘 중에서
상승추세선이 더 나중에 생긴 것이라면
(즉 그 상승추세선의 오른 쪽 스윙로우가, 하락추세선의 오른 쪽 스윙하이보다 나중, 즉 더 최근에 생긴 경우)
이 상승추세선 굵기를 5로 하고
하락추세선은 굵기 1로 하고,
반대의 경우에는 반대로 하는 수식
부탁 드리겠습니다.
(야간 시장에서 24시를 지나가도 시간 전후가 잘 구분이 되도록 부탁드립니다)
(SLtime > SHtime, SLtime < SHtime 로 해 봤는데 잘 안 되었습니다)
대단히 감사합니다.
다음글
이전글