Controllo dello stop minimo negli EA pubblicati sul mercato.

 

Ciao a tutti, amici!

C'è una particolarità di Marketplace: dobbiamo controllare tutti i valori di min stop.

Se il valore della variabile è inferiore al min-stop, allora assegna un min-stop, in modo che non ci sia un errore 130.

Attualmente il 90% dei broker ha spread fluttuante e min STOP e rendimento 0.

C'è un costrutto di codice che assegna tutte le variabili al min stop.

 int OnInitLevels(string symToWorkmodify)
  {
   if(lot<SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN);else
   if(lot>SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX);else lots=lot;
   if(StopLoss>0 && StopLoss<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))StopLosss=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else StopLosss=StopLoss;
   if(TakeProfit>0 && TakeProfit<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfits=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfits=TakeProfit;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   if(TakeProfitALL>0 && TakeProfitALL<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfitsAver=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfitsAver=(int)TakeProfitALL;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   return(0);
  }

Ma non funziona più nel mercato, perché minstop = 0 ovunque ora,

Chi si occupa di questo problema?

 

Naturalmente non lo fa )))) Non è SL, TP e TS che dovrebbero essere impostati al minimo, ma Stop Level. E non solo una volta all'inizio del programma, ma ad ogni spunta:

   digits          = (int) SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   point           = SymbolInfoDouble(symbol, SYMBOL_POINT);
   
   tickSize        = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   
   ask             = SymbolInfoDouble(symbol, SYMBOL_ASK);
   bid             = SymbolInfoDouble(symbol, SYMBOL_BID);
   spread          = ask - bid;

   stopLevel       = MarketInfo(symbol, MODE_STOPLEVEL) * point;
   
   if (stopLevel == 0)
   {
      if (!isECN)
         stopLevel = NormalizeDouble(2 * spread, digits);
   }
   else
      stopLevel = NormalizeDouble(stopLevel + tickSize, digits);
isECN - deve essere disponibile all'utente per l'impostazione. Ci sono conti come "true ECN" dove non ci sono davvero limitazioni sulle distanze minime, cioè stop/profitti/posizioni possono essere impostati all'interno dello spread.
 

Grazie. ma il tuo progetto è lo stesso del mio, solo che hai moltiplicato al min stop = 0 solo per lo spread*2, ma come sappiamo in molti broker min stop = 3 spread, perché hai fatto 2?

Controllo il min stop ad ogni tick.

 
StopLevel non aiuterà perché restituisce anche zero, usa la differenza Ask-Bid, può essere con qualche moltiplicatore
 
Alexander Bereznyak:
StopLevel non aiuta, in quanto restituisce anche zero, uso la differenza Ask-Bid
è per lo spread, ma per il min stop?
 
e anche per una sosta minima
 
Alexander Bereznyak:
e anche per il min stop.
Quindi rendi il min stop uguale allo spread?
 
Vladislav Andruschenko:

Ciao a tutti, amici!

C'è una particolarità di Marketplace: dobbiamo controllare tutti i valori di min stop.

Se il valore della variabile è inferiore al min-stop, allora assegna un min-stop, in modo che non ci sia un errore 130.

Attualmente il 90% dei broker ha spread fluttuante e min STOP e rendimento 0.

C'è un costrutto di codice che assegna tutte le variabili al min stop.

Ma non funziona più nel mercato, perché minstop = 0 ovunque ora,

Chi si occupa di questo problema?

Come opzione, introdurre una restrizione sulla dimensione minima della fermata. Per esempio, in OnInit(), se un utente imposta uno stop inferiore a 2 punti, dà un avvertimento e restituisce il codice INIT_PARAMETERS_INCORRECT.

Un'altra opzione è quella di non permettere all'utente di controllare la dimensione dello stop, ma di calcolarla dinamicamente nell'Expert Advisor in base alle condizioni di trading.

 
poiché il broker dichiara il min stop come zero, non c'è altro da fare, si può prendere il moltiplicatore se lo spread non è sufficiente
 
Vitalii Ananev:

In alternativa, si può introdurre un limite alla dimensione minima dello stop. Per esempio, in OnInit(), se un utente imposta uno stop inferiore a 2 pips, darà un avvertimento e restituirà il codice INIT_PARAMETERS_INCORRECT.

Un'altra opzione è quella di non permettere all'utente di controllare la dimensione dello stop, ma di calcolarla dinamicamente nell'Expert Advisor in base alle condizioni di trading.

Sono d'accordo - non dare il controllo, ma sai come è richiesto dal tipo: voglio impostare il mio stop.

Penserò all'uscita del messaggio - grazie.

 
Alexander Bereznyak:
Poiché il broker dichiara che il min stop è zero, non c'è altro da fare, si può prendere un moltiplicatore se lo spread non è sufficiente

Sì, questo è solo per il mercato - ma non c'è universalità per nessun broker

Il modo in cui funziona è che devi fare un min stop a 3 spreads per essere accettato nel mercato,

L'unica differenza è che il mercato li accetta - devi fare un min stop e 3 spread, ma in realtà questo è sbagliato - se un broker min stop = 1 spread - allora l'utente non sarà in grado di mettere meno di 3 spread.

Baffle.