Controllo dello stop minimo negli EA pubblicati sul mercato. - pagina 11

 
Vladimir Gribachev:

Bene, sul server MetaQuotes-Demo (dove il moderatore sta testando) il livello di stop minimo ritorna normalmente. Controllate voi stessi, 0 non lo faranno.

Non so su quale server viene testato il moderatore, ma lo starter di topik stava controllando un livello di arresto e ha restituito il prodotto al miglioramento dell'errore 130. Leggi il thread dall'inizio.
 
Vitalii Ananev:
Non so su quale server il moderatore del test, ma l'iniziatore del topic aveva un controllo per un livello di stop e il prodotto gli è stato restituito per il miglioramento a causa di un errore 130. Leggi il thread dall'inizio.

Nel suo caso 130 potrebbe non verificarsi solo quando i gufi cercano di piazzare uno stop loss troppo vicino al mercato.

È meglio controllare direttamente quando si invia o si modifica un slp.

 
Vladimir Gribachev:

Domanda: perché mettere uno stop loss di 1 punto sul reale?

Mi sono appena ricordato... Una volta testato tale algoritmo con uno stop loss minimo, il controllo è fondamentalmente lo stesso e non ci sono stati errori e nessun profitto.

Il venditore di 60 prodotti Marketplace - che ha scritto 80 compiti freelance - ha un sito con annunci per scrivere EA - e tutto questo non è il primo anno - è il topicstarter.

E improvvisamente il topicstarter chiede cosa fare per lo zero stoplevelling e dice che i moderatori del mercato stanno in qualche modo stranamente controllando i consiglieri del mercato.

In contrasto con i suoi commenti - gli utenti del forum che hanno esperienza di sviluppo, che hanno esperienza nel mettere prodotti sul mercato - leggono i suoi commenti e sono perplessi.

Mi sembra che... il topicstarter si trovi in uno stato di totale inadeguatezza e che gli abbia succhiato il problema di mano senza mezzi termini.

 
Andrey F. Zelinsky:

Il venditore di 60 prodotti sul mercato -- che ha scritto 80 compiti in freelance locale -- che ha un sito web che pubblicizza la scrittura di EA -- e tutto questo è lontano dal primo anno -- è il topicstarter.

E improvvisamente il topicstarter chiede cosa fare per lo zero stoplevelling e dice che i moderatori del mercato stanno in qualche modo stranamente controllando gli EA del mercato.

In contrasto con i suoi commenti - gli utenti del forum che hanno esperienza di sviluppo, che hanno esperienza nel mettere prodotti sul mercato - leggono i suoi commenti e sono perplessi.

Mi sembra che... il topicstarter si trovi in uno stato di totale inadeguatezza e che gli abbia succhiato il problema di mano senza mezzi termini.

Forse vuole solo comunicare? ) programmare bot è un affare molto solitario
 
lilita bogachkova:

il codice pubblicato qui:

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

Non potete dividere per un punto in questo modo, il valore della funzioneSymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) può essere uguale a zero.
Questo vale anche per altre funzioni di mercato.

Per esempio, l'uso diAccountInfoInteger(ACCOUNT_LEVERAGE) nei calcoli del campionato 2010 ha causato il crash di alcuni EA con un erroreZero divide, quando questa funzione restituiva 0 in OnInit.

 
Vladimir Gribachev:

Domanda: perché mettere uno stop loss di 1 punto sul reale?

Mi sono appena ricordato... Una volta ho testato un algoritmo simile con uno stop-loss minimo, il controllo era fondamentalmente lo stesso e non ci sono stati errori, né profitti.

Guarda alla radice della questione. Non si tratta del motivo per cui ho impostato uno stop loss di 1 pip. Il punto è che lo stop loss può essere inferiore allo stop loss che è nascosto dal broker e calcolato in base alla larghezza dello spread.

Per chiarire l'essenza del problema, ti mostro un Expert Advisor che usa il tuo algoritmo per controllare gli stop:

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

Risultato del test di un tale 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

Come si può vedere, il metodo non supera il test elementare.

 
Ihor Herasko:

Andare alla radice. Non si tratta del perché dovresti mettere uno stoploss di 1 punto. Si tratta di...

Se si va alla radice della questione - bisogna distinguere tra a) "rendere infallibile l'acquirente sviluppatore" e b) contare sul fatto che l'acquirente sia un idiota. Sono protezioni diverse.

Nessun compratore sano di mente metterebbe una presa negativa e si fermerebbe. Quindi, controllare "come reagirà l'EA a uno stop and take negativo" significa contare sul fatto che l'acquirente è un idiota.

Creare un EA in cui un take and stop definito dall'utente viene imposto in modo permanente aumentando di un incomprensibile valore di "2 spread" - questo è "foolproofing" - solo una protezione contro un "fool of a developer".

Soprattutto se lo sviluppatore mette tale protezione per passare la moderazione del mercato.

 
Andrey F. Zelinsky:

Se si guarda alla radice, bisogna distinguere tra a) "rendere infallibile l'acquirente sviluppatore" e b) contare sul fatto che l'acquirente sia un idiota. Si tratta di protezioni diverse.

Nessun compratore sano di mente metterebbe una presa negativa e si fermerebbe. Quindi, controllare "come reagirà l'EA a uno stop and take negativo" significa contare sul fatto che l'acquirente è un idiota.

Creare un EA in cui il take and stop definito dall'utente è costretto ad aumentare continuamente di una quantità incomprensibile di "2 spread" è "infallibile", solo infallibile non acquistando il prodotto dallo "sviluppatore idiota".

Pensi che ci siano molte persone sane di mente qui? :) Soprattutto tra gli acquirenti.
 
Ihor Herasko:

Andare alla radice. Non si tratta del perché dovresti mettere uno stop loss di 1 pip. Si tratta del fatto che lo stop loss può essere inferiore allo stop loss, che è nascosto dal broker ed è calcolato in base alla larghezza dello spread.

Per chiarire il problema, ti mostro un Expert Advisor che usa il tuo algoritmo per controllare gli stop:

Risultato del test di un tale Expert Advisor:

Come si può vedere, il metodo non supera il controllo elementare.

Se è così grave, ecco

#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 nessun problema.

Ma se è così male, come giustamente sottolineatoda Andrey F. Zelinsky

Se si vuole peggiorare un EA solo per andare alla moderazione di Marketplace, questo è inadeguato.

Se il mio EA non è stato controllato per il 130° errore e aggiunge +1 agli stop. Ma questa è solo una sciocchezza.
 
Maxim Dmitrievsky:
Pensi che ci siano molte persone sane di mente qui? :) Soprattutto tra gli acquirenti.

Penso che se si fa una ricerca, ci sono più acquirenti sani di mente che sviluppatori sani di mente.

L'acquirente può sbagliarsi. Il cliente può essere fatto capire. Possono essere persuasi.

Ma se lo sviluppatore ha un problema con il senso comune, non può essere risolto.

Per compromettere la funzionalità dell'Expert Advisor solo per andare al mercato - questo è inadeguato.

Motivazione: