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

 
Antonius:


Qual è il problema, funziona.

 
r772ra:


Qual è il problema, funziona.


L'errore in realtà non era nel codice, avrei dovuto mettere "Tutti i tick" invece di "Per prezzi di apertura" come modello di test. È un tempo lungo per fare un test del genere, ovviamente.

Grazie ancora per l'aiuto! Mi dispiace di aver perso tempo con questa stupidità)

 
Antonius:


L'errore in realtà non era nel codice, avrei dovuto mettere "Tutti i tick" invece di "Per prezzi di apertura" come modello di test. È un tempo lungo da testare, ovviamente.

Grazie ancora per l'aiuto! Mi dispiace di aver perso tempo con questa stupidità)

Per testare sui prezzi di apertura, sostituisci 0 con 1 nelle linee per controllare la direzione della candela. Ma poi guarderà la prima barra per vedere la direzione. Con 0, hai solo prezzi di apertura e chiusura uguali.
 

Dimmi come insegnare all'esperto come estrarre correttamente i dati:

Gli chiedo di trovare il valore dell'ultimo prezzo. Lo trova, ma lo emette con quattro cifre decimali e arrotonda la quinta. Il quinto carattere deve essere preso in considerazione per il corretto funzionamento del robot.

Arrotonda anche un po' il prezzo medio. Arrotonda anche il prezzo medio al quarto carattere.

Ottengo numeri diversi con la calcolatrice.

NormalizeDouble() ha provato ad applicare, ma non ho ancora ottenuto alcun risultato.

int Oldticketnumber;
double Unused = 0;
int Ticketnumber = 0;
RefreshRates();
for(int cnt = OrdersTotal()-1; cnt >= 0; cnt --)               //Для всехоткрытых ордеров
 {
  if (OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))  // Выбираем со всего масива ордеров
  if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)//Выбирам ордера експерта
   {
   if(OrderType()==OP_BUY)                                              
    {

     BuyAP += OrderOpenPrice()*OrderLots();          // Средневзвешаная цена всех позиций  
  
     Oldticketnumber = OrderTicket();                               // присваиваем тикеты
     if (Oldticketnumber > Ticketnumber)                         //  ищем последний тикет 
      {
      LastPrise = OrderOpenPrice();                         // присваиваем последнюю цену
      Unused = LastPrise;                                       // задаем цену переменной
      Ticketnumber = Oldticketnumber;                          // последный заданый тикет
      }
// далее по  тексту---------------------------------------------------------------------

if (BuyLots != 0)       // Если есть ордера BUY, то вычисляется их средняя цена открытия
    BuyAP /= BuyLots;      

 
Limita:

Dimmi come insegnare all'esperto come estrarre correttamente i dati:

Gli chiedo di trovare il valore dell'ultimo prezzo. Lo trova, ma lo emette con quattro cifre decimali e arrotonda la quinta. Il quinto carattere deve essere preso in considerazione per il corretto funzionamento del robot.

Arrotonda anche un po' il prezzo medio. Arrotonda anche ilprezzo medio al quarto carattere.

Ottengo numeri diversi con la calcolatrice.

NormalizeDouble() ha provato ad applicare, ma non ho ancora ottenuto alcun risultato.

Dove vedi tutto questo?
 
artmedia70:
Dove vedi tutto questo?


Non si può sfuggire all'arrotondamento. Ma la questione di quale sia l'arrotondamento dalla 5a o dalla 4a cifra
nel codice qui sotto:

Comment("Средняя цена Buy ",BuyAP, " Sell ",SellAP, " Последняя цена " ,LastPrise);
                                                                              // принтуем
 
Limita:


Non c'è modo di evitare l'arrotondamento. Ma la domanda è se arrotondare dalla 5° o 4° cifra
nel codice qui sotto:

Ho provato in questo modo

Comment("Средняя цена Buy ",DoubleToStr(BuyAP,5), " Sell ",DoubleToStr(SellAP,5), " Последняя цена " ,DoubleToStr(LastPrise,5));

stringa DoubleToStr( valore doppio, int cifre)
Converte un valore numerico in una stringa di testo, contenente la rappresentazione dei caratteri del numero nel formato di precisione specificato.

 

Ciao a tutti, ho questo compito:

Determinare l'apparizione di una nuova barra (sintetica), usando un minimo di codice e non usando variabili legate al tempo di apertura della barra. La soluzione è la seguente:

if (Bid>Open[0] || Bid<Open[0]) return;
Quali sono le possibili insidie quando si usa in tester e in demo?
 
dmitriy086:

Ciao a tutti, ho questo compito:

Determinare l'apparizione di una nuova barra (sintetica), usando un minimo di codice e non usando variabili legate al tempo di apertura della barra. L'ho risolto nel seguente modo:

Quali sono le possibili insidie del suo utilizzo nel tester e nella demo?


Quando fai trading con i sintetici non hai una singola barra per questo strumento, ma un insieme di strumenti per ognuno dei quali puoi cercare di identificare una nuova barra. Più strumenti sono in commercio, più probabile è l'errore o lo slittamento nel tempo, perché l'EA si blocca su una coppia e vede gli altri tick solo quando arriva un tick per questo strumento.
Puoi usare le variabili globali, ma non aiuta molto perché se hai tracciato un nuovo tick su un'altra coppia di valute senza il robot, non puoi comunque fare trading perché non ci sono tick sulla tua coppia. Se non avete molti strumenti, il modo più semplice è scrivere un robot, tenendo conto che sarà presente ovunque contemporaneamente.

Qualcuno sa se è possibile non visualizzare tutti i valori dei buffer in una finestra separata dell'indicatore? È quella linea bianca nell'angolo superiore sinistro della finestra dell'indicatore, è fastidioso vedere così tante cifre inutili negli 8 buffer utilizzati.

 
Desead:


Qualcuno sa se è possibile non visualizzare tutti i buffer in una finestra separata dell'indicatore? Questa è la linea bianca che è scritta nell'angolo superiore sinistro della finestra dell'indicatore, è fastidioso vedere così tanti numeri inutili quando si usano 8 buffer.


Inite SetIndexLabel(...,"), ma il buffer scomparirà anche dalla finestra dei dati.
Motivazione: