English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
preview
Fix PriceAction 손절매 혹은 Fixed RSI(스마트 스탑로스)

Fix PriceAction 손절매 혹은 Fixed RSI(스마트 스탑로스)

MetaTrader 5 | 16 5월 2022, 16:14
351 0
vwegba
vwegba

소개

트레이딩 세계에서 성스런 성배를 찾는 것이 저를 이 연구로 이끌었습니다. 손절매는 자금 관리를 말할 때 트레이딩에서 가장 중요한 도구입니다. 자금 관리는 트레이더가 시장에서 수익을 얻고 장기적으로 일관성 있는 수익을 유지할 수 있는 다양한 방법 중 하나입니다. 앞서 언급했듯이 자금 관리는 손절매 및 위험 보상 비율(risk-reward ratio)과 밀접한 관련이 있습니다. 1:1.5R(Risk:Reward) 비율은 다른 Risk:Reward의 승률에 비해 승률이 높은 경향이 있지만 대부분의 경우 1:>1.9R(Risk:Reward) 비율이 수익성이 더 좋고 장기적으로도 일정한 수익을 유지하는 경향이 있습니다. 이 "성스러운 성배"와 같은 트레이딩 전략에는 단점이 있습니다. 이상적인 상황에서 1:>1.9R(Risk:Reward)로 거래하는 것은 10번의 거래(각 1핍) 중 6번의 거래가 손실(6핍)이고 4번의 거래가 수익을 얻은 경우(8핍) 수익성이 있습니다. 이것은 우리가 2핍의 이익을 얻는다는 것을 의미합니다. 그러나 실제에서는 언제나 그렇지는 않을 수도 있습니다. 이러한 현상이 나타나게 되는 주요 이유는 "손절매 사냥"이라는 것 때문입니다 손절매 사냥이란 손절매가 된 후 시장이 다시 이전에 예측한 방향으로 움직이는 것을 말합니다. 손절매 사냥은 트레이딩과 자금 관리에서 주요한 문제입니다. 또한 트레이더에게(대부분 초보 트레이더)에게 심리적인 영향을 미칩니다. 

손절매 사냥

Fig 1.1. 손절매 사냥

손절매 사냥은 주로 가격의 움직임이나 캔들 차트와 관련된 고정 손절매 또는 트레일링 손절매와 관련이 있습니다. 가격 차트에 손절매가 없으면 손절매 사냥이 없을 것입니다. 그러나 손절매가 없이 거래하는 것은 거래 계좌를 날려버릴 확률과 같습니다(1과 동일).


RSI 손절매

RSI 오실레이터는 100에서 0까지의 값을 가지는 창에 그려지며 가격 선 차트의 복제본입니다.

thRsi


Fig 1.2. RSI와 라인 차트

RSI 지표와 라인 차트가 매우 유사한 경우 RSI 지표를 스마트 손절매로 사용하면 손절매 사냥의 위험을 줄일 수 있습니다.

목적:

여기서 저의 목표는 RSI 손절매를 사용할 경우 손절매 사냥을 줄이고 장기적으로 수익이 나는지를 확인하는 것입니다.

목표:

동일한 두개의 전략이 비교됩니다: 가격 차트에 손절매가 설정된 전략과 RSI 지표에 손절매가 설정된 차트




전략과 코드

가격 차트에서의 전통적인 손절매

가격과 관련한 고정의 손절매가 있는 첫 번째 EA. 아래는 전략을 실행하기 위한 요구 사항입니다.

패러미터

설명

사용된 지표

MACD (12,26,9)

사용된 지표

Moving Average (200)

사용된 지표

Moving Average (50)

사용된 지표

ATR (5)

차트 주기

1 min

매수 진입

MACD 라인과 시그널 라인이 모두 0보다 아래에 있고 이동 평균(50)이 이동 평균(200)의 위에 있으면서 MACD 라인이 시그널 라인보다 큰 경우

매도 진입

MACD 라인과 시그널 라인이 모두 0 위에 있고 이동 평균(50)이 이동 평균(200)의 아래에 있으면서 MACD 라인이 시그널 라인보다 작은 경우

청산

익절과 스탑로스(1:2R).

매수일때 손절매는 진입 후 20개의 캔들 중 가장 낮은 값에서 ATR(5) 값을 뺀 값입니다.

그리고 매도일때 손절매는 진입 후 20개의 캔들 중 가장 높은 값에 ATR(5) 값을 더한 값입니다.

 


그래픽으로 표현하면 아래와 같습니다.

전통적인 매수 진입 스탑로스


그림 2.1 매수 진입

전통적인 매도 진입 스탑로스


그림 2.2 매도 진입

코드

코드의 첫 번째 부분은 주로 변수 선언 및 데이터 입력을 위한 것입니다. 모든 지표 핸들러 변수가 여기에서 선언되었습니다.

#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
#include<Trade\Trade.mqh>
CTrade trade;
int MATrend;
int MADirection;
int MACD;
int ATR;
input int afi;// ----------RiskAmount------------
input double risk = 0.02; //% Amount to risk
input int atrValue = 20; // ATR VAlue
input int ai;// ----------Moving Average inputs------------
input int movAvgTrend = 200;// Moving Average Trend
input int movAvgDirection = 50;//moving Average for trend Direction;
input int i;// -----------MACD inputs-----------------------
input int fast = 12;// Macd Fast
input int slow = 26; //Macd Slow
input int signal = 9; //Signal Line

기타 변수 선언

double pipValue  = 0.0;// 

double Balance; // For the Current Balance

변수는 init() 함수의 각 핸들러에 할당되었습니다.

int OnInit()
  {
//---
      //Moving Averages Indicators''
      MATrend = iMA(_Symbol,_Period,movAvgTrend,0,MODE_SMA,PRICE_CLOSE); //Moving Average 200
      MADirection = iMA(_Symbol,_Period,movAvgDirection,0,MODE_EMA,PRICE_CLOSE); //Moving Average 50
      //MACD
      MACD = iMACD(_Symbol,_Period,fast,slow,signal,PRICE_CLOSE);//MACD 
      //ATR
      ATR = iATR(_Symbol,_Period,atrValue);
      //---
      point=_Point;
      double Digits=_Digits;
      
      if((_Digits==3) || (_Digits==5))
      {
         point*=10;
      }
      return(INIT_SUCCEEDED);
  }


전략이 실행 되는 코드는 아래와 같습니다.

void Strategy() {
   MqlRates priceAction[];
   ArraySetAsSeries(priceAction,true);
   int priceData = CopyRates(_Symbol,_Period,0,200,priceAction); 
   
   double maTrend[]; ArraySetAsSeries(maTrend,true);
   CopyBuffer(MATrend,0,0,200,maTrend); //200 MA
     
   double madirection[]; ArraySetAsSeries(madirection,true);
   CopyBuffer(MADirection,0,0,200,madirection);  //50 MA
   
   double macd[]; ArraySetAsSeries(macd,true);
   CopyBuffer(MACD,0,0,200,macd);  //MACD
   
   double macds[]; ArraySetAsSeries(macds,true);
   CopyBuffer(MACD,1,0,200,macds);  //MACD_Signal Line   
      
   double Bid  = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);  
   
   
   if (madirection[1]>maTrend[1]) {
      //Buy ; Uptrend
     
     
      
      bool macd_bZero = macds[1]<0&&macd[1]<0; //MacD Signal Line is less than Zero
      bool macd_cross = macd[1]>macds[1];// Macd Crosses the signal line
      
      if (macd_bZero && macd_cross) {
         buyTrade = true;
      }
      
      
   } else if (madirection[1]<maTrend[1]) {
      //Sell; DownTrend
      
     
      bool macd_bZero = macds[1]>0&&macd[1]>0;; //MacD Signal Line is less than Zero
      bool macd_cross = macd[1]<macds[1];// Macd Crosses the signal line
      
      if (macd_bZero && macd_cross) {
         sellTrade = true;
      }      
      
    }  
    
   if (buyTrade && sellTrade) {
      buyTrade = false;
      sellTrade = false;
   return;
   }
      
      
   if (buyTrade) {
      buyTrade = false;
      sellTrade = false;
      
      Buy(Ask);
   } else if (sellTrade) {
      buyTrade = false;
      sellTrade = false;
      
      Sell(Bid);   
   }
   
}

진입(매수와 매도)

void Buy(double Ask) {
   double atr[]; ArraySetAsSeries(atr,true); //This array is use to store all ATR value to the last closed bar
   CopyBuffer(ATR,0,0,200,atr); // This method copy the buffer value of the ATR indicator into the array (200 buffered data)

   theLotsize =  NormalizeDouble((Balance*risk)/((MathAbs(Ask-((stoplossforBuy(20)-atr[1])))*100)*pipValue),2); // This Calculate the lotsize using the % to risk
   trade.Buy(theLotsize,_Symbol,Ask,(stoplossforBuy(20)-atr[1]),Ask+(2*MathAbs(Ask-((stoplossforBuy(20)-atr[1])))),NULL); //Buy Entry with zero stoploss && take profit is twice the distance between the entry and the lowest candle
    

}
void Sell(double Bid) {
   double atr[]; ArraySetAsSeries(atr,true); //This array is use to store all ATR value to the last closed bar
   CopyBuffer(ATR,0,0,200,atr); // This method copy the buffer value of the ATR indicator into the array (200 buffered data)
   theLotsize =  NormalizeDouble((Balance*risk)/((MathAbs(Bid-((stoplossforSell(20)+atr[1])))*100)*pipValue),2); // This Calculate the lotsize using the % to risk
   trade.Sell(theLotsize,_Symbol,Bid,(stoplossforSell(20)+atr[1]),Bid-(2*MathAbs(((stoplossforSell(20)+atr[1]))-Bid)),NULL); //Sell Entry with zero stoploss && take profit is twice the distance between the entry and the highest candle

}

위의 코드에서 stoplossforSell(int num)과 stoplossforBuy(int num)라는 두 가지 메서드를 호출했습니다. 이 두 가지 메서드는 특히 거래에 진입 한 후 미리 입력한 캔들의 수에서 최고값 및 최저값의 캔들을 식별하기 위한 것입니다. 예를 들어 stoplossforSell(20)은 진입 이전의 20개 캔들 중에서 가장 높은 캔들을 반환합니다.

double stoplossforBuy(int numcandle) {
         int LowestCandle;
         
         //Create array for candle lows
         double low[];
         
         //Sort Candle from current downward
         ArraySetAsSeries(low,true);
         
         //Copy all lows for 100 candle
         CopyLow(_Symbol,_Period,0,numcandle,low);
         
         //Calculate the lowest candle
         LowestCandle = ArrayMinimum(low,0,numcandle);
         
         //Create array of price
         MqlRates PriceInfo[];
         
         ArraySetAsSeries(PriceInfo,true);
         
         //Copy price data to array
         
         int Data = CopyRates(Symbol(),Period(),0,Bars(Symbol(),Period()),PriceInfo);
      
         return PriceInfo[LowestCandle].low;
                  
      
         

}
double stoplossforSell(int numcandle) {
         int HighestCandle;
         double High[];
       
       //Sort array downward from current candle
         ArraySetAsSeries(High,true);
       
       //Fill array with data for 100 candle
         CopyHigh(_Symbol,_Period,0,numcandle,High);
         
         //calculate highest candle
         HighestCandle = ArrayMaximum(High,0,numcandle);
         
         //Create array for price
         MqlRates PriceInformation[];
         ArraySetAsSeries(PriceInformation,true);
         
         
         //Copy price data to array
         int Data = CopyRates(Symbol(),Period(),0,Bars(Symbol(),Period()),PriceInformation);
         
         return PriceInformation[HighestCandle].high;
           
 
 }

이 EA는 보유중인 포지션이 있는지 여부를 확인하고 거래를 시작합니다. 보유중인 포지션이 없으면 전략 메서드가 호출됩니다.

