[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 374

 
Arles:
Per favore consigliatemi come risolvere il problema: lo stesso EA è su diversi grafici, un segnale per aprire un ordine appare su due grafici allo stesso tempo, per esempio. Tuttavia, abbiamo bisogno che il secondo ordine non si apra. L'EA ha un controllo per un ordine aperto ma non aiuta perché il primo EA deve aprire l'ordine e anche il secondo invia una richiesta di apertura dell'ordine. Avete qualche soluzione?
Non è del tutto chiaro per quali scopi vengano utilizzati diversi EA identici su diversi grafici. - Sulla base di questa comprensione, sarebbe più logico consigliare qualcosa. Tuttavia, in base alle informazioni che abbiamo, se vuoi che solo un EA faccia trading, puoi disabilitare il secondo EA dal trading o nelle impostazioni (se ce ne sono all'interno dell'EA) o nella scheda "General" - Allow EA to trade (deselezionare la casella di controllo).
A proposito, tutti gli Expert Advisors non lavorano in parallelo nello stesso terminale, ma in modo sequenziale. - Finché il 1° non finisce il suo lavoro, il 2° non elaborerà i dati. Quindi se l'EA è scritto correttamente, cioè controlla l'ordine inserito, allora il secondo terrà già conto di questo ordine. - Questo è uno. Ma questo accadrà solo se gli Expert Advisors sono impostati per lavorare in modo coerente. Diciamo che hanno lo stesso Magik e la stessa contabilità per il Money Management. Altrimenti, solo disabilitando gli EA "superflui". - Allora perché metterli...?
 
Chiripaha:
Non è molto chiaro per quali scopi vengano utilizzati diversi EA identici su diversi grafici.

L'Expert Advisor analizza solo la coppia su cui è in bilico. Su quale coppia appare per prima un segnale, apre un ordine. Ma a volte un segnale appare su due coppie allo stesso tempo. E, per quanto possa sembrare strano, vengono aperti 2 ordini, anche se c'è un controllo nell'Expert Advisor per ogni ordine aperto e non dovrebbe aprire il secondo. Questo è necessario perché non abbiamo abbastanza soldi sul deposito.

Finché il 1° non ha finito di lavorare, il 2° non elaborerà i dati.

Sì, ma quando il 1° ha finito di lavorare e ha aperto un ordine, il 2°, avendo iniziato a lavorare, per un breve periodo NON vede che c'è già un ordine. O si mette al lavoro prima che l'ordine si apra.
--

Un'altra cosa: quando il primo EA è Sleep(1000), il secondo EA aspetta o inizia a lavorare?

 

Buon pomeriggio a tutti!

Codificato la seguente idea

Condizione N1 ..Se High[1] supera un certo massimo X

e allo stesso tempo

Condizione N2 .La differenza tra High[1] e Low della prima delle 150 candele successive >= 150 p.

------------------------------------------------------------------

Azione N1 . Cancellare l'ordine precedente

Azione N2 ..Piazzare un ordine in sospeso

Azione N3 . Assegnare valori alle variabili.

PROBLEMA. Nonostante il fatto che l'ordine pendente dovrebbe essere piazzato solo se non ci sono ordini nel mercato, o l'ultimo ordine non è stato piazzato nella barra corrente. se (ot==0|| last_order_bar>0)

Quando la condizione N1 e la condizione N2 sono soddisfatte, SEI ordini pendenti sono piazzati simultaneamente.

Voglio piazzare solo UN ordine pendente.

-----------------------------------------------

I valori ot e last_order_bar sono calcolati sopra in questo codice

                                                                                                                        
                                                                                                                
int last_order_bar = 0;                                                                                                                 
int ot = OrdersTotal();                                                                                                                 
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер                                                                                                                      
      if ( OrderType ()==OP_SELLSTOP) //проверили тип
        last_order_bar = iBarShift (Symbol (),0,T ); //запомнили, на каком  баре открыт последний ордер (если он есть)                                                                                                                  
 }                                                                                                                      
if(High[1] > X )
 {
   
   for(int i=1;i<150;i++)
     {
      if((High[1]-Low[i])>=1500*Point)//
      break;         //
             {
     if (ot>0) 
         {
           bool R = OrderDelete(OrderTicket());  
         }
if(R==0)                      //если последний выставленный SELLSTOP удален
         {
if (ot==0 || last_order_bar>0)        
int Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1500*Point,1,iHigh( Symbol (), 0,1),iHigh( Symbol (), 0,1)-1610*Point,"jfh",123 );//выставить новый SELLSTOP       
if (Ticket>0)                // если SELLSTOP выставлен
 N = (OrderTicket());        //запомнить в глобальную переменную N тикета данного SELLSTOP .
 T = Time [0];               //запомнить в глобальную переменную время выставления данного SELLSTOP
 X=iHigh( Symbol (), 0,1);   //запомнить в глобальную переменную High свечи N1 после которой был выставлен данный SELLSTOP
   
 }
 }
 }
 }
}
 }   
                        
return(0);
 
Arles:

L'Expert Advisor analizza solo la coppia su cui è in bilico. Su quale coppia il segnale appare per primo, apre un ordine. Ma a volte un segnale appare su due coppie allo stesso tempo. E, per quanto possa sembrare strano, vengono aperti 2 ordini, anche se l'Expert Advisor ha un controllo per ogni ordine aperto e non dovrebbe aprire il secondo. Questo è necessario perché non abbiamo abbastanza soldi sul deposito.

Sì, ma quando il 1° ha finito il suo lavoro e ha aperto un ordine, il 2°, avendo iniziato a lavorare, non vede per poco tempo che l'ordine esiste già. O si mette al lavoro prima che l'ordine si apra.
--

Un'altra cosa: quando il primo EA è Sleep(1000), il secondo EA aspetta o inizia a lavorare?

Per quanto riguarda la prima domanda: ho stabilito che se gli EA sono scritti correttamente... Naturalmente, può succedere nel modo che hai descritto, se non c'è un controllo nell'EA per un ordine piazzato (aperto) e per calcolare il money management - tutto questo dipende dal livello (e dalla pigrizia) del programmatore - se ha pensato a queste cose e le ha prescritte nell'EA o no. Se tutto è implementato correttamente, allora nessuna delle vostre preoccupazioni accadrà. - Il segnale, sì, può apparire a 2 coppie contemporaneamente, ma (vedi il post precedente), gli Expert Advisors lavorano in modo sequenziale. Pertanto, finché il primo EA non ha elaborato le quotazioni, il successivo non inizierà a lavorare. - Penso che questa sia la ragione per cui abbiamo deciso di usare l'ordine sequenziale (anche se fosse possibile elaborare le citazioni in parallelo, sarebbe un altro argomento di discussione).

Dipende anche dal livello dell'EA. Dal momento che tutte le cose che hai chiesto sono abbastanza dolorose da prescrivere - molto non è un lavoro piccolo, che richiede la conoscenza delle finanze. Ecco perché gli EA tendono ad essere "semplici", e sono orientati a ricevere l'intero conto per la valuta corrente. Di solito viene scambiata una sola valuta. Perché, per scambiare diverse valute, per esempio, è necessario avere un tipo di deposito abbastanza diverso, e tali sistemi semplici non sono realmente applicabili lì. L'unica eccezione a questo sarebbe operazioni (ho dimenticato il termine esatto, lo riformulerò diversamente) di copertura, quando si apre ad un prezzo e immediatamente riapre ad un altro (o anche diversi) - la differenza è a se stessa. Ma questo è un tipo diverso di EA e tutto sarà contabilizzato lì (tutto in uno). - E in generale, secondo me, se non c'è più denaro che liquidità su una coppia, allora fare trading su tutte le coppie contemporaneamente è un brutto tono. (ma questa è la mia opinione privata) Portafogli ecc. - Questo non è per il trading speculativo. Per qualche motivo la gente non ne tiene affatto conto. - Se non sei un'azienda che produce o commercia a livello internazionale, allora non hai affatto bisogno di molte valute. - Questo è il mio punto - perché di solito non implementano tali blocchi per la contabilità delle diverse valute negli EA - perché sono irrilevanti.

E alla seconda domanda: francamente, io stesso ho questa domanda aperta - non sono del tutto sicuro di come reagisce il terminale quando la funzione Sleep(1000) - mi appello a coloro che lo sanno per darmi un consiglio. Idealmente, il terminale in questo momento elaborerà solo i prezzi in streaming - cioè riceverà le quotazioni e disegnerà grafici e indicatori. Ma mentre questo EA è in "attesa", non passerà il suo turno a nessun altro. - Ma questa è la mia ipotesi, di cui non sono del tutto sicuro. Forse, un'altra eccezione a questa "coda" sono gli script che possono essere lanciati per l'esecuzione mentre l'EA è in attesa. - Ho la stessa domanda.

