Verificação da parada mínima nos EAs publicados no mercado. - página 11

 
Vladimir Gribachev:

Bem, no servidor MetaQuotes-Demo (onde o moderador está testando) o nível mínimo de parada retorna normalmente. Verifique por si mesmo, 0 não o fará.

Não sei em qual servidor o moderador testado, mas o iniciador topik estava verificando um nível de parada e ele devolveu o produto para a melhoria do erro 130. Leia o fio desde o início.
 
Vitalii Ananev:
Não sei em qual servidor o moderador de teste, mas o iniciador do tópico teve uma verificação para um nível de parada e o produto foi devolvido a ele para ser melhorado por causa de um erro 130. Leia o fio desde o início.

Em seu caso 130 pode não ocorrer apenas quando as corujas tentam colocar um stop loss muito perto do mercado.

É melhor verificar diretamente ao enviar ou modificar um slp.

 
Vladimir Gribachev:

Pergunta, por que parar a perda de 1 ponto no real?

Acabo de me lembrar... Uma vez testado tal algoritmo com um min stop loss, a verificação é basicamente a mesma e não houve erros nem lucros.

O vendedor de 60 produtos Marketplace -- que escreveu 80 tarefas freelance -- tem um site com anúncios para escrever EAs -- e tudo isso não é o primeiro ano -- é o iniciador do tópico.

E, de repente, o iniciador do tópico pergunta o que fazer em relação a zero de barulho e diz que os moderadores do mercado estão de alguma forma verificando estranhamente os EAs do mercado.

Em contraste com seus comentários -- os usuários do fórum que têm experiência de desenvolvimento, que têm experiência de colocar produtos no mercado -- lêem seus comentários e ficam perplexos.

Parece-me - o iniciador do tópico está em um estado de total inadequação e sugou o problema de sua mão de forma brusca.

 
Andrey F. Zelinsky:

O vendedor de 60 produtos de mercado -- que escreveu 80 tarefas em freelance local -- que tem um site de publicidade escrevendo EAs -- e tudo isso está longe de ser o primeiro ano -- é o iniciador do tópico.

E, de repente, o iniciador do tópico pergunta o que fazer em relação a zero de barulho e diz que os moderadores do mercado estão de alguma forma verificando estranhamente os EAs do mercado.

Em contraste com seus comentários -- os usuários do fórum que têm experiência de desenvolvimento, que têm experiência de colocar produtos no mercado -- lêem seus comentários e ficam perplexos.

Parece-me - o iniciador do tópico está em um estado de total inadequação e sugou o problema de sua mão de forma brusca.

Talvez ele só queira se comunicar? ) os bots de programação é um negócio muito solitário
 
lilita bogachkova:

o código afixado aqui:

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

Você não pode dividir por um ponto dessa maneira, o valor da funçãoSymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) pode ser igual a zero.
Isto também se aplica a outras funções do mercado.

Por exemplo, o uso doAccountInfoInteger(ACCOUNT_LEVERAGE) nos cálculos do campeonato de 2010 causou a queda de alguns EAs com um erro dedivisão Zero, quando esta função retornou 0 no OnInit.

 
Vladimir Gribachev:

Pergunta, por que parar a perda de 1 ponto no real?

Acabo de me lembrar... Uma vez testado tal algoritmo com um mínimo de stop-loss, a verificação é basicamente a mesma e não houve erros e nenhum lucro.

Olhe para a raiz da questão. Não se trata do motivo pelo qual eu defini uma perda de 1 pip stop. A questão é que o stop loss pode ser menor que o stop loss que é escondido pelo corretor e calculado com base na largura do spread.

Para esclarecer a essência do problema, estou mostrando a você um Expert Advisor que usa seu algoritmo para verificar as paradas:

#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);
}

Resultado de teste de tal consultor especializado:

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

Como você pode ver, o método não passa no teste elementar.

 
Ihor Herasko:

Chegar à raiz disso. Não se trata do motivo pelo qual você deve colocar um stoploss de 1 ponto. É sobre...

Se você chegar à raiz disto - você tem que distinguir entre a) "impermeabilizar o comprador desenvolvedor" e b) contar que o comprador seja um idiota. Elas são proteções diferentes.

Nenhum comprador sensato colocaria um ponto final negativo. Portanto, verificar "como a EA reagirá a uma parada e tomada negativa" é contar com o fato de que o comprador é um idiota.

Acriação de uma EA na qual um "take and stop" definido pelo usuário é aplicado permanentemente aumentando por um valor incompreensível de "2 spreads" - isto é "infalível" - apenas uma proteção contra um "tolo de um desenvolvedor".

Especialmente se o desenvolvedor colocar tal proteção a fim de passar pela moderação do mercado.

 
Andrey F. Zelinsky:

Se você olhar para a raiz disso, você tem que distinguir entre a) "impermeabilizar o comprador desenvolvedor" e b) contar que o comprador seja um idiota. Estas são proteções diferentes.

Nenhum comprador sensato colocaria um ponto final negativo. Portanto, verificar "como a EA reagirá a uma parada e tomada negativa" é contar com o fato de que o comprador é um idiota.

Criar uma EA na qual a tomada e parada definida pelo usuário é forçada a aumentar continuamente por uma quantidade incompreensível de "2 spreads" é "infalível", somente infalível por não comprar o produto do "desenvolvedor infalível".

Você acha que há muitas pessoas sãs aqui? :) Especialmente entre os compradores.
 
Ihor Herasko:

Chegar à raiz disso. Não se trata do motivo pelo qual você deve parar a perda de 1 pip. Trata-se do fato de que o stop loss pode ser menor que o stop loss, que é escondido pelo corretor e é calculado com base na largura do spread.

Para esclarecer o problema, estou mostrando-lhe um Expert Advisor que usa seu algoritmo para verificar as paradas:

Resultado de teste de tal consultor especializado:

Como pode ser visto, o método não passa na verificação elementar.

Se é tão ruim assim, aqui está

#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);
}

log

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

e sem problemas.

Mas se é tão ruim assim, como corretamente apontadopor Andrey F. Zelinsky

Se você quiser piorar uma EA apenas para ir ao Mercado com moderação, isso é inadequado.

Se meu EA não foi verificado para 130º erro e adiciona +1 para parar. Mas isso é apenas um disparate.
 
Maxim Dmitrievsky:
Você acha que há muitas pessoas sãs aqui? :) Especialmente entre os compradores.

Penso que se você fizer a pesquisa - há mais compradores sãos do que desenvolvedores sãos.

O comprador pode estar errado. O cliente pode ser levado a compreender. Eles podem ser persuadidos.

Mas se o desenvolvedor tem um problema com o bom senso, ele não pode ser resolvido.

Prejudicar a funcionalidade do Expert Advisor apenas para ir ao Mercado - isto é inadequado.