시장에 게시된 Expert Advisors에서 최소 스톱을 확인합니다. - 페이지 17

 
Vladislav Andruschenko :

내 EA는 최소 이동을 잡아서 서버를 망치지 만 1 정지 손실 포인트가 아니라 정상적인 최소 수준 + 스프레드로 있지만 스프레드는 떠 있습니다. 따라서 어드바이저는 정상으로 돌아올 때까지 서버를 망치질합니다. 확장 확산이 아닙니다.

즉, 열 때 최소 정지를 확인하고 값을 다시 빌드한 다음 서버를 망치질합니다. 하지만 10개의 스톱 포인트를 넣어야 한다면 최소 스프레드를 기다려야 하고 서버를 망치질해야 합니다.

서버를 죽이는 것은 좋은 생각이 아닙니다. 자동 거래가 금지될 수 있습니다. (서버에 DDOS 공격을 가하는 사업가를 고문으로 필요로 하는 사람은 누구입니까?)

먼저 요청을 보내기 전에 스프레드, 스탑 레벨, 스탑 조정 및 스탑 크기가 거래에 허용되는 경우 요청을 보내야 합니다. 스톱의 크기가 허용되지 않는 경우 아무도 망치질할 필요가 없습니다. 내 서버가 그렇게 멍청하게 망치질을 했다면 내가 죽였을 텐데...

그러나 허용 가능한 중지 크기로 요청을 보낸 후 오류 130 이 다시 발생하면(요청이 전송되는 동안 중지 수준 조건이 변경됨) 중지 크기를 조정하고 요청을 보낼 수 있습니다(허용되는 크기: 새로 계산된 정지). 그러한 요청의 수는 제한되어야 합니다.

이제 그들이 시장에 당신을 허용하지 않는 이유가 분명합니다.

 

여기에 약간 다른 상황이 있습니다.

두드리려는 의도는 아니었고, 계속해서 구타를 하고 있었습니다.

당연히 오류가 발생한 후 오류에 대한 검사가 있습니다 - Slip. 그러나 테스터에서는 작동하지 않습니다.

여기서 포인트는 플로팅 스프레드

위에서 쓴 것처럼 - 요청을 보내기 전에 - 중지 수준이 조정되어 서버로 전송됩니다. - 서버가 오류 130을 반환합니다. - EA가 수준을 다시 수정하고 서버로 다시 보냅니다.

등.

테스터에서 슬립이 작동하지 않으므로 지연이 없습니다.

현재 나는 이런 식으로 문제를 해결했습니다. 중지는 서버의 백 레벨 + 스프레드 + 1 이상이어야 합니다.

하지만!!! 서버 에서 중지 수준 을 = 0으로 반환하면 어떻게 해야 합니까? 즉 떠? 정지 크기를 결정하는 방법?

옵션 - 실수로 수정 130 - 옵션이 아님 - 중재자는 이 방법을 놓치지 않습니다.

앞서 제안한 대로 = 오류 130 - 서버가 거래를 놓칠 때까지 1씩 증가합니다. - 옵션이 아닙니다.

 

친구, 문제 해결에 도움을 주셔서 감사합니다. 지금까지 나는 확실한 답을 찾지 못했습니다. 그러나 나는 이 문제에 대한 합리적인 해결책을 찾을 것입니다.

참여해주셔서 감사합니다.

 
Vladislav Andruschenko :

여기에 약간 다른 상황이 있습니다.

두드리려는 의도는 아니었고, 계속해서 구타를 하고 있었습니다.

당연히 오류 후 오류 확인이 있습니다. - Slip. 그러나 테스터에서는 작동하지 않습니다.

여기서 포인트는 플로팅 스프레드

위에서 쓴 것처럼 - 요청을 보내기 전에 - 중지 수준이 조정되어 서버로 전송됩니다. - 서버가 오류 130을 반환합니다. - EA가 수준을 다시 수정하고 서버로 다시 보냅니다.

등.

테스터에서 슬립이 작동하지 않으므로 지연이 없습니다.

현재 나는 이런 식으로 문제를 해결했습니다. 중지는 서버의 백 레벨 + 스프레드 + 1 이상이어야 합니다.

하지만!!! 서버 에서 정지 수준 을 = 0으로 반환하면 어떻게 해야 합니까? 즉 떠? 정지 크기를 결정하는 방법?

옵션 - 실수로 수정 130 - 옵션이 아님 - 중재자는 이 방법을 놓치지 않습니다.

앞서 제안한 대로 = 오류 130 - 서버가 거래를 놓칠 때까지 1씩 증가합니다. - 옵션이 아닙니다.

 

친구, 문제 해결에 도움을 주셔서 감사합니다. 지금까지 나는 확실한 답을 찾지 못했습니다. 그러나 나는 이 문제에 대한 합리적인 해결책을 찾을 것입니다.

참여해주셔서 감사합니다.

원칙적으로 stoplevel=0이면 사용자가 수동으로 스프레드 곱셈 계수를 입력하도록 할 수 있습니다. 즉, 초기화시(시간대를 전환하지 않음) 정지 레벨을 확인하고 0이면 계수 입력 요청을 표시합니다. 사용자가 입력을 거부하면 계수를 사용하십시오. 2(spread * 2)를 선택한 다음 130의 오류로 계수 자체 또는 정지 크기를 늘립니다. 사용자가 정지 수준이 계산되는 방법을 알고 있는 경우(예를 들어 거래 부서에서 기술 지원을 요청하기에 너무 게으르지 않은 경우) 사용자가 입력한 계수를 사용하고 크기를 늘려 130번째 오류에 응답하는 것을 잊지 마십시오. 정류장의 (갑자기 나타납니다). 그러나 일반적으로(몇 번이고 경험적으로 추론) stop=stoplevel*coefficient+1을 사용하면 오류가 나타나지 않습니다. 1점을 추가하지 않으면 오류가 나타납니다.

