MMA_Breakout_strategy_volume I (senza MM o MF) - codificato da WhooDoo22 - pagina 2

 
Di nuovo, ci sono più modi per selezionare gli ordini, per esempio, potrei usare Boolean per controllare se un ordine è aperto o chiuso. Esempio: l'ordine viene inviato, cinque booleane sono impostate su true. Quando le medie mobili iniziano a incrociarsi, le booleane saranno impostate su false. Se certe variabili booleane sono vere e certe medie mobili si incrociano, certe variabili booleane vengono dichiarate false e un certo lotto dell'ordine viene chiuso. Ci sono altri modi, ma non ci ho pensato molto. Desidero semplicemente fornirvi una soluzione. Spero che sia stata soddisfacente. Credo che troverei un modo più semplice per farlo, ma di nuovo, non ci ho pensato molto. È ancora importante, ma non così difficile da codificare come MF o MM in questa strategia. Grazie.
 
Se ho un conto Live con cui ho già fatto trading e non ci sono ordini live aperti attualmente su di esso... se eseguo il tuo EA su di esso su EURUSD M30 cosa succederà?
 

A proposito, ho eseguito il tuo EA nello Strategy Tester e mi sono ritrovato con un file di log di 11 GB di errori... per esempio...

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: OrderModify error 1

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: close #6 buy 0.01 EURUSD at 1.36028 sl: 1.31028 at price 1.35960

23:08:49 2007.05.06 22:01 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: ticket 6 sconosciuto per funzione OrderModify

non posso modificare il ticket #6 perché è stato appena chiuso. . . .
 
WhooDoo22:
Credo che ci siano più modi per selezionare gli ordini, tutti i metodi di selezione degli ordini dovrebbero usare la funzione OrderSelect(). Detto questo, non vedo perché questo dovrebbe fallire perché l'EA esegue chiaramente la funzione OrderClose() per tutti gli ordini senza errori nel tester della strategia.

Il tuo orderClose chiaramente non funziona. Se avessi controllato i tuoi codici di ritorno lo sapresti. Il tuo orderSelect non funziona, ma non controlli.

se I non è un numero di biglietto allora il tuo orderSelect fallisce e così tutto il resto.

se I è un numero di ticket, il prossimo numero di ticket NON è i+1 (tranne che nel tester)

   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.04)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,25,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.03)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.02)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,100,0,MODE_SMMA,PRICE_CLOSE,1)))     {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
 

Simon,

Se ho un account Live...

RE: Ti sconsiglio vivamente di eseguire il volume I sul saldo di un conto live! Naturalmente, la scelta è tua, ma per conto tuo, ti sconsiglio vivamente di eseguirlo su un conto live fino a quando la sua evoluzione dal volume I al II non sarà stata completata. Il volume I è ancora in fase di sviluppo e non dovrebbe essere eseguito fino a quando non sia stato completamente codificato. Non sono sicuro di cosa accadrebbe perché non l'ho testato io stesso su un conto LIVE. Capisco la sua mancanza di completamento e ho scelto di soddisfare le sue esigenze essenziali prima di iniziare i test sul conto LIVE.


A proposito,..

RE: Credo di aver capito subito cosa sta succedendo con questo errore... Questo errore riflette un errore all'interno del blocco di codice "EMERGENCY SL". Non mi sono mai concentrato veramente su questo, poiché non è così difficile da codificare. L'ho codificato parzialmente e non ho completato la sua maturazione. Il blocco di codice "EMERGENCY SL" manca di un'importante personalizzazione. Sono sicuro che se rimuovete completamente entrambi i blocchi di codice "EMERGENCY SL" SELL e BUY, non riceverete la lista di errori di 11 giga. La ragione per cui sono 11 giga per cominciare è perché credo che sia lo stesso errore che si ripete più e più volte nel corso della storia che viene testata.

grazie.


William,

Premetto che non ho tanta storia a discutere di codice con te come Simon, ma desidero andare avanti con il tuo post (grazie per il tuo post! È benvenuto).

Cos'è che vorresti vedere nel Volume I/II?

Sto rigorosamente eseguendo dei test e aggiungendo del codice essenziale per i test al fine di garantire il suo valore commerciale. Poi metterò a punto ciò che resta dei problemi di codice per assicurare un trading sicuro su LIVE/DEMO.

Grazie.

 
RaptorUK:
Se ho un conto Live con cui ho già fatto trading e non ci sono ordini live aperti attualmente su di esso... se faccio girare il tuo EA su di esso su EURUSD M30 cosa succederà?

WhooDoo22:

Simon,

Se ho un conto Live...

RE: Ti sconsiglio vivamente di eseguire il volume I su un conto live! Naturalmente, la scelta è tua, ma a nome tuo, ti sconsiglio vivamente di eseguirlo su un conto live finché la sua evoluzione dal volume I al II non sia stata completata. Il volume I è ancora in fase di sviluppo e non dovrebbe essere eseguito fino a quando non sia stato completamente codificato. Non sono sicuro di cosa accadrebbe perché non l'ho testato io stesso su un conto LIVE. Capisco la sua mancanza di completamento e ho scelto di soddisfare le sue esigenze essenziali prima di iniziare i test sul conto LIVE.


Il punto che stavo cercando di fare e di incoraggiarti a guardare è che se c'è una storia del conto queste linee nel tuo codice impediranno che vengano prese operazioni...

   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  
   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  


Gli altri posti dove un ordine viene piazzato usando OrderSend() è dove c'è un ordine esistente aperto . . . . quindi se ci sono vecchi ordini nella cronologia il tuo EA non piazzerà mai nessuna operazione . . . se tu avessi testato il tuo codice su Demo o Live avresti probabilmente scoperto questo.

 

Simon,

Il punto che stavo cercando di...

RE: Capito. Credete che sia possibile utilizzare la funzione OrderSelect() per cercare una variabile ticket unica, poi sotto si troverà il blocco di codice contenente il "if (OrdersHistoryTotal()==0){". Questo non funzionerebbe PERCHE' la funzione OrderSelect() seleziona la variabile unica del biglietto "ticket" e la funzione OrdersHistoryTotal() cerca la storia commerciale della sola variabile unica del biglietto, a causa della funzione OrderSelect() di cui sopra. L'istruzione "if" sta cercando solo gli ordini nella storia per una variabile specifica, la variabile unica del biglietto.

//*************************
// BUY ORDER OPEN SECTION ;
//*************************

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   if(OrdersHistoryTotal()==0)                                                                 {
   if(OrdersTotal()<MaxOrders)                                                                 {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,2)<(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,2)))     { 
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)>(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1)))     { 
     {
      ticket=OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);    
      i++;
     }
     }}}}

