5 20 거래 시스템


80-20 거래 전략.
소개.
'80 -20 '은 Linda Raschke와 Laurence Connors의 Street Smarts : High Probability Short-Term Trading Strategies에서 설명한 거래 전략 (TS) 중 하나의 이름입니다. 이전 기사에서 논의 된 전략과 마찬가지로 저자는 가격이 범위 경계를 테스트 할 때이를 무대로 간주합니다. 또한 경계에서 거짓 이탈과 롤백으로 이익을 얻는 데 중점을 둡니다. 그러나 이번에는 전날과 관련된 역사적으로 상당히 짧은 기간에 대한 가격 움직임을 분석합니다. 시스템이 일중 거래를 의미하기 때문에 얻은 ​​신호의 수명도 비교적 짧습니다.
이 기사의 첫 번째 목적은 MQL5 언어를 사용하는 '80 -20 '거래 전략 신호 모듈의 개발을 설명하는 것입니다. 그런 다음이 모듈을 시리즈의 이전 기사에서 개발 한 기본 거래 로봇의 약간 수정 된 버전에 연결하려고합니다. 게다가, 우리는 수동 거래 지시자 개발을 위해 똑같은 모듈을 사용할 것입니다.
이미 말했듯이, 기사 시리즈에서 제공되는 코드는 주로 고급 초보 프로그래머를 대상으로합니다. 따라서이 코드는 주요 목적 외에도 절차 적 프로그래밍에서 객체 지향 프로그래밍으로 옮겨 갈 수 있도록 설계되었습니다. 코드는 클래스를 특징으로하지 않습니다. 대신, 마스터하기가 더 쉬운 구조를 완벽하게 구현합니다.
이 기사의 또 다른 목적은 Raschke와 Connors가 지난 세기 말에 시장 행동을 사용하여 전략이 여전히 실행 가능한지를 확인할 수있는 도구를 개발하는 것입니다. 최신 이력 데이터를 기반으로 한 몇 가지 EA 테스트가이 기사의 끝에 제공됩니다.
'80 -20 '거래 시스템.
저자는 George Taylor의 The Taylor Trading Technique과 Steve Moore의 선물 시장 컴퓨터 분석 및 Derek Gipson의 거래 경험을 자신의 업무에 대한 이론적 기초로 명명했습니다. 거래 전략의 본질은 다음과 같이 간략하게 설명 될 수 있습니다 : 전날의 개장과 종가가 반대 일일 범위 영역에 있다면, 오늘 전일 종가 대비 반전 가능성이 매우 높습니다. 전일 오픈 및 닫는 가격은 범위 테두리에 가깝게 위치해야합니다. 반전은 현재 날짜를 시작해야합니다 (전날 촛불이 닫히기 전이 아님). 구매 전략 규칙은 다음과 같습니다.
1. 어제 시장이 어제 20 % 상승하고 20 % 하회했다.
2. 오늘의 Low가 전날의 Low를 5 tick 이상 끊을 때까지 기다리십시오.
3. 어제 범위의 하한선에 구매 대기중인 주문을 놓습니다.
4. 보류중인 주문이 트리거되면 그 날의 Low에서 초기 StopLoss를 설정하십시오.
5. 획득 한 이익을 보호하려면 후행 중지를 사용하십시오.
판매 규칙은 비슷하지만 어제의 바는 완고해야하며 구매 주문은 바의 상단 경계에 있어야하며 StopLoss는 오늘의 최고 가격에 배치되어야합니다.
또 다른 중요한 세부 사항은 닫힌 일일 막대의 크기입니다. Linda Raschke에 따르면, 일일 막대의 평균 크기보다 더 커야합니다. 그러나 그녀는 평균 일일 범위를 계산할 때 얼마나 많은 기록 일을 고려해야 하는지를 지정하지 않습니다.
또한 TS는 일중 거래 전용으로 설계된 것임을 명심해야합니다. 이 책에 표시된 예는 M15 차트를 사용합니다.
전략에 따라 레이아웃을 만드는 신호 블록 및 표시기는 아래에 설명되어 있습니다. 표시기 작동 결과가 표시된 몇 가지 스크린 샷을 볼 수도 있습니다. 패턴과 연결된 시스템 규칙 및 거래 수준에 해당하는 패턴을 명확하게 보여줍니다.
패턴 분석은 구매 보류 명령을 내리게됩니다. 적절한 거래 수준은 M1 시간대에 더 잘 나타납니다.
M5 시간대에 반대 방향의 거래 패턴이있는 유사한 패턴 :
거래 수준 (M1 시간대) :
신호 모듈.
Take Profit 레벨 계산을 추가하여 사용자 정의 TS에 새 옵션을 추가하는 방법을 보여줍니다. 위치를 닫는 데 후행 중지 만 사용되므로 원래 버전에는 그러한 레벨이 없습니다. 이익 실현은 사용자 지정 최소 브레이크 아웃 수준 (TS_8020_Extremum_Break)에 따라 달라집니다. TS_8020_Take_Profit_Ratio 사용자 지정 비율로 곱합니다.
우리는 fe_Get_Entry_Signal 신호 모듈의 주요 기능에 대해 현재 신호 상태, 계산 된 진입 및 종료 레벨 (Stop Loss 및 Take Profit) 및 어제의 범위 테두리를 필요로합니다. 모든 수준은 함수에 전달 된 변수에 대한 링크를 통해 수신되는 반면 신호의 반환 상태는 이전 기사의 옵션 목록을 사용합니다.
ENTRY_BUY, // 신호 구매.
ENTRY_SELL, // 신호를 판매합니다.
ENTRY_NONE, // 신호가 없습니다.
ENTRY_UNKNOWN // 상태가 정의되지 않았습니다.
datetime t_Time, // 현재 시간.
두 배 & amp; d_Entry_Level, // 엔트리 레벨 (변수에 대한 링크)
두 배 & amp; d_SL, // StopLoss 레벨 (변수에 대한 링크)
두 배 & amp; d_TP, // TakeProfit 레벨 (변수에 대한 링크)
두 배 & amp; d_Range_High, // 패턴의 첫 번째 막대의 높이 (변수에 대한 링크)
두 배 & amp; d_Range_Low // 패턴의 첫 번째 막대의 낮음 (변수에 대한 링크)
신호를 검출하기 위해서는 D1 시간 프레임의 마지막 두 막대를 분석해야합니다. 처음부터 시작하겠습니다. TS 기준을 충족시키지 못하면 두 번째 막대를 확인할 필요가 없습니다. 두 가지 기준이 있습니다.
1. 막대 크기 (높음과 낮음의 차이)가 지난 XX 일의 평균 값을 초과해야합니다 (TS_8020_D1_Average_Period 사용자 지정 설정으로 설정)
2. Bar Open과 Close Level은 바 범위의 반대 20 %에 위치해야합니다.
이러한 조건이 충족되면 추후 사용을 위해 고가 및 저가를 저장해야합니다. 첫 번째 막대 매개 변수는 하루 종일 바뀌지 않으므로 각 함수 호출에서 매개 변수를 검사 할 필요가 없습니다. 그것들을 정적 변수에 저장합시다.
입력 uint TS_8020_D1_Average_Period = 20; // 80-20 : 평균 일일 범위를 계산하는 일 수입니다.
입력 uint TS_8020_Extremum_Break = 50; // 80-20 : 어제 극한의 최소 브레이크 아웃 (포인트 단위)
정적 ENUM_ENTRY_SIGNAL se_Possible_Signal = ENTRY_UNKNOWN; // 패턴의 첫 번째 바 신호 방향.
// 틱 사이의 계산 된 레벨을 저장하는 변수.
sd_SL = 0, sd_TP = 0,
sd_Range_High = 0, sd_Range_Low = 0.
// D1에서 패턴의 첫 번째 막대를 확인합니다.
if (se_Possible_Signal == ENTRY_UNKNOWN)
st_Last_D1_Bar = t_Curr_D1_Bar; // 1 st bar는 오늘 변경되지 않습니다.
이중 d_Average_Bar_Range = fd_Average_Bar_Range (TS_8020_D1_Average_Period, PERIOD_D1, t_Time);
// 1 st bar가 충분히 크지 않습니다.
se_Possible_Signal = ENTRY_NONE; // 오늘 신호가 없음을 의미합니다.
ma_Rates [0].open & gt; ma_Rates [0].high - d_20_Percents // 바가 상위 20 %에서 열렸습니다.
ma_Rates [0].close & lt; ma_Rates [0].low + d_20_Percents // 그리고 20 %
ma_Rates [0].close & gt; ma_Rates [0].high - d_20_Percents // 상단 20 %에서 닫힌 바
ma_Rates [0].open & lt; ma_Rates [0].low + d_20_Percents // 하단 20 %에서 열림.
// 1 st bar는 조건에 해당합니다.
// 패턴의 첫 번째 막대에 대한 오늘의 거래 방향을 정의합니다.
se_Possible_Signal = ma_Rates [0].open & gt; ma_Rates [0].close? ENTRY_BUY : ENTRY_SELL;
// 시장 진입 수준 :
sd_Entry_Level = d_Entry_Level = se_Possible_Signal == ENTRY_BUY? ma_Rates [0].low : ma_Rates [0].high;
// 패턴의 첫 번째 막대 범위 테두리 :
sd_Range_High = d_Range_High = ma_Rates [0].high;
sd_Range_Low = d_Range_Low = ma_Rates [0].low;
// 1 st bar 열기 / 닫기 레벨이 조건과 일치하지 않습니다.
se_Possible_Signal = ENTRY_NONE; // 오늘 신호가 없음을 의미합니다.
지정된 시간 함수에서 시작하여 지정된 시간대에 지정된 막대 수 내에서 평균 막대 범위를 정의하는 함수 목록입니다.
int i_Bars_Limit, // 고려해야 할 막대 수.
ENUM_TIMEFRAMES e_TF = PERIOD_CURRENT, // 시간대를 바꿉니다.
datetime t_Time = WRONG_VALUE // 계산을 시작할시기.
double d_Average_Range = 0; // 값 합산을위한 변수.
if (i_Bars_Limit & lt; 1) return (d_Average_Range);
if (t_Time == WRONG_VALUE) t_Time = TimeCurrent ();
int i_Price_Bars = 카피 레이스 (_Symbol, e_TF, t_Time, i_Bars_Limit, ma_Rates);
if (Log_Level & gt; LOG_LEVEL_NONE) PrintFormat ( "% s : 카피 레프트 : error # % u", __FUNCTION__, _LastError);
if (Log_Level & gt; LOG_LEVEL_NONE) PrintFormat ( "% s : 복사 요금 : % u의 복사 된 % u", __FUNCTION__, i_Price_Bars, i_Bars_Limit);
int i_Bar = i_Price_Bars;
d_Average_Range + = ma_Rates [i_Bar].high - ma_Rates [i_Bar].low;
return (d_Average_Range / double (i_Price_Bars));
패턴의 두 번째 (현재) 바에 대한 기준은 하나뿐입니다. 어제의 범위 경계선은 설정 (TS_8020_Extremum_Break)에 지정된 경계보다 커야합니다. 레벨에 도달하면 보류중인 주문을하기위한 신호가 나타납니다.
if (se_Possible_Signal == ENTRY_BUY)
sd_SL = d_SL = ma_Rates [1].low; // StopLoss - 오늘의 높음으로.
if (TS_8020_Take_Profit_Ratio & gt; 0) sd_TP = d_TP = d_Entry_Level + _Point * TS_8020_Extremum_Break * TS_8020_Take_Profit_Ratio; // TakeProfit.
// 명확하게 보이는 아래쪽의 브레이크 아웃입니까?
ma_Rates [1].close & lt; ma_Rates [0].low - _Point * TS_8020_Extremum_Break?
sd_SL = d_SL = ma_Rates [1].high; // StopLoss - 오늘의 낮음.
if (TS_8020_Take_Profit_Ratio & gt; 0) sd_TP = d_TP = d_Entry_Level - _Point * TS_8020_Extremum_Break * TS_8020_Take_Profit_Ratio; // TakeProfit.
// 명확하게 볼 수있는 위쪽 브레이크 아웃입니까?
ma_Rates [1].close & gt; ma_Rates [0].high + _Point * TS_8020_Extremum_Break?
위에서 언급 한 두 가지 기능 (fe_Get_Entry_Signal 및 fd_Average_Bar_Range)과 mqh 라이브러리 파일에 신호 수신과 관련된 사용자 정의 설정을 저장하십시오. 전체 목록은 아래에 첨부되어 있습니다. Signal_80-20.mqh 파일을 터미널 데이터 폴더 (MQL5 \ Include \ Expert \ Signal)의 해당 디렉토리에 놓습니다.
수동 거래 지시자.
EA와 마찬가지로 표시기는 위에서 설명한 신호 모듈을 사용합니다. 표시기는 보류중인 주문 배치 신호를받는 것에 대해 상인에게 알려야하며 계산 된 레벨 - 주문 배치, 이익 실현 및 손절매 수준 가져 오기를 제공해야합니다. 사용자는 표준 팝업 창, 경고 또는 푸시 알림 등의 알림 방법을 선택할 수 있습니다. 한꺼번에 또는 원하는 모든 조합을 선택할 수 있습니다.
또 다른 지표 목표는 '80 -20 'TS에 따른 거래 내역 배치입니다. 표시기는 시스템 기준 및 플롯 계산 된 거래 수준에 해당하는 일별 막대를 강조 표시합니다. 레벨 라인은 상황이 시간에 따라 어떻게 진화했는지를 표시합니다. 더 명확하게하기 위해 다음과 같이 해봅시다. 가격이 신호선에 닿으면 후자가 보류중인 주문 행으로 대체됩니다. 보류중인 주문이 활성화되면 해당 라인은 이익 실현 및 중단 손실 행으로 대체됩니다. 이 라인들은 가격이 그들 중 하나에 닿으면 중단됩니다 (주문은 닫힙니다). 이 레이아웃을 통해 거래 시스템 규칙의 효율성을 평가하고 개선 할 수있는 사항을 쉽게 정의 할 수 있습니다.
버퍼와 그 디스플레이 매개 변수를 선언하는 것으로부터 시작하자. 먼저 수직 영역 채우기 (DRAW_FILLING)로 두 개의 버퍼를 선언해야합니다. 첫 번째는 전일의 전체 일일 막대 범위를 강조 표시하는 것이고 다른 하나는 내부 영역을 강조 표시하여 TS에서 사용 된 범위의 상단 및 하단 20 %에서 분리하는 것입니다. 그런 다음 멀티 컬러 신호 라인과 보류중인 주문 라인 (DRAW_COLOR_LINE)에 대한 두 개의 버퍼를 선언하십시오. 그들의 색깔은 거래 방향에 달려 있습니다. 다른 두 개의 선 (Proft 및 Stop Loss 가져 오기)이 있으며 색상은 동일하게 유지됩니다 (DRAW_LINE) - 터미널에서 지정된 동일한 표준 색상을 사용해야합니다. 단순한 라인을 제외하고 선택된 모든 디스플레이 유형에는 각각 2 개의 버퍼가 필요하므로 코드는 다음과 같습니다.
#property indicator_buffers 10.
#property indicator_plots 6.
#property indicator_type1 DRAW_FILLING.
#property indicator_color1 clrDeepPink, clrDodgerBlue.
#property indicator_width1 1.
#property indicator_type2 DRAW_FILLING.
#property indicator_color2 clrDeepPink, clrDodgerBlue.
#property indicator_width2 1.
#property indicator_type3 DRAW_COLOR_LINE.
#property indicator_style3 STYLE_SOLID.
#property indicator_color3 clrDeepPink, clrDodgerBlue.
#property indicator_width3 2.
#property indicator_type4 DRAW_COLOR_LINE.
#property indicator_style4 STYLE_DASHDOT.
#property indicator_color4 clrDeepPink, clrDodgerBlue.
#property indicator_width4 2.
#property indicator_type5 DRAW_LINE.
#property indicator_style5 STYLE_DASHDOTDOT.
#property indicator_color5 clrCrimson.
#property indicator_width5 1.
#property indicator_type6 DRAW_LINE.
#property indicator_style6 STYLE_DASHDOTDOT.
#property indicator_color6 clrLime.
#property indicator_width6 1.
트레이더에게 일일 패턴의 첫 번째 막대 작성을 비활성화하고 신호 알림 옵션을 선택하고 히스토리 레이아웃 깊이를 제한하는 기능을 제공합시다. 신호 모듈의 모든 거래 시스템 설정도 여기에 포함됩니다. 이렇게하려면 모듈에서 사용되는 변수 중 일부가 EA에서만 사용되며 표시기가 필요하지 않은 경우에도 모듈에서 사용 된 변수를 미리 열거해야합니다.
입력 bool Show_Inner = true; // 패턴의 첫 번째 막대 : 내부 영역 표시?
입력 bool Alert_Popup = true; // 경고 : 팝업 창을 표시 하시겠습니까?
입력 bool Alert_ = false; // 경고 :?
입력 문자열 Alert__Subj = ""; // 경고 : 제목.
입력 bool Alert_Push = true; // 알림 : 푸시 알림을 보내시겠습니까?
buff_1st_Bar_Outer [], buff_1st_Bar_Outer_Zero [], // 패턴의 첫 번째 막대의 전체 범위를 플로팅하기위한 버퍼.
buff_1st_Bar_Inner [], buff_1st_Bar_Inner_Zero [], // 패턴의 첫 번째 막대의 내부 60 %를 플로팅하기위한 버퍼.
buff_Signal [], buff_Signal_Color [], // 신호 라인 버퍼.
buff_Entry [], buff_Entry_Color [], // 보류중인 주문 라인 버퍼.
buff_SL [], buff_TP [], // StopLoss 및 TakeProfit 행의 버퍼.
gd_Extremum_Break = 0 // 기호 가격에서 TS_8020_Extremum_Break.
gi_D1_Average_Period = 1, // TS_8020_D1_Average_Period에 대한 올바른 값.
gi_Min_Bars = WRONG_VALUE // 재 계산을위한 최소 막대 개수.
// 입력 된 TS_8020_D1_Average_Period 매개 변수를 확인하십시오.
gi_D1_Average_Period = int (fmin (1, TS_8020_D1_Average_Period));
// 포인트를 기호 가격으로 변환 :
gd_Extremum_Break = TS_8020_Extremum_Break * _Point;
// 재 계산을위한 최소 막대 수 = 하루 중 현재 TF의 막대 수.
gi_Min_Bars = int (86400 / PeriodSeconds ());
SetIndexBuffer (0, buff_1st_Bar_Outer, INDICATOR_DATA);
PlotIndexSetDouble (0, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (1, buff_1st_Bar_Outer_Zero, INDICATOR_DATA);
SetIndexBuffer (2, buff_1st_Bar_Inner, INDICATOR_DATA);
PlotIndexSetDouble (1, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (3, buff_1st_Bar_Inner_Zero, INDICATOR_DATA);
SetIndexBuffer (4, buff_Signal, INDICATOR_DATA);
PlotIndexSetDouble (2, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (5, buff_Signal_Color, INDICATOR_COLOR_INDEX);
SetIndexBuffer (6, buff_Entry, INDICATOR_DATA);
PlotIndexSetDouble (3, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (7, buff_Entry_Color, INDICATOR_COLOR_INDEX);
SetIndexBuffer (8, buff_SL, INDICATOR_DATA);
PlotIndexSetDouble (4, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (9, buff_TP, INDICATOR_DATA);
PlotIndexSetDouble (5, PLOT_EMPTY_VALUE, 0);
IndicatorSetString (INDICATOR_SHORTNAME, "80-20 TS");
메인 프로그램의 코드를 내장 된 OnCalculate 함수에 놓으십시오 - 과거부터 현재까지 신호 모듈에서 함수를 사용하여 신호를 검색하여 현재 시간 프레임 막대를 반복하는 루프를 배열하십시오. 초기 값을 사용하여 필요한 변수를 선언하고 초기화하십시오. 사용자 정의 히스토리 심도 한계 (Bars_Limit)를 고려한 첫 번째 계산에 가장 오래된 루프 바를 정의합시다. 후속 호출의 경우, 두 막대 패턴이 현재 시간 프레임과 상관없이 실제로 D1 차트에 속하기 때문에 마지막 막대 대신 현재 막대의 모든 막대가 다시 계산됩니다.
게다가 우리는 소위 팬텀 (phantoms)으로부터 보호해야한다. 다시 초기화하는 동안 강제 표시기 버퍼를 지우지 않으면 시간 프레임이나 심볼을 전환 할 때 더 이상 관련 채움 영역이 화면에 남아 있지 않다. 버퍼 지우기는 표시기 초기화 후 첫 번째 OnCalculate 함수 호출에 바인딩되어야합니다. 그러나 표준 prev_calculated 변수는 첫 번째 함수 호출 동안뿐만 아니라 "체크섬을 변경할 때"도 0을 포함 할 수 있기 때문에 호출이 첫 번째 호출인지 정의하기에 충분하지 않습니다. prev_calculated 변수를 0으로 설정하여 영향을받지 않는 구조를 만들어이 문제를 적절히 해결하는 데 시간을 할애 해 보겠습니다. 구조는 지표에서 자주 사용되는 데이터를 저장하고 처리하는 것입니다.
- OnCalculate 함수의 플래그.
- 체크섬을 변경할 때 0으로 설정되지 않은 계산 된 막대의 계수기.
- 체크섬을 변경하는 플래그;
- 새 막대의 시작 부분의 플래그.
- 현재 바 시작 시간.
이러한 모든 데이터를 결합하는 구조는 글로벌 수준에서 선언되어야합니다. 내장 또는 사용자 정의 기능에서 데이터를 수집하거나 제공 할 수 있어야합니다. 이 구조체를 브라우니라고 부릅시다. 표시기 코드의 끝 부분에 놓을 수 있습니다. go_Brownie라는 단일 전역 유형 구조체 객체도 여기에 선언되어야합니다.
datetime t_Last_Bar_Time; // 마지막으로 처리 된 막대의 시간입니다.
int i_Prew_Calculated; // 계산 된 막대 수입니다.
bool b_First_Run; // 첫 번째 실행 플래그.
bool b_History_Updated; // 히스토리 갱신 플래그.
bool b_Is_New_Bar; // 새 막대 열기 플래그.
b_First_Run = b_Is_New_Bar = true;
if (b_Reset_First_Run) b_First_Run = true; // 권한이 있으면 0으로 설정합니다.
// OnCalculate 기본 제공 함수의 첫 번째 호출 플래그입니다.
if (b_First_Run & amp; i_Prew_Calculated & gt; 0) b_First_Run = false;
datetime t_This_Bar_Time = TimeCurrent () - TimeCurrent () % PeriodSeconds ();
b_Is_New_Bar = t_Last_Bar_Time == t_This_Bar_Time;
if (b_Is_New_Bar) t_Last_Bar_Time = t_This_Bar_Time;
// 역사에 변화가 있습니까?
b_History_Updated = i_New_Prew_Calculated == 0 & amp; amp; i_Prew_Calculated & gt; WRONG_VALUE;
if (i_Prew_Calculated == WRONG_VALUE) i_Prew_Calculated = i_New_Prew_Calculated;
// 또는 히스토리 갱신이없는 경우.
else if (i_New_Prew_Calculated & gt; 0) i_Prew_Calculated = i_New_Prew_Calculated;
Brownie에게 표시기 초기화 해제 이벤트를 알려줍니다.
go_Brownie. f_Reset (); // 브라우니에게 알린다.
필요한 경우 사용자 지정 기능이나 클래스에 가격, 볼륨 또는 현재 막대의 스프레드 값 (열기, 높음, 낮음, 닫기, tick_volume, 볼륨, 스프레드)이 필요한 경우 Brownie에 저장된 데이터의 양을 확장 할 수 있습니다. OnCalculate 함수에서 기성 데이터를 사용하고 시계열 복사 기능 (CopyOpen, CopyHigh 등 또는 CopyRates)을 사용하는 대신 Brownie를 통해 전달하는 것이 더 편리합니다. 이렇게하면 CPU 리소스가 절약되고 처리 과정을 정렬 할 필요가 없습니다. 이러한 언어 기능의 오류.
주 표시기 기능으로 돌아가 봅시다. 변수를 선언하고 go_Brownie 구조를 사용하여 배열을 준비하는 것은 다음과 같습니다.
i_Period_Bar = 0, // 보조 카운터.
i_Current_TF_Bar = rates_total - int (Bars_Limit) // 현재 TF 루프 시작의 바 인덱스.
정적 datetime st_Last_D1_Bar = 0; // D1 막대 몇 개 중 마지막으로 처리 된 막대의 시간 (패턴의 2 번째 막대)
static int si_1st_Bar_of_Day = 0; // 현재 날짜의 첫 번째 막대의 인덱스입니다.
// 재 초기화하는 동안 버퍼를 지운다 :
ArrayInitialize (buff_1st_Bar_Inner, 0); ArrayInitialize (buff_1st_Bar_Inner_Zero, 0);
ArrayInitialize (buff_1st_Bar_Outer, 0); ArrayInitialize (buff_1st_Bar_Outer_Zero, 0);
ArrayInitialize (buff_Entry, 0); ArrayInitialize (buff_Entry_Color, 0);
ArrayInitialize (buff_Signal, 0); ArrayInitialize (buff_Signal_Color, 0);
ArrayInitialize (buff_TP, 0);
ArrayInitialize (buff_SL, 0);
datetime t_Time = TimeCurrent ();
// 최소 재 계산 깊이 - 전날보다 :
i_Current_TF_Bar = rates_total - 바 (_Symbol, PERIOD_CURRENT, t_Time - t_Time % 86400, t_Time) - 1;
ENUM_ENTRY_SIGNAL e_Signal = ENTRY_UNKNOWN; // 신호.
d_SL = WRONG_VALUE, // SL 수준.
d_TP = WRONG_VALUE, // TP 레벨.
d_Entry_Level = WRONG_VALUE, // 엔트리 레벨.
d_Range_High = WRONG_VALUE, d_Range_Low = WRONG_VALUE // 패턴의 첫 번째 막대 범위의 경계.
t_Curr_D1_Bar = 0, // 현재 D1 막대 시간 (패턴의 2 번째 막대)
t_D1_Bar_To_Fill = 0 // 채울 수있는 D1 막대 시간 (패턴의 첫 번째 막대)
i_Current_TF_Bar = int (fmax (0, fmin (i_Current_TF_Bar, rates_total - gi_Min_Bars))));
// 메인 프로그램 루프가 여기에 위치 할 것입니다.
현재 시간 프레임 막대를 반복 할 때 신호가 있는지 확인하십시오.
if (e_Signal & gt; 1)이 계속된다; // 바가 속한 날에는 신호가 없습니다.
새로운 하루의 첫번째 막대에 신호가 있다면, 이전의 매일 막대의 범위를 채워야합니다. 날짜 시간 유형의 t_D1_Bar_To_Fill 변수 값은 플래그로 사용됩니다. WRONG_VALUE와 같으면이 막대에 채우기가 필요하지 않습니다. 신호선은 동일한 첫 번째 막대에서 시작해야하지만 더 나은 레이아웃 인식을 위해 전날의 마지막 막대까지 확장 해 보겠습니다. 신호 라인의 계산과 강세 및 약세 막대의 선과 채우기 색상이 서로 다르기 때문에 두 가지 유사한 블록을 만들어 보겠습니다.
t_D1_Bar_To_Fill = 시간 [i_Current_TF_Bar - 1] - 시간 [i_Current_TF_Bar - 1] % 86400;
그렇지 않으면 t_D1_Bar_To_Fill = WRONG_VALUE; // 이전 날짜 바. 새 채우기가 필요하지 않습니다.
st_Last_D1_Bar = t_Curr_D1_Bar; // 기억하십시오.
// 전날의 D1 막대 채우기 :
if (Show_Outer) while (-i_Period_Bar & gt; 0)
if (Time [i_Period_Bar] & lt; t_D1_Bar_To_Fill) break;
while (-i_Period_Bar & gt; 0)
if (Time [i_Period_Bar] & lt; t_D1_Bar_To_Fill) break;
buff_1st_Bar_Inner_Zero [i_Period_Bar] = d_Range_Low + 0.2 * (d_Range_High - d_Range_Low);
buff_1st_Bar_Inner [i_Period_Bar] = d_Range_High - 0.2 * (d_Range_High - d_Range_Low);
// 신호선의 시작 - 전날의 마지막 막대부터.
buff_Signal [i_Current_TF_Bar] = buff_Signal [i_Current_TF_Bar - 1] = d_Range_Low - gd_Extremum_Break;
buff_Signal_Color [i_Current_TF_Bar] = buff_Signal_Color [i_Current_TF_Bar - 1] = 0;
if (Show_Outer) while (-i_Period_Bar & gt; 0)
if (Time [i_Period_Bar] & lt; t_D1_Bar_To_Fill) break;
while (-i_Period_Bar & gt; 0)
if (Time [i_Period_Bar] & lt; t_D1_Bar_To_Fill) break;
buff_1st_Bar_Inner_Zero [i_Period_Bar] = d_Range_High - 0.2 * (d_Range_High - d_Range_Low);
buff_1st_Bar_Inner [i_Period_Bar] = d_Range_Low + 0.2 * (d_Range_High - d_Range_Low);
// 신호선의 시작 - 전날의 마지막 막대부터.
buff_Signal [i_Current_TF_Bar] = buff_Signal [i_Current_TF_Bar - 1] = d_Range_High + gd_Extremum_Break;
buff_Signal_Color [i_Current_TF_Bar] = buff_Signal_Color [i_Current_TF_Bar - 1] = 1;
나머지 모든 레이아웃 선은 현재 시간대의 바 반복 루프 내에 플롯됩니다. 이미 언급했듯이 신호선은 가격이 표시된 곳에서 끝나야합니다. 보류중인 주문 행은 동일한 막대에서 시작하여 가격과의 연락이 발생하는 막대에서 끝나야합니다. Take Profit과 Stop Loss 라인은 같은 바에서 시작해야합니다. 패턴의 레이아웃은 가격이 그 중 하나에 닿는 바에서 끝납니다.
while (++ i_Period_Bar & lt; rates_total)
if (Time [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) 중단;
buff_Signal [i_Period_Bar] = d_Range_Low - gd_Extremum_Break;
if (d_Range_Low - gd_Extremum_Break & gt; = Low [i_Period_Bar]) 중단;
while (++ i_Period_Bar & lt; rates_total)
if (Time [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) 중단;
buff_Signal [i_Period_Bar] = d_Range_High + gd_Extremum_Break;
if (d_Range_High + gd_Extremum_Break & lt; = High [i_Period_Bar]) 중단;
while (++ i_Period_Bar & lt; rates_total)
if (Time [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) 중단;
if (d_Range_Low & lt; = High [i_Period_Bar])
if (buff_Entry [i_Period_Bar - 1] == 0).
// 하나의 막대에서 시작하고 끝내고 1 bar만큼 과거까지 확장합니다.
buff_Entry [i_Period_Bar - 1] = d_Range_Low;
buff_Entry_Color [i_Period_Bar - 1] = 0;
while (++ i_Period_Bar & lt; rates_total)
if (Time [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) 중단;
if (d_Range_High & gt; = Low [i_Period_Bar])
if (buff_Entry [i_Period_Bar - 1] == 0).
// 하나의 막대에서 시작하고 끝내고 1 bar만큼 과거까지 확장합니다.
buff_Entry [i_Period_Bar - 1] = d_Range_High;
buff_Entry_Color [i_Period_Bar - 1] = 1;
// SL은 하루가 시작된 이래로 Low와 같습니다.
d_SL = 낮음 [ArrayMinimum (Low, si_1st_Bar_of_Day, i_Period_Bar - si_1st_Bar_of_Day)];
if (Time [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) 중단;
(d_TP ≤ High [i_Period_Bar] || d_SL ≥ Low [i_Period_Bar])이면,
if (buff_SL [i_Period_Bar - 1] == 0.)
// 하나의 막대에서 시작하고 끝내고 1 bar만큼 과거까지 확장합니다.
buff_SL [i_Period_Bar - 1] = d_SL;
buff_TP [i_Period_Bar - 1] = d_TP;
// SL은 하루가 시작된 이래로 High와 같습니다.
d_SL = 높음 [ArrayMaximum (높음, si_1st_Bar_of_Day, i_Period_Bar - si_1st_Bar_of_Day)];
if (Time [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) 중단;
if (d_SL ≤ High [i_Period_Bar] || d_TP ≥ Low [i_Period_Bar])
if (buff_SL [i_Period_Bar - 1] == 0.)
// 하나의 막대에서 시작하고 끝내고 1 bar만큼 과거까지 확장합니다.
buff_SL [i_Period_Bar - 1] = d_SL;
buff_TP [i_Period_Bar - 1] = d_TP;
루프에서 f_Do_Alert 신호 알림 함수의 호출 코드를 제거해 봅시다. 실제로, 이 표시기에 관련된 것보다 약간 더 넓은 기회가 있습니다. 이 기능은 오디오 파일로 작업 할 수 있으므로이 옵션을 사용자 지정 설정에 추가 할 수 있습니다. 구매 및 판매 신호에 대해 별도의 파일을 선택하는 기능도 마찬가지입니다. 기능 목록 :
string s_Message, // 경고 메시지.
bool b_Alert = true, // 팝업 창을 표시 하시겠습니까?
bool b_Sound = false, // 사운드 파일을 재생합니까?
bool b_ = false, //?
bool b_Notification = false, // 푸시 알림을 보냅니 까?
문자열 s__Subject = "", // subject.
string s_Sound = "alert. wav"// 사운드 파일.
정적 문자열 ss_Prev_Message = "침묵이있었습니다"; // 이전 경고 메시지.
정적 datetime st_Prev_Time; // 이전 알림 막대 시간.
datetime t_This_Bar_Time = TimeCurrent () - PeriodSeconds () % PeriodSeconds (); // 현재 바 시간.
//이 막대에서 다른 및 / 또는 1 번째.
s_Message = StringFormat ( "% s | % s | % s | % s",
TimeToString (TimeLocal (), TIME_SECONDS), // 로컬 시간.
StringSubstr (EnumToString (ENUM_TIMEFRAMES (_Period)), 7), // TF.
if (b_Alert) Alert (s_Message);
if (b_) SendMail (s__Subject + ""+ _Symbol, s_Message);
if (b_Notification) SendNotification (s_Message);
if (b_Sound) PlaySound (s_Sound);
함수를 호출하고 OnCalculate 이벤트 처리기를 완료하기 전에 프로그램 본문에있는 텍스트를 작성해야하는지 확인하기위한 코드는 다음과 같습니다.
i_Period_Bar = rates_total - 1; // 현재 바.
if (buff_Signal [i_Period_Bar] == 0) return (rates_total); // 아직 잡을 것이없는 (또는 이미)
buff_Signal [i_Period_Bar] & gt; 높음 [i_Period_Bar]
buff_Signal [i_Period_Bar] & lt; 낮음 [i_Period_Bar]
) return (rates_total); // 아무 신호도 만지지 않는다.
string s_Message = StringFormat ( "TS 80-20 : 필요한 % s % s, TP : % s, SL : % s",
buff_Signal_Color [i_Period_Bar] & gt; 0? "BuyStop": "SellStop",
DoubleToString (d_Entry_Level, _Digits),
DoubleToString (d_TP, _Digits),
DoubleToString (d_SL, _Digits)
f_Do_Alert (s_Message, Alert_Popup, false, Alert_, Alert_Push, Alert__Subj);
표시기의 전체 소스 코드는 첨부 파일 (TS_80-20.mq5)에서 찾을 수 있습니다. 시스템에 따른 거래 레이아웃은 분 차트에서 가장 잘 볼 수 있습니다.
인디케이터는 바 내부의 진드기가 아니라 바 데이터를 사용합니다. 즉, 하나의 막대에서 가격이 여러 레이아웃 선 (예 : 이익 실현 및 중단 손실 선)을 넘은 경우 먼저 교차 한 선을 정의 할 수는 없습니다. 또 다른 불확실성은 시작과 끝이 일치 할 수 없다는 사실에서 기인합니다. 그렇지 않으면 DRAW_LINE 및 DRAW_COLOR_LINE 유형의 버퍼에있는 행이 사용자에게 보이지 않게됩니다. 이러한 기능은 레이아웃 정확도를 줄이지 만 여전히 분명합니다.
'80 -20 '거래 전략 테스트 전문가 자문위원.
Street Smarts : High Probability 단기 트레이딩 전략에 대한 책에서 나온 전략을 테스트하기위한 기본 EA는 첫 번째 기사에서 자세히 설명했습니다. 두 가지 중요한 변화를 삽입합시다. 첫째, 신호 모듈을 지시계에 사용해야하므로 거래량 계산을 설정하는 것이 합리적입니다. 우리는 이미 이것을 이미 마쳤습니다. 신호 상태와 별도로 fe_Get_Entry_Signal 함수는 주문 배치, Stop Loss 및 Take Profit 레벨을 반환합니다. 따라서 이전 EA 버전에서 코드의 해당 부분을 제거하여 함수에서 수준을 받아 들일 수있는 변수를 추가하고 함수 호출 자체를 편집 해 봅시다. 이전 코드 블록과 새 코드 블록의 목록은 첨부 파일 (문자열 128-141)에서 찾을 수 있습니다.
기본 EA 코드에 대한 또 다른 중요한 추가 사항은 이전 2 개와 달리이 TS가 단기 경향을 처리한다는 사실 때문입니다. 롤백은 하루에 한 번 발생하며 반복되지 않을 것으로 가정합니다. 즉, 로봇은 다음 날까지 기존 신호를 무시한 한 항목 만 남겨 두어야합니다. 이를 구현하는 가장 쉬운 방법은 프로그램 메모리에서 bool 유형의 정적 또는 전역 변수를 사용하는 것입니다. 그러나 어떤 이유로 EA 작동이 중단되면 (터미널이 닫히고 EA가 차트에서 제거되는 등) 플래그 값도 손실됩니다. 따라서 우리는 오늘날의 신호가 이전에 활성화되었는지를 확인할 수 있어야합니다. 이를 위해 오늘의 거래 내역을 분석하거나 프로그램이 아닌 터미널 전역 변수에 마지막 항목의 날짜를 저장할 수 있습니다. 구현하기가 훨씬 쉽기 때문에 두 번째 옵션을 사용합시다.
'하루 한 항목'옵션을 관리하고 출시 된 각 버전의 ID를 설정할 수있는 기능을 사용자에게 제공하십시오. 터미널 수준의 전역 변수를 사용하려면 다음이 필요합니다.
입력 uint Magic_Number = 2016; // EA 마법 번호.
'하루 한 항목'옵션을 프로그램의 전역 변수 정의 블록에 구현하는 데 필요한 변수를 추가합시다. OnInit 함수에서 초기화하십시오.
gs_Prefix // (슈퍼) 전역 변수의 식별자.
gs_Prefix = StringFormat ( "SSB % s % u % s", _Symbol, Magic_Number, MQLInfoInteger (MQL_TESTER)? "t": "");
gb_Position_Today = int (GlobalVariableGet (gs_Prefix + "Last_Position_Date")) == TimeCurrent () - TimeCurrent () % 86400;
gb_Pending_Today = int (GlobalVariableGet (gs_Prefix + "Last_Pending_Date")) == TimeCurrent () - TimeCurrent () % 86400;
여기서 로봇은 전역 변수의 값을 읽고 기록 된 시간을 시작 날짜와 비교하여 오늘날 신호가 이미 처리되었는지 여부를 정의합니다. Time is written to the variables in two places — let's add the appropriate block to the pending order installation code (additions highlighted):
if (Log_Level > LOG_LEVEL_NONE) Print ( "Pending order placing error" );
// the distance from the current price is not enough :(
if (Log_Level > LOG_LEVEL_ERR)
PrintFormat ( "Pending order cannot be placed at the %s level. Bid: %s Ask: %s StopLevel: %s" ,
DoubleToString (d_Entry_Level, _Digits ),
DoubleToString (go_Tick. bid, _Digits ),
DoubleToString (go_Tick. ask, _Digits ),
DoubleToString (gd_Stop_Level, _Digits )
// to update the flag:
GlobalVariableSet ( // in the terminal global variables.
TimeCurrent () — TimeCurrent () % 86400.
gb_Pending_Today = true ; // in the program global variables.
The second block is placed after the code defining a newly opened position:
if ( PositionGetDouble ( POSITION_SL ) == 0 .)
// update the flag:
GlobalVariableSet ( // in the terminal global variables.
TimeCurrent () — TimeCurrent () % 86400.
gb_Position_Today = true ; // in the program global variables.
These are the only significant changes in the previous EA version code. The finalized source code of the new version is attached below.
Strategy backtesting.
In order to illustrate the trading system viability, its authors use patterns detected on the charts from the end of the last century. Therefore, we need to check its relevance in today's market conditions. For testing, I took the most popular Forex pair EURUSD, the most volatile pair USDJPY and one of the metals — XAUUSD. I increased the indents specified by Raschke and Connors 10 times, since four-digit quotes were used when the book was written, while I tested the EA on five-digit ones. Since there is no any guidance concerning the trailing parameters, I have selected the ones that seem to be most appropriate to daily timeframe and instrument volatility. The same applies to the Take Profit calculation algorithm added to the original rules — the ratio for its calculation was chosen arbitrarily, without deep optimization.
The balance chart when testing on the five-year EURUSD history with the original rules (no Take Profit):
The same settings and Take Profit:
The balance chart when testing the original rules on the five-year USDJPY history:
The same settings and Take Profit:
The balance chart when testing the original rules on the daily gold quotes for the last 4 years:
The full data on the robot settings used in each test can be found in the attached archive containing the complete reports.
결론.
The rules programmed in the signal module match the 80-20 trading system description provided by Linda Raschke and Laurence Connors in their book "Street Smarts: High Probability Short-Term Trading Strategies". However, we have extended the original rules a bit. The tools (the robot and the indicator) are to help traders draw their own conclusions concerning the TS relevance in today's market. In my humble opinion, the TS needs a serious upgrade. In this article, I have tried to make some detailed comments on developing the code of the signal module, as well as the appropriate robot and indicator. I hope, this will help those who decide to do the upgrade. Apart from modifying the rules, it is also possible to find trading instruments that fit better to the system, as well as signal detection and tracking parameters.
MetaQuotes Software Corp. 에서 러시아어로 번역

DOUBLE MOVING AVERAGE.
While the single and double moving average systems are common, they are mostly mentioned as reversal systems that are in the market 100% of the time. We know that the market doesn't trend 100% of the time so the example double moving average crossover system below is set up to trigger an entry but is not always in the market. The reversal system version is mentioned and tested as the dual moving average in Way of the Turtle and Technical Traders Guide to Computer Analysis of the Futures Market. The dual moving average crossover system is a simplified version of the Donchian 5 and 20 System that is mentioned and tested in The Dow Jones-Irwin Guide To Trading Systems however we have seen other versions of the Donchian 5/20 System with additional rules of entry besides the simple MA crossover alone. LeBeau and Lucas say the Donchian 5/20 ". is not a simple reversal system but uses an elaborate set of filters."
The basic entry of the dual moving average system is when the faster timeframe moving average line crosses the slower timeframe moving average line. For the Donchian 5 day and 20 day example moving averages, a long position occurs when the 5 day moving average crosses above the 20 day moving average. A short position occurs when the 5 day moving average crosses below the 20 day moving average. You can choose to take the entry as soon as the lines cross or wait until the price closes on the side of the cross.
위치 크기.
Position Sizing and the stop are the biggest changes from the reversal version. We'll use a stop and calculate the position Size using the Percent Volatility method which is a set risk if stopped out. For our example we have a 14 day ATR * 1.5 stop that risks 2% account equity per position. If a long entry at $10 has a stop at $8.5, $1.5 would be at risk for every share if it were a stock purchase. If the account size is $10,000 and the risk per position is 2%, your risk would be $200. The $200 ($10,000 * 2%) divided by $1.50 (of ATR value if the stop is hit) would be a position of 133 shares. Calculate the position size by taking your risk and dividing it by the value of the movement to the stop.
Together with calculating the position size, we'll use a multiple of the ATR as the stop. An example is using a 14 day ATR multiplied by 1.5 and we'll add numbers to it. If you have a stock that you entered at $10 and the 14 day ATR is $1, you would be stopped out of a long position at $8.50. A short position would be stopped out at $11.50.
The reversal versions wait until the moving average lines cross the other way but depending on your timeframes you may have significant lag that gives back much of the trend's profit. A tighter exit such as the price hitting a Parabolic SAR, a break of a price channel or using a break of another moving average line may be a better alternative for your system.
변화.
To avoid some whipsaws when the market is trending sideways you can add additional filtering such as ADX, Stochastics or RSI. If you are using slower timeframes the moving averages will lag the price action so an additional filter to compensate can be a new price high before a long position or a new price low before a short position.
자세한 내용은.
An internet search will find many pages related to this system. You can also find it in the three books mentioned above with testing results and comparing it to other systems. Way of the Turtle uses it as a long term system with 100 day and 350 day lines. Technical Traders Guide to Computer Analysis of the Futures Market and The Dow Jones-Irwin Guide To Trading Systems use it with the 5 day and 20 day lines.
Buy the full code for this system at TFmt4 to automate and test this Dual Moving Average system using MetaTrader 4.
Buy the full code for this system at TFmt5 to automate and test this Dual Moving Average system using MetaTrader 5.
이 웹 사이트에 포함 된 정보를 기반으로 한 투자 결정과 관련된 모든 위험을 감수하십시오. 거래는 성격 상 명확하며 모든 투자자에게 적절하지 않습니다. 투자자는 위험 부담의 위험이 항상 존재하므로 손실을 사전에 준비해야한다는 리스크 자본만을 사용해야합니다. 투자자는 거래 전 자신의 개인 금융 상황을 완벽하게 검토해야합니다. 이 사이트의 시스템은 교육용 예이며 구입 또는 판매 할 권장 사항은 아닙니다. 과거 실적은 미래 결과를 보증하지 않습니다.

Donchian 브레이크 아웃 트레이딩 시스템.
Donchian Breakout 거래 시스템 (아래의 규칙과 설명)은 고전적인 추세 시스템입니다. 따라서 당사는 추세 추세 보고서에 포함 시켰습니다. 이 보고서는 거래 전략으로서 추세의 일반적인 성과를 추적하기위한 벤치 마크를 수립하는 것을 목표로합니다.
지혜의 추세 다음은 30 개가 넘는 300 개가 넘는 선물 시장에서 선택된 여러 시간대와 미래의 포트폴리오로 시뮬레이션 된 고전적 추세 추적 시스템 (Donchian Breakout 및 기타)으로 구성된 종합 지수의 실적을보고합니다. Wisdom Trading은 고객에게 액세스 권한을 제공 할 수 있습니다. 포트폴리오는 주요 부문에서 글로벌하고 다양하며 균형 잡힌 포트폴리오입니다.
Donchian Breakout 거래 시스템의 업데이트를 포함하여 매월 보고서에 대한 업데이트를 게시합니다.
Donchian 탈주 시스템이 설명되었습니다.
Donchian Breakout Trading System은 터틀 시스템을 기반으로합니다. 터틀 로직은 단일 유닛을 제외하고 Last Trade is Winner 규칙을 사용하지 않으며 상관 관계를 사용하지 않으며 MACD Portfolio Manager를 사용하여 거래를 필터링합니다.
Donchian 시스템은 Donchian 이중 채널 시스템과 유사한 브레이크 아웃에서 거래됩니다. 두 개의 소규모 인물, 입장을위한 더 긴 탈주 및 출구를위한 짧은 탈주가 있습니다.
Donchian 시스템은 Average True Range (ATR)에 기반한 정지를 사용합니다. N의 Turtle 개념은보다 일반적인 용어 인 ATR (Average True Range)으로 대체되었습니다.
가격은 선행 X 일의 최고 또는 최저에 도달하면 거래가 시작됩니다. 예를 들어, Entry Breakout = 20은 가격이 20 일 동안 최고치에 도달하면 긴 포지션이 취해진 것을 의미합니다. 가격이 20 일 최저에 도달하면 짧은 포지션이 취해진 다.
0으로 설정하면이 매개 변수가 적용되지 않습니다. ATR의 항목 옵셋이 1.0으로 설정된 경우 가격이 일반 브레이크 아웃 가격에 1.0 ATR을 더할 때까지 긴 위치가 입력되지 않습니다. 마찬가지로 가격이 정상적인 브레이크 아웃 가격에서 1.0 ATR을 뺀 값이 될 때까지 짧은 포지션이 입력됩니다. 이 매개 변수에는 양수 또는 음수 값을 지정할 수 있습니다. 양수 값을 사용하면 효과적으로 선택한 브레이크 아웃 임계 값 이후 지정된 점까지 입력이 지연됩니다. 마이너스 값은 선택한 브레이크 아웃 임계 값보다 먼저 입력됩니다.
이 매개 변수는 ATR로 초기 가격에서 시작 가격까지의 거리를 정의합니다. 이 시스템은 기본적으로 누적 가격이 아닌 주문 입력 가격을 중지 가격의 기준으로 사용합니다. ATR은 일일 변동성의 척도이고 거북이 시스템 정지는 ATR을 기반으로하기 때문에 Donchian System은 변동성에 따라 다양한 시장에서 포지션 크기를 균등하게 만듭니다.
원래 거북이 규칙에 따르면, 가격이 입장료에서 2 ATR 하락하면 긴 포지션이 중단되었습니다. 반대로 입장 가격에서 ATR이 2 ATR 상승하면 매도 포지션이 중단되었습니다.
X 일이 높거나 낮게 움직이는 Exit Breakout 기반 정지와 달리 ATR에서 Stop으로 정의 된 정지는 & # 8220; 정지시 입국시 입구 가격보다 높거나 낮게 고정됩니다. 일단 정해지면 무역 전반에 걸쳐 변화하지 않습니다.
퇴출 브레이크 아웃, 반대 방향 진입 브레이크 또는 ATR 중 정지 중 어느 것이 든 그 가격에 가장 가까운 가격에 가격이 부과되면 거래가 청산됩니다.
진행중인 거래는 가격이 선행 X 일의 최고 또는 최저에 도달하면 종료됩니다. 이 개념은 Entry Breakout과 동일하지만 논리는 바뀝니다. 가격이 X 일 낮을 때 긴 거래가 종료되고 가격이 X 일 낮을 때 짧은 거래가 종료됩니다. 출구 브레이크 아웃은 가격과 함께 (또는 아래로) 이동합니다. 그것은 불리한 가격 소풍으로부터 보호하고 추세가 바뀔 때 이익을 잠그는 역할을하는 후행 중지 역할을합니다.
퇴출 브레이크 아웃, 반대 방향 진입 브레이크 또는 ATR 중 정지 중 어느 것이 든 그 가격에 가장 가까운 가격에 가격이 부과되면 거래가 청산됩니다.
이 옵션은 초기 정지 보류 및 반전 종료 매개 변수 사용으로 활성화 또는 비활성화 할 수 있습니다. 초기 정류장이 개최되는 경우, 거래가 진행되는 동안 초기 정가가 사용됩니다. 반전 출구를 사용하는 경우 가격이 반대 방향의 진입 브레이크 아웃에 도달하면 거래가 종료됩니다.
0으로 설정하면이 매개 변수가 적용되지 않습니다. ATR의 Exit Offset을 1.0으로 설정하면 가격이 정상적인 브레이크 아웃 가격에서 1.0 ATR을 뺀 값이 될 때까지 긴 위치가 종료되지 않습니다. 마찬가지로, 가격이 정상적인 탈주 가격에 1.0 ATR을 더할 때까지 짧은 포지션이 종료됩니다. 이 매개 변수에는 양수 또는 음수 값을 지정할 수 있습니다. 양수 값을 지정하면 선택한 브레이크 아웃 임계 값 이후의 지정된 지점까지 이탈이 지연됩니다. 음수 값은 브레이크 아웃 임계 값을 선택하기 전에 종료됩니다.
ATR 계산 일 수를 정의했습니다. True Range의 지수 이동 평균입니다. 39 일은 20 일 Wilder ATR을 나타냅니다.
이것은 MACD 표시기의 이동 평균 부분에 대한 일 수입니다.
MACD 표시기의 짧은 이동 평균 부분에 대한 일 수입니다.
MACD 자체는 단시간 이동 평균에서 장시간 이동 평균을 뺀 값입니다. 이 시스템은 MACD가 0보다 큰 경우 Long 거래를 허용하고 MACD가 0보다 작은 경우 Short 거래를 허용합니다.
이 시스템은 고정 소수 머니 관리자를 사용합니다.
이 시스템의 사용자 정의 버전.
우리는 귀하의 거래 목적에 맞게이 시스템의 맞춤형 버전을 제공 할 수 있습니다. 포트폴리오 선택 / 다양 화, 기간, 자본 시작 & # 8230; 우리는 요구 사항에 맞는 매개 변수를 조정하고 테스트 할 수 있습니다.
전체 맞춤 시뮬레이션 보고서를 논의하고 요청하려면 Google에 문의하십시오.
대체 시스템.
공개 거래 시스템 외에도 우리는 장기 추세에서 단기 평균 전환에 이르는 다양한 전략을 통해 고객에게 여러 독점 거래 시스템을 제공합니다. 우리는 또한 완전 자동화 된 전략 거래 솔루션을위한 완벽한 실행 서비스를 제공합니다.
거래 시스템 성능을 보려면 아래 그림을 클릭하십시오.
가상의 결과에 대한 CFTC 요구 리스크 공개.
가상 성능 결과에는 많은 고유 한 제한 사항이 있으며 그 중 일부는 아래에 설명되어 있습니다. 어떤 계정도 표시된 것과 유사한 이익 또는 손실을 달성 할 가능성이 있거나 그렇게 할 가능성이 높지는 않습니다. 실제로 가상의 성과 결과와 특정 거래 프로그램에 의해 실제로 달성 된 실제 결과 간에는 종종 큰 차이가 있습니다.
가설 성능 결과의 한계 중 하나는 일반적으로 뒤늦은 지혜의 도움으로 준비된다는 것입니다. 또한 가상 거래는 재무 위험을 포함하지 않으며 실제 거래에서 재무 위험의 영향을 완전히 설명 할 수있는 가상 거래 기록이 없습니다. 예를 들어, 거래 손실에도 불구하고 손실을 견디거나 특정 거래 프로그램을 고수하는 능력은 실제 거래 결과에 부정적인 영향을 줄 수있는 중대한 요소입니다. 일반적으로 시장 또는 가상 거래 실적의 준비 과정에서 충분히 설명 될 수 없으며 실제 거래 결과에 악영향을 미칠 수있는 특정 거래 프로그램의 구현과 관련된 수많은 다른 요소가 있습니다.
Wisdom Trading은 NFA 등록 브로커입니다.
우리는 개인, 기업 및 업계 전문가에게 글로벌 상품 중개 서비스, 선물 선물 상담, 직접 액세스 거래 및 거래 시스템 실행 서비스를 제공합니다.
독립적 인 소개 브로커로서 우리는 전 세계 여러 주요 선물위원회 상인과의 관계를 유지합니다. 다양한 청산 관계를 통해 고객에게 광범위한 서비스와 매우 다양한 시장을 제공 할 수 있습니다.
우리의 청산 관계는 고객에게 전세계 선물, 상품 및 외환 시장에 대한 24 시간 액세스 권한을 제공합니다.
선물 거래는 손실 위험이 크며 모든 투자자에게 적합하지 않습니다. 과거 성과가 미래의 성과를 나타내는 것은 아닙니다.

Tried, True, and Simple Technical Rules for Investment Trading.
High-Powered Investing All-in-One For Dummies, 2nd Edition.
Many professional traders make a living by applying the same simple indicators and the same simple rules, over and over again, on the same small set of securities. “It can’t be that easy!” you think. But it is. Professionals have a superhuman ability to focus on a single narrow set of circumstances. They know from experience that the indicator and rule produce a profit most of the time. If it fails to produce a profit this time, too bad. They accept the loss and move on to the next trade.
Following are two rules that have stood the test of time:
5/20 system: One of the oldest trading concepts is also one of the simplest — Richard Donchian’s 5/20 system, which uses a trend-following principle. You buy when the 5-day moving average crosses above the 20-day moving average and sell when the closing price crosses below the 5-day moving average. Both the buy-and-sell crossover signals are qualified according to additional filtering criteria, specifically that a crossover has to exceed the extent of the previous crossover in the same direction, proving its street credentials, so to speak.
Opening range breakout: Another simple but effective one-rule concept is to buy when the price moves above the range established in the first x number of minutes of trading. The opening range breakout is a volatility breakout setup.
With the opening range breakout, you can improve the odds of getting a successful trade by adding one or more confirmation qualifiers, such as:
The preceding bar was an inside day or doji.
The x-minute opening range over the past three to ten days was narrowing.
The opening is a gap from the day before.
The key reason for adding confirming indicators is to overcome the inconvenient little fact that every indicator fails some of the time. By requiring a second indicator that gives the same buy or sell signal, you increase the probability that your trades are profitable.

5 20-trading system


상인 돕기 번성.
오늘 eCourse에 등록하십시오!
December 9, 2011 by Steve.
Ed Seykota is a legend in the trading world. His ability to produce consistent returns for decades, and his masterful growth of his client’s accounts has earned him a place of distinction. But who inspired this Market Wizard’s trading methods?
Richard Donchian didn’t begin his successful trend following system until the age of 65. He was very successful and continued to trade into his 90s. While he operated primarily in the field of commodities, his technical analysis is applicable to any market.
Donchian’s 4 week trading rule system has been at the heart of many successful trading systems, and is one of the simplest and most profitable ways to trade trending markets. People tend to think complicated is better, but the 4 week rule is a straight forward way of getting you on the right side of a profitable trend. Note that this system was also Richard Dennis’ inspiration for his trading methods, and was taught to the legendary Turtle Traders.
Apart from the 4 week rule, Donchian did work with a five and twenty day moving average crossover signal system, and devised buy and sell rules using a weekly time period.
During Ed Seykota’s interview in the book Market Wizards by Jack Schwagger, Ed describes the influences that Richard Donchian had on his trading system. While Donchian used a five and twenty day moving average cross over system, Ed used exponential moving averages (where more weight is given to the more recent data to calculate the moving average). This occurred in the early 1970s – when computers were new and very slow. For example, Ed tested approximately 100 variations of four simple trend following systems on a computer was the size of a room, and the tests took him six months to complete.
Anyone who inspired one of the world’s top traders is someone who deserves our attention and study!
Donchian’s 20 Trading Guides (First publication: 1934) General Guides:
Beware of acting immediately on a widespread public opinion. Even if correct, it will usually delay the move. From a period of dullness and inactivity, watch for and prepare to follow a move in the direction in which volume increases. Limit losses and ride profits, irrespective of all other rules. Light commitments are advisable when market position is not certain. Clearly defined moves are signaled frequently enough to make life interesting and concentration on these moves will prevent unprofitable whip-sawing. Seldom take a position in the direction of an immediately preceding three-day move. Wait for a one-day reversal. Judicious use of stop orders is a valuable aid to profitable trading. Stops may be used to protect profits, to limit losses, and from certain formations such as triangular foci to take positions. Stop orders are apt to be more valuable and less treacherous if used in proper relation to the chart formation. In a market in which upswings are likely to equal or exceed downswings, heavier position should be taken for the upswings for percentage reasons – a decline from 50 to 25 will net only 50% profit, whereas an advance from 25 to 50 will net 100% In taking a position, price orders are allowable. In closing a position, use market orders.” Buy strong-acting, strong-background commodities and sell weak ones, subject to all other rules. Moves in which rails (transportation) lead or participate strongly are usually more worth following than moves in which rails (transportation) lag. A study of the capitalization of a company, the degree of activity of an issue, and whether an issue is a lethargic truck horse or a spirited race horse is fully as important as a study of statistical reports.
A move followed by a sideways range often precedes another move of almost equal extent in the same direction as the original move. Generally, when the second move from the sideways range has run its course, a counter move approaching the sideways range may be expected. Reversal or resistance to a move is likely to be encountered 0n reaching levels at which in the past, the commodity has fluctuated for a considerable length of time within a narrow range on approaching highs or lows Watch for good buying or selling opportunities when trend lines are approached, especially on medium or dull volume. Be sure such a line has not been hugged or hit too frequently. Watch for “crawling along” or repeated bumping of minor or major trend lines and prepare to see such trend lines broken. Breaking of minor trend lines counter to the major trend gives most other important position taking signals. Positions can be taken or reversed on stop at such places. Triangles of ether slope may mean either accumulation or distribution depending on other considerations although triangles are usually broken on the flat side. Watch for volume climax, especially after a long move. Don’t count on gaps being closed unless you can distinguish between breakaway gaps, normal gaps and exhaustion gaps. During a move, take or increase positions in the direction of the move at the market the morning following any one-day reversal, however slight the reversal may be, especially if volume declines on the reversal.
무역 자원.
우리의 파트너들.
우리의 eCourses.
새로운 Trader U Shop.
추천 도서.
New Trader Rich Trader : 제 2 판.
새로운 상인은 탐욕스럽고 비현실적인 기대를 가지고 있습니다. 리치 트레이더는 자신의 & # x2020;
$ 3.99 킨들의 에디션.
무역 심리학.
수익성있는 거래 원칙.
스티브 번즈 (Steve Burns) : 금융 시장에 평생 매료 된 스티브 번즈 (Steve Burns)는 1993 년에 투자를 시작했으며 1995 년 자신의 계좌를 거래했습니다. & # x2020; 더 읽기.
우리의 eCourses.
이사 평균 101.
우리와 함께 홍보하다.
트위터 광고에 대해 생각해 봤다면, 스티브는 당신의 녀석입니다! 7 만 명 이상의 헌신적 인 추종자가있는 Steve는 가장 우수한 & # x2026; 더 읽기.

Comments

Popular Posts