가격 방향과 이동 속도에 따른 거래 아이디어
소개
가격이 움직일 때 모든 유동성 시장은 일종의 파동 순환적 성격을 먼저 드러내고 그 다음에는 내려가는 것으로 오랫동안 알려져 왔습니다. 이는 더 높은 기간의 차트에서 분명히 볼 수 있습니다. 사인파 특성은 가격이 일정한 지속성을 갖는다는 사실을 반영합니다. 그렇지 않으면 그것은 지그재그처럼 보일 것입니다: 짧은 시간 내에 급격한 상승 및 하강 움직임. 이 현상의 원인과 이를 거래에 활용하는 방법을 알아보겠습니다.
움직임의 시작과 지속
우리 세계의 모든 움직임은 방향, 가속도 및 속도로 특징 지을 수 있습니다. 이는 유동성 시장에서도 작동합니다. 이것은 가격의 강력한 방향 움직임이 결코 가혹하게 끝날 수 없다고 말하는 하나의 중요한 규칙을 의미합니다. 그것은 기차와 비교할 수 있습니다. 전체 기차가 최대 속도로 제동을 설정할 때 제동 경로는 최대 1km가 될 수 있습니다.
그렇다면 추세는 언제 시작됩니까? 시장 참가자의 대다수가 방향의 글로벌 변화 또는 시장이나 뉴스에 영향을 미치는 일부 중요한 요소의 변화와 관련이 있는지 여부에 관계없이 어떤 이유로 반대 의견을 바꾸는 경우. 이를 통해 고려된 집단적 의견이 형성되고 추세가 시작됩니다. 시장 참가자들은 움직임이 더욱 강해지고 있으며 앞으로도 계속될 것이라는 믿음이 커지고 있습니다. 큰 선수들이 큰 포지션으로 시장에 진입하기 때문에 방향성, 가속도, 일정한 속도가 있습니다. 바로 이 지점이 운동 초반에 들어와 추진력과 속도를 낸 사람들이 수익을 내기 시작하는 곳입니다. 다른 거래자들은 나중에 덜 매력적인 가격으로 시장에 진입합니다. 그러나 첫 번째 트레이더와 달리 가격 움직임 방향을 사용하려고 합니다.
변화가 발생하면 추세가 종료됩니다. 하지만 가격은 왜 여전히 같은 방식으로 움직이고 있습니까? 왜 갑자기 바뀌지 않을까요? 이러한 행동의 이유는 가격을 가속하고 원하는 방향으로 밀고 있던 사람들이 포지션을 청산하기 시작하여 추세를 억제하기 때문입니다. 그리고 그냥 "파도를 타고" 있던 사람들은 여전히 아무것도 바뀌지 않았다고 믿고 심지어 가격을 움직이려고 합니다. 그러나 이 "기차"는 그냥 멈추지 않습니다. 반대 방향으로 움직이기 시작하고 여기서 이야기가 끝납니다.
거래 아이디어와 "기차"에 치이지 않는 방법
움직임을 사용하고 이익을 얻는 아이디어는 현재 추세 깊이, 즉 크기와 기간의 분석을 기반으로 합니다.
생생한 예를 제공하기 위해 표준 지표인 RSI(상대 강도 지수) 및 AC(가속/감속)를 사용합니다.
1. 시장 진입 조건
우리는 첫 번째 지표를 사용하여 가격이 현재 얼마나 멀리 그리고 깊이 이동했는지를 보여줄 것입니다.
거리와 깊이를 결정하기 위해 레벨을 배치합니다.
그림 1. RSI 오실레이터 레벨
가격 변동 심도 평가 기준:
- 레벨 40 - 60 사이의 영역은 평평한 구역(옆 구역)으로 간주됩니다. 가격이 이 영역에 있을 때는 추세가 없습니다. 지시된 움직임의 부재에 인덱스 0을 할당합시다.
가격 이동 영역 구매:
- 구역 60-70 - 이것은 상향 이동의 가능한 시작입니다. 이 움직임에 인덱스 1을 할당합시다.
- 영역 70-80 - 위쪽 움직임이 더 뚜렷합니다. 움직임에 속도가 붙습니다. 인덱스 2를 할당합니다.
- Zone 80-90 - 움직임의 방향이 안정적입니다. 속도가 모여 있습니다. 인덱스 3을 할당합니다.
- 구역 90-100. 일반적으로 이것은 풀백이 없는 강력한 단방향 이동입니다. 매우 드물다. 이동 지수는 4가 됩니다.
마찬가지로 판매 가격을 지수화해 보겠습니다.
- 구역 30-40. 움직임이 떨어지기 시작합니다. 인덱스 -1.
- 구역 20-30. 움직임에 속도가 붙습니다. 인덱스 -2.
- 구역 10-20. 안정적인 하향 방향. 인덱스 -3.
- 구역 0-10. 강력한 일방 통행 구역. 인덱스 -4.
이 조건을 MQL4 언어로 다음과 같이 설명할 수 있습니다.
//--- determining buy index double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0); index_rsi = 0; if(rsi>90.0) index_rsi=4; else if( rsi > 80.0 ) index_rsi = 3; else if( rsi > 70.0 ) index_rsi = 2; else if( rsi > 60.0 ) index_rsi = 1; else if( rsi < 10.0 ) index_rsi = -4; else if( rsi < 20.0 ) index_rsi = -3; else if( rsi < 30.0 ) index_rsi = -2; else if( rsi < 40.0 ) index_rsi = -1;-->
Bill Williams의 AC 표시기를 의도된 목적, 즉 현재 움직임의 속도와 가속도를 측정하는 데 사용할 것입니다.
그림 2. AC 표시기
속도 평가 기준:
성장.
- 첫 번째 기준은 현재 및 이전 히스토그램을 비교하는 것입니다. 현재 히스토그램이 이전 히스토그램을 초과하면 가격 상승이 가속화될 가능성이 있습니다. 1과 같은 속도 지수로 정의합시다.
- 두 번째 기준은 3개의 인접한 바를 비교하는 것입니다(0 바에서 두 번째 바까지). 각 후속 바의 값이 이전 바의 값을 초과하면 가속도 증가에 대해 말할 수 있습니다. 속도 지수는 2와 같습니다.
- 각 이전 바가 후속 바보다 작은지 확인하기 위해 4개의 바를 유사한 비교가 있습니다. 속도 지수는 3입니다.
- 동일한 상태를 확인하기 위해 최근 5개 바와 현재 바를 적절히 비교합니다. 속도 지수는 4입니다.
떨어짐.
- 마찬가지로. 현재 바와 이전 바의 비교입니다. 현재 바가 이전 바보다 작으면 속도 지수는 -1과 같습니다.
- 이전과 현재의 3개 바 감소 비교. 인덱스는 -2입니다.
- 4개의 바의 비교. 인덱스는 -3입니다.
- 5개 바의 비교. 인덱스는 -4입니다.
MQL4에서는 다음과 같이 표시됩니다.
double ac[]; ArrayResize(ac,5); for(int i=0; i<5; i++) ac[i]=iAC(Symbol(),tf,i); index_ac=0; //--- buy signal if(ac[0]>ac[1]) index_ac=1; else if(ac[0]>ac[1] && ac[1]>ac[2]) index_ac=2; else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3]) index_ac=3; else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4]) index_ac=4; //--- sell signal else if(ac[0]<ac[1]) index_ac=-1; else if(ac[0]<ac[1] && ac[1]<ac[2]) index_ac=-2; else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3]) index_ac=-3; else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4]) index_ac=-4;-->
이동 깊이 지수가 있고 이동 속도를 알면 몇 가지 진입 조건을 내려놓고 분류할 수 있습니다.
시장 진입 옵션이 있습니다.
//--- buy signal if(index_rsi==1 && index_ac>=1) //possible buy movement if(index_rsi==2 && index_ac>=1) //weak buy movement if(index_rsi==3 && index_ac==1) //weak buy movement if(index_rsi==3 && index_ac>=2) //moderate buy movement if(index_rsi==4 && index_ac>=1) //strong buy movement //--- sell signal if(index_rsi==-1 && index_ac<=-1) //possible sell movement if(index_rsi==-2 && index_ac<=-1) //weak sell movement if(index_rsi==-3 && index_ac==-1) //weak sell movement if(index_rsi==-3 && index_ac<=-2) //moderate sell movement if(index_rsi==-4 && index_ac<=-1) //strong sell movement //--- flat if(index_rsi==0)-->
2. 시장 퇴출 조건
우리는 입력 매개변수를 정의하고 분류했습니다. 우리는 시장 출구 조건이 어떻게 형성되었는지 설명하기 위해 다음과 같은 비유를 할 것입니다.
예를 들어 어린이용 고무공을 생각해 보십시오. 이제 누군가가 매우 높은 곳에서 이 공을 물에 던지면 어떻게 될지 생각해 봅시다. 먼저 중력 가속도에 의해 낙하 속도가 빨라집니다. 그러면 물과 부딪힙니다. 그러나 그것은 속도를 잃고 음의 값을 갖는 특정 깊이에 잠기기에 충분한 속도를 가지고 있습니다. 공은 아르키메데스의 원리의 영향을 받아 표면으로 밀려납니다.
이제 이 예를 드릴다운 (더 많은 정보를 찾기 위해 관련 텍스트나 아이콘 등을 클릭하여 마치 뚫고 들어가듯이 검색하는 것)합니다.
- 이미 이해했듯이 우리 공은 가격입니다.
- 공을 던지는 사람은 추세를 시작한 시장 참가자를 나타냅니다.
- 중력 가속도를 일으키는 중력은 추세가 시작된 후 가격 방향에 합류 한 거래자를 나타냅니다.
- 물은 방향의 변화에 영향을 미치는 중요한 요소를 나타냅니다.
- 아르키메데스의 원리는 추세를 시작한 사람들의 닫힌 입장을 나타냅니다.
이익을 얻는 두 가지 주요 목표는 다음과 같습니다.
- 공이 이미 던져진 순간을 적시에 결정하고 매수 또는 매도하십시오.
- 볼이 물에 빠져 속도가 느려지면 포지션을 닫습니다.
금융 시장에서 공이나 물을 던지는 사람을 보지 못하기 때문에 공이 떨어지는 시간과 정확한 거리를 결정하기 어려울 수 있습니다. 우리는 공의 속도와 방향만 볼 수 있습니다.
이상 가격 움직임 깊이와 속도 평가 기준을 살펴보았다.
이제 종료 조건을 정의합니다.
//--- possible downward reversal if(index_rsi>2 && index_ac<0)-->
가격이 충분히 오랫동안 상승했다면 가속도는 음수가 됩니다(하향). 이것은 추세의 변화가 충분히 가능하다는 사실을 지적합니다.
//--- possible upward reversal if(index_rsi<-2 && index_ac>0)-->
주어진 예와 유사하게: 공이 충분히 오랫동안 떨어졌지만 물에 빠졌고 물은 공을 반대 방향으로 밀어냅니다. 포지션 청산 시점을 나타냅니다.
3. 진출입 효율성 제고
일부 거래 지표는 더 큰 기간을 사용할 때 추세 변화에 대한 응답 속도가 빨라지는 것으로 알려져 있습니다. 그러나 더 많은 잘못된 신호도 나타납니다.
다른 방법은 계산 기간을 아래쪽으로 변경하지 않고 여러 시간 프레임에서 추적하는 것입니다.
그림 3. RSI 및 AC 신호를 기반으로 한 다양한 시간대의 추세
가격 변동 추세는 우리의 기준과 RSI 및 AC 지표로 인해 그림에서 명확하게 볼 수 있습니다. 자세히 살펴보겠습니다.
M1의 이동 및 속도: 강한 이동, AC 지수는 4, RSI 지수 깊이는 2입니다. M5의 깊이는 같지만 속도는 1입니다. 동일한 움직임이 M15에서 결정되지만 하위 차트보다 덜 가시적입니다. 약 30분 1시간 차트에 대해 말하면 M30에는 이미 신호가 있고 H1에는 감속 및 심지어 반전 가능성 신호가 있는 것을 보는 것이 인상적입니다.
이 예는 우리에게 중요한 결론을 제공합니다.
4. Expert Advisor 형태의 거래 전략 구현
Expert Advisor 코드:
//+------------------------------------------------------------------+ //| tester.mq4 | //| Alexander Fedosov | //+------------------------------------------------------------------+ #property copyright "Alexander Fedosov" #property strict #include <trading.mqh> //Support library for trade operations //+------------------------------------------------------------------+ //| Parameters | //+------------------------------------------------------------------+ input int SL = 40; // Stop loss input int TP = 70; // Take profit input bool Lot_perm=true; // Lot of balance? input double lt=0.01; // Lot input double risk = 2; // Risk of deposit, % input int slippage= 5; // Slippage input int magic=2356; // Magic number input int period=8; // RSI indicator period input ENUM_TIMEFRAMES tf=PERIOD_CURRENT; // Working timeframe int dg,index_rsi,index_ac; trading tr; //+------------------------------------------------------------------+ //| Expert Advisor initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- determining variables for auxiliary class of trading functions //--- language for displaying errors, Russian of by default. tr.ruErr=true; tr.Magic=magic; tr.slipag=slippage; tr.Lot_const=Lot_perm; tr.Lot=lt; tr.Risk=risk; //--- number of attempts. tr.NumTry=5; //--- determining decimal places on the current chart dg=tr.Dig(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Main calculation function | //+------------------------------------------------------------------+ void OnTick() { depth_trend(); speed_ac(); //--- check for presence of open orders if(OrdersTotal()<1) { //--- check of buy conditions if(Buy()) tr.OpnOrd(OP_BUY,tr.Lots(),Ask,SL*dg,TP*dg); //--- check of sell conditions if(Sell()) tr.OpnOrd(OP_SELL,tr.Lots(),Bid,SL*dg,TP*dg); } //--- are there open orders? if(OrdersTotal()>0) { //--- check and close sell orders which meet closing conditions. if(Sell_close()) tr.ClosePosAll(OP_SELL); //--- check and close buy orders which meet closing conditions. if(Buy_close()) tr.ClosePosAll(OP_BUY); } } //+------------------------------------------------------------------+ //| Function for determining the trend depth | //+------------------------------------------------------------------+ void depth_trend() { //--- determining buy index double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0); index_rsi = 0; if(rsi>90.0) index_rsi=4; else if(rsi>80.0) index_rsi=3; else if(rsi>70.0) index_rsi=2; else if(rsi>60.0) index_rsi=1; else if(rsi<10.0) index_rsi=-4; else if(rsi<20.0) index_rsi=-3; else if(rsi<30.0) index_rsi=-2; else if(rsi<40.0) index_rsi=-1; } //+------------------------------------------------------------------+ //| Function for determining the trend speed | //+------------------------------------------------------------------+ void speed_ac() { double ac[]; ArrayResize(ac,5); for(int i=0; i<5; i++) ac[i]=iAC(Symbol(),tf,i); index_ac=0; //--- buy signal if(ac[0]>ac[1]) index_ac=1; else if(ac[0]>ac[1] && ac[1]>ac[2]) index_ac=2; else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3]) index_ac=3; else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4]) index_ac=4; //--- sell signal else if(ac[0]<ac[1]) index_ac=-1; else if(ac[0]<ac[1] && ac[1]<ac[2]) index_ac=-2; else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3]) index_ac=-3; else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4]) index_ac=-4; } //+------------------------------------------------------------------+ //| Function for checking buy conditions | //+------------------------------------------------------------------+ bool Buy() { bool res=false; if((index_rsi==2 && index_ac>=1) || (index_rsi==3 && index_ac==1)) res=true; return (res); } //+------------------------------------------------------------------+ //| Function for checking sell conditions | //+------------------------------------------------------------------+ bool Sell() { bool res=false; if((index_rsi==-2 && index_ac<=-1) || (index_rsi==-3 && index_ac==-1)) res=true; return (res); } //+------------------------------------------------------------------+ //| Function for checking buy position closing conditions | //+------------------------------------------------------------------+ bool Buy_close() { bool res=false; if(index_rsi>2 && index_ac<0) res=true; return (res); } //+------------------------------------------------------------------+ //| Function for checking sell position closing conditions | //+------------------------------------------------------------------+ bool Sell_close() { bool res=false; if(index_rsi<-2 && index_ac>0) res=true; return (res); }-->
tf(작업 시간 프레임) 및 period(RSI 표시기 기간)의 두 매개변수만 사용하여 약간의 최적화를 수행했습니다.
그리고 M15에서 다음과 같은 결과를 얻었습니다.
그림 4. Expert Advisor 백테스팅 결과
결론
추세의 시작과 끝을 결정하는 것은 시장 행동을 예측하는 것이 불가능하기 때문에 전 세계 트레이더에게 복잡한 작업 중 하나입니다.
그러나 현재 추세에서 진입 및 퇴장 순간을 결정하여 상당한 이익을 얻는 것은 전적으로 가능합니다. 그리고 이동 속도의 결정과 동적 추적의 일반적인 아이디어는 이 문제에 도움이 될 수 있습니다.
성공적인 거래를 기원합니다.
MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/1747