Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1468

 
Buona giornata a tutti.
Ho scritto un semplice codice in mql4 che apre un ordine su un grafico a minuti ogni volta che il prezzo sale di 30 pip dal minimo locale più vicino. Dopo aver aperto l'ordine, il minimo locale diventa il prezzo di apertura dell'ordine.
void OnTick()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
}
}

Cosa non mi piace del mio codice ..... Che deve essere eseguito quasi ad ogni tick. Posso migliorare questo codice e non sarà eseguito su ogni tick, ma su quasi ogni minuto di candela. Significa che il programma deve fare un lavoro enorme per trovare il punto in cui l'ordine viene aperto.

Q:

Potreste suggerirmi una struttura di linguaggio che mi aiuti a trovare il punto di apertura dell'ordine menzionato nel mio codice senza provare i tick o le candele, o con un tentativo minimo possibile, cioè che il programma impieghi il minor tempo possibile per trovare il punto di apertura.

Grazie per il vostro aiuto.

 
ANDREY:
Buona giornata a tutti.
Ho scritto un semplice codice in mql4 che apre un ordine su un grafico a minuti ogni volta che il prezzo sale di 30 pip dal minimo locale più vicino. Dopo aver aperto l'ordine, il minimo locale diventa il prezzo di apertura dell'ordine.

Cosa non mi piace del mio codice ..... Che deve essere eseguito quasi ad ogni tick. Posso migliorare questo codice e non sarà eseguito su ogni tick, ma su quasi ogni minuto di candela. Significa che il programma deve fare un lavoro enorme per trovare il punto in cui l'ordine viene aperto.

Q:

Potreste suggerirmi una struttura di linguaggio che mi aiuti a trovare il punto di apertura dell'ordine menzionato nel mio codice senza provare i tick o le candele, o con un tentativo minimo possibile, cioè che il programma impieghi il minor tempo possibile per trovare il punto di apertura.

Grazie per l'aiuto.

//+------------------------------------------------------------------+
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Grazie per il vostro aiuto.

Ma il risultato del mio codice non è lo stesso del mio. Ecco il risultato del mio codice su GBPUSD su un grafico al minuto su un giorno dal 04.01.2010 al 05.01.2010.
Questo è il risultato del mio codice

E questo è il risultato del tuo codice

 
ANDREY:

Grazie per il vostro aiuto.

Ma il risultato del mio codice non è lo stesso del mio. Ecco il risultato del mio codice su GBPUSD su un grafico al minuto su un giorno dal 04.01.2010 al 05.01.2010.
Questo è il risultato del mio codice

Questo è il risultato del tuo codice

Mostra il codice OnInit()

 
MakarFX:

Mostrami il codice OnInit().

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }

Ho appena copiato il tuo codice in MetaEditor e ho ottenuto il risultato, che è sopra.

Il tuo codice apre un ordine e conta 30 pip verso il basso (giallo), mentre il mio conta verso il basso (blu)

Grazie per il vostro aiuto

 
ANDREY:

Ho appena copiato il tuo codice nel MetaEditor e ho ottenuto il risultato di cui sopra.

Grazie per il vostro aiuto.

Ho bisogno del vostro codice per capire il punto.

Nel tuo codice LoU cambia ad ogni tick se il prezzo scende, ma nel mio LoU cambia solo dopo aver aperto un trade.

 
MakarFX:

Ho bisogno del tuo codice per capire qual è il punto.

Nel tuo codice, il LoU cambia ad ogni tick se il prezzo scende, mentre il mio LoU cambia solo dopo l'apertura di un trade.

Hai 30 pip sul lato sbagliato. Ho aggiunto un'immagine al post precedente
E il mio codice è nel primo post. Appena il prezzo ha superato 30 pip dal minimo locale *bottom-up* - apri un ordine. E il mio codice apre l'ordine esattamente come mi serve. Ma voglio che impieghi un tempo minimo per questo.

D'accordo nel mio codice il LoU cambia su ogni tick dopo l'apertura di ogni ordine. Senza di esso il programma non troverà il minimo locale più vicino, dal quale dovremmo contare 30 pips. Sto pensando a come escludere il cambiamento del LoU ad ogni tick o ad ogni minuto di candela, ma gli ordini saranno aperti negli stessi posti in cui li apre il mio codice.
 
ANDREY:

Ho appena copiato il tuo codice in MetaEditor e ho ottenuto il risultato di cui sopra.

Il tuo codice apre l'ordine e conta 30 pip verso il basso (giallo), e il mio conta verso il basso (blu)

Grazie per il vostro aiuto

Errore mio...sostituire

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid-30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Errore mio...sostituire

Grazie per il vostro aiuto.
L'ho fatto. Apre un numero enorme di ordini (27657 ordini), tra i quali ci sono quelli di cui ho bisogno

Ecco uno screenshot degli ordini iniziali

 
MakarFX:

Errore mio...sostituire

Ecco il tuo codice con la linea modificata.

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
Come posso fare in modo che il codice apra solo gli ordini richiesti?