스탠리 크롤은 그의 책
이 문서에서 공유하는 전략은 이 원리에 기반합니다. 이동 평균선은 트렌드의 방향으로 사용됩니다. 폐쇄 가격, 가장 높은 가격 및 가장 낮은 가격 사이의 관계는 포지션을 여는 신호로 사용됩니다. 가격 트렌드가 크게 변하지 않았다는 전제 하에, 비율에 따라 대량으로 적극적으로 이익을 취합니다.
거래 세계에서 오래된 말이 있습니다: "모든 사람이 포지션을 어떻게 열어야하는지 알고, 프로만이 포지션을 어떻게 닫아야하는지 알고 있습니다". 이 단어들이 암시하는 바와 같이, 시장에서 어떻게 빠져나가는 것이 거래의 핵심 요소입니다. 왜냐하면 포지션을 열 때 시장 트렌드가 시작되는지 판단할 필요가 있기 때문입니다. 그러나 시장에 뛰어들면 트렌드가 돌고 있는지 아닌지 판단해야하며 항상 위험을 통제해야합니다. 많은 거래자가
간단히 말해서, 포지션을 닫는 것은 두 가지 상황 이외에 아무것도 아닙니다: 수익을 취하고 손실을 중지하십시오. 예를 들어, 운이 좋다면, 가격은 구매 후 상승하기 시작합니다. 이 시점에서, 당신은 이익을 취하는 문제를 고려해야합니다. 그렇지 않으면 우리는 단지
통계적 관점에서, 대부분의 손실 포지션은 미래 시장에서 비용 가격으로 돌아갈 것입니다. 그러나, 큰 역동 트렌드의 작은 확률을 발견하면 이전 모든 이익 또는 심지어 전체 펀드를 잃을 수 있습니다. 따라서, 우리의 소매 투자자에게, 우리는 큰 이익을 얻을 수 있습니다. 우리는 작은 이익을 얻을 수 있습니다; 우리는 작은 손실을 수행 할 수 있습니다, 그러나 우리는 결코 큰 돈을 잃을 수 없습니다. 한마디로: 손실을 멈추는 것은 당신을 살아있게하고 이익을 얻는 것은 당신을 더 잘 살게합니다.
직관적으로 수익을 취할 때, 시장 가격 움직임의 큰 파동이 발생할 수 있으며, 우리는 그 중 작은 금액만을 벌 수 있습니다. 실패한 거래는 아니지만, 마음가짐에서 일종의 후회가있을 것입니다. 따라서이 전략은 다단계 수익을 취하는 방법을 사용할 것입니다. 즉, 부동의 이익이 5%에 도달하면, 첫 번째 레벨의 활성 수익 모드가 활성화됩니다. 부동의 이익의 가장 높은 지점에서 100%를 철수하면, 수익을 취하고 닫을 수 있습니다. 부동의 이익이 10%에 도달하면, 두 번째 레벨의 활성 수익 모드가 활성화됩니다. 부동의 이익의 가장 높은 지점에서 50%를 철수하면, 수익을 취하고 닫을 수 있습니다. 부동의 이익이 20%에 도달하면, 세 단계의 활성 수익 취지는 활성화됩니다. 부동의 이익이 가장 높은 지점에서 20%를 철수하면, 부동의 수익 모드가 활성화됩니다. 이 전략은 큰 수익을 얻는 방법일 뿐 아니라, 부동의 수익이 증가 할 때만 작동합니다.
상단 레일을 정의합니다.
하부 레일을 정의합니다.
이동 평균을 정의합니다.
오픈된 긴 포지션: 닫기 가격은 상위 레일보다 높고 상위 레일은 이동 평균보다 높습니다.
코트 포지션 오픈: 폐쇄 가격은 하부 레일보다 낮고 하부 레일은 이동 평균보다 작습니다.
긴 포지션 종료: 종료 가격은 하위 트랙보다 낮거나 종료 가격은 이동 평균보다 낮습니다.
마이너 포지션 클로즈: 클로즈 가격은 상부 레일보다 높거나 클로즈 가격은 이동 평균보다 높습니다.
레벨 1 긴 포지션 취득: 포지션 개척 후 가장 높은 가격은 개시 가격 곱하기 첫 번째 수준의 시작 수익보다 높거나 같으며, 가장 낮은 가격은 포지션 개척 후 가장 높은 가격 빼기 부동 수익 곱하기 첫 번째 레벨 취득 수익 트리거 값보다 낮거나 같습니다.
레벨 2 긴 포지션 영업 수익: 포지션 개척 후 가장 높은 가격은 개척 가격 곱하기 두 번째 수준의 영업 시작 가격보다 높거나 같으며, 가장 낮은 가격은 포지션 개척 후 가장 높은 가격 미제 변동 수익 곱하기 두 번째 레벨 영업 수익 트리거 값보다 낮거나 같습니다.
레벨 3 긴 포지션에서 수익을 얻는다: 포지션을 열고 나서 가장 높은 가격은 열기 가격 곱하기 세 번째 레벨의 수익 시작 값보다 높거나 같으며, 가장 낮은 가격은 포지션을 열고 나서 가장 높은 가격보다 낮거나 같고, 변동 수익을 빼고 세 번째 레벨의 수익을 취하는 트리거 값으로 곱하면
레벨 1 단위 포지션 영업이익: 포지션 개척 후 가장 낮은 가격은 개척 가격 곱하기 첫 번째 수준의 영업이익 시작 값보다 작거나 같으며, 가장 높은 가격은 포지션 개척 후 가장 낮은 가격 더하기 변동 수익 곱하기 첫 번째 레벨 영업이익 시작 값보다 크거나 같습니다.
레벨 2 단위 포지션 영업이익: 포지션 개척 후 가장 낮은 가격은 개척 가격 곱하기 두 번째 수준의 영업 시작 가격보다 작거나 같으며 가장 높은 가격은 포지션 개척 후 가장 낮은 가격 더하기 변동 수익 곱하기 두 번째 레벨 영업이익 트리거 값보다 크거나 같습니다.
레벨 3 단위 포지션 취득: 포지션 개척 후 가장 낮은 가격은 개척 가격 곱하기 세 번째 수준의 시작 수익보다 작거나 같으며 가장 높은 가격은 포지션 개척 후 가장 낮은 가격 더하기 변동 수익 곱하기 세 번째 레벨 취득 트리거 값보다 크거나 같습니다.
긴 포지션 스톱 로스: 종료 가격은 오픈 가격 곱하기 스톱 로스 인수보다 작거나 같습니다.
쇼트 포지션 스톱 로스: 종료 가격은 시작 가격 곱하기 스톱 로스 인수보다 작거나 같습니다.
위의 전략 논리를 바탕으로 FMZ 퀀트 플랫폼에서 이 전략을 구현할 수 있습니다.fmz.com> 로그인 > 대시보드 > 전략 라이브러리 > 새로운 전략 > 오른쪽 상단쪽의 드롭다운 메뉴를 클릭하여 내 언어를 선택하여 전략을 작성하기 시작하고 아래 코드에 있는 댓글에 주의를 기울일 수 있습니다.
첫째, 전략에서 사용해야 하는 매개 변수: 평균 라인 길이, 스톱 손실 범위, 수익 매개 변수 등은 모두 테스트 디버깅과 최적화를 촉진하기 위해 외부 매개 변수로 정의됩니다.
/ / Define parameters
LENGTH := 100; // moving average parameter
STOP_LOSS := 3; // Stop Loss range
// Define the take profit parameter
STARTPER1 := 5; // Level 1 tracking take profit, start from profit reaches 5%
STOPPER1 := 100; // Level 1 tracking take profit, profit retracement 100% triggers it
STARTPER2 := 10; // Level 2 tracking take profit, start from profit reaches 10%
STOPPER2 := 50; // Level 2 tracking take profit, profit retracement 50% trigger it
STARTPER3 := 20; // Level 3 tracking take profit, start from profit reaches 20%
STOPPER3 := 20; // Level 3 tracking take profit, profit retracement 20% trigger
다음으로, 오늘의 가격과 어제의 가격, 그리고 어제의 가격 변동에 기초한 가격 범위를 설정합니다. 이 가격 범위와 이동 평균과의 상대적 위치 관계를 통해, 구매 및 판매 오픈 포지션 신호가 잘 추적 될뿐만 아니라 충격 기간에 오픈 포지션의 수와 철수의 규모를 줄일 수 있습니다.
/ / Define the upper and lower intervals
NN := BARSLAST(DATE <> REF(DATE, 1)) + 1; // current number of cycles
TODAY_OPEN := VALUEWHEN(NN = 1, O); // Opening price of the day
TODAY_HIGH := HHV(H, NN); // The highest price of the day
TODAY_LOW := LLV(L, NN); // lowest price of the day
YESTERDAY_HIGH := REF(TODAY_HIGH, NN); // Yesterday's highest price
YESTERDAY_LOW := REF(TODAY_LOW, NN); // yesterday's lowest price
BAND := YESTERDAY_HIGH - YESTERDAY_LOW; // Yesterday amplitude
UPPERLINE : TODAY_OPEN + BAND; // upper line
LOWERLINE : TODAY_OPEN - BAND; // lower line
MYMA:MA(CLOSE, LENGTH); // Moving average
다음으로, 그것은 포지션을 열고 닫는 논리 코드입니다. 닫기 가격이 상부 레일보다 크고 상부 레일은 이동 평균보다 크면 긴 포지션을 열고 닫기 가격이 하위 레일보다 낮고 하위 레일은 이동 평균보다 작을 때 짧은 포지션을 열고 닫기 포지션 조건은 오픈 포지션 조건과 바로 반대입니다. 닫기 가격이 하위 레일보다 작거나 닫기 가격이 이동 평균보다 작을 때 긴 포지션을 닫습니다. 닫기 가격이 상부 레일보다 크거나 닫기 가격이 이동 평균보다 크면 짧은 포지션을 닫습니다.
// open the position
C > UPPERLINE AND UPPERLINE > MYMA, BK; // Open long position
C < LOWERLINE AND LOWERLINE < MYMA, SK; // Open short position
// close the position
C < LOWERLINE OR C < MYMA, SP; // Close long position
C > UPPERLINE OR C > MYMA, BP; // Close short position
마지막으로, 우리는 이 기사에서 언급 한 스톱 로스 및 취리 부분입니다. 이윤을 취하기 위해 긴 위치 또는 짧은 위치 여부에 관계없이 세 단계로 나뉘어 있습니다. 각 단계는 현재 시장 가격 변동과 수익성에 따라 자동으로 조정됩니다. 이 조정은 외부 매개 변수에 설정되어 있으며, 다른 시장 조건과 품종 상태에 따라 세밀한 조정을 수행 할 수 있습니다.
스톱 손실은 또한 우리가 고려해야 할 전략의 일부입니다. 왜냐하면 어떤 포지션을 개설함으로써 돈을 벌 수 없기 때문입니다. 때로는 시장이 우리의 기대에 반대하므로 스톱 손실은 절대적으로 필요합니다. 이 기사의 스톱 손실은 간단하고 폭력적입니다. 즉, 부동 손실이 특정 수준에 도달하면 모든 포지션은 닫힐 것입니다.
// long position take profit
BKHIGH >= BKPRICE * (1 + 0.01 * STARTPER1) AND LOW <= BKHIGH - (BKHIGH - BKPRICE) * 0.01 * STOPPER1, SP; // level 1
BKHIGH >= BKPRICE * (1 + 0.01 * STARTPER2) AND LOW <= BKHIGH - (BKHIGH - BKPRICE) * 0.01 * STOPPER2, SP; // level 2
BKHIGH >= BKPRICE * (1 + 0.01 * STARTPER3) AND LOW <= BKHIGH - (BKHIGH - BKPRICE) * 0.01 * STOPPER3, SP; // level 3
// short position take profit
SKLOW <= SKPRICE * (1 - 0.01 * STARTPER1) AND HIGH >= SKLOW + (SKPRICE - SKLOW) * 0.01 * STOPPER1, BP; // level 1
SKLOW <= SKPRICE * (1 - 0.01 * STARTPER2) AND HIGH >= SKLOW + (SKPRICE - SKLOW) * 0.01 * STOPPER2, BP; // level 2
SKLOW <= SKPRICE * (1 - 0.01 * STARTPER3) AND HIGH >= SKLOW + (SKPRICE - SKLOW) * 0.01 * STOPPER3, BP; // level 3
// stop loss
C <= BKPRICE * (1 - STOP_LOSS * 0.01), SP; // long position
C >= SKPRICE * (1 + STOP_LOSS * 0.01), BP; // short position
또한, 우리는 또한 주문 위임 방법을 설정, 또한 신호 필터링, 더 완전한 처리를 만들기 위해.
// Set the order commission method
SETSIGPRICETYPE(BK,NEW_ORDER);
SETSIGPRICETYPE(SK,NEW_ORDER);
SETSIGPRICETYPE(BP,NEW_ORDER);
SETSIGPRICETYPE(SP,NEW_ORDER);
// Set the signal filtering method
AUTOFILTER;
시험 환경
성과 보고
기금 곡선
설정하지 않고 전체 전략 소스를 복사하기 위해 클릭합니다https://www.fmz.com/strategy/166753