[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 254

 
Qui peut me dire comment faire pour que le résultat soit toujours positif ? (lots d'achat - lots de vente)= -0.25, mais je veux qu'il soit toujours positif ?
 
mikanit:
Qui peut me dire comment faire pour que le résultat soit toujours positif ? (lots d'achat - lots de vente)= -0.25, mais il doit être toujours positif ?
MathAbs().
 

Je fais ainsi : if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)()))

Qu'y a-t-il entre parenthèses ?

 

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

Où ? ??? quoi ?

 
Merci, c'est réglé.
 

J'ouvre une position avec un volume = 0,05. J'ai besoin d'un code - comment réduire le volume de la position de 0,01 lorsqu'une perte atteint 100 pips pour 5 chiffres ?

Merci.

 

Combien d'EAs j'ai écrit, tous vérifient les conditions du marché (nivellement du stop, spread, etc.) lorsque l'on négocie avec des ordres en attente. J'ai regardé comment sont rédigées les grilles, mais je n'en ai vu aucune vérifier la valeur du même nivellement d'arrêt avant d'envoyer un ordre. Quelle en est la raison ?

 
alsu:

Il existe de nombreuses métariques sur le forum à propos du testeur et des raisons pour lesquelles ses résultats diffèrent de ceux de la vie réelle. Regardez dans la section Articles, ce sujet a été abordé plus d'une fois.

Merci.
 

J'ai trouvé une alternative.

alsu:

Cela signifie que dans la DLL la chaîne est passée exactement comme char*, mais pas comme MqlString. Mais celane signifie pas que dans le programme ex4 la chaîne n'est pas stockée comme MqlString. En général, le transfert des paramètres de ex4 à dll (selon les développeurs) est un processus assez complexe, accompagné de toutes sortes de vérifications et de transformations des paramètres.

Zhunko:

Avez-vous lu la référence MQL4 ? MQL4-string est identique à c-string avec un terminateur nul.

La structure est conçue uniquement pour arranger des tableaux de cordes. Purement une invention des Metaquotes pour faciliter la création de tableaux de chaînes de caractères.

StrStrA de la bibliothèque 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));//в лог
  }

Journal :

строка "" указатель 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

Le mécanisme est le suivant. Shlwapi.dll dans /system32. StrStrA est un analogue WinAPI deStringSubstr. MQL4 est un langage sans typage, donc si nous définissons un int à la sortie, plutôt qu'une chaîne, nous obtenons un pointeur sur celui-ci, et non une chaîne. StrStrA recherche la première occurrence d'une sous-chaîne dans la chaîne (sensible à la casse, mais comme nos chaînes sont identiques, nous nous en moquons), et comme nos chaînes sont identiques, il renvoie un pointeur sur le premier caractère de la chaîne, c'est-à-dire sur la chaîne elle-même.

Laissez-moi vous expliquer pour ceux qui vont utiliser ce code. Il n'existe pas de format de chaîne dans l'interface WinAPI. À la place, il n'y a que le format lpsz (un pointeur vers le premier élément d'un tableau de caractères se terminant par 0x00, alias /0). Il s'agit d'un pointeur vers une adresse mémoire. Comme nos cellules de mémoire sont de 32 bits (c'est-à-dire 4 octets) et que int a également une taille de 4 octets, tout s'y intègre parfaitement.

Conclusion : vous pouvez facilement empaqueter des chaînes de caractères dans des tableaux d'int, émulant ainsi des structures (et il n'y a pas de structures et de classes dans MQL4) pour les passer plus loin à la dll, si une structure ou une classe est nécessaire. Les dll auto-écrites pour la traduction des types de données (c'est-à-dire les constructions comme "int(const char*)" (traduction de type C) ou similaires en C++) ne peuvent plus être utilisées.

 
dites-moi le nom de la police par défaut dans le terminal, parce que lorsque j'écris la fonction ObjectCreate la police est différente, elle semble similaire, mais ce n'est pas la même