따라서 MK 서버에서 정지 레벨을 계산하는 방법을 확인하고 어드바이저에 필요한 계수를 입력하십시오. 중재자가 계수 수동 입력을 거부하더라도 자동으로 입력됩니다.

 

감사합니다. 기본적으로 2 +1 포인트의 계수를 만들었습니다.

그리고 이런 생각을 묻는 것. 내가 양식을 만들겠습니다. 그가 직접 입력하게 하십시오.

 

20개 정도의 명령을 쉬지 않고 보내면 브로커가 몇 분 동안 자동 거래를 금지하는 경우가 있습니다.
즉, 주문 사이에 최소 300-500ms의 일시 중지로 주문 팩을 수정/종료해야 합니다. (그러나 오류는 더 이상 130이 아닙니다)

 
MqlTick MS_MqlTick;

enum EnumStopLevel
  {
   a0 = 0, // Real StopLevel
   a1 = 1, // StopLevel correction spread
   a2 = 2, // StopLevel correction 2*spread
   a3 = 3, // StopLevel correction 3*spread
   a4 = 4, // StopLevel correction 4*spread      
   a5 = 5, // StopLevel correction 5*spread         
  };
input EnumStopLevel Mode_StopLevel = 0;


//========================================== StopLevFun
double StopLevFun(int Mode_StopLevelF)
{
   double StopLL = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) * _Point;
 
   if(MQLInfoInteger(MQL_TESTER) && Mode_StopLevelF < 3) Mode_StopLevelF = 3; ///////////////////////// Это для тестера при модерации
 
   switch(Mode_StopLevelF)
   {
      case 0: break;
      case 1: While_SymbolInfoTick(_Symbol); StopLL = MathMax(MS_MqlTick.ask - MS_MqlTick.bid, StopLL); break;
      case 2: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 2, StopLL); break;
      case 3: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 3, StopLL); break;
      case 4: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 4, StopLL); break;
      case 5: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 5, StopLL); break;
   }
 
   return(NormalizeDouble(StopLL, _Digits) );   
}


//=========================================== While SymbolinfoTick
bool While_SymbolInfoTick(string Fsymbol)
{
   int WhTi = 0;
   
   while(!SymbolInfoTick(Fsymbol, MS_MqlTick) ) 
   {
      if(WhTi % 10 == 0) Print(Fsymbol, " >> SymbolInfoTick(Fsymbol, MS_MqlTick)= false     Try= ", WhTi);
      
      WhTi++;
      
      if(WhTi > 100) return(false);
      
      Sleep(10);
   }
   
   return(true);
}
А если вот такой вариант.
Если реал или демо, то по умолчанию выбирается вариант 0 Mode_StopLevelF, и в этом случае возвращается реальный стоплевел.
Но можно выбрать и коррекцию стоплевела спредом, с разным коэффициентом. При этом если стоплевел будет больше чем спред, то будет учитываться стоплевел.
А для тестера, при модерации, выбирается всегда режим не ниже 3 Mode_StopLevelF, в этом случае стоплевел будет больше спреда в 3 раза и больше.
П.С. Как пишет разработчик SymbolInfoTick  предпочтительнее чем SymbolInfoDouble для Ask и Bid.
https://www.mql5.com/ru/docs/marketinformation/symbolinfodouble
 
Vladislav Andruschenko :

안녕하세요 여러분, 친구들입니다!

시장의 이러한 기능이 있습니다 . 최소 정류장에 대한 모든 값을 확인해야 합니다.

변수 값이 min stop보다 작으면 오류 130 이 발생하지 않도록 min stop을 할당합니다.

이제 브로커의 90%에서 스프레드와 minstop이 유동적이며 0을 제공합니다.

모든 변수에 최소 정지 값을 할당하는 코드 구성이 있습니다.

그러나 이제는 모든 곳에서 min stop = 0이기 때문에 더 이상 시장에서 통과하지 않습니다.

누가 이 문제를 다루고 있습니까?

안녕 Vladislav, 나는 또한 발생한 문제를 읽고 부동 정지 레벨이 값 0을 반환하거나 0에 가까우면 역방향 신호를 사용하여 닫는 것으로 결정했습니다.

이 솔루션이 괜찮다고 생각하십니까?

 
안녕하세요, 그리고 가상 정지의 의미에서 닫을 역 신호?
 
예, 하지만 더 나은 전류를 생각해 냈으므로 그렇게 하겠습니다. 예를 들어, ATR에 의한 스톱 레벨의 자동 계산이 0을 반환하거나 평균 스프레드 값보다 작은 0에 가까운 값을 반환한 경우 다음 주문이 시작될 때 새 데이터가 나타날 때까지 이전 데이터를 사용합니다. 백시그널보다 좋습니다.
 
이것은 시스템을 만드는 경우입니다. 모든 것이 정상이지만 문제는 정확히 시장에서 확인하는 것이었습니다. 불행히도 오류 130 으로 인해 제품이 더 이상 나아갈 수 없습니다.