Tuttavia, esco da questa ignoranza costruendo i miei Expert Advisors basati sulla correttezza del primo punto.

 
solnce600:

Buon pomeriggio a tutti!

Codificato la seguente idea

Condizione N1 ..Se High[1] supera un certo massimo X

e allo stesso tempo

Condizione N2 .La differenza tra High[1] e Low della prima delle 150 candele successive >= 150 p.

------------------------------------------------------------------

Azione N1 . Cancellare l'ordine precedente

Azione N2 ..Piazzare un ordine in sospeso

Azione N3 . Assegnare valori alle variabili.

PROBLEMA. Nonostante il fatto che l'ordine pendente dovrebbe essere piazzato solo se non ci sono ordini nel mercato, o l'ultimo ordine non è stato piazzato nella barra corrente. se (ot==0 || last_order_bar>0)

Quando la condizione N1 e la condizione N2 sono soddisfatte, SEI ordini pendenti sono piazzati simultaneamente.

Ho bisogno di un solo ordine pendente da piazzare.

: )) Andrey, stai facendo quelle domande che sono già spiegate nel libro di testo. Guarda l'esempio di Terminal nel tutorial, dove i principi e la logica di come gli ordini devono essere considerati sono descritti in dettaglio. - Allora la maggior parte delle tue domande spariranno da sole. In generale, il tutorial è costruito sul fatto che la struttura di QUALSIASI Expert Advisor competente è completamente presentata come esempio. - Questo è il bello. + vengono dati i concetti teorici di base della programmazione. Ma ha un intoppo - non è inteso per il lettore pigro - segue dalla struttura di ciò che è scritto. Cioè, per togliere le domande su punti specifici bisogna leggere tutto il libro di testo, ma pochi accetteranno di raccontarlo (il libro di testo).

State costruendo cumuli sulla contabilità degli ordini. - Avete bisogno di un approccio più semplice. L'ordine c'è o non c'è - e non importa su quale barra (nelle tue condizioni) è aperto. - A causa di queste complessità, si fa confusione nel considerare gli ordini e le condizioni. - Da qui, gli errori algoritmici, che ogni programmatore dovrebbe cercare. Cambiate la logica di scrittura del programma e gli errori algoritmici andranno via (da soli).

 
Ok, grazie.
 
Arles:

L'Expert Advisor analizza solo la coppia su cui è in bilico. Su quale coppia il segnale appare per primo, apre un ordine. Ma a volte un segnale appare su due coppie allo stesso tempo. E, per quanto possa sembrare strano, vengono aperti 2 ordini, anche se c'è un controllo nell'Expert Advisor per ogni ordine aperto e non dovrebbe aprire il secondo. Questo è necessario perché non abbiamo abbastanza soldi sul deposito.

Questo è abbastanza elementare! Il primo Expert Advisor apre un ordine. Se non importa quale EA ha aperto l'ordine... allora crea una condizione in entrambi. Creare una funzione booleana che trovi l'ultimo ordine aperto, e rispettivamente estrarre il tempo della sua apertura. Sequesto tempo di apertura èuguale all'apertura della barra corrente, usciamo dalla funzione con TRU. Posizionare la funzione all'inizio dellapartenza e se il modo è TRU, allora uscire dalla partenza.
 
Chiripaha:

E per quanto riguarda la seconda domanda: ad essere onesti, io stesso ho questa domanda aperta - non sono ancora completamente sicuro di come il terminale reagisce quando la funzione Sleep(1000) - mi rivolgo anche a coloro che sanno - per darmi una risposta. Idealmente, il terminale in questo momento elaborerà solo i prezzi in streaming - cioè riceverà le quotazioni e disegnerà grafici e indicatori. Ma mentre questo EA è in "attesa", non passerà il suo turno a nessun altro. - Ma questa è la mia ipotesi, di cui non sono del tutto sicuro. Forse, un'altra eccezione a questa "coda" sono gli script che possono essere lanciati per l'esecuzione mentre l'EA è in attesa. - Ho la stessa domanda.

Tuttavia, cerco di uscire da questa ignoranza costruendo i miei Expert Advisors basati sulla correttezza del primo punto.



Per quanto ho capito, dopo Sleep() l'Expert Advisor semplicemente si addormenta, cioè il suo lavoro viene messo in pausa e in questo momento riceve le quotazioni e non reagisce a nulla. Di conseguenza, il terminale passa la "coda" ad un altro.

Se qualcuno non è d'accordo, per favore correggetemi!

 
hoz:


Per quanto ho capito, quando Sleep() è stato elaborato, l'Expert Advisor semplicemente si addormenta, cioè il suo lavoro è sospeso e in questo momento l'Expert Advisor riceve le quotazioni e non reagisce a nulla. Di conseguenza, il terminale passa la "coda" ad un altro.

Se qualcuno non è d'accordo, per favore correggetemi!

Non sono disposto ad essere d'accordo. - Perché da questa posizione si perde la logica del lavoro corretto e del calcolo sia del denaro che delle posizioni da parte degli Expert Advisors. - Questo è uno. Secondo. - Se il mio EA sta dormendo, per esempio, per 100 millisecondi, e un altro inizia a lavorare nello stesso momento, allora cosa succederà, che appena questi 100 millisecondi passano, l'altro dovrà fermare il suo lavoro... e passarlo di nuovo a questo nel mezzo e così via all'infinito... D'altra parte. Ho visto (non di rado) in EAs quando mandano a "dormire" per minuti e molte volte ad ogni blocco di esecuzione. - Poi, se tutti gli altri gufi non lavorano in questo periodo, anche questo è in qualche modo sbagliato. - Quindi la domanda è abbastanza pertinente. Vorrei capire la logica di funzionamento a questo punto. Ma non ho trovato nessuna spiegazione dettagliata nei documenti ufficiali.

Ma tra due mali sceglierei il secondo. In questo caso, lascerei semplicemente il gufo di cui sono sicuro. In caso contrario, va bene lo stesso: almeno la correttezza dei ricalcoli è conservata, anche se il loro lavoro è rallentato.

Il problema non è così banale come sembra. - Il punto è che i miei esperimenti hanno dimostrato che se la casella"Allow EAs to trade" è deselezionata, allora il lavoro dell'EA non si ferma - tutti i calcoli sono eseguiti allo stesso modo su ogni tick. Solo le transazioni dell'EA non vengono inviate al server. Ma, se questi calcoli sono riempiti con questi "slittamenti" (non proprio correttamente), allora se ci sono 5-10 di questi EA, allora possono specificamente rallentare l'esecuzione dell'attuale EA che sta facendo trading.

Sì, alcuni programmatori mettono il controllo sui permessi di commercio e saltano il lavoro del gufo su questa base. Ma non viene fatto più spesso. E se il codice è chiuso, non possiamo assolutamente capire se l'operazione è frenata o meno (e quale gufo esattamente). - Ora mi metterò a curiosare su questo argomento nella ricerca del forum. Qualcosa ha rallentato.

Grazie ad Arles per la domanda, per avermi ricordato e aggiornato. Non avevo abbastanza esperienza per capire ciò che era scritto sull'argomento. Lo farò di nuovo adesso.

 
Arles:

L'Expert Advisor analizza solo la coppia su cui è in bilico. Su quale coppia appare per prima un segnale, apre un ordine. Ma a volte un segnale appare su due coppie allo stesso tempo. E, per quanto possa sembrare strano, vengono aperti 2 ordini, anche se c'è un controllo nell'Expert Advisor per ogni ordine aperto e non dovrebbe aprire il secondo. Questo è necessario perché non abbiamo abbastanza soldi sul deposito.

Sì, ma quando il 1° ha finito il suo lavoro e ha aperto un ordine, il 2°, avendo iniziato a lavorare, non vede per poco tempo che l'ordine esiste già. O si mette al lavoro prima che l'ordine si apra.
--

Un'altra cosa: quando il primo EA Sleep(1000) il secondo aspetta o inizia a lavorare?

Con un piccolo deposito non si fa trading su diverse coppie (consiglio del mondo).

Tecnicamente, per far sì che i diversi EA tengano conto del numero totale di ordini, possiamo provare questo schema:

    int li_total - OrdersTotal();
    if (li_total == 0) Sleep (1000);
    li_total - OrdersTotal();
    if (li_total == 0) OrderSend();

Non so quanto bene funzionerà (dovrebbe funzionare con 2). Sarebbe più sicuro farlo attraverso le variabili globali del terminale organizzando "Semaphore" che lavorano in modo sequenziale. Allora non importa quanti Expert Advisors lavorano in parallelo.

Motivazione: