Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 674

 

Cari intenditori!

Spero di fare una domanda nel ramo giusto!

La domanda è: è possibile usare #define per definire un costrutto che si dispiegherebbe nel seguente codice:

if(a) printf("%s(%04d)", __FUNCTION__, __LINE__) +printf("%s", _Symbol);

Questo è per capire... La costruzione giusta potrebbe essere diversa. Idealmente, vorrei trovare una soluzione in modo che qualsiasi printf() all'inizio della stringa di output stampi con il costrutto "Function(string in function) " che precede la stringa quando la condizione corrisponde. Questo è tutto per abbreviare le istruzioni scritte

E vorrei che il costrutto evidenziato in rosso fosse sostituito da questo (simile):

#define P(a) if(variabile>=a) printf("%s(%04d)", __FUNCTION__, __LINE__)

Ho trovato qualcosa in Inet, un po' simile, ma non ho lavorato con le classi, quindi non riesco ancora ad elaborare i codici di lavoro. Ho provato ad applicare il costrutto inferiore nella forma

P(3)+printf("%s(%s) Accuracy=%d", Symbol, (Command==0? "Buy": "Sell"), Accuracy);

Ma qualsiasi voce del genere nel codice causa l'errore 'Print' - l'espressione di tipo 'void' è illegale ...

 

Ciao!

Per favore, spiegate la differenza tra

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}

и

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}

grazie!

 
ski1973:

Ciao!

Per favore, spiegate la differenza tra

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}

и

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}

Grazie!

Non c'è alcuna differenza logica. La differenza sta solo nel modo in cui è scritto questo confronto logico.

Il segno "!" è "NON". Cioè, if(!Select()) è uguale a if(Select()==false). In russo, si presenta così: if(NOT Select()).

Potete rapidamente "invertire" il valore di una variabile booleana:

bool var = true;
Print("1. var=",(string)var);
var=!var;
Print("2. var=",(string)var);
 

Ho un'altra domanda. Quello che segue è un esempio di programma.

doppio Lotti=0,01;

int slippage=30;

int Subr1()

{

int risultato=-1;

int_result=OrderSend(_symbol,OP_BUY,Lots,slippage,0,0);

if(int_res<0){PrintFormat("OrderSend error = ",GetError());}

restituire int_result;

}

void OnTick()

{

int numer=-10;
if(OrdersTotal()==0)numer=Subr1();

se(OrdiniTotali()>0)Subr2(numer);

ritorno;

}

void Subr2(int order)

{

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());

}

Risposta: OrderSelect errore 4051. Se lo sostituisco con SELECT_BY_POS, OrderSelect sbaglia 1. La reazione è la stessa per il tester di strategia e il "run on real data". Ho provato a rimuovere MODE_TRADES per il caso di SELECT_BY_TICKET: non c'è differenza. Qual è il problema e come risolverlo. Grazie!

 
ski1973:

Risposta: OrderSelect errore 4051. Se lo sostituisco con SELECT_BY_POS, OrderSelect sbaglia 1. La reazione è la stessa per il tester di strategia e "eseguire su dati reali". Ho provato a rimuovere MODE_TRADES per il caso di SELECT_BY_TICKET: non c'è differenza. Qual è il problema e come risolverlo? Grazie!

SELECT_BY_POS è la selezione di un ordine "per priorità" nella lista degli ordini e nel tuo disegno:

void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());
}

Stai cercando di selezionare un ordine che è per coda d'ordine # ... e stai usando il ticket # qui e hai solo 1 ordine e il ticket # 10023444 .... E allora? Qui avete bisogno di un numero da 1 a 2,3 ... bene, quanti ordini avete nel mercato, ... corretto il numero da 0,1,2 ... - La numerazione inizia con 0 e va fino aOrdersTotal()-1...

