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

 
Vladimir Gribachev :

글쎄요, MetaQuotes-Demo 서버에서 (진행자가 테스트하는 곳) min. 정지 수준이 정상적으로 반환됩니다. 자신을 확인하십시오. 0 - 그렇지 않습니다.

모더레이터가 어떤 서버에서 테스트하고 있는지는 모르겠지만, 초보자의 주제에 스톱 레벨 검사가 있었고 제품은 오류 130 으로 인해 수정을 위해 그에게 반환되었습니다. 스레드를 처음부터 읽으십시오.
 
Vitalii Ananev :
모더레이터가 어떤 서버에서 테스트하고 있는지는 모르겠지만, 초보자의 주제에 스톱 레벨 검사가 있었고 제품은 오류 130 으로 인해 수정을 위해 그에게 반환되었습니다. 스레드를 처음부터 읽으십시오.

그의 경우 130번째는 부엉이가 시장과 매우 가까운 위치에서 손절매를 시도할 때만 발생할 수 있는 것이 아닙니다.

sl-tp를 보내거나 수정할 때 직접 확인하는 것이 좋다.

 
Vladimir Gribachev :

문제는 왜 실생활에서 1점의 손절매를 두는가 하는 것입니다 .

방금 기억이 ... 나는 한 번 min으로 그런 알고리즘을 테스트했습니다. 손절, 수표는 기본적으로 동일하며 이익뿐만 아니라 오류도 없었습니다.

지역 프리랜서에서 80개의 작업을 작성한 시장의 60개 제품 판매자는 글쓰기 고문 을 위한 광고가 있는 웹사이트를 가지고 있습니다.

그리고 갑자기 topikstarter는 제로 stoplevel로 무엇을해야하는지 묻고 시장 중재자가 어떻게 든 이상하게 시장 고문을 확인한다고 말합니다.

그의 논평과 달리 개발 경험이 있는 포럼 회원들, 제품 출시 경험이 있는 회원들은 그의 논평을 읽고 당황한다.

나에 관해서는 - topikstarter는 솔직히 부적절하고 어리석게도 그의 손가락에서 문제를 빨아들였습니다.

 
Andrey F. Zelinsky :

지역 프리랜서에서 80개의 작업을 작성한 시장의 60개 제품 판매자는 글쓰기 고문 을 위한 광고가 있는 웹사이트를 가지고 있습니다.

그리고 갑자기 topikstarter는 제로 stoplevel로 무엇을해야하는지 묻고 시장 중재자가 어떻게 든 이상하게 시장 고문을 확인한다고 말합니다.

그의 논평과 달리 개발 경험이 있는 포럼 회원들, 제품 출시 경험이 있는 회원들은 그의 논평을 읽고 당황한다.

나에 관해서는 - topikstarter는 솔직히 부적절하고 어리석게도 그의 손가락에서 문제를 빨아들였습니다.

그냥 채팅을 하고 싶으신가요? ) 봇 프로그래밍은 매우 외로운 활동입니다.
 
lilita bogachkova :

여기에 게시된 코드:

 double point= SymbolInfoDouble (symToWorkmodify, SYMBOL_POINT );
int spread=(ask-bid)/point;

따라서 SymbolInfoDouble 함수 (symToWorkmodify, SYMBOL_POINT ) 의 값인 점으로 나눌 수 없습니다.   0일 수 있습니다.
이는 다른 시장 기능에도 적용됩니다.

예를 들어, 2010년 챔피언십 계산에서 AccountInfoInteger(ACCOUNT_LEVERAGE) 를 사용했기 때문에 일부 Expert Advisors는 이 함수가 OnInit에서 0을 반환했을 때 0 나누기 오류로 충돌했습니다.

 
Vladimir Gribachev :

문제는 왜 실생활에서 1점의 손절매를 두는가 하는 것입니다 .

방금 기억이 ... 나는 한 번 min으로 그런 알고리즘을 테스트했습니다. 손절, 수표는 기본적으로 동일하며 이익뿐만 아니라 오류도 없었습니다.

뿌리를 보십시오. 스톱로스를 1점으로 하는 이유가 아닙니다. 요점은 손절매가 브로커가 숨기고 스프레드 너비로 계산한 스탑 레벨보다 작게 나타날 수 있다는 것입니다.

문제의 본질을 명확히 하기 위해 다음은 귀하의 알고리즘에 따라 중지 확인이 수행되는 Expert Advisor입니다.

 #property strict
//--- input parameters
input int       i_slSize          = 10 ;
input int       i_tpSize          = 10 ;
input int       i_magicNumber     = 32847623 ;

int OnInit ()
{
   Print ( "Величина стоплевел: " , MarketInfo ( _Symbol , MODE_STOPLEVEL ));
   return ( INIT_SUCCEEDED );
}

int GetExpertOrderTicket()
{
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))          
         continue ;
         
       if ( OrderSymbol () != Symbol ())
         continue ;   
         
       if ( OrderMagicNumber () != i_magicNumber)
         continue ;
         
       if ( OrderType () == OP_BUY )
         return OrderTicket ();
   }
   
   return - 1 ;
}

void OnTick ()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0 )
   {
      ticket = OrderSend ( Symbol (), OP_BUY , 0.01 , Ask , 30 , 0.0 , 0.0 , NULL , i_magicNumber);
       return ;
   }
      
   if (! OrderSelect (ticket, SELECT_BY_TICKET ) || OrderCloseTime () != 0 || OrderStopLoss () > 0.0 || OrderTakeProfit () > 0.0 )
       return ;
      
   double SL= NormalizeDouble ( OrderOpenPrice ()- MathMax (i_slSize,( int ) MarketInfo ( _Symbol , MODE_STOPLEVEL ))* _Point , _Digits );
   double TP= NormalizeDouble ( OrderOpenPrice ()+ MathMax (i_tpSize,( int ) MarketInfo ( _Symbol , MODE_STOPLEVEL ))* _Point , _Digits );
   
   bool result = OrderModify (ticket, 0.0 , SL, TP, 0 );
}

이러한 Expert Advisor를 테스트한 결과 :

0       14:52:30.354    Expert CheckStopLevel EURUSD,H1: removed
0       14:52:30.372    Expert CheckStopLevel EURUSD,H1: loaded successfully
0       14:52:30.390    Tester: template 'D:\ForexDC\Alpari\templates\tester.tpl' applied
0       14:52:30.395    TestGenerator: current spread 10 used
2       14:52:32        2015.01.12 00:00  CheckStopLevel inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
0       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: Величина стоплевел: 0.0
2       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: open #1 buy 0.01 EURUSD at 1.18674 ok
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:36        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130

보시다시피 이 방법은 기본 검증을 통과하지 못합니다.

 
Ihor Herasko :

뿌리를 보십시오. 스톱로스를 1점으로 하는 이유가 아닙니다. 그것은 무엇에 관한 것입니다 ...

루트를 보면 a) "개발자 구매자의 바보로부터 보호"와 b) 구매자가 바보라는 계산을 구별해야 합니다. 이것은 다른 방어입니다.

제정신이 아닌 구매자는 테이크와 네거티브 스탑을 하지 않을 것입니다. 따라서 "어드바이져가 부정적인 스톱 앤 테이크에 어떻게 반응할지"를 확인하는 것은 구매자가 바보라는 계산입니다.

사용자 지정 테이크 앤 스톱이 이해할 수 없는 값 "2 스프레드"에 의해 지속적으로 증가하도록 강제 되는 Expert Advisor의 생성 - 이것은 "바보 보호"이며, "바보 개발자"로부터 제품을 구매하지 않음으로써만 보호합니다.

특히 개발자가 시장 조정을 통과하기 위해 이러한 보호를 적용하는 경우.

 
Andrey F. Zelinsky :

루트를 보면 a) "개발자 구매자의 바보로부터 보호"와 b) 구매자가 바보라는 계산을 구별해야 합니다. 이것은 다른 방어입니다.

제정신이 아닌 구매자는 테이크와 네거티브 스탑을 하지 않을 것입니다. 따라서 "어드바이져가 부정적인 스톱 앤 테이크에 어떻게 반응할지"를 확인하는 것은 구매자가 바보라는 계산입니다.

사용자 지정 테이크 앤 스톱이 이해할 수 없는 값 "2 스프레드"에 의해 지속적으로 증가하도록 강제 되는 Expert Advisor의 생성 - 이것은 "바보 보호"이며, "바보 개발자"로부터 제품을 구매하지 않음으로써만 보호합니다.

여기 제정신이신 분들이 많을 것 같은데요? :) 특히 바이어들 사이에서
 
Ihor Herasko :

뿌리를 보십시오. 1점의 손절매를 두는 이유에 관한 것이 아닙니다. 요점은 손절매가 브로커가 숨기고 스프레드 너비로 계산한 스탑 레벨보다 작게 나타날 수 있다는 것입니다.

문제의 본질을 명확히 하기 위해 다음은 귀하의 알고리즘에 따라 중지 확인이 수행되는 Expert Advisor입니다.

이러한 Expert Advisor를 테스트한 결과 :

보시다시피 이 방법은 기본 검증을 통과하지 못합니다.

그렇게 심하다면

 #property strict
//--- input parameters
input int       i_slSize          = 10 ;
input int       i_tpSize          = 10 ;
input int       i_magicNumber     = 32847623 ;

int OnInit ()
{
   Print ( "Величина стоплевел: " , MarketInfo ( _Symbol , MODE_STOPLEVEL ));
   return ( INIT_SUCCEEDED );
}

int GetExpertOrderTicket()
{
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))          
         continue ;
         
       if ( OrderSymbol () != Symbol ())
         continue ;   
         
       if ( OrderMagicNumber () != i_magicNumber)
         continue ;
         
       if ( OrderType () == OP_BUY )
         return OrderTicket ();
   }
   
   return - 1 ;
}

void OnTick ()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0 )
   {
      ticket = OrderSend ( Symbol (), OP_BUY , 0.01 , Ask , 30 , 0.0 , 0.0 , NULL , i_magicNumber);
       return ;
   }
      
   if (! OrderSelect (ticket, SELECT_BY_TICKET ) || OrderCloseTime () != 0 || OrderStopLoss () > 0.0 || OrderTakeProfit () > 0.0 )
       return ;
      
   double SL= NormalizeDouble ( Bid - MathMax (i_slSize,( int ) MarketInfo ( _Symbol , MODE_STOPLEVEL ))* _Point , _Digits );
   double TP= NormalizeDouble ( Bid + MathMax (i_tpSize,( int ) MarketInfo ( _Symbol , MODE_STOPLEVEL ))* _Point , _Digits );
   
   bool result = OrderModify (ticket, 0.0 , SL, TP, 0 );
}

잡지

 2016.03 . 16 15 : 09 : 35.611 GBPUSD,H1: 94 tick events ( 1095 bars, 286082 bar states) processed in 0 : 00 : 06.037 (total time 0 : 00 : 10.109 )