void OnTick()
  {
//---
   pipValue  = ((((SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE))*point)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE))));

   Balance = AccountInfoDouble(ACCOUNT_BALANCE);
   
   if (PositionsTotal()==0) {
      Strategy();
   }
  }

RSI 지표를 통한 RSI 손절매


RSI 지표에 고정 손절매가 있는 두 번째 EA의 경우. 다음은 전략을 위해 필요한요구 사항입니다.

패러미터

설명

사용된 지표

MACD (12,26,9)

사용된 지표

Moving Average (200)

사용된 지표

Moving Average (50)

사용된 지표

ATR (5)

차트 주기

1 min

매수 진입

MACD 라인과 시그널 라인이 모두 0보다 아래에 있고 이동 평균(50)이 이동 평균(200)의 위에 있으면서 MACD 라인이 시그널 라인보다 큰 경우

매도 진입

MACD 라인과 시그널 라인이 모두 0 위에 있고 이동 평균(50)이 이동 평균(200)의 아래에 있으면서 MACD 라인이 시그널 라인보다 작은 경우

청산

익절

매수일때 손절매는 진입 후 20개의 (10) RSI 값 중 가장 낮은 값입니다.

매도일때 손절매는 진입 후 20개의 (10) RSI 값 중 가장 높은 값입니다.

 

RSI가 최고 또는 최저 RSI를 교차하면 거래가 청산 됩니다.

 


시각적으로 쉽게 구분되도록 RSI 손절매에 선이 그려집니다.

매수일때 스탑로스(RSI 스탑로스)


그림 2.3. RSI에 스탑로스를 설정한 매수 거래

현재 RSI 값이 RSI 창의 손절매 라인보다 작으면 거래가 청산됩니다.

매도일때 스탑로스(RSI 스탑로스)


그림 2.4. RSI에 스탑로스를 설정한 매도 거래

현재 RSI 값이 RSI 창의 손절매 라인보다 크면 거래가 청산됩니다.

코드

코드의 첫 번째 부분은 주로 변수 선언 및 데이터 입력을 위한 것입니다. 아래와 같이 첫 번째 지표와 유사하면서 몇가지 추가 사항이 있습니다.

int RSI;
input int rsi = 5; // RSI VAlue
double lowestrsiValue = 100;
double highestrsiValue = 0.0;

onint() 메서드는 아래와 같이 몇 가지 추가 사항을 제외하고 유사합니다.

int OnInit()
  {
              //RSI
      RSI = iRSI(_Symbol,_Period,rsi,PRICE_CLOSE);
}


전략이 실행 되는 코드는 위와 같습니다. 그러나 RSI를 손절매로 사용할 것이기 때문에 매수 및 매도 모두에 대한 항목에는 손절매가 없습니다. 아래는 진입과 관련한 코드입니다.

void Buy(double Ask) {
   double atr[]; ArraySetAsSeries(atr,true); //This array is use to store all ATR value to the last closed bar
   CopyBuffer(ATR,0,0,200,atr); // This method copy the buffer value of the ATR indicator into the array (200 buffered data)

   theLotsize =  NormalizeDouble((Balance*risk)/((MathAbs(Ask-((stoplossforBuy(20)-atr[1])))*100)*pipValue),2); // This Calculate the lotsize using the % to risk
   
   ObjectCreate(0,"sl",OBJ_HLINE,3,0,lowestRSI(10)); // Since our stoploss is zero we assign a smart stoploss on the rsi by drawing a line on the rsi window
   trade.Buy(theLotsize,_Symbol,Ask,0,Ask+(2*MathAbs(Ask-((stoplossforBuy(20)-atr[1])))),NULL);//Buy Entry with zero stoploss && take profit is twice the distance between the entry and the lowest candle
    Print("SL",lowestRSI(10));
}
void Sell(double Bid) {
   double atr[]; ArraySetAsSeries(atr,true); //This array is use to store all ATR value to the last closed bar
   CopyBuffer(ATR,0,0,200,atr); // This method copy the buffer value of the ATR indicator into the array (200 buffered data)
   
   theLotsize =  NormalizeDouble((Balance*risk)/((MathAbs(Bid-((stoplossforSell(20)+atr[1])))*100)*pipValue),2);  // This Calculate the lotsize using the % to risk
   
   ObjectCreate(0,"sl",OBJ_HLINE,3,0,highestRSI(10)); // Since our stoploss is zero we assign a smart stoploss on the rsi by drawing a line on the rsi window
   trade.Sell(theLotsize,_Symbol,Bid,0,Bid-(2*MathAbs(((stoplossforSell(20)+atr[1]))-Bid)),NULL);//Sell Entry with zero stoploss && take profit is twice the distance between the entry and the highest candle
   Print("SL",highestRSI(10));
}


코드의 마지막 부분은 위의 EA와 다른데 이는 RSI의 가장 낮은 값과 가장 높은 값을 얻는 메소드 부분입니다. 이부분은 위의 진입 메소드에서 호출되고 마찬가지로 데이터를 사용하여 가장 낮거나 높은 RSI 지점에 선을 그립니다.

참고: 보유중인 포지션이 없을 때 그려진 선은 전략 메서드에서 삭제됩니다.

 double lowestRSI(int count) {     
      double thersi[]; ArraySetAsSeries(thersi,true);
      CopyBuffer(RSI,0,0,200,thersi);
      
      for (int i = 0; i<count;i++) {
      
         if (thersi[i]<lowestrsiValue) {
            lowestrsiValue = thersi[i];
         }
      }
   return lowestrsiValue;
}
//This method get the Highest RSI afer ENtry to set the smart Stoploss
double highestRSI(int count) {

      
      double thersi[]; ArraySetAsSeries(thersi,true);
      CopyBuffer(RSI,0,0,200,thersi);
      
      for (int i = 0; i<count;i++) {
      
         if (thersi[i]>highestrsiValue) {
            highestrsiValue = thersi[i];
         }
      }
   return highestrsiValue;
}

####

이제 EA가 설정되고 컴파일 되었으므로 결과를 확인하기 위해 두 EA를 모두 테스트할 수 있습니다.


테스트와 결과

손절매 사냥 테스트

이 섹션에서는 시뮬레이션에서 얻은 테스트와 결과가 표시됩니다. 수행할 첫 번째 테스트는 RSI STOP-LOSS EA가 거래 중 손절매 사냥 문제를 줄일 수 있는지 확인하는 것입니다. CLASSIC STOP-LOSS EA와 비교 해 볼 것입니다.

테스트는 M1 시간 주기에서 수행됩니다.

RSI STOP-LOSS EA 진입 데이터

Expert: MACD_Smart_Stoploss
심볼: Volatility 10 Index
기간: M1 (2021.07.01 - 2021.07.15)
입력: afi=0
risk=0.05
atrValue=20
rsi=14
ai=0
movAvgTrend=200
movAvgDirection=50
i=0
fast=12
slow=26
signal=9
브로커: Deriv Limited
통화: USD
초기 디파짓: 500.00
레버리지: 1:500



CLASSIC STOP-LOSS EA 진입 데이터

Expert: MACD_Cross_Stoploss
심볼: Volatility 10 Index
기간: M1 (2021.07.01 - 2021.07.15)
입력: afi=0
risk=0.05
atrValue=5
ai=0
movAvgTrend=200
movAvgDirection=50
i=0
fast=12
slow=26
signal=9

risk reward=1:2
브로커: Deriv Limited
통화: USD
초기 디파짓: 500.00
레버리지: 1:50


결과

두 EA가 수행한 거래를 그래픽으로 표현하면 아래와 같이 표시됩니다. 각각에서 총 3개의 트레이딩 샘플을 채취했습니다.

RSI stoploss 1


그림 3.1. RSI STOP-LOSS EA의 샘플 1

가격 변화 손절매


그림 3.1a. 전통적 손절매 EA 샘플 1

Rsi 손절매 2

그림 3.2. RSI 손절매 EA 샘플 2

가격 변화 손절매

그림 3.2a. 전통적 손절매 EA 샘플 2

Rsi 손절매 3
그림 3.3. RSI STOP-LOSS EA의 샘플 3

가격 변화 손절매

그림 3.3a. 전통적 손절매 EA 샘플 3


위의 비교를 통해 보면 RSI 손절매 EA는 가격 액션 차트에 설정된 전통적인 손절매에 비해 사냥되듯이 손절매 당하는 것을 피하는 데 큰 역할을 했음을 관찰할 수 있습니다.


수익성 테스트

이제 "이것이 수익성이 있습니까?" 라는 큰 질문을 할 때입니다. RSI 손벌매 EA는 손절매 헌트를 피하는 데 큰 역할을 했기 때문에 수익성이 있어야 하고 전통적인 손절매 방법에 비해 손절매가 거의 발생하지 않기 때문에 승률도 높아야 합니다. 논리적으로 이는 참일 것입니다. 그러나 이 이론을 증명하려면 테스트를 수행해야 합니다.

위의 테스트와 유사한 데이터가 두 테스트에 모두 사용됩니다. 100개 이상의 거래에 대한 두 EA에 대한 백 테스트가 M1 기간에 수행됩니다. 아래는 결과입니다.


RSI 손절매 EA 결과

결과
히스토리 품질: 100%
바: 20160 틱: 603385 심볼: 1
총 순수익: 327.71 Balance Drawdown Absolute: 288.96 Equity Drawdown Absolute: 367.85
총 수익: 3 525.74 Balance Drawdown Maximal: 483.90 (69.63%) Equity Drawdown Maximal: 523.24 (71.95%)
총 수익: -3 198.03 Balance Drawdown Relative: 69.63% (483.90) Equity Drawdown Relative: 73.65% (369.45)
Profit Factor: 1.10 Expected Payoff: 1.76 마진 레벨: 7.21%
Recovery Factor: 0.63 Sharpe Ratio: 0.08 Z-Score: 1.68 (90.70%)
AHPR: 1.0070 (0.70%) LR Correlation: 0.51 테스터 결과: 0
GHPR: 1.0027 (0.27%) LR Standard Error: 134.83
총 거래 회수: 186 매도 거래(승률 %): 94 (42.55%) 매수 거래(승률 %): 92 (38.04%)
총 거래 회수: 372 수익 거래 (총거래 중 % ): 75 (40.32%) 손실 거래 (총거래 중 %): 111 (59.68%)
초대 수익 거래: 85.26 최대 손실 거래: -264.99
평균 거래 수익: 47.01 평균 거래 손실: -28.81
최대 연속 수익($): 5 (350.60) 최대 연속 손실($): 6 (-255.81)
최대 연속 수익 회수: 350.60 (5) 최대 연속 손실 회수: -413.34 (5)
평균 연속 수익: 2 평균 연속 손실: 2

rsistlEcurve

그림 3.4 RSI Stop-loss EA의 자산 커브

CLASSIC STOP-LOSS EA RESULTS


결과
히스토리 품질: 100%
바: 20160 틱: 603385 심볼: 1
총 순수익: 3 672.06 Balance Drawdown Absolute: 215.45 Equity Drawdown Absolute: 217.30
총 수익: 10 635.21 Balance Drawdown Maximal: 829.54 (19.27%) Equity Drawdown Maximal: 1 159.20 (25.59%)
총 수익: -6 963.15 Balance Drawdown Relative: 48.76% (270.82) Equity Drawdown Relative: 51.81% (303.90)
Profit Factor: 1.53 Expected Payoff: 15.97 마진 레벨: 274.21%
Recovery Factor: 3.17 Sharpe Ratio: 0.16 Z-Score: -0.14 (11.13%)
AHPR: 1.0120 (1.20%) LR Correlation: 0.80 테스터 결과: 0
GHPR: 1.0093 (0.93%) LR Standard Error: 545.00
총 거래 회수: 230 매도 거래(승률 %): 107 (44.86%) 매수 거래(승률 %): 123 (38.21%)
총 거래 회수: 460 수익 거래 (총거래 중 % ): 95 (41.30%) 손실 거래 (총거래 중 %): 135 (58.70%)
초대 수익 거래: 392.11 최대 손실 거래: -219.95
평균 거래 수익: 111.95 평균 거래 손실: -51.58
최대 연속 수익($): 6 (1 134.53) 최대 연속 손실($): 9 (-211.43)
최대 연속 수익 회수: 1 134.53 (6) 최대 연속 손실 회수: -809.21 (4)
평균 연속 수익: 2 평균 연속 손실: 2


