[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 348

 
FAQ:
Perché non ricorda il biglietto dell'ordine e non la sua posizione. e cosa succede in un trasferimento diretto se non c'è un ordine simile? cancellerà l'ordine zero?


L'ho già provato. Anche questo non funziona:

//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 
hoz:


Ho già provato questo. Anche questo non funziona:

Bisogna stare più attenti.
//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 

Finalmente funziona! Ha funzionato, in linea di principio, e la versione precedente. Il difetto principale era nella chiamata della funzione, non nella funzione stessa.

Dal punto di vista di un professionista, tutte le variabili dovrebbero essere azzerate quando si entra in una funzione, a meno che non siano statiche, cioè non c'è bisogno di mantenere il loro valore specifico, giusto?

 
hoz:

Finalmente funziona! Ha funzionato, in linea di principio, e la versione precedente. Il difetto principale era nella chiamata della funzione, non nella funzione stessa.

Dal punto di vista di un professionista, tutte le variabili dovrebbero essere azzerate quando si entra in una funzione, a meno che non siano statiche, cioè non c'è bisogno di mantenere il loro valore specifico, giusto?

Inizializza le variabili della funzione con valori che non causeranno il malfunzionamento della funzione e gli errori più difficili da trovare.

Di solito uso 0 o -1, a seconda dello scopo della variabile. Se la variabile nella funzione memorizzerà l'indice di posizione trovato, allora inizializzatela a -1. Se lo inizializzate a zero, allora dopo aver cercato la posizione giusta e la sua assenza, potete ancora scegliere la posizione con indice 0, anche se non sarà la posizione che cercate. A -1 la posizione non sarà scelta. Questo è uno di tutti i possibili esempi di dove un errore è difficile da trovare - tutto sembra essere corretto nella funzione, ma l'output è totalmente sbagliato... e l'EA non funziona con l'ordine/posizione che ci aspettavamo...

 

Una funzione deve essere breve (facoltativa, ma auspicabile) e perfettamente chiara (il suo scopo). come 2*2=4. cioè il programmatore deve capire chiaramente a cosa serve e quale operazione esegue. poi dovrebbe metterla fuori dalla sua mente e dimenticare ciò che ha dentro, e usarla come una "scatola nera".

Tutte le variabili utilizzate da una funzione devono essere passate ad essa come argomenti. L'uso di variabili globali senza passarle come argomenti è giustificato solo se sono, per esempio, Externs (nel caso di MT). Cambiare i globali in una funzione è inaccettabile, se manca un valore di ritorno, passate le variabili per riferimento nella lista degli argomenti.

Cioè, se dovete buttare via questa funzione, allora non dovete ricordare perché la versione ridotta non funziona, perché tutti i globali in questa funzione sono stati modificati. Tutto questo ha lo scopo di garantire che, se si deve rifare, non causerà una reazione a catena

 

Ciao a tutti!

Prova di Pound-En.

L'ordine avrebbe dovuto chiudere al TAKE PROFIT prima dello STOP LOSS.

Ma il mio ordine non si è chiuso su Take Profit per qualche motivo.

DOMANDA: PERCHÉ IL MIO ORDINE NON SI È CHIUSO AL TAKE PROFIT COME PRESCRITTO NELLA FUNZIONE DI TRADING?

Metodo di modellazione - tutte le zecche.

Esempio nel link

http://clip2net.com/s/55pdDU

NOTA.Tali casi - non accadono spesso.Nella maggior parte dei casi, i commerci sono chiusi a 10 pips stop. in tempo.

Cioè, mi sembra che probabilmente non ha niente a che vedere con la distanza minima accettabile tra il prezzo e lo stop.

Cos'altro può essere la ragione?

Grazie.

 

Aiuto per prendere i dati nelle variabili globali da un indicatore

circa:

USD 6,5

EUR 6,6

3,3 GBP

ecc.

Grazie in anticipo per il vostro aiuto!

/*Decompilato viene rimosso. Attenzione*/.

 
FAQ:

Una funzione deve essere breve (facoltativa, ma auspicabile) e perfettamente chiara (il suo scopo). come 2*2=4. cioè il programmatore deve capire chiaramente a cosa serve e quale operazione esegue. poi dovrebbe metterla fuori dalla sua mente e dimenticare ciò che ha dentro, e usarla come una "scatola nera".

Tutte le variabili utilizzate da una funzione devono essere passate ad essa come argomenti. L'uso di variabili globali senza passarle come argomenti è giustificato solo se sono, per esempio, Externs (nel caso di MT). Cambiare i globali in una funzione è inaccettabile, se manca un valore di ritorno, passate le variabili per riferimento nella lista degli argomenti.

Cioè, se dovete buttare via questa funzione, allora non dovete ricordare perché la versione ridotta non funziona, perché tutti i globali in questa funzione sono stati modificati. Tutto questo ha lo scopo che se devo rifarlo, non causerà una reazione a catena


Grazie e, Artem, naturalmente! Mi hai aperto gli occhi su questi punti, che sono logici in linea di principio, ma che a volte la mancanza di esperienza lascia inosservati.

Ci sono solo altri malintesi. Hai scritto che se ci sono variabili globali in EA, dovrebbero essere usate nelle funzioni solo passandole come argomenti, giusto?

Sto solo cercando di capire, ci sono ragioni per creare variabili globali (non esterne)... Se devono essere passate solo attraverso argomenti, una lunga catena di funzioni dipendenti può raccogliere molti argomenti, e i nomi delle funzioni con argomenti saranno molto lunghi.

E ancora, potete creare una variabile globale, passarla in una funzione per riferimento e fare quello che volete con essa, e restituirla per riferimento a global, giusto?

Quando ho letto il tuo post oggi, ho iniziato a pensarci e ho trasferito alcune variabili da globali a una funzione. Poi mi sono reso conto che queste variabili sono necessarie in un'altra funzione, che non è collegata alla funzione in cui le ho dichiarate. Se ti ascolti qui: "Cambiare i globali e la funzione non è accettabile", poi si scopre che la funzione che ottiene direttamente le variabili richieste dovrebbe essere chiamata in posti diversi? Ma già questo rende il codice, per così dire, non bello. Volete che la funzione sia chiamata quando è necessaria e non più spesso di quanto sia necessario. Per esempio, la funzione che cerca tutti gli ordini, di acquisto e di vendita. È ragionevole supporre che dovrebbe essere chiamato solo una volta per tick e non più di una volta. Ma se viene chiamata all'inizio, non tutte le funzioni che usano queste variabili restituite dalla funzione di ricerca dell'ordine possono essere passate attraverso i suoi parametri. Allora torniamo ancora alle variabili globali, o cosa?

 

Si prega di aiutare a risolvere il problema con il limite di spostamento in iHigh(Symbol(),timeframe,shift), che è limitato al numero 1000.

iTime(Symbol(),timeframe,1001) dà 1970.01.01 00:00
 
Come diavolo si spegne l'avviso ???????? perché dopo aver premuto la barra spaziatrice, esso ?(!%"?:? continua a suonare ??????????
Motivazione: