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

 
.roman.:

I calcoli inutili (irrilevanti per il problema) sono stati rimossi. Le stampanti sono state aggiunte al codice appositamente per mostrare il problema. Nonostante il confronto del simbolo dell'ordine con il simbolo su cui l'EA è aperto, l'EA può mostrare quanto segue (dal grafico di Ozi prendere i dati dell'ordine su euro, per esempio, come in questo caso):

                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     

Questo non può essere il caso, non c'è modo che l'Ask sul canguro possa essere superiore a qualsiasi prezzo aperto sull'eurodollaro nel 2015...

E tutti i controlli per l'ordine selezionato sono meglio fatti dopo la selezione, con una clausola if() separata.

 
evillive:

Questo non può essere il caso, non c'è modo che l'Ask sul canguro possa essere superiore a qualsiasi prezzo di apertura sull'eurodollaro nel 2015...

E tutti i controlli per l'ordine selezionato dovrebbero essere fatti dopo la selezione, con una clausola if() separata.

È vero, non poteva. Ecco perché ha dato ordini Bid<openPrice su eu a 1,11262.

In altre parole, suggerisci di controllare la presenza di un ordine usando l'if(OrderSelect()), e poi nel embedded if confrontiamo già il simbolo del grafico con il simbolo dell'ordine, il prezzo aperto, ecc.

 
.roman.:

È vero, non poteva. Ecco perché ha dato un ordine Bid<openPrice su eu a 1,11262.

In altre parole, suggerisci di verificare la presenza di un ordine usando l'if(OrderSelect()), e poi confrontare il simbolo del grafico con il simbolo dell'ordine, il prezzo aperto, ecc. nell'if incorporato?

Sì, esattamente, prima OrderSelect(), e poi il controllo successivo per il resto dei parametri.
 

Ballare in giro non aiuterà.

Non c'è differenza tra scrivere la selezione dell'ordine e il controllo del simbolo e del mago in una riga o dividerli in 3 righe diverse. Secondo i cambiamenti nelle nuove costruzioni, le condizioni di controllo sono controllate per gradi, cioè se la prima condizione non è soddisfatta, le seguenti non saranno controllate. È lo stesso delle 3 linee. La prima condizione è soddisfatta e la seconda viene controllata. E solo se anche la seconda condizione è soddisfatta procediamo a controllare la terza.

Il problema è probabilmente che c'è una chiamata di una funzione utente nella parte cancellata del codice dove viene selezionato un altro ordine.

 

Se si fosse parlato di lavorare con gli ordini, sarebbe stata la prima cosa che avrei notato. Ma ci sono solo calcoli, non una singola funzione utente utilizzata. Non è chiaro cosa provoca esattamente la selezione di un ordine da un'altra coppia. Ecco perché sono così perplesso dall'"ambiente software" menzionato nella documentazione e ho già rifatto il codice come suggerito da evillive e sono pronto a ballare con i tamburelli. La prossima perversione sarà un confronto forzato con il bid\ask della coppia richiesta tramite marketinfo.


UPD.: Problema risolto. In realtà ho trovato una funzione annidata che usa il proprio OrderSelect. Grazie per l'idea, AlexeyVik.

 
Ciao a tutti, potete dirmi come risolvere un problema, trovo il numero della barra che voglio nel ciclo, ma ho anche bisogno del numero della barra passata nel ciclo, come implementare questo in modo succinto? Grazie.
for(i=limit; i>=0; i--)
{
yesterday_weekday = TimeDayOfWeek(iTime(Symbol(),0,i-1))-TimeDayOfWeek(iTime(Symbol(),0,i));
if (yesterday_weekday ==1)
yesterday_time=iTime(Symbol(),0,i);
yesterday_shift=iBarShift(Symbol(),0,yesterday_time0);//последний бар 

}
 

Ho creato un EA (non per lavoro, solo per pratica)

Se imposto entrambi i parametri nella funzione IF, se li imposto uno per uno, tutto funzionerà bene, ecco il codice (Inoltre, come mi assicuro che se ho già un ordine Buy aperto il prossimo ordine Buy non si aprirà, anche se tutte le condizioni corrispondono)?