classicalcure

그림 3.5. 전통적 손절매 EA의 평가금 곡선


내용

두 EA 모두가 거래 기간동안 수익성이 있었지만 첫 번째 EA(RSI Stop-Loss EA)는 부분적으로는 큰 손실을 입는 경우도 있었으나 최종적으로는 손실이 적었습니다 .

RSI 손절매에 대한 평가금 곡선 손실 분석

그림 3.6. 평가금 커브 손실

이러한 손실은 EA의 전체 수익성과 적절한 자금 관리에 영향을 줄 수 있습니다. 반면에 전통적 손절매 EA는 손실이 더 많았고 거래 기간이 끝날 시점에 가장 많은 돈을 벌었습니다.


결론 및 권고

자금 관리는 실제로 거래의 성배입니다. 위의 실험과 같이 자금 관리가 완전히 구현 된 EA는 더 많은 손실이 있었으나 가장 많은 이익을 얻었습니다. 이것은 트레이딩의 일관성 때문입니다. 그러나 RSI에서 손절매를 정의하는 것은 위험 금액의 수준이 다양하기 때문에 첫 번째 EA(RSI STOP-LOSS)에서 완전히 동일한 일관성을 제공하지는 않습니다.

권고

헤징은 첫 번째(RSI STOP-LOSS) EA에서 손실을 줄이는 한 가지 방법입니다. 이것은 더 일관된 위험 금액을 제공하고 장기적으로 이익을 향상시킬 수 있습니다.


읽어 주셔서 감사합니다!!!

MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
원본 기고글: https://www.mql5.com/en/articles/9827

다양한 이동 평균 시스템을 설계하는 방법 다양한 이동 평균 시스템을 설계하는 방법
어떠한 전략이든 생성된 신호를 필터링하는 데 사용할 수 있는 많은 전략이 있습니다. 이 글의 주제인 이동 평균을 사용하는 경우도 마찬가지입니다. 따라서 이 글의 목적은 이동 평균 전략과 알고리즘 거래 시스템을 설계하는 방법을 공유하는 것입니다.
Expert Advisor 처음부터 개발하기 Expert Advisor 처음부터 개발하기
이 기사에서는 최소한의 프로그래밍을 통해 트레이딩 로봇을 개발하는 방법에 대해 알아봅니다. 물론 MetaTrader 5는 트레이딩과 관련한 높은 수준의 제어를 제공합니다. 그러나 수동으로 주문하는 것은 경험이 적은 사용자에게는 상당히 어렵고 위험할 수 있습니다.
리눅스에서 MetaTrader 4 구동하기 리눅스에서 MetaTrader 4 구동하기
이 기사에서는 Linux 버전 중 널리 사용되는 Ubuntu와 Debian에서 MetaTrader 4를 설치하는 방법을 알아봅니다. 이들 시스템은 서버 하드웨어와 트레이더의 개인용 컴퓨터로 널리 사용됩니다.
알고리즘에 기반한 트레이딩 시스템을 설계하는 이유와 방법 알고리즘에 기반한 트레이딩 시스템을 설계하는 이유와 방법
이 글에서는 MQL5와 관련한 몇가지 기본적인 사항에 대해 살펴본 후 간단한 알고리즘 거래 시스템의 설계를 통해 초보자가 알고리즘 거래 시스템(Expert Advisor)을 설계할 때 필요한 MQL의 기본적인 것들을 보여줄 것입니다.