커뮤니티
문의드립니다
2015-07-18 01:57:07
157
글번호 88616
이런질문 드려도 될지모르겠네요 그래도 한국에서 유일하게 시스템트레이딩의 전문적인 답변을 받을수있는곳인만큼 염치없이 질문을올립니다 성공하면 한우 한보따리사들고 찾아뵐꼐요 ㅠㅠ
수많은 답변중에 한가지만 골라보아서 해석해보았고 주석을 달았습니다
바쁘신만큼 전체를 훑어볼 시간은 없으실것같아 특별히 궁금한점만 ★를했습니다.
무턱대고 해석을 한 이후 질문자의 의도와 대조해가며 마저 해석을하였고 그래도 궁금점이 풀리지않은경우에만 별표를 쳤습니다.
--------------
아래의 조건에 맞는 수식 작성 부탁드립니다.
-목표수익 10틱
-당일시가 기준으로 시가보다 높으면 매수
낮으면 매도.
-매수 또는 매도 진입후 목표수익 발생하면 같은방향 진입금지.
# 매수 진입후 목표 수익 청산후 매수 진입금지 하며,
매도 조건 만족시 매도 진입 실행.
#매도 진입일 경우도 위와 같음.
-만약에 매수 진입 후 목표수익에 도달하지 못하고,
하락할 경우 매수 진입후 최고가 대비 20% 하락하면 청산하고.
처음 매수 진입 조건이 부합할 경우 재진입.
#매도일 경우도 위와 같음.
-운영시간 07:00 ~ 익일 05:00
-05:00 이후 모든 방향 진입금지, 장 종료
---이하답변----
var : entry(0);
if Bdate != Bdate[1] Then{
var1 = O;
entry = 0;
}
/// ★★Bdate가 뭔지 모르겠습니다 date는 봉의 끝날짜이고 Sdate는 봉의 시작날짜인데..★★
Bdate가 1봉전 Bdate와 같지않을때
var1 에 시가저장
엔트리에 0을 저장
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
/// 포지션을 보유하고있을때 포지션이 직전포지션과 같지않을때
엔트리 값은 엔트리+1이된다.
★위 식에서는 직전포지션을 [1]로 표현했고 아래식에서는 (1)로 표현했는데 아무거나 써도상관없는건지( &&과 and의 차이처럼 의미는 같고 표현만다른건지) 혹은 두개의 뜻이 다른건지궁금합니다★
Condition1 = entry >= 1 and MarketPosition == 0 and MarketPosition(1) == 1 and IsExitName("StopProfitTarget",1) == true;
Condition2 = entry >= 1 and MarketPosition == 0 and MarketPosition(1) == -1 and IsExitName("StopProfitTarget",1) == true;
///Condition1만 해석해보겠습니다
엔트리값이 1 이상이고 현 포지션이 없고, 직전포지션은 매수였을때 최근 청산명이 StopProfitTarget 즉 목표수익실현 이면 트루갑 출력
★엔트리값이 +1이 되는경우는 포지션을 보유하고있을때(MarketPosition != 0)가 아닌가요?? 그러면 해당식 바로 뒤에이어지는 마켓포지션==0 과는 반대되는경우가 되는데 왜이렇게 된건지 궁금합니다.
아니면 엔트리값에 +1을 해주는것은 진행과정에서 일어나는것이고, 한번저장되었으면 포지션 청산과는 관계없이 리셋이 안되는것인가요?? 그렇다면 조건만족시마다 +1을 계속더하니 엔트리값은 무한히 높아지는것으로 이해가됩니다. 그러면 엔트리+1은 무슨의미가 있는건지 이해가되지않습니다 ★
if stime >= 070000 or stime < 050000 then{
if MarketPosition <= 0 and C > var1 and Condition1 == false Then
buy("b");
if MarketPosition >= 0 and C < var1 and Condition2 == false Then
sell("s");
}
///오전7시~오전5시사이에
보유포지션이 없고 봉종가가 var1보다 크고 컨디션1이 거짓일때 매수
★★왜 컨디션2가 트루일때 매수하는게아니고 컨디션1이 거짓이여야 매수진입을 하는건지 궁금합니다. 거짓값은 저 많은조건중 하나만 만족하지않아도 거짓값이 출력되지않나요?
매도부분은생략
if MarketPosition == 1 Then
exitlong("bx",AtStop,highest(H,BarsSinceEntry)*0.80);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,highest(H,BarsSinceEntry)*1.20);
/// 매수포지션일때 진입이후 최고가에서 20%떨어지면 청산
매도포지션일때 생략
SetStopProfittarget(PriceScale*50,PointStop);
/// 50틱일때 목표수익청산
★질문자께서는 10틱일때 목표수익 청산을 요구하셨는데 왜50인지 궁금합니다 프라이스스케일은 어떤종목에서든 1틱을 뜻하는말로 알고있었습니다(YLHelp에 나온 PriceScale 설명 '해당 종목의 호가 단위, 틱' ★
if stime == 050000 or (stime > 050000 and stime[1] < 050000) Then{
ExitLong();
ExitShort();
}
//지금시각이 오전5시 혹은 오전5시 이상이고 직전 시간이 오전5시 이하였을때 청산
★굳이 or을붙여 긴 수식을 붙인이유는 5시에 봉 데이터가 안들어올경우를 대비하는건지?)
별표친부분만 답변 달아주시면 감사하겠습니다
숙련된 답변자분의 눈으로는 황당한질문처럼 보이겠지만 아직 멋모르는 왕초보의 기특한호기심으로 봐주셨으면 감사하겠습니다^^;
다시한번 언제나 진심으로 감사드립니다.
답변 1
예스스탁 예스스탁 답변
2015-07-20 11:04:42
안녕하세요
예스스탁입니다.
1
Bdate는 영업일 입니다.
해외선물등 24시간 거래되는 종목들은 보통 0시가 해당 종목의
새로운 날이 시작하는 시간이 아닙니다.
각 상품의 거래소에서 새로운 날이 시작하는 시간이 따로 있고
그 시간으로 기준으로 날짜를 반영해 주는게 bdate입니다.
2.
랭귀지에서 [1]은 한봉전 입니다.
모든 함수, 데이터, 변수뒤에 []를 붙이면 이전봉의 값입니다.
그러므로 MarketPosition[1]은 직전포지션이 아닌 한봉전의 포지션상태를 가져오는 것입니다.
MarketPosition != 0 and MarketPosition != MarketPosition[1]
현재봉 포지션 상태은 0이 아니고(매수나 매도)
현재봉 포지션 상태와 전봉의 포지션상태가 서로 다르다 라는 내용입니다.
즉 전봉은 무포지션이었다가 현재봉에 매수나 매도포지션을 변경되었거나
전봉은 매도포지션이었다가 현재봉 매수포지션으로 변경되었거나
전봉은 매수포지션이었다가 현재봉 매도포짓녀으로 변경된 상황을
표현한 것입니다.
직전포지션, 전전포지션을 지정할때는
MarketPosition(1),MarketPosition(2)로 표현합니다.
3.
entry는 당일 진입횟수를 계산해 저장한 변수입니다.
진입이 발생할때만 1씩 증가를 합니다.
변수는 값이 한번 저장되면 그 값이 유지가 됩니다.
즉 당일 새로운 포지션이로 진입할때마다 1씩 증가하고
영업일이 변경되면 0으로 초기화 합니다.
4
Condition1 = entry >= 1 and MarketPosition == 0 and MarketPosition(1) == 1 and IsExitName("StopProfitTarget",1) == true;
Condition2 = entry >= 1 and MarketPosition == 0 and MarketPosition(1) == -1 and IsExitName("StopProfitTarget",1) == true;
condition1은 진입이 한번이상 발생하고 현재 포지션이 없고 직전거래가 매수포지션이고 목표수익으로 청산되었으면
true아니면 false입니다.
condition2는 진입이 한번이상 발생하고 현재 포지션이 없고 직전거래가 매도포지션이고 목표수익으로 청산되었으면
true아니면 false입니다.
if stime >= 070000 or stime < 050000 then{
if MarketPosition <= 0 and C > var1 and Condition1 == false Then
buy("b");
if MarketPosition >= 0 and C < var1 and Condition2 == false Then
sell("s");
}
진입이 목표수익을 청산되었으면 동일포지션으로 들어가지 않게 하기 위한 내용입니다.
그러므로 condition1이나 condition2가 false일때만 진입을 하게 만든식입니다.
5.
해당 부분은 아마 사용자가 따로 전화를 통해서나
청산내용등을 따로 변경하신 것이 반영되었을 것으로 생각됩니다.
priceScale이 1틱이고
10틱이면 priceScale*10.
50틱이면 priceScale*50
으로 지정하시면 됩니다.
6.
if stime == 050000 or (stime > 050000 and stime[1] < 050000) Then{
ExitLong();
ExitShort();
}
수식에서 시간은 봉의 데이터로 판단합니다.
만약 5시로 지정했는데 거래가 없어 5시봉이 없으면
if stime == 050000 then으로는 청산이 되지 않습니다.
그러므로 (stime > 050000 and stime[1] < 050000) 같은 조건을 주어
5시봉이 없으면 그다음봉에서 청산하라는 내용을 추가한 것입니다.
즐거운 하루되세요
> 부동여산 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 이런질문 드려도 될지모르겠네요 그래도 한국에서 유일하게 시스템트레이딩의 전문적인 답변을 받을수있는곳인만큼 염치없이 질문을올립니다 성공하면 한우 한보따리사들고 찾아뵐꼐요 ㅠㅠ
수많은 답변중에 한가지만 골라보아서 해석해보았고 주석을 달았습니다
바쁘신만큼 전체를 훑어볼 시간은 없으실것같아 특별히 궁금한점만 ★를했습니다.
무턱대고 해석을 한 이후 질문자의 의도와 대조해가며 마저 해석을하였고 그래도 궁금점이 풀리지않은경우에만 별표를 쳤습니다.
--------------
아래의 조건에 맞는 수식 작성 부탁드립니다.
-목표수익 10틱
-당일시가 기준으로 시가보다 높으면 매수
낮으면 매도.
-매수 또는 매도 진입후 목표수익 발생하면 같은방향 진입금지.
# 매수 진입후 목표 수익 청산후 매수 진입금지 하며,
매도 조건 만족시 매도 진입 실행.
#매도 진입일 경우도 위와 같음.
-만약에 매수 진입 후 목표수익에 도달하지 못하고,
하락할 경우 매수 진입후 최고가 대비 20% 하락하면 청산하고.
처음 매수 진입 조건이 부합할 경우 재진입.
#매도일 경우도 위와 같음.
-운영시간 07:00 ~ 익일 05:00
-05:00 이후 모든 방향 진입금지, 장 종료
---이하답변----
var : entry(0);
if Bdate != Bdate[1] Then{
var1 = O;
entry = 0;
}
/// ★★Bdate가 뭔지 모르겠습니다 date는 봉의 끝날짜이고 Sdate는 봉의 시작날짜인데..★★
Bdate가 1봉전 Bdate와 같지않을때
var1 에 시가저장
엔트리에 0을 저장
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
/// 포지션을 보유하고있을때 포지션이 직전포지션과 같지않을때
엔트리 값은 엔트리+1이된다.
★위 식에서는 직전포지션을 [1]로 표현했고 아래식에서는 (1)로 표현했는데 아무거나 써도상관없는건지( &&과 and의 차이처럼 의미는 같고 표현만다른건지) 혹은 두개의 뜻이 다른건지궁금합니다★
Condition1 = entry >= 1 and MarketPosition == 0 and MarketPosition(1) == 1 and IsExitName("StopProfitTarget",1) == true;
Condition2 = entry >= 1 and MarketPosition == 0 and MarketPosition(1) == -1 and IsExitName("StopProfitTarget",1) == true;
///Condition1만 해석해보겠습니다
엔트리값이 1 이상이고 현 포지션이 없고, 직전포지션은 매수였을때 최근 청산명이 StopProfitTarget 즉 목표수익실현 이면 트루갑 출력
★엔트리값이 +1이 되는경우는 포지션을 보유하고있을때(MarketPosition != 0)가 아닌가요?? 그러면 해당식 바로 뒤에이어지는 마켓포지션==0 과는 반대되는경우가 되는데 왜이렇게 된건지 궁금합니다.
아니면 엔트리값에 +1을 해주는것은 진행과정에서 일어나는것이고, 한번저장되었으면 포지션 청산과는 관계없이 리셋이 안되는것인가요?? 그렇다면 조건만족시마다 +1을 계속더하니 엔트리값은 무한히 높아지는것으로 이해가됩니다. 그러면 엔트리+1은 무슨의미가 있는건지 이해가되지않습니다 ★
if stime >= 070000 or stime < 050000 then{
if MarketPosition <= 0 and C > var1 and Condition1 == false Then
buy("b");
if MarketPosition >= 0 and C < var1 and Condition2 == false Then
sell("s");
}
///오전7시~오전5시사이에
보유포지션이 없고 봉종가가 var1보다 크고 컨디션1이 거짓일때 매수
★★왜 컨디션2가 트루일때 매수하는게아니고 컨디션1이 거짓이여야 매수진입을 하는건지 궁금합니다. 거짓값은 저 많은조건중 하나만 만족하지않아도 거짓값이 출력되지않나요?
매도부분은생략
if MarketPosition == 1 Then
exitlong("bx",AtStop,highest(H,BarsSinceEntry)*0.80);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,highest(H,BarsSinceEntry)*1.20);
/// 매수포지션일때 진입이후 최고가에서 20%떨어지면 청산
매도포지션일때 생략
SetStopProfittarget(PriceScale*50,PointStop);
/// 50틱일때 목표수익청산
★질문자께서는 10틱일때 목표수익 청산을 요구하셨는데 왜50인지 궁금합니다 프라이스스케일은 어떤종목에서든 1틱을 뜻하는말로 알고있었습니다(YLHelp에 나온 PriceScale 설명 '해당 종목의 호가 단위, 틱' ★
if stime == 050000 or (stime > 050000 and stime[1] < 050000) Then{
ExitLong();
ExitShort();
}
//지금시각이 오전5시 혹은 오전5시 이상이고 직전 시간이 오전5시 이하였을때 청산
★굳이 or을붙여 긴 수식을 붙인이유는 5시에 봉 데이터가 안들어올경우를 대비하는건지?)
별표친부분만 답변 달아주시면 감사하겠습니다
숙련된 답변자분의 눈으로는 황당한질문처럼 보이겠지만 아직 멋모르는 왕초보의 기특한호기심으로 봐주셨으면 감사하겠습니다^^;
다시한번 언제나 진심으로 감사드립니다.