2016.03 . 16 15 : 09 : 35.611 2016.03 . 01 00 : 12   Tester: order # 14 is closed
2016.03 . 16 15 : 09 : 35.588 2016.03 . 01 00 : 12   Tester: stop button pressed
2016.03 . 16 15 : 09 : 35.547 2016.03 . 01 00 : 12   abcd GBPUSD,H1: modify # 14 buy 0.01 GBPUSD at 1.39165 sl: 1.39130 tp: 1.39154 ok
2016.03 . 16 15 : 09 : 35.483 2016.03 . 01 00 : 12   abcd GBPUSD,H1: open # 14 buy 0.01 GBPUSD at 1.39165 ok
2016.03 . 16 15 : 09 : 35.483 2016.03 . 01 00 : 12   Tester: take profit # 13 at 1.39144 ( 1.39144 / 1.39165 )
2016.03 . 16 15 : 09 : 35.099 2016.03 . 01 00 : 12   abcd GBPUSD,H1: modify # 13 buy 0.01 GBPUSD at 1.39156 sl: 1.39120 tp: 1.39144 ok
2016.03 . 16 15 : 09 : 35.035 2016.03 . 01 00 : 11   abcd GBPUSD,H1: open # 13 buy 0.01 GBPUSD at 1.39156 ok
2016.03 . 16 15 : 09 : 35.035 2016.03 . 01 00 : 11   Tester: stop loss # 12 at 1.39148 ( 1.39135 / 1.39156 )
2016.03 . 16 15 : 09 : 34.971 2016.03 . 01 00 : 11   abcd GBPUSD,H1: modify # 12 buy 0.01 GBPUSD at 1.39171 sl: 1.39148 tp: 1.39172 ok
2016.03 . 16 15 : 09 : 34.907 2016.03 . 01 00 : 11   abcd GBPUSD,H1: open # 12 buy 0.01 GBPUSD at 1.39171 ok
2016.03 . 16 15 : 09 : 34.907 2016.03 . 01 00 : 11   Tester: take profit # 11 at 1.39143 ( 1.39150 / 1.39171 )
2016.03 . 16 15 : 09 : 34.267 2016.03 . 01 00 : 10   abcd GBPUSD,H1: modify # 11 buy 0.01 GBPUSD at 1.39147 sl: 1.39119 tp: 1.39143 ok
2016.03 . 16 15 : 09 : 34.203 2016.03 . 01 00 : 10   abcd GBPUSD,H1: open # 11 buy 0.01 GBPUSD at 1.39147 ok
2016.03 . 16 15 : 09 : 34.203 2016.03 . 01 00 : 10   Tester: stop loss # 10 at 1.39132 ( 1.39126 / 1.39147 )
2016.03 . 16 15 : 09 : 33.947 2016.03 . 01 00 : 10   abcd GBPUSD,H1: modify # 10 buy 0.01 GBPUSD at 1.39174 sl: 1.39132 tp: 1.39156 ok
2016.03 . 16 15 : 09 : 33.883 2016.03 . 01 00 : 10   abcd GBPUSD,H1: open # 10 buy 0.01 GBPUSD at 1.39174 ok
2016.03 . 16 15 : 09 : 33.883 2016.03 . 01 00 : 10   Tester: stop loss # 9 at 1.39157 ( 1.39153 / 1.39174 )
2016.03 . 16 15 : 09 : 33.435 2016.03 . 01 00 : 09   abcd GBPUSD,H1: modify # 9 buy 0.01 GBPUSD at 1.39186 sl: 1.39157 tp: 1.39181 ok
2016.03 . 16 15 : 09 : 33.371 2016.03 . 01 00 : 09   abcd GBPUSD,H1: open # 9 buy 0.01 GBPUSD at 1.39186 ok
2016.03 . 16 15 : 09 : 33.371 2016.03 . 01 00 : 09   Tester: take profit # 8 at 1.39163 ( 1.39165 / 1.39186 )
2016.03 . 16 15 : 09 : 32.603 2016.03 . 01 00 : 06   abcd GBPUSD,H1: modify # 8 buy 0.01 GBPUSD at 1.39173 sl: 1.39139 tp: 1.39163 ok
2016.03 . 16 15 : 09 : 32.539 2016.03 . 01 00 : 06   abcd GBPUSD,H1: open # 8 buy 0.01 GBPUSD at 1.39173 ok
2016.03 . 16 15 : 09 : 32.539 2016.03 . 01 00 : 06   Tester: take profit # 7 at 1.39152 ( 1.39152 / 1.39173 )
2016.03 . 16 15 : 09 : 32.346 2016.03 . 01 00 : 06   abcd GBPUSD,H1: modify # 7 buy 0.01 GBPUSD at 1.39173 sl: 1.39128 tp: 1.39152 ok
2016.03 . 16 15 : 09 : 32.282 2016.03 . 01 00 : 06   abcd GBPUSD,H1: open # 7 buy 0.01 GBPUSD at 1.39173 ok
2016.03 . 16 15 : 09 : 32.282 2016.03 . 01 00 : 06   Tester: take profit # 6 at 1.39148 ( 1.39152 / 1.39173 )
2016.03 . 16 15 : 09 : 32.025 2016.03 . 01 00 : 05   abcd GBPUSD,H1: modify # 6 buy 0.01 GBPUSD at 1.39155 sl: 1.39124 tp: 1.39148 ok
2016.03 . 16 15 : 09 : 31.961 2016.03 . 01 00 : 05   abcd GBPUSD,H1: open # 6 buy 0.01 GBPUSD at 1.39155 ok
2016.03 . 16 15 : 09 : 31.961 2016.03 . 01 00 : 05   Tester: stop loss # 5 at 1.39140 ( 1.39134 / 1.39155 )
2016.03 . 16 15 : 09 : 31.249 2016.03 . 01 00 : 04   abcd GBPUSD,H1: modify # 5 buy 0.01 GBPUSD at 1.39170 sl: 1.39140 tp: 1.39164 ok
2016.03 . 16 15 : 09 : 31.185 2016.03 . 01 00 : 04   abcd GBPUSD,H1: open # 5 buy 0.01 GBPUSD at 1.39170 ok
2016.03 . 16 15 : 09 : 31.185 2016.03 . 01 00 : 04   Tester: take profit # 4 at 1.39147 ( 1.39149 / 1.39170 )
2016.03 . 16 15 : 09 : 30.801 2016.03 . 01 00 : 02   abcd GBPUSD,H1: modify # 4 buy 0.01 GBPUSD at 1.39159 sl: 1.39123 tp: 1.39147 ok
2016.03 . 16 15 : 09 : 30.737 2016.03 . 01 00 : 01   abcd GBPUSD,H1: open # 4 buy 0.01 GBPUSD at 1.39159 ok
2016.03 . 16 15 : 09 : 30.737 2016.03 . 01 00 : 01   Tester: take profit # 3 at 1.39136 ( 1.39138 / 1.39159 )
2016.03 . 16 15 : 09 : 30.481 2016.03 . 01 00 : 01   abcd GBPUSD,H1: modify # 3 buy 0.01 GBPUSD at 1.39143 sl: 1.39112 tp: 1.39136 ok
2016.03 . 16 15 : 09 : 30.417 2016.03 . 01 00 : 01   abcd GBPUSD,H1: open # 3 buy 0.01 GBPUSD at 1.39143 ok
2016.03 . 16 15 : 09 : 30.417 2016.03 . 01 00 : 01   Tester: stop loss # 2 at 1.39126 ( 1.39122 / 1.39143 )
2016.03 . 16 15 : 09 : 30.225 2016.03 . 01 00 : 00   abcd GBPUSD,H1: modify # 2 buy 0.01 GBPUSD at 1.39156 sl: 1.39126 tp: 1.39150 ok
2016.03 . 16 15 : 09 : 30.161 2016.03 . 01 00 : 00   abcd GBPUSD,H1: open # 2 buy 0.01 GBPUSD at 1.39156 ok
2016.03 . 16 15 : 09 : 30.161 2016.03 . 01 00 : 00   Tester: take profit # 1 at 1.39135 ( 1.39135 / 1.39156 )
2016.03 . 16 15 : 09 : 29.647 2016.03 . 01 00 : 00   abcd GBPUSD,H1: modify # 1 buy 0.01 GBPUSD at 1.39148 sl: 1.39111 tp: 1.39135 ok
2016.03 . 16 15 : 09 : 29.583 2016.03 . 01 00 : 00   abcd GBPUSD,H1: open # 1 buy 0.01 GBPUSD at 1.39148 ok
2016.03 . 16 15 : 09 : 29.583 2016.03 . 01 00 : 00   abcd GBPUSD,H1: Величина стоплевел: 12.0
2016.03 . 16 15 : 09 : 29.574 2016.03 . 01 00 : 00   abcd inputs: i_slSize= 10 ; i_tpSize= 10 ; i_magicNumber= 32847623 ; 
2016.03 . 16 15 : 09 : 27.513 TestGenerator: current spread 21 used

그리고 문제 없습니다.

글쎄, Andrey F. Zelinsky 가 올바르게 지적했듯이 모든 것이 전혀 나쁘다면

시장을 조정하기 위해서만 어드바이저의 기능을 저하시키는 것은 확실히 부적절합니다.

그런 다음 130번째 오류에 대한 검사를 할당하고 중지에 +1을 추가할 수 있습니다. 그러나 이것은 일반적으로 넌센스입니다.
 
Maxim Dmitrievsky :
여기 제정신이신 분들이 많을 것 같은데요? :) 특히 바이어들 사이에서

제 생각에 연구를 수행하면 제정신인 개발자보다 제정신인 구매자가 훨씬 더 많다는 것이 밝혀졌습니다.

구매자가 틀릴 수 있습니다. 구매자가 설명할 수 있습니다. 구매자는 확신할 수 있습니다.

하지만 개발자가 상식에 문제가 있는 경우에는 이를 시정하지 않습니다.

시장을 조정하기 위해서만 어드바이저의 기능을 저하시키는 것은 확실히 부적절합니다.