안녕하십니까.
실매매 전략에 다음의 청산 코드를 넣어보았는데 제대로 동작하지 않아서 문의드립니다.
진입 후 n봉이 지난 후에, 전체 봉에서 양봉이나 음봉의 비율이 일정 이하가 되면 청산하겠다는 의도입니다.
이하 코드로 실제 구동해보면 진입 후 7개 봉이 아니라 3개 봉만 지나도 청산이 되어 버립니다.
어디가 잘못된 것인지 점검을 부탁드립니다.
input : n(7), A(41); // 청산1 - 7봉 이후 양/음봉 비율이 41% 이상이면 청산
var : Pn(0), Nn(0);
if marketposition <> 0 then {
if O < C then Pn = Pn + 1;
if O > C then Nn = Nn + 1;
if BarsSinceEntry >= n then {
if Pn/(Pn+Nn)*100 < A then exitlong("el");
if Nn/(Pn+Nn)*100 < A then exitshort("es");
}
}
if marketposition == 0 Then {
Pn = 0;
Nn = 0;
}
답변 1
예스스탁
예스스탁 답변
2021-02-16 14:53:44
안녕하세요
예스스탁입니다.
작성하신 수식이 매수에서 매도로 스위칭되거나 매도에서 매수로 스위칭이 되면 초기화가 되지 않습니다.
1
아래와 같이 countif함수를 이용해 진입이후 양봉과 음봉 갯수 카운트 해서 사용하시거나
input : n(7), A(41);
var : Pn(0), Nn(0);
if marketposition <> 0 then
{
Pn = CountIf(C>O,BarsSinceEntry);
Nn = CountIf(C<O,BarsSinceEntry);
if BarsSinceEntry >= n then
{
if Pn/(Pn+Nn)*100 < A then exitlong("el");
if Nn/(Pn+Nn)*100 < A then exitshort("es");
}
}
2
포지션 변경시 0으로 초기화되게 작성해 주시면 됩니다.
input : n(7), A(41);
var : Pn(0), Nn(0);
if marketposition <> 0 then
{
if MarketPosition != MarketPosition[1] Then
{
Pn = 0;
Nn = 0;
}
if O < C then Pn = Pn + 1;
if O > C then Nn = Nn + 1;
if BarsSinceEntry >= n then
{
if Pn/(Pn+Nn)*100 < A then exitlong("el");
if Nn/(Pn+Nn)*100 < A then exitshort("es");
}
}
즐거운 하루되세요
> 좋은밤 님이 쓴 글입니다.
> 제목 : 청산 알고리즘인데 점검 부탁드립니다.
> 안녕하십니까.
실매매 전략에 다음의 청산 코드를 넣어보았는데 제대로 동작하지 않아서 문의드립니다.
진입 후 n봉이 지난 후에, 전체 봉에서 양봉이나 음봉의 비율이 일정 이하가 되면 청산하겠다는 의도입니다.
이하 코드로 실제 구동해보면 진입 후 7개 봉이 아니라 3개 봉만 지나도 청산이 되어 버립니다.
어디가 잘못된 것인지 점검을 부탁드립니다.
input : n(7), A(41); // 청산1 - 7봉 이후 양/음봉 비율이 41% 이상이면 청산
var : Pn(0), Nn(0);
if marketposition <> 0 then {
if O < C then Pn = Pn + 1;
if O > C then Nn = Nn + 1;
if BarsSinceEntry >= n then {
if Pn/(Pn+Nn)*100 < A then exitlong("el");
if Nn/(Pn+Nn)*100 < A then exitshort("es");
}
}
if marketposition == 0 Then {
Pn = 0;
Nn = 0;
}