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

 
Escapee: Si prega di consigliare una soluzione;
Ho bisogno che lo script imposti automaticamente lo stop loss minimo del server sul simbolo corrente quando si apre un ordine. Cosa si dovrebbe scrivere qui? OrderSend(Symbol(),OP_BUY,0.01,Ask,10,?,0);

Leggi

Quando si imposta un ordine pendente, il prezzo di apertura non può essere troppo vicino al mercato. La distanza minima del prezzo in sospeso dal prezzo corrente di mercato in punti può anche essere ottenuta utilizzando la funzione MarketInfo() con il parametro MODE_STOPLEVEL. Se l'ordine pendente si apre a un prezzo errato, verrà generato l'errore 130 (ERR_INVALID_STOPS).
Ottenere
OrderSend(Symbol(),OP_BUY,0.01,Ask,10, Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point, 0);
 

В документации есть 2 момента касательно индикаторов.

In costanti speciali, queste sono:

" indicator_buffers numero di buffer per calcolare l'indicatore, fino a un massimo di 8 "

Sotto indicatori personalizzati:

"Alloca la memoria per i buffer usati per i calcoli degli indicatori personalizzati. Il numero di buffer non può superare 8 ed essere inferiore al valore specificato nella proprietà indicator_buffers. Se l'indicatore personalizzato richiede buffer aggiuntivi per il conteggio, dovreste usare questa funzione per specificare il numero totale di buffer. "

Se il numero di buffer è specificato, penso che questo significhi già allocare la memoria per i buffer. Correggimi se intendi qualcos'altro qui, per favore.

 

Buon pomeriggio. Domanda su un puntatore di file... Nel libro MQL4, che si trova su MQL4.community, nella sezione "Standard Functions", c'è un esempio dello script "File Operations", che è destinato a leggere dati da un file e a visualizzare oggetti grafici in una finestra simbolo:

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Di seguito, quando si analizza questo script nel libro su MQL4, viene data la seguente frase: "se il controllo specificato (le ultime 2 righe del blocco 5-6) viene rimosso, un oggetto extra verrà creato a runtime. E solo dopo questo, la condizione di fine del ciclo while scatterà e il controllo verrà passato al blocco 8-9".

Ho capito bene? Un puntatore a file NON è INFLUITO DA SEGNALI DI TESTO (per esempio: text| dove | è un puntatore a file), ma è un puntatore CON ESPRESSIONE, per esempio: text dove k è il carattere "to", k-th è evidenziato da un puntatore a file. Questo spiega la necessità delle corde (vedi p.164):

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

Infatti. Alla penultima iterazione, dopo aver creato l'oggetto ULTIMO

2007.05.11 18:30;JPY

il puntatore del file è nella posizione dell'ultimo oggetto, cioè

2007.05.11 18:30;JPYFabbricazione industriale

(dove o è il carattere" o", k è l'indice del file). Poi, quando si passa il controllo all'intestazione dell'istruzione while, la funzione FileIsEnding(handle) restituirà ovviamente true, perché il puntatore del file NON è alla fine del file, ma all'ULTIMO carattere di quel file. Poi, quando le prime due linee vengono eseguite, il puntatore del file si sposta nello spazio vuoto e se non ci sono linee

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

lo script creerà un grafico (cioè una linea) con una descrizione vuota e una coordinata temporale che corrisponde a 0. Questo è ciò che si intende nella frase: "se il controllo specificato (le ultime 2 linee nel blocco 5-6) viene rimosso, allora un oggetto extra verrà creato a runtime. "

Domanda: ho capito bene:

a) la definizione di un puntatore di file;

b) il significato della frase "Se il controllo specificato (le ultime 2 righe del blocco 5-6) viene cancellato, allora un oggetto extra verrà creato all'esecuzione del programma.E solo dopo che la condizione di fine del ciclo while sarà attivata e il controllo sarà passato al blocco 8-9".

P.S. Per non sporcare il forum, vi ringrazio in anticipo per la vostra risposta

 

Per favore ditemi, non ho esperienza, se tra due tick il mio programma invia diversi comandi al server, saranno tutti eseguiti, o solo il primo comando ? Dove posso trovare informazioni su questo argomento?

 
cubus:

Per favore ditemi, non ho esperienza, se tra due tick il mio programma invia diversi comandi al server, saranno tutti eseguiti, o solo il primo comando ? Dove posso trovare informazioni su questo argomento?


Leggere:

https://book.mql4.com/ru/basics/common

 
Grazie mille!
 
Vladero:

Salve, ho una domanda sugli indicatori in MQL4 e non riesco a capirlo... Per esempio, ho un semplice indicatore frattale:

Se lo compilo in questa forma, quando estendo il bordo sinistro del grafico e carico la cronologia, inizia a glitchare e a mostrare segni dove non dovrebbero essere (vedi screenshot in allegato). Se commentiamo una parte del codice:

Poi questi glitch spariscono... Gli stessi problemi appaiono quando si carica la storia, se si riempiono solo gli elementi "non vuoti" dell'array di indicatori e non si resetta il valore dell'indicatore dove non ci sono etichette...

Perché succede questo? Perché, a quanto pare, è necessario ricalcolare l'intero indicatore quando si carica la storia? E perché devo annullare i valori degli elementi "vuoti" dell'array?

Se le barre fossero indicizzate da sinistra a destra, al caricamento della storia gli indici delle barre cambierebbero, e l'indicatore sarebbe visualizzato erroneamente senza ricalcolo, allora capiremmo questo inconveniente... Ma in MT4 le barre sono indicizzate da destra a sinistra, quindi, quando si carica lo storico, gli indici delle barre che erano indicizzate dovrebbero essere rimasti gli stessi (e anche i valori dell'indicatore), allora perché ricalcolare l'indicatore e da dove vengono questi spostamenti di etichetta?


Perché è necessario ricalcolare l'intero indicatore quando si carica la storia? E perché i valori degli elementi "vuoti" dell'array dovrebbero essere azzerati? E se non lo fai, allora gli indicatori vengono visualizzati in modo errato...
 
hoz:
#proprietà indicator_buffers specifica il numero di buffer da visualizzare.
IndicatorBuffers specifica il numero totale di buffer utilizzati.

Esempio.
#proprietà indicator_buffers 2
.......... .................................
IndicatoreBuffer 3

Disegna due linee, il terzo buffer non viene visualizzato, ma viene utilizzato per i calcoli intermedi.
 
Potete per favore dirmi come emettere 1 valore e un valore dell'indicatore già ridisegnato come 2 linee, che viene ridisegnato in un indicatore separato? Non riesco a capirlo, emette sempre l'ultimo valore ridisegnato.
 
Sfortunatamente, nessuno ha risposto sull'errore quando si cerca di installare la build 438 https://www.mql5.com/ru/forum/138609/page425