Risposta

Ordine stop/limite troppo vicino al prezzo effettivo

6 risposte

sansay

Abbonato, bbp_partecipante, comunità, 11 risposte.

Visita il profilo

7 anni fa #116332

Vedere la schermata allegata.

Quando ho visto per la prima volta il log di questo EA, "ordine stop/limit troppo vicino al prezzo effettivo" ho subito pensato "OK il livello di stop non è corretto". Ho quindi modificato il codice e cambiato il valore di MinDistanceOfStopFromPrice in 70, dato che si trattava delle specifiche della coppia USDMXN. Tuttavia, come si può vedere nello screenshot, questo non ha risolto il problema. Infatti ho provato anche con 100, 200, 700, ma non è cambiato nulla.

Qualsiasi aiuto sarebbe molto apprezzato.

0

sansay

Abbonato, bbp_partecipante, comunità, 11 risposte.

Visita il profilo

7 anni fa #141561

Quale schermata?

 

Ho il problema opposto, ho bisogno che alcuni ordini Stop_limit siano più vicini al prezzo.

 

Strano, sono abbastanza sicuro di aver allegato il file png. Facciamo un altro tentativo...

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

7 anni fa #141585

Succede quando si inserisce un ordine o si cerca di modificare PT, SL o il prezzo dell'ordine?

0

sansay

Abbonato, bbp_partecipante, comunità, 11 risposte.

Visita il profilo

7 anni fa #141594

Non faccio nulla, è un EA creato con SQ. Fa così e credo che il codice venga aggiunto a ogni singolo EA che crea. La differenza in questo caso è che questo particolare commerciante di forex ha un livello di stop di 70, mentre gli altri hanno 0.

Naturalmente quelli con 0 non attivano nulla.

Il codice è in funzione: 

void openPosition(int tradeDirection) {

      // verifica se il prezzo di stop/limite non è troppo vicino
      se(NormalizeDouble(MathAbs(openPrice - AskOrBid), Digits) <= NormalizeDouble(eaStopDifferenceNumber, Digits)) {
         //Log("l'ordine stop/limit è troppo vicino al prezzo effettivo");
         ritorno;
      }
quindi, ovviamente, quando ciò accade non viene aperto alcuno scambio.
Ieri ho provato a vedere cosa sarebbe successo se avessi rimosso la dichiarazione di reso. Volevo vedere se il rivenditore avrebbe rifiutato anche l'ordine. 
La dichiarazione è apparsa nel log dell'Expert, ma non si è verificato alcuno scambio e non è apparso nessun altro log. Farò un'altra prova, questa volta aggiungendo altri log in modo da sapere quale percorso ha seguito il processo.

0

sansay

Abbonato, bbp_partecipante, comunità, 11 risposte.

Visita il profilo

7 anni fa #141656

Stamattina ho scoperto che ha tentato di piazzare un ordine di stop alla vendita, senza riuscirci. Si veda il log allegato.

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

7 anni fa #141681

Lo chiedo perché avete inserito la domanda nel thread "EA Wizard".

 

Potete pubblicare la strategia qui o inviarmela a [email protected] così posso provare a testarlo anche su USDMXN

0

sansay

Abbonato, bbp_partecipante, comunità, 11 risposte.

Visita il profilo

7 anni fa #141685

In realtà, i miei test mi hanno permesso di trovare il problema e ho corretto il codice.

Il problema è che il server del broker controlla che:
breve: orderPrice < currentPrice - stopLevel 

lungo: orderPrice > currentPrice + stopLevel

 

Se la condizione non è soddisfatta, la richiesta di modifica fallisce. Attualmente il codice regola lo stopLoss e il targetProfit in modo che siano almeno all'interno dell'orderPrice + o - del livello di stop del dealer. Questo fa sì che il test fallisca ogni volta che l'orderPrice è esattamente CurrentPrice -+ stopLevel. La soluzione è stata quindi quella di aggiungere o sottrarre semplicemente 1 pip. Ecco la modifica del codice:

 

Nei parametri nascosti, dichiarare:

double stopOffset = 0,0001;

 

Aggiungere e passare il parametro tradeDirection alla firma e alla chiamata del metodo openOrderWithErrorHandling:
int openOrderWithErrorHandling(int tradeDirection, int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

 

Nello stesso metodo aggiungere il codice in verde:

 

   se(stopLoss != 0 || profitTarget != 0) {
      if( tradeDirection == 1 )
      {
         stopLoss -= stopOffset;
         profitTarget += stopOffset;
      }
      else if( tradeDirection == -1 )
      {
         stopLoss += stopOffset;
         profitTarget -= stopOffset;
      }
      Log("Impostazione SL/PT, SL: ", stopLoss, ", PT: ", profitTarget);
      se(OrderModify(ticket, OrderOpenPrice(), stopLoss, profitTarget, 0, 0)) {
         Log("Ordine modificato, StopLoss: ", OrderStopLoss(),", Profit Target: ", OrderTakeProfit());
      } else {
         Log("Errore nella modifica dell'ordine: ", errore, " : ", ErrorDescription(error));
      }
   }
 
Funziona. Le modifiche agli scambi sono accettate dal server.

0

Stai visualizzando 6 risposte - da 1 a 6 (di 6 totali)