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

 
Desead:
Gente, prima nell'editor quando si passa il mouse su una parola riservata e si preme f1 si apriva una finestra in basso con una descrizione della funzione, ora non ce l'ho più. Quale potrebbe essere il problema?
Prima hai premuto CTRL+F1.
 
Chi può dirmi come rendere il risultato sempre positivo? (Lotti di acquisto - Lotti di vendita)= -0,25, ma voglio che sia sempre positivo?
 
mikanit:
Chi può dirmi come rendere il risultato sempre positivo? (Buy lots - Sell lots)= -0.25, ma deve essere sempre positivo ?
MathAbs().
 

Faccio così: se (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())

cosa c'è tra parentesi?

 

se (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(??????))

Dove ???? cosa?

 
Grazie, è risolto.
 

Apro una posizione con un volume = 0,05. Ho bisogno di un codice - come ridurre il volume della posizione di 0,01 quando una perdita raggiunge i 100 pip per 5 cifre?

Grazie.

 

Quanti EAs ho scritto, tutti controllano le condizioni di mercato (livellamento degli stop, spread, ecc.) quando si fa trading con ordini pendenti. Ho guardato come sono scritti i gridder, ma non ho visto nessuno di loro controllare il valore del livellamento dello stesso stop prima di inviare qualsiasi ordine. Qual è la ragione?

 
alsu:

Ci sono molti metariali sul forum sul tester e sul perché i suoi risultati differiscono dalla vita reale. Guarda nella sezione Articoli, questo argomento è stato toccato più di una volta.

Grazie.
 

Ho trovato un'alternativa.

alsu:

Significa che nella DLL la stringa è passata esattamente come char*, ma non come MqlStr. Manon significa che nel programma ex4 la stringa non è memorizzata come MqlString. In generale, il trasferimento di parametri da ex4 a dll (secondo gli sviluppatori) è un processo piuttosto complesso, accompagnato da tutti i tipi di controlli e trasformazioni di parametri.

Zhunko:

Avete letto il Riferimento MQL4? MQL4-stringa è la stessa di c-stringa con terminatore nullo.

La struttura è progettata solo per organizzare array di stringhe. Puramente un'invenzione dei Metaquote per facilitare la creazione di array di stringhe.

StrStrA dalla libreria shlwapi.dll. Test:

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"
int GetStrAddress(string szStr);//из самописной dll.
#import "shlwapi.dll"
int StrStrA(string pszFirst, string pszSrch);//из WinAPI.
#import

int addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.

int init()
  {//тестовый прогон; в init(), это чтобы не повторялось
   string s; strAddress (s);
   s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   int    counted_bars=IndicatorCounted();//оставляем блок пустым
   
   return(0);
  }

void strAddress (string myStr)//тестовая функция
  {
   addr1=GetStrAddress(myStr);//эта из dll
   addr2=StrStrA(myStr,myStr);//эта из WinAPI
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), " указатель 1: ", IntegerToHexString(addr1), ", указатель 2: ", IntegerToHexString(addr2));//в лог
  }

Diario:

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 043 BE440, указатель 2: 00000000
строка "something" указатель 1: 043 C8970 указатель 2: 043 C8970
строка "MyStr" указатель 1: 043 BE450, указатель 2: 043 BE450
строка "mystr" указатель 1: 043 BE458, указатель 2: 043 BE458

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 C980E0, указатель 2: 00000000
строка "something" указатель 1: 01 CDD050, указатель 2: 01 CDD050
строка "MyStr" указатель 1: 01 C980F0, указатель 2: 01 C980F0
строка "mystr" указатель 1: 01 C980F8, указатель 2: 01 C980F8

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 CAFF20, указатель 2: 00000000
строка "something" указатель 1: 01 CA7100, указатель 2: 01 CA7100
строка "MyStr" указатель 1: 01 CAFF30, указатель 2: 01 CAFF30
строка "mystr" указатель 1: 01 CAFF38, указатель 2: 01 CAFF38

Il meccanismo è il seguente. Shlwapi.dll in /system32. StrStrA è un analogo WinAPI diStringSubstr. MQL4 è un linguaggio senza tipo, quindi se impostiamo un int all'uscita, piuttosto che una stringa, otteniamo un puntatore ad esso, non una stringa. StrStrA cerca la prima occorrenza di una sottostringa nella stringa (sensibile alle maiuscole e alle minuscole, ma poiché le nostre stringhe sono uguali, non ci interessa), e poiché le nostre stringhe sono uguali, restituisce un puntatore al primo carattere della stringa, cioè alla stringa stessa.

Lasciate che vi spieghi per coloro che useranno questo codice. Non c'è un formato di stringa nella WinAPI. Invece, c'è solo il formato lpsz (un puntatore al primo elemento di un array di caratteri che termina con 0x00, alias /0). È un puntatore a un indirizzo di memoria. Poiché le nostre celle di memoria sono a 32 bit (cioè 4 byte) e l'int è anch'esso di 4 byte, tutto ci sta bene.

Conclusione: si possono facilmente impacchettare le stringhe in array di int, emulando così le strutture (e non ci sono strutture e classi in MQL4) per passarle ulteriormente alla dll, se è necessaria una struttura o una classe. I dll autoscritti per la traduzione dei tipi di dati (cioè costruzioni come "int(const char*)" (traduzione di tipo C) o simili in C++) non possono essere usati ora.