//+------------------------------------------------------------------+
//|                                                        новый.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()

  {
  
double PC = iClose ("EURUSD", PERIOD_H1, 0);  

double MA = NormalizeDouble (iMA ("EURUSD", PERIOD_H1, 12, 0, MODE_LWMA, PRICE_MEDIAN, 0), 4); 


if (Ask == MA && PC-->MA )
OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-30*Point, Ask+30*Point);

   
return (0);





   
  }
//+------------------------------------------------------------------+
 
inuboh:

Ho creato un EA (non per lavoro, solo per pratica)

Se li imposto uno per uno funziona bene, cioè il codice è corretto (e voglio sapere come controllare se ho già un ordine di acquisto aperto e il prossimo ordine di acquisto non si apre anche se tutte le condizioni sono corrette):

Non che sia la fonte di tutti i problemi, ma per puro interesse accademico: perché allo stesso tempo OnInit(), OnDeinit() e poi improvvisamente start()?

E per quanto riguarda la domanda, è fortemente sconsigliato un tale confronto Ask == MA, molto raramente si avvera sulla storia. Allora, cosa significa una tale espressione PC-->MA?

Per quanto riguarda l'autorizzazione per un acquisto, passiamo in rassegna tutte le posizioni di mercato e le confrontiamo con i criteri specificati - simbolo, tipo, numero magico, e aumentiamo il contatore di uno se viene trovato quello cercato. Poi, se necessario, questo contatore viene controllato.

Le cose stanno così:

   _ExpertOrdersB=0;
   _ExpertOrdersS=0;

   for(int z=OrdersTotal()-1; z>=0; z --)
     {
      if(!OrderSelect(z,SELECT_BY_POS))
        {
         Print(". OrderSelect("+IntegerToString(z)+", SELECT_BY_POS ) FAIL!. Error #"+IntegerToString(GetLastError()));
        }
      if((OrderMagicNumber()==magic) && OrderSymbol()==_Symbol)
        {
          switch(OrderType())
           {
            default: break;
            case 0:
               _ExpertOrdersB++;
               break;
            case 1:
               _ExpertOrdersS++;
               break;
           }
        }
     }


if (_ExpertOrdersB < 1) //если нет покупок, то пытаемся купить, при условии, что:
if (Ask == MA && PC-->MA )
OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-30*Point, Ask+30*Point); 
 
evillive:

Non che sia la fonte di tutti i problemi, ma puramente per interesse accademico: perché contemporaneamente OnInit(), OnDeinit() e poi improvvisamente start()?

E per quanto riguarda la domanda, è fortemente sconsigliato un tale confronto Ask == MA, molto raramente si avvera sulla storia. Allora, cosa significa una tale espressione PC-->MA?

Per quanto riguarda l'autorizzazione per un acquisto, passiamo in rassegna tutte le posizioni di mercato e le confrontiamo con i criteri specificati - simbolo, tipo, numero magico, e aumentiamo il contatore di uno se viene trovato quello cercato. Poi guardiamo il contatore, se necessario.

Ho fissato start() per "abitudine" )

Perché Ask == MA è un evento raro? Il prezzo attuale dell'offerta tocca raramente la linea della media mobile?

Il PC-->MA è nel mio caso se il prezzo di chiusura precedente è superiore alla linea della media mobile (non ho trovato un altro modo).

Così, quando abilito la funzione IF uno per uno con Ask == MA e poi PC-->MA funziona bene, ma quando li combino, non funziona!

 
evillive:

Non che sia la fonte di tutti i problemi, ma puramente per interesse accademico: perché contemporaneamente OnInit(), OnDeinit() e poi improvvisamente start()?

E per quanto riguarda la domanda, è fortemente sconsigliato un tale confronto Ask == MA, molto raramente si avvera sulla storia. Allora, cosa significa una tale espressione PC-->MA?

Per quanto riguarda l'autorizzazione per un acquisto, passiamo in rassegna tutte le posizioni di mercato e le confrontiamo con i criteri specificati - simbolo, tipo, numero magico, e aumentiamo il contatore di uno se viene trovato quello cercato. Poi, se necessario, questo contatore viene controllato.

Ecco come stanno le cose:

La mia comprensione è che PC-- > MA è la stessa di PC-1 > MA.