[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 562

 
Grazie!!!
 
Ekburg:

Puoi dirmi cosa potrebbe esserci di sbagliato in questo codice? È un trailing stop, ma quando viene testato genera l'errore 1, quando viene modificato. Perché l'ordine non viene modificato?

Quando stavo correggendo questo errore (finora senza successo), quando ho compilato il codice principale di Expert Advisor nella funzione di stampa, ha iniziato a restituire un errore, dicendo che ha bisogno di virgolette, ma tutto lì è corretto, e per correggere questo errore devo rimuovere e mettere una nuova virgola...

bool trailingstop()
{
se ((OrderMagicNumber()==11111)==vero)
{
Stampa("Mantenere la posizione di acquisto");
mentre(OrderCloseTime()==0)
{
se ((Bid-OrderStopLoss())>(StopLevel*Point))
{
se (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Bid-StopLevel*Point),0,0))
Print("Stop Loss dell'ordine con il numero ",OrderTicket()," e il numero magico ",OrderMagicNumber()," cambiato con successo a ",OrderStopLoss());
else Print("Il livello di Stop Loss dell'ordine con il numero ",OrderTicket()," e il numero magico ",OrderMagicNumber(),". Errore ",GetLastError());
}
}
se (OrderCloseTime()>0)
{
Print("L'ordine con il numero ",OrderTicket()," e il numero magico ",OrderMagicNumber()," ha chiuso al prezzo ",OrderClosePrice()," con un profitto/perdita ",OrderProfit());
return(true);
}
}
else
{
se ((OrderMagicNumber()==22222)==vero)
{
Stampa((Posizione di vendita);
mentre(OrderCloseTime()==0)
{
se ((OrderStopLoss()-Ask)>(StopLevel*Point))
{
se (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Ask+StopLevel*Point),0,0))
Print("Stop Loss dell'ordine con il numero ",OrderTicket()," e il numero magico ",OrderMagicNumber()," cambiato con successo a ",OrderStopLoss());
else Print("Il livello di Stop Loss dell'ordine con il numero ",OrderTicket()," e il numero magico ",OrderMagicNumber(),". Errore ",GetLastError());
}
}
se (OrderCloseTime()>0)
{
Print("L'ordine con il numero ",OrderTicket()," e il numero magico ",OrderMagicNumber()," ha chiuso al prezzo ",OrderClosePrice()," con un profitto/perdita ",OrderProfit());
return(true);
}
}
else return(false);
}
}


