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

 
Vladislav Andruschenko:

Il mio Expert Advisor sta catturando le mosse min, quindi sta martellando il server, ma non con 1 pip stoploss, ma con un normale livello min + spread, ma lo spread è fluttuante. Questo è il motivo per cui EA sta martellando il server finché non restituisce uno spread normale.

In altre parole, al momento dell'apertura controlla il min stop - ricostruisce i suoi valori - poi colpisce il server. Ma se hai bisogno di mettere uno stop di 10 pips, devi aspettare lo spread minimo e battere il server.

Il bumping del server non è una buona idea. Potresti incontrare un divieto di autotrading. (Chi vorrebbe avere a che fare con attacchi DDOS sul server da parte della sua EA?)

Prima di tutto, prima di inviare una richiesta, abbiamo bisogno di ottenere lo spread, Stop Level, regolare gli stop e se lo stop è accettabile per il trading, quindi inviare una richiesta. Se la dimensione dello stop non è accettabile, allora non c'è bisogno di disturbare nessuno. Se il mio server fosse stato pestato così, l'avrei ucciso...

Ma se, dopo aver inviato una richiesta con una dimensione di stop accettabile, otteniamo di nuovo l'errore 130 (le condizioni di livellamento dello stop sono cambiate durante l'invio della richiesta), allora possiamo regolare la dimensione dello stop e inviare la richiesta (con una dimensione accettabile del nuovo stop calcolato). Il numero di tali richieste dovrebbe essere limitato, altrimenti sarà un altro stupido chiacchiericcio.

Ora capisco perché non vi è permesso entrare nel mercato.

 

Qui la situazione è leggermente diversa,

Non intendo scalpellare tutto il tempo.

Naturalmente, dopo l'errore c'è un controllo degli errori - Slip. ma non funziona nel tester.

Si tratta dello spread fluttuante.

come ho scritto sopra - prima di inviare una richiesta - i livelli di stop vengono corretti e inviati al server, - il server restituisce un errore 130 - Expert Advisor corregge nuovamente il livello e lo invia nuovamente al server.

e così via.

Lo slittamento non funziona nel tester, ecco perché non c'è ritardo.

Al momento, ho risolto il problema in questo modo: lo stop non deve essere inferiore al livello di stop sul server + spread + 1.

Cosa devo fare se il server restituisce il livello di stop come 0? Cioè fluttuante?

Opzione - regolare per errore 130 - non è un'opzione - il moderatore non permetterà questo modo.

Come suggerito prima = Errore 130 - aumentare di 1 e così via, fino a quando il server non perde un affare. - non è un'opzione.

Amici, grazie per l'aiuto nel risolvere il problema. Ma cercherà una soluzione razionale a questo problema.

Grazie a tutti per la vostra partecipazione.

 
Vladislav Andruschenko:

Qui la situazione è leggermente diversa,

Non intendo scalpellare tutto il tempo.

Naturalmente, dopo l'errore c'è un controllo degli errori - Slip. ma non funziona nel tester.

Si tratta dello spread fluttuante.

come ho scritto sopra - prima di inviare una richiesta - i livelli di stop vengono corretti e inviati al server, - il server restituisce un errore 130 - Expert Advisor corregge nuovamente il livello e lo invia nuovamente al server.

e così via.

Lo slittamento non funziona nel tester, ecco perché non c'è ritardo.

Al momento, ho risolto il problema in questo modo: lo stop non deve essere inferiore al livello di stop sul server + spread + 1.

Cosa devo fare se il server restituisce il livello di stop come 0? Cioè fluttuante?

Opzione - regolare per errore 130 - non è un'opzione - il moderatore non permette questo metodo.

Come suggerito prima = Errore 130 - aumentare di 1 e così via, fino a quando il server non perde un affare. - non è un'opzione.

Amici, grazie per l'aiuto nel risolvere il problema. Ma cercherà una soluzione razionale a questo problema.

Grazie a tutti per la vostra partecipazione.

In linea di principio, è possibile forzare l'utente a inserire manualmente il fattore di moltiplicazione dello spread quando stoplevel==0. Cioè, quando si inizializza (non cambiando timeframes) controlla lo stoplevel e, se è zero, visualizza una richiesta di inserire il coefficiente. Se l'utente si rifiuta di entrare, allora usate il coefficiente. 2 (spread*2) e poi aumentare il coefficiente o la dimensione dello stop in caso di errore 130. Se un utente sa come viene calcolato il livello di stop (chiedete al supporto tecnico, per esempio), allora usate il coefficiente inserito dall'utente, ma non dimenticate di rispondere a un errore di 130 aumentando la dimensione dello stop (nel caso in cui appaia ancora). Ma di solito (l'ho incontrato diverse volte e l'ho imparato empiricamente), se si usa stop=stopplavel*coefficiente+1, non si verifica alcun errore. Se non si aggiunge 1 punto, appaiono degli errori.

Di conseguenza, controllate sul server MC come calcolano lo stoplevel e inserite il coefficiente richiesto nell'EA. Anche se il moderatore si rifiuta di inserire il coefficiente manualmente, sarà inserito automaticamente.

 

Grazie, è l'impostazione predefinita di 2 +1 punti.

È una buona idea chiedere, creerò un modulo e glielo farò inserire da solo.

 

A volte il broker vieta l'autotrading per un paio di minuti se vengono inviati circa 20 comandi senza pause.
In altre parole, dovresti modificare/chiudere un mucchio di ordini con una pausa di almeno 300-500 ms tra gli ordini. (Ma l'errore non è più 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:

Ciao a tutti, amici!

C'è una caratteristica 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é min.stop = 0 ovunque ora,

Chi si occupa di questo problema?

Ciao Vladislav, leggi il problema che ho riscontrato anch'io e ho deciso che se il livello di stop fluttuante restituisce un valore di 0 o vicino allo zero, allora usa i segnali inversi per chiudere.

Pensi che questa soluzione vada bene?

 
Ciao, il segnale di chiusura è invertito, nel senso di stop virtuali?
 
Sì, ma ho un'idea migliore, quindi farò così. Per esempio, se il calcolo automatico dei livelli di stop tramite ATR ha restituito zero o vicino allo zero, che è inferiore al valore dello spread medio, allora usiamo i dati precedenti fino a quando i nuovi dati appaiono con l'apertura dell'ordine successivo. Questo è meglio dei segnali inversi.
 
Se si fa il sistema - allora va bene, ma la domanda riguardava il controllo nel mercato, purtroppo l'errore 130 impedisce al prodotto di andare oltre