SELECT_BY_TICKET dovrebbe funzionare, ma solo fino al momento in cui hai il numero del ticket, cioè l'ordine che hai nel mercato, e sopra hai un controllo per inviare l'ordine, e se l'ordine non viene inviato, il ticket = -1 !

E tutto sommato, il vostro progetto per lavorare con gli ordini non è corretto. Se avete deciso di studiare MQL, ecco degli esempi già pronti per lavorare con gli ordinihttps://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Vitaly Muzichenko:

Si parla di array e si parla di forex. Che paradosso!

E uno sciocco sa che tutti gli array di base in MT4/MT4 sono bufferati.

Non lo stesso livello di programmatori in MT4/MT5, per permettere agli utenti di lavorare con gli array di base.

Inoltre, gli array di base in MT4/MT5 hanno la loro estensione (.hts o .hss - non ricordo esattamente, ma qualcosa del genere).

Quindi, non arrivano al terminale in un formato di testo (con estensione .txt), ma nel loro formato proprio.

E in MT4/MT5 gli array di base sono decodificati e convertiti in array di timeframe selezionati (1 minuto, 5 minuti, 15 minuti, ecc.), e solo dopo vengono duplicati e bufferizzati.

Perché sono tamponati?

Per il confronto. In modo che nessun dato vada perso. Uno di questi array è costantemente ricalcolato (di volta in volta), e il secondo (copiato dal primo) è usato quando copiamo nei nostri dati utente.

In altre parole, la procedura per mettere i dati a disposizione degli utenti è piuttosto complessa.

Questo riguarda gli array, nel caso siate interessati.

A proposito, sia gli array MT4/MT5 di base di Android che quelli di Window hanno la stessa estensione.

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

Per quanto riguarda l'importazione di dati DYNAMIC in MT4/MT5 da fonti di terze parti, per quanto ho capito, tale importazione non è prevista.

Quindi non esiste una procedura Client/Server in C++Builder in MT4/MT5.

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

Mi chiedo se questa procedura sarà nella biblioteca

http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html

Molto probabilmente, ovviamente, non sarà nemmeno lì.

Cioè, potete provare a importare gli array dinamici in MT4/MT5 solo in formato base, dove passeranno automaticamente attraverso l'elaborazione standard dei dati.

Библиотека "Easy And Fast GUI" для создания графических интерфейсов на MQL
  • tol64.blogspot.com
С этой статьи я начинаю еще одну серию, относящуюся к разработке графических интерфейсов. На текущий момент нет ни одной библиотеки кода, которая позволяла бы легко и быстро создавать качественные графические интерфейсы в MQL-приложениях. Я имею в виду графические интерфейсы, к которым мы все привыкли в известных операционных системах. Цель проекта — дать конечному пользователю такую возможность и научить это делать с помощью моей библиотеки. Я постарался сделать ее максимально понятной в изучении, с возможностями дальнейшего развития.
 
neverness:

E uno sciocco sa che tutti gli array di base in MT4/MT4 sono bufferati.

I programmatori di MT4/MT5 non sono dello stesso livello di quelli di MT4/MT5, che permettono agli utenti di lavorare con gli array di base.

Inoltre, gli array di base in MT4/MT5 hanno la loro estensione (.hts o .hss - non ricordo esattamente, ma qualcosa del genere).

Quindi, non arrivano al terminale in un formato di testo (con estensione .txt), ma nel loro formato proprio.

E in MT4/MT5 gli array di base sono decodificati e convertiti in array di timeframe selezionati (1 minuto, 5 minuti, 15 minuti, ecc.), e solo dopo vengono duplicati e bufferizzati.

Perché sono tamponati?

Per il confronto. In modo che nessun dato vada perso. Uno di questi array è costantemente ricalcolato (di volta in volta), e il secondo (copiato dal primo) è usato quando copiamo nei nostri dati utente.

In altre parole, la procedura per rendere i dati disponibili agli utenti è piuttosto complessa.

Questo riguarda gli array, nel caso siate interessati.

A proposito, sia gli array MT4/MT5 di base di Android che quelli di Window hanno la stessa estensione.

Hai un tale casino in testa che non sono nemmeno riuscito a superare

Hai fatto un casino di cose in MQL - array, file, serie temporali e buffer di indicatori.

Se riesci a digerire le informazioni che ho dato in una riga, ti do qualche spunto di riflessione: MT4 e MT5 memorizzano i dati storici in modi diversi, in MT4 un utente ha accesso ai file.hst https://docs.mql4.com/ru/files/fileopenhistory

In MT5 non c'è accesso diretto ai file della cronologia, ma c'è lavoro con i simboli personalizzatihttps://www.mql5.com/ru/docs/customsymbols

FileOpenHistory - Файловые операции - Справочник MQL4
FileOpenHistory - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE. Клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории...
 
Igor Makanu:

Hai un tale casino in testa che non sono nemmeno riuscito a superarlo

Hai fatto un casino di tutto MQL - array, file e buffer di indicatori

Se riesci a digerire le informazioni che ho dato in una riga, ti do qualche spunto di riflessione: MT4 e MT5 memorizzano i dati storici in modi diversi, in MT4 un utente ha accesso ai file.hst https://docs.mql4.com/ru/files/fileopenhistory

In MT5 non c'è accesso diretto ai file della cronologia, ma c'è lavoro con i simboli personalizzatihttps://www.mql5.com/ru/docs/customsymbols

Non ho detto una sola parola sui file della storia nel mio post, per niente.

Hai di nuovo confuso qualcosa, e ancora una volta, fuori tema.

Stavo parlando di insiemi di dati DINAMICI. Questo è un argomento completamente diverso. Senti la differenza.

 
neverness:

Non ho detto una parola sui file della storia nel mio post, per niente.

Sei di nuovo confuso, e di nuovo fuori tema.

Stavo parlando di array di dati dinamici. Questo è un argomento completamente diverso.

Inoltre, gli array di base in MT4/MT5 hanno persino la loro estensione (.hts o .hss - non ricordo esattamente, ma qualcosa del genere).

Ok, vai avanti, non capisco lo scopo della tua presenza in questo thread del forum

Non c'è mai stato:

Stavo parlando di insiemi di dati DINAMICI. Questo è un argomento completamente diverso. Senti la differenza.

sentite, dovete anche capire che in tutti i linguaggi di programmazione gli array dinamici sono solo array dinamici e leserie temporali sonoserie temporali e parte del lavoro (accesso) con leserie temporali è organizzato come lavoro con gli array...
 
Igor Makanu:

OK, vai avanti, non capisco lo scopo della tua presenza in questo thread del forum

Credo che dovresti anche capire che in tutti i linguaggi di programmazione gli array dinamici sono solo array dinamici e leserie temporali sonoserie temporali e parte del lavoro (accesso) con leserie temporali è organizzato come lavoro con gli array...

È qui che si discute in dettaglio la questione della formazione dei dati nel terminale:

http://profitraders.com/Python/hstRead.html

Voglio attirare l'attenzione dei lettori sul fatto che questo articolo NON riguarda i dati storici, che si trovano in: MT4->Service->Figures Archive,

e direttamente sui dati DINAMICI del terminale in formato .hst, che sono direttamente coinvolti nel processo di ottenimento ed elaborazione delle quotazioni di mercato.

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

Forse non sono stato abbastanza chiaro. Leggi altri autori. Spero che diventi più chiaro.

Чтение файла HST истории котировок Metatrader 4 — ProfiTraders.com
  • profitraders.com
Файлы истории котировок Metatrader 4 имеют расширение и находятся в папке данных торгового терминала, в каталоге . Они сгруппированы в подкаталогах, имена которых совпадают с названиями серверов, например: или . Имена файлов начинаются с наименования торгового инструмента, далее указывается таймфрейм (количество минут), например, для часового...