L'errore 1 non è un errore. questo significa che l'ordine è già stato modificato. inserire il controllo dei parametri di modifica prima di OrderModify() (se l'ordine stoploop non è uguale a stopLoss , (ND(Bid-StopLevel*Point)o ND(Ask+StopLevel*Point)), alloraOrderModify(), altrimenti ritorno).
 
rigonich:

L'errore 1 non è un errore, significa che l'ordine è già stato modificato. Inserisci il controllo dei parametri di modifica prima di OrderModify() (se lo stop loss dell'ordine non è uguale allo stop loss, (ND(Bid-StopLevel*Point) oND(Ask+StopLevel*Point)), alloraOrderModify(), altrimenti ritorna).


Questo controllo è sopra: se ((Bid-OrderStopLoss())>(StopLevel*Point)), o ho sbagliato

E l'ho testato su un forte movimento, anche visivamente, è chiaramente visibile che lo stop loss dell'ordine e l'espressione non sono uguali

 
Usual_Trader:


A colpo d'occhio, quello che vedo nella funzione di chiusura degli ordini, è necessario selezionare l'ordine in base al bigliettoOrderSelect(Ticket, SELECT_BY_TICKET), il numero di lotti non indica la variabile Lts, perché viene ricalcolata ogni volta, ma utilizzare OrderLots() E un'altra cosa, si continua a lavorare sulla barra 0, rispettivamente, i criteri su una barra possono scomparire, i vostri ordini possono non aprirsi dove vorreste. Sostituire la barra 0 con 1 e 1 con 2 nei parametri dell'indicatore



Grazie mille per la risposta), ma il criterio non funziona come vorrei (non tutti gli incroci di stocastico mostrano gli ordini ( ) e vorrei aprire gli ordini sulla barra 0, ma credo di aver bisogno di una condizione aggiuntiva: dopo aver aperto un ordine sulla barra corrente non devo fare nulla fino alla chiusura della barra, ma non ho idea di come farlo (forse usando gli array di serie temporali???).
File:
 
Ekburg:


Questo controllo è sopra: se ((Bid-OrderStopLoss())>(StopLevel*Point)), o ho capito male.

L'ho controllato su un movimento brusco dove si vede chiaramente che lo stop loss dell'ordine e l'espressione non sono uguali


Il problema è il seguente: dato che non hai OrderSelect() in questa funzione, deve essere usato da qualche parte nel ciclo con la ricerca degli ordini. Se questo ciclo organizza la ricerca da un ordine zero all'ultimo, allora dopo la modifica del primo ordine, o se un ordine è già stato trovato, quando OrderSelect() viene chiamato la prossima volta, l'ordine dell'ordine cambia e la funzione può selezionare un ordine che è già stato modificato. Pertanto, dobbiamo controllare se il valore dell'ordine StopLoss è uguale a quello che inviamo alla funzione OrderModify()

if(ND(Bid-StopLevel*Point)==OrderStopLoss())return(true);
 

abeiks:

Per un po' di tempo ho provato a rifare il blocco di chiusura degli acquisti per chiudere solo le ultime due posizioni di acquisto, ma non ci riesce. Puoi dire a come rifare il blocco?

//+------------------------------------------------------------------+
//|                                                         0000.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
void Close_2buy()
   {
   bool     result;
   int      Count=2,Ticket=-1,error;
   datetime time=0;
   while(Count>0)
      {
      for (int f=OrdersTotal()-1; f>=0; f--) // 
         {
         OrderSelect(f, SELECT_BY_POS);
         if (OrderSymbol()==Symbol() &&(OrderMagicNumber()==magic ) 
         && (OrderType() == OP_BUY )) 
            {
            if(OrderOpenTime()>time)
               {
               time=OrderOpenTime();Ticket=OrderTicket();
            }
         }
      }
      if(OrderSelect(Ticket,SELECT_BY_TICKET)==True);
         {
         result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,CLR_NONE);
         if(result!=TRUE){error=GetLastError();Print("LastError = ", error);}
      }
      else{error=GetLastError();Print("LastError = ", error);} 
      Ticket=-1;time=0;Count--;
   }
   return;
} 
 
ametist444:

Ciao!

Puoi dirmi quali file devono essere scaricati e dove installarli in mt4 per ottenere questa finestra?

Non capisco come farlo nellasimulazione su diversi timeframe dello strumento in prova

Voglio vedere solo tre grafici giornalieri, a quattro ore e a ore

Voglio vedere tre grafici giornalieri, a quattro ore e orari. per favore aiutatemi, non sono riuscito a farlo per tutta la notte!



Le finestre come (visual) si aprono quando si testa l'EA in modalità visiva.


 
peshihod:

Che tipo di StopLoss?

Devo essermi espresso male :(

Abbiamo un algoritmo per aprire gli ordini.

Ho bisogno che apra il prossimo ordine in un'altra direzione (quando appaiono le condizioni), se l'ultimo ordine è stato chiuso in qualche modo.

Tutto funziona, ma se ho chiuso da uno stop loss, per esempio, per vendere, e le condizioni per aprire una vendita in questa direzione, l'apertura continua. Ciò di cui abbiamo bisogno è aspettare le condizioni per comprare.

Cioè, dobbiamo controllare l'ultimo ordine chiuso, in modo che non coincida con quello di apertura (alternanza buy-sell-buy-sell). È in funzione solo un ordine o l'attesa di un segnale.

Capisco che probabilmente dovremmo usare OrdersHistoryTotal(), ma come sarebbe in un EA funzionante?

Grazie.

 
delf:

C'è un algoritmo per aprire gli ordini.

Abbiamo bisogno di qualsiasi variante dell'ultimo ordine per aprire il prossimo in una direzione diversa (quando appaiono le condizioni).

In altre parole, dobbiamo controllare l'ultimo ordine chiuso in modo che non coincida con quello di apertura (alternanza buy-sell-buy-sell). C'è solo un ordine o un segnale in attesa di essere aperto.

Questa alternanza ha sempre luogo in ogni caso, e solo un ordine è sempre in funzione?

Allora è più facile aggiungere il controllo sul numero di ordini alla condizione:

if(OrdersTotal()==0)
{
	if(OldOrder==OrderBuy)
		{
		...
		}
	else
		{
		...
		}
}
 
rigonich:


Il problema è il seguente: dato che non hai OrderSelect() in questa funzione, sembra essere usato da qualche parte nel ciclo con una ricerca di ordini. Se questo ciclo organizza la ricerca dall'ordine zero all'ultimo, allora dopo la modifica del primo ordine, o se un ordine è già stato sepolto su questo tick, quandoOrderSelect() è chiamato successivamente, la sequenza dell'ordine cambia e la funzione può selezionare un ordine che è già stato modificato. Pertanto, dovremmo controllare se il valore dell'ordine StopLoss è uguale a quello che inviamo alla funzione OrderModify()


No, il problema di cambiare il numero dell'ordine di posizione quando uno di essi è chiuso è stato risolto, ho controllato più di una volta pensando che ci potesse essere un errore, ma tutto è OK, l'ordine richiesto è selezionato e lo stoploss è calcolato correttamente per esso, ma l'ordine non vuole essere modificato...
Motivazione: