커뮤니티
수식 부탁드립니다.
2015-05-20 00:12:35
156
글번호 86202
안녕하세요? 매번 성의있고 친절한 답변 감사드립니다.
롤오버에 관한 질문을 드렸었는데 안된다는 답변을 드렸습니다.
정 하려면 예스스팟으로 넘어가야 되는데,
예스스팟은 너무 어려운 것 같아서 최대한 안넘어가고 해결했으면 좋겠습니다만...
다른 글들을 검색해보니 참조 종목을 쓰는 방식으로 하면 어떻게 될 것도 같습니다만...
예전의 글들을 검색해보니, 옵션의 가격대 여러개를 data1, data2 따위로 참조해서,
선물에서 진입하는 질문과 답변들이 있더군요.
기본적으로 예스랭귀지에서는 롤오버가 안되지만 편법으로 어떻게 되지 않을까요?
예를들어,
타종목 참조 기능이 있던데요.
해외선물 유로달러 5월과 6월 종목이 있습니다.
(5월 종목의 만기는 5월 25일)
그리고 25일에 강제 청산하기로 합니다.
거래시간의 하루 단위는 16시~16시 입니다.
이 때 6월 종목에서는 5월 종목의 데이터를 참조로 사용합니다.
그리고 5.22~25일 사이를 감시한 다음,
1.
만약에 5월 25일에 강제 청산을 할 때 손절(1회)로 강제 청산을 하게 되면,
6월 종목에서는 5월 26일 16시 부터 정상거래를 합니다.
2.
그리고 만약 손절이 아니라 그냥 특정 시간, 예를들어 14시에 강제청산을 하게되면,
(즉, 롤오버가 아니었다면 그냥 계속 보유했을 경우입니다.)
6월 종목에서 그 즉시 진입을 합니다.
3.
그리고 만약 2번의 경우 처럼 롤오버가 아니면 보유를 했을 경우인데,
5월 종목에서 25일 20시에 강제 청산한 다음 6월 종목에서 즉시 진입하려고 하는데,
그렇게 되면 손절이나 트레일링스탑에 걸리게 될 경우
(손절이나 트레일링스탑을 했다고 간주하고) 진입하지 않습니다.
그리고 그냥 6월 종목에서 26일 부터 새롭게 시작합니다.
4.
그리고 미보유 상태에서 새롭게 진입신호가 발생하는 경우입니다.
예를들어,
5월 25일 16시 시가를 기준으로 1.1 상승할 경우 매수진입하기로 했습니다.
그런데 한번 진입을 했다가 트레일링 스탑으로 청산이 되었습니다.
그래서 계좌 미보유 상태인데,
여기서 강제청산 기준으로 잡은 시간인 5월 25일 20시가 지나고
6월 종목에서 재진입 신호가 발생했습니다.
예를들어 5월 25일 16시 시가 100 에서 1.1 상승해서 110 이 매수 진입 가격인데,
6월 종목에서 110 이라는 가격에 도달한 것 입니다.
(120 에서 떨어지다가 110 이 되건 105 에서 올라서 110 이 되건 상관 없습니다.)
그렇다면 진입을 하고 싶습니다.
즉, 5월 종목의 25일 16시를 기준시가로 잡는 것입니다.
이 때,
25일 20시 이후 6월 종목을 보니 갭변동으로 이미 110 이 넘어간 상태라면 무시합니다.
즉, 가격이 110 을 만지면 즉시 진입하지만 그렇지 않으면 무시합니다.
5.
이렇듯 위의 질문들은 참조 종목의 데이터를 받아 쓰는 것인데요.
6월 종목에서 짠 수식에서 5월 종목에서 계좌가 손절을 했는지 어쩐지는 알 수 없겠지만,
어차피 5월 종목의 신호를 감시하면 이를 정확히 알 수 있기 때문에,
이런식으로 되지 않을까 해서 질문 올립니다.
아래는 예전에 부탁드려 짜주셨 식입니다.
input : N(1);
var : loss(0);
if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{
var1 = O;
Loss = 0;
}
if MarketPosition == 0 and CurrentContracts < CurrentContracts[1] and
(IsExitName("bx",1) == true or IsExitName("sx",1) == true) Then
loss = loss+1;
if loss < N then{
if MarketPosition == 0 and stime == 155000 Then
buy("b1",AtStop,round(NextBarOpen*1.01,3));
if MarketPosition == 0 and stime == 155000 Then
sell("s1",AtStop,round(NextBarOpen*0.99,3));
if MarketPosition == 0 and H < var1*1.01 Then
buy("b",AtStop,round(var1*1.01,3));
if MarketPosition == 0 and L > var1*0.99 Then
sell("s",AtStop,round(var1*0.99,3));
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,round(EntryPrice*0.99,3));
if MarketPosition == -1 Then
ExitShort("sx",AtStop,round(EntryPrice*1.01,3));
if MarketPosition == 1 Then{
HH = highest(h,BarsSinceEntry);
if HH >= EntryPrice*1.10 and HH < EntryPrice*1.20 Then
ExitLong("bx1",AtStop,HH-(HH-EntryPrice)*0.5);
if HH >= EntryPrice*1.20 and HH < EntryPrice*1.30 Then
ExitLong("bx2",AtStop,HH-(HH-EntryPrice)*0.6);
if HH >= EntryPrice*1.30 and HH < EntryPrice*2.00 Then
ExitLong("bx3",AtStop,HH-(HH-EntryPrice)*0.7);
if HH >= EntryPrice*2.00 Then
ExitLong("bx4",AtStop,HH*0.9);
}
답변 1
예스스탁 예스스탁 답변
2015-05-20 09:43:16
안녕하세요
예스스탁입니다.
롤오버부분은 차트에 적용되는 시스템에서는 해결을 할수가 없습니다.
가능한 방법이 있다면 이전에 답변을 드렸을 것입니다.
올리신 내용으로도 가능한 부분이 아닙니다.
도움을 드리지 못해 죄송합니다.
즐거운 하루되세요
> spek 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
>
안녕하세요? 매번 성의있고 친절한 답변 감사드립니다.
롤오버에 관한 질문을 드렸었는데 안된다는 답변을 드렸습니다.
정 하려면 예스스팟으로 넘어가야 되는데,
예스스팟은 너무 어려운 것 같아서 최대한 안넘어가고 해결했으면 좋겠습니다만...
다른 글들을 검색해보니 참조 종목을 쓰는 방식으로 하면 어떻게 될 것도 같습니다만...
예전의 글들을 검색해보니, 옵션의 가격대 여러개를 data1, data2 따위로 참조해서,
선물에서 진입하는 질문과 답변들이 있더군요.
기본적으로 예스랭귀지에서는 롤오버가 안되지만 편법으로 어떻게 되지 않을까요?
예를들어,
타종목 참조 기능이 있던데요.
해외선물 유로달러 5월과 6월 종목이 있습니다.
(5월 종목의 만기는 5월 25일)
그리고 25일에 강제 청산하기로 합니다.
거래시간의 하루 단위는 16시~16시 입니다.
이 때 6월 종목에서는 5월 종목의 데이터를 참조로 사용합니다.
그리고 5.22~25일 사이를 감시한 다음,
1.
만약에 5월 25일에 강제 청산을 할 때 손절(1회)로 강제 청산을 하게 되면,
6월 종목에서는 5월 26일 16시 부터 정상거래를 합니다.
2.
그리고 만약 손절이 아니라 그냥 특정 시간, 예를들어 14시에 강제청산을 하게되면,
(즉, 롤오버가 아니었다면 그냥 계속 보유했을 경우입니다.)
6월 종목에서 그 즉시 진입을 합니다.
3.
그리고 만약 2번의 경우 처럼 롤오버가 아니면 보유를 했을 경우인데,
5월 종목에서 25일 20시에 강제 청산한 다음 6월 종목에서 즉시 진입하려고 하는데,
그렇게 되면 손절이나 트레일링스탑에 걸리게 될 경우
(손절이나 트레일링스탑을 했다고 간주하고) 진입하지 않습니다.
그리고 그냥 6월 종목에서 26일 부터 새롭게 시작합니다.
4.
그리고 미보유 상태에서 새롭게 진입신호가 발생하는 경우입니다.
예를들어,
5월 25일 16시 시가를 기준으로 1.1 상승할 경우 매수진입하기로 했습니다.
그런데 한번 진입을 했다가 트레일링 스탑으로 청산이 되었습니다.
그래서 계좌 미보유 상태인데,
여기서 강제청산 기준으로 잡은 시간인 5월 25일 20시가 지나고
6월 종목에서 재진입 신호가 발생했습니다.
예를들어 5월 25일 16시 시가 100 에서 1.1 상승해서 110 이 매수 진입 가격인데,
6월 종목에서 110 이라는 가격에 도달한 것 입니다.
(120 에서 떨어지다가 110 이 되건 105 에서 올라서 110 이 되건 상관 없습니다.)
그렇다면 진입을 하고 싶습니다.
즉, 5월 종목의 25일 16시를 기준시가로 잡는 것입니다.
이 때,
25일 20시 이후 6월 종목을 보니 갭변동으로 이미 110 이 넘어간 상태라면 무시합니다.
즉, 가격이 110 을 만지면 즉시 진입하지만 그렇지 않으면 무시합니다.
5.
이렇듯 위의 질문들은 참조 종목의 데이터를 받아 쓰는 것인데요.
6월 종목에서 짠 수식에서 5월 종목에서 계좌가 손절을 했는지 어쩐지는 알 수 없겠지만,
어차피 5월 종목의 신호를 감시하면 이를 정확히 알 수 있기 때문에,
이런식으로 되지 않을까 해서 질문 올립니다.
아래는 예전에 부탁드려 짜주셨 식입니다.
input : N(1);
var : loss(0);
if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{
var1 = O;
Loss = 0;
}
if MarketPosition == 0 and CurrentContracts < CurrentContracts[1] and
(IsExitName("bx",1) == true or IsExitName("sx",1) == true) Then
loss = loss+1;
if loss < N then{
if MarketPosition == 0 and stime == 155000 Then
buy("b1",AtStop,round(NextBarOpen*1.01,3));
if MarketPosition == 0 and stime == 155000 Then
sell("s1",AtStop,round(NextBarOpen*0.99,3));
if MarketPosition == 0 and H < var1*1.01 Then
buy("b",AtStop,round(var1*1.01,3));
if MarketPosition == 0 and L > var1*0.99 Then
sell("s",AtStop,round(var1*0.99,3));
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,round(EntryPrice*0.99,3));
if MarketPosition == -1 Then
ExitShort("sx",AtStop,round(EntryPrice*1.01,3));
if MarketPosition == 1 Then{
HH = highest(h,BarsSinceEntry);
if HH >= EntryPrice*1.10 and HH < EntryPrice*1.20 Then
ExitLong("bx1",AtStop,HH-(HH-EntryPrice)*0.5);
if HH >= EntryPrice*1.20 and HH < EntryPrice*1.30 Then
ExitLong("bx2",AtStop,HH-(HH-EntryPrice)*0.6);
if HH >= EntryPrice*1.30 and HH < EntryPrice*2.00 Then
ExitLong("bx3",AtStop,HH-(HH-EntryPrice)*0.7);
if HH >= EntryPrice*2.00 Then
ExitLong("bx4",AtStop,HH*0.9);
}
다음글