grazie.

 
WhooDoo22:

Simon,

Il punto che stavo cercando di...

RE: Capito. Credete che sia possibile utilizzare la funzione OrderSelect() per cercare una variabile unica del biglietto, sotto si trova il blocco di codice che contiene il "if OrdersHistoryTotal()==0{". Questo non funzionerebbe PERCHE' la funzione OrdersHistoryTotal() sta cercando solo i trade precedenti della variabile unica del ticket? L'istruzione "if" cerca solo gli ordini nella storia per una variabile specifica, la variabile unica del biglietto.

grazie.

Penso che tu ti stia confondendo un po'... hai detto"Questo non funzionerebbe PERCHÉ la funzione OrdersHistoryTotal() sta cercando solo gli scambi precedenti della variabile unica del biglietto?"Questo non è corretto, controlla la documentazione,OrderHistoryTotal() fa questo...

"Restituisce il numero di ordini chiusi nella storia del conto caricato nel terminale. La dimensione della lista della storia dipende dalle impostazioni correnti della scheda "Storia del conto" del terminale."


non ha niente a che fare con numeri di ticket o variabili di ticket o numeri magici o altro . . . restituisce il numero totale di operazioni nel pool della cronologia . . . l'unico fattore limitante è quello che hai scelto di mostrare nella scheda Cronologia del conto . . tutta la cronologia, ultimi 3 mesi, ultimo mese o periodo personalizzato.
 
Un altro punto . . . se ho usato il tuo EA e ha un trade piazzato . . . . poi ho bisogno di spegnere il mio PC per un paio di minuti, quando riavvio MT4 e il tuo EA parte non troverà mai l'ordine aperto . . tutte le tue chiamate a OrderSelect() sono selezionate per ticket . . . o usando la tua variabile ticket o la tua variabilei, nessuna delle quali ha modo di contenere il numero del ticket del mio ordine aperto.
 

Simon,

Credo che tu ti stia confondendo un po'...

RE: Il Volume II deve iniziare il processo di invio dell'ordine in base a una condizione. Una volta che il primo ordine è stato inviato (in base alla condizione), la funzione OrderClose() blocca l'esecuzione di tutti gli scambi futuri. Provate a pensare a questo come a un ciclo. Fai rotolare la palla in base alla condizione, poi il ciclo viene avviato una volta che il primo ordine (ordine di rotolamento della palla) è stato chiuso. Il ciclo continua ad analizzare i numeri e a controllare le condizioni attive FINO a quando le condizioni future non sono soddisfatte.

Grazie, grazie