초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1494

 
Maksim Burov #:

안녕하세요.

얻은 최적화 매개 변수를 다른 기간에 다시 실행하는 방법을 알려주실 수 있나요?

Excel에 기록 된 하나의 통화 쌍 매개 변수에 대해 지난 반년 동안 최적화되었습니다. 작년의 기간을 가져와서 매개 변수를 실행하고 싶습니다. 테스터 또는 최적화 프로그램에 다시 넣으려면 어떻게 해야 하나요?
통과할 항목과 통과하지 못할 항목을 확인하고 Excel에 적어 두세요. 그런 다음 예를 들어 지난 2년 동안 실행할 수 있습니다.

데이터를 실행할 기간을 선택합니다. 그런 다음 획득한 매개변수 탭에서 필요한 매개변수를 마우스 오른쪽 버튼으로 클릭하고 단일 테스트를 선택합니다.
 
Roman Kutemov #:
데이터를 실행할 기간을 선택합니다. 그런 다음 얻은 매개 변수의 탭에서 원하는 매개 변수를 마우스 오른쪽 버튼으로 클릭하고 단일 테스트를 선택합니다.


그리고 각 매개 변수를 찌르지 않고 범위에서 모든 것을 수행하는 방법은 무엇입니까?

 

계산을 도와주실 수 있나요?


스톱의 3배에 테이크프로핏을 설정해야 합니다. 작동하는 것 같지만 뭔가 잘못되었습니다)). 로봇은 금과 지수를 거래하지만 통화 거래는 거부합니다 (모든 것을 올바르게 계산하지만).

먼저 캔들 1의 저점에 스톱을 설정합니다:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

그런 다음 ASK에서 스톱까지의 거리를 포인트 단위로 계산하고 이 값을 퍼트 포인트에 할당합니다:

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

그 후 스톱도 핍 단위로 계산합니다:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


그런 다음 거래를 열고 ASK에 TR을 추가합니다:

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


그리고 테스터에서 모든 계산이 정확하고 5 자리 포인트에서 스톱도 Low1에 있으며 스톱의 크기도 5 자리 포인트에서 정확합니다. 하지만 테이크프로핏에 문제가 있는데 507핍이 아니라 5070핍입니다.



 

안녕하세요, 세르게이.

정류장을 계산할 때는 가격 단위의 거리에서 핍 단위의 거리로 이동합니다. 그런 다음 3을 곱하면 테이크아웃까지의 거리도 핍 단위로 계산할 수 있습니다. 그런 다음 매도 호가에 핍 수를 더하면 됩니다.

1핍의 크기로 나누지 말고 다시 곱하는 것을 잊지 마세요.

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

또는 다음과 같이

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

안녕하세요, 세르게이.


정말 감사합니다! 가격 / 항목에서 정말 길을 잃었습니다. 지금 시도해 보겠습니다)))

 
이제 모든 것이 올바르게 계산되고 설정되지만 USDJPY, XAUUSD 및 모든 지수에 대해서만 계산됩니다. 그러나 USDCAD, EURUSD와 같은 통화에서는 올빼미가 거래되지 않고 오류 4756을 보냅니다. 도움말에서 값을 조회했지만 도움이되지 않았습니다.)
 
Sergey Izhutov #:
이제 모든 것이 올바르게 계산되고 설정되지만 USDJPY, XAUUSD 및 모든 지수에 대해서만 계산됩니다. 그러나 USDCAD, EURUSD와 같은 통화에서는 올빼미가 거래되지 않고 오류 4756을 보냅니다. 도움말에서 값을 조회해 보았지만 아무 소용이 없었습니다.)

이전 게시물에서와 같이 포지션을 여는 코드를 제공하세요. 그러면 아마도 몇 가지 조언을 해줄 수 있을 것입니다. USDJPY와 USDCAD 사이에는 근본적인 차이가 없어야 하며, 사소한 오류가 있을 가능성이 높습니다.

 
Yuriy Bykov #:

지난 게시물에서와 같이 하세요:

다음은 코드입니다.

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

아마도 여기에 오류가 있을 가능성이 높습니다:

if(Close > maHandle && Close > Open)

귀하의 논리에 따르면 maHandle은 가격이어야 하며, 이는 핸들, 즉 로드된 모든 인디케이터 중 인디케이터의 일련 번호인 정수일 가능성이 높습니다. 인디케이터 값을 가져오는 올바른 방법은 MQL5 도움말을 참조하세요.

 
Yuriy Bykov #:

여기에 실수가 있을 수 있습니다:

귀하의 논리에 따르면 maHandle은 가격이어야 하며, 이는 핸들, 즉 로드된 모든 인디케이터 중 인디케이터의 일련 번호인 정수일 가능성이 높습니다. 인디케이터 값을 가져오는 올바른 방법은 MQL5 도움말을 참조하세요.

나는 저녁에 그것을 제거해야한다고 생각했습니다. 아직 지표와 친구가 되지 못했습니다. 4에서 닫기> MA를 썼고 모든 것이 거기에서 작동했다는 것을 막연하게 기억합니다. 핸들에 주석을 달아보고 결과가 어떤지 확인해 보겠습